Apache DistributedLog
Copyright 2017 The Apache Software Foundation

Licensed 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.

This project includes:
  Apache BookKeeper (Apache Software License v2.0)
  Apache Commons (Apache Software License v2.0)
  Apache Maven (Apache Software License v2.0)
  Apache Thrift (Apache Software License v2.0)
  Apache ZooKeeper (Apache Software License v2.0)
  Google Guava (Apache Software License v2.0)
  Mockito (MIT License)
  Junit (Eclipse Public License 1.0)
  LZ4-java (Apache Software License v2.0)
  SLF4J (MIT License)
  Twitter Finagle (Apache Software License v2.0)
  Twitter Scrooge (Apache Software License v2.0)
  Twitter Util (Apache Software License v2.0)
