Apache Apex
Copyright (c) 2015-2018 The Apache Software Foundation

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


The initial developer of the original code is
DataTorrent, Inc. (http://www.datatorrent.com)
Copyright (c) 2012 - 2015. All Rights Reserved.
