#
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements.  See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "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
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#

aircompressor/io.airlift/0.15//aircompressor-0.15.jar
annotations/org.jetbrains/17.0.0//annotations-17.0.0.jar
aopalliance/aopalliance/1.0//aopalliance-1.0.jar
apacheds-i18n/org.apache.directory.server/2.0.0-M15//apacheds-i18n-2.0.0-M15.jar
apacheds-kerberos-codec/org.apache.directory.server/2.0.0-M15//apacheds-kerberos-codec-2.0.0-M15.jar
api-asn1-api/org.apache.directory.api/1.0.0-M20//api-asn1-api-1.0.0-M20.jar
api-util/org.apache.directory.api/1.0.0-M20//api-util-1.0.0-M20.jar
asm/asm/3.1//asm-3.1.jar
avro/org.apache.avro/1.8.2//avro-1.8.2.jar
commons-beanutils-core/commons-beanutils/1.8.0//commons-beanutils-core-1.8.0.jar
commons-beanutils/commons-beanutils/1.7.0//commons-beanutils-1.7.0.jar
commons-cli/commons-cli/1.2//commons-cli-1.2.jar
commons-codec/commons-codec/1.9//commons-codec-1.9.jar
commons-collections/commons-collections/3.2.2//commons-collections-3.2.2.jar
commons-compress/org.apache.commons/1.8.1//commons-compress-1.8.1.jar
commons-configuration/commons-configuration/1.6//commons-configuration-1.6.jar
commons-daemon/commons-daemon/1.0.13//commons-daemon-1.0.13.jar
commons-digester/commons-digester/1.8//commons-digester-1.8.jar
commons-httpclient/commons-httpclient/3.1//commons-httpclient-3.1.jar
commons-io/commons-io/2.4//commons-io-2.4.jar
commons-lang/commons-lang/2.6//commons-lang-2.6.jar
commons-logging/commons-logging/1.2//commons-logging-1.2.jar
commons-math/org.apache.commons/2.2//commons-math-2.2.jar
commons-math3/org.apache.commons/3.1.1//commons-math3-3.1.1.jar
commons-net/commons-net/3.1//commons-net-3.1.jar
commons-pool/commons-pool/1.6//commons-pool-1.6.jar
curator-client/org.apache.curator/2.7.1//curator-client-2.7.1.jar
curator-framework/org.apache.curator/2.7.1//curator-framework-2.7.1.jar
curator-recipes/org.apache.curator/2.7.1//curator-recipes-2.7.1.jar
disruptor/com.lmax/3.3.0//disruptor-3.3.0.jar
fastutil/it.unimi.dsi/7.0.13//fastutil-7.0.13.jar
findbugs-annotations/com.github.stephenc.findbugs/1.3.9-1//findbugs-annotations-1.3.9-1.jar
fluent-hc/org.apache.httpcomponents/4.4.1//fluent-hc-4.4.1.jar
gson/com.google.code.gson/2.3.1//gson-2.3.1.jar
guava/com.google.guava/12.0.1//guava-12.0.1.jar
guice-servlet/com.google.inject.extensions/3.0//guice-servlet-3.0.jar
guice/com.google.inject/3.0//guice-3.0.jar
hadoop-annotations/org.apache.hadoop/2.7.3//hadoop-annotations-2.7.3.jar
hadoop-auth/org.apache.hadoop/2.7.3//hadoop-auth-2.7.3.jar
hadoop-client/org.apache.hadoop/2.7.3//hadoop-client-2.7.3.jar
hadoop-common/org.apache.hadoop/2.7.3//hadoop-common-2.7.3.jar
hadoop-hdfs/org.apache.hadoop/2.7.3//hadoop-hdfs-2.7.3.jar
hadoop-mapreduce-client-app/org.apache.hadoop/2.7.3//hadoop-mapreduce-client-app-2.7.3.jar
hadoop-mapreduce-client-common/org.apache.hadoop/2.7.3//hadoop-mapreduce-client-common-2.7.3.jar
hadoop-mapreduce-client-core/org.apache.hadoop/2.7.3//hadoop-mapreduce-client-core-2.7.3.jar
hadoop-mapreduce-client-jobclient/org.apache.hadoop/2.7.3//hadoop-mapreduce-client-jobclient-2.7.3.jar
hadoop-mapreduce-client-shuffle/org.apache.hadoop/2.7.3//hadoop-mapreduce-client-shuffle-2.7.3.jar
hadoop-yarn-api/org.apache.hadoop/2.7.3//hadoop-yarn-api-2.7.3.jar
hadoop-yarn-client/org.apache.hadoop/2.7.3//hadoop-yarn-client-2.7.3.jar
hadoop-yarn-common/org.apache.hadoop/2.7.3//hadoop-yarn-common-2.7.3.jar
hadoop-yarn-server-common/org.apache.hadoop/2.7.3//hadoop-yarn-server-common-2.7.3.jar
hamcrest-core/org.hamcrest/1.3//hamcrest-core-1.3.jar
hbase-annotations/org.apache.hbase/1.2.3//hbase-annotations-1.2.3.jar
hbase-client/org.apache.hbase/1.2.3//hbase-client-1.2.3.jar
hbase-common/org.apache.hbase/1.2.3//hbase-common-1.2.3.jar
hbase-hadoop-compat/org.apache.hbase/1.2.3//hbase-hadoop-compat-1.2.3.jar
hbase-hadoop2-compat/org.apache.hbase/1.2.3//hbase-hadoop2-compat-1.2.3.jar
hbase-prefix-tree/org.apache.hbase/1.2.3//hbase-prefix-tree-1.2.3.jar
hbase-procedure/org.apache.hbase/1.2.3//hbase-procedure-1.2.3.jar
hbase-protocol/org.apache.hbase/1.2.3//hbase-protocol-1.2.3.jar
hbase-server/org.apache.hbase/1.2.3//hbase-server-1.2.3.jar
hive-storage-api/org.apache.hive/2.6.0//hive-storage-api-2.6.0.jar
htrace-core/org.apache.htrace/3.1.0-incubating//htrace-core-3.1.0-incubating.jar
httpclient/org.apache.httpcomponents/4.4.1//httpclient-4.4.1.jar
httpcore/org.apache.httpcomponents/4.4.1//httpcore-4.4.1.jar
jackson-annotations/com.fasterxml.jackson.core/2.6.7//jackson-annotations-2.6.7.jar
jackson-core/com.fasterxml.jackson.core/2.6.7//jackson-core-2.6.7.jar
jackson-databind/com.fasterxml.jackson.core/2.6.7.3//jackson-databind-2.6.7.3.jar
jamon-runtime/org.jamon/2.4.1//jamon-runtime-2.4.1.jar
java-xmlbuilder/com.jamesmurty.utils/0.4//java-xmlbuilder-0.4.jar
javax.inject/javax.inject/1//javax.inject-1.jar
jaxb-api/javax.xml.bind/2.2.11//jaxb-api-2.2.11.jar
jaxb-impl/com.sun.xml.bind/2.2.3-1//jaxb-impl-2.2.3-1.jar
jcodings/org.jruby.jcodings/1.0.8//jcodings-1.0.8.jar
jersey-client/com.sun.jersey/1.9//jersey-client-1.9.jar
jersey-core/com.sun.jersey/1.9//jersey-core-1.9.jar
jersey-guice/com.sun.jersey.contribs/1.9//jersey-guice-1.9.jar
jersey-json/com.sun.jersey/1.9//jersey-json-1.9.jar
jersey-server/com.sun.jersey/1.9//jersey-server-1.9.jar
jets3t/net.java.dev.jets3t/0.9.0//jets3t-0.9.0.jar
jettison/org.codehaus.jettison/1.1//jettison-1.1.jar
jetty-util/org.mortbay.jetty/6.1.26//jetty-util-6.1.26.jar
jetty/org.mortbay.jetty/6.1.26//jetty-6.1.26.jar
joni/org.jruby.joni/2.1.2//joni-2.1.2.jar
jsch/com.jcraft/0.1.42//jsch-0.1.42.jar
junit/junit/4.12//junit-4.12.jar
kryo-shaded/com.esotericsoftware/4.0.2//kryo-shaded-4.0.2.jar
leveldbjni-all/org.fusesource.leveldbjni/1.8//leveldbjni-all-1.8.jar
log4j/log4j/1.2.17//log4j-1.2.17.jar
metrics-core/com.yammer.metrics/2.2.0//metrics-core-2.2.0.jar
minlog/com.esotericsoftware/1.3.0//minlog-1.3.0.jar
netty-all/io.netty/4.0.23.Final//netty-all-4.0.23.Final.jar
objenesis/org.objenesis/2.5.1//objenesis-2.5.1.jar
orc-core/org.apache.orc/1.6.0/nohive/orc-core-1.6.0-nohive.jar
orc-shims/org.apache.orc/1.6.0//orc-shims-1.6.0.jar
paranamer/com.thoughtworks.paranamer/2.7//paranamer-2.7.jar
parquet-avro/org.apache.parquet/1.10.1//parquet-avro-1.10.1.jar
parquet-column/org.apache.parquet/1.10.1//parquet-column-1.10.1.jar
parquet-common/org.apache.parquet/1.10.1//parquet-common-1.10.1.jar
parquet-encoding/org.apache.parquet/1.10.1//parquet-encoding-1.10.1.jar
parquet-format/org.apache.parquet/2.4.0//parquet-format-2.4.0.jar
parquet-hadoop/org.apache.parquet/1.10.1//parquet-hadoop-1.10.1.jar
parquet-jackson/org.apache.parquet/1.10.1//parquet-jackson-1.10.1.jar
protobuf-java/com.google.protobuf/2.5.0//protobuf-java-2.5.0.jar
rocksdbjni/org.rocksdb/5.17.2//rocksdbjni-5.17.2.jar
servlet-api/javax.servlet/2.5//servlet-api-2.5.jar
slf4j-api/org.slf4j/1.7.7//slf4j-api-1.7.7.jar
slf4j-log4j12/org.slf4j/1.7.10//slf4j-log4j12-1.7.10.jar
snappy-java/org.xerial.snappy/1.1.1.3//snappy-java-1.1.1.3.jar
xercesImpl/xerces/2.9.1//xercesImpl-2.9.1.jar
xml-apis/xml-apis/1.3.04//xml-apis-1.3.04.jar
xmlenc/xmlenc/0.52//xmlenc-0.52.jar
xz/org.tukaani/1.5//xz-1.5.jar
zookeeper/org.apache.zookeeper/3.4.6//zookeeper-3.4.6.jar
