Apache DistributedLog
Copyright 2016 The Apache Software Foundation

Apache DistributedLog is currently undergoing Incubation at the Apache
Software Foundation.

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

Portions of this software were developed by Twitter.
Copyright Twitter, 2016

This product contains a modified portion of 'Apache Hadoop', a Java framework that
allows for the distributed processing of large data sets across clusters of computers
using simple programming models., which can be obtained at:

  * LICENSE:
    * LICENSE (Apache License 2.0)
  * HOMEPAGE:
    * https://hadoop.apache.org/
