NFD Authors
===========

NFD is an open source project started in late 2013, includes contributions
from many people around the world, and open for new contributions from new
volunteers.


## Project technical leads:

* Alexander Afanasyev <http://lasr.cs.ucla.edu/afanasyev/index.html>
* Junxiao Shi         <http://www.cs.arizona.edu/people/shijunxiao/>


## Technical advisors:

* Beichuan Zhang      <http://www.cs.arizona.edu/~bzhang/>
* Lixia Zhang         <http://www.cs.ucla.edu/~lixia/>


## Main project authors and their affiliations:

* University of California, Los Angeles

    * Alexander Afanasyev <http://lasr.cs.ucla.edu/afanasyev/index.html>
    * Ilya Moiseenko      <http://ilyamoiseenko.com/>
    * Yingdi Yu           <http://irl.cs.ucla.edu/~yingdi/web/index.html>
    * Wentao Shang        <http://irl.cs.ucla.edu/~wentao/>
    * Lixia Zhang         <http://www.cs.ucla.edu/~lixia/>

* The University of Arizona

    * Junxiao Shi         <http://www.cs.arizona.edu/people/shijunxiao/>
    * Yi Huang            <ethanhuang1991@gmail.com>
    * Jerald Paul Abraham <http://www.cs.arizona.edu/people/jeraldabraham/>
    * Beichuan Zhang      <http://www.cs.arizona.edu/~bzhang/>

* Colorado State University

    * Steve DiBenedetto     <http://www.cs.colostate.edu/~dibenede/>
    * Chengyu Fan           <chengyu@cs.colostate.edu>
    * Christos Papadopoulos <http://www.cs.colostate.edu/~christos/>

* University Pierre & Marie Curie, Sorbonne University

    * Davide Pesavento    <https://www.linkedin.com/in/davidepesavento>
    * Giulio Grassi       <http://www.lip6.fr/actualite/personnes-fiche.php?ident=D1461>
    * Giovanni Pau        <http://www.cs.ucla.edu/~gpau/Giovanni_Paus_Home_Page/Home.html>

* Beijing Institute of Technology

    * Hang Zhang          <http://netlab.bit.edu.cn/z_hang>
    * Tian Song           <http://cs.bit.edu.cn/songtian>

* Washington University in St. Louis

    * Haowei Yuan         <http://www.cse.wustl.edu/~yuanh/>
    * Hila Ben Abraham    <http://research.engineering.wustl.edu/~abrahamh/>
    * Patrick Crowley     <http://www.arl.wustl.edu/~pcrowley/>

* The University of Memphis

    * Syed Obaid Amin     <http://obaidamin.weebly.com/>
    * Vince Lehman        <vslehman@memphis.edu>
    * Minsheng Zhang      <mzhang4@memphis.edu>
    * Lan Wang            <http://www.cs.memphis.edu/~lanwang/>

## Project contributors

The following is an inevitably incomplete list of MUCH-APPRECIATED CONTRIBUTORS,
people who have reported bugs, submitted patches, and implemented new features
in the library:

* Tai-Lin Chu             <https://www.linkedin.com/pub/tai-lin-chu/55/5b2/669>
* Spyridon Mastorakis     <http://cs.ucla.edu/~mastorakis/>
* Eric Newberry           <http://cs.arizona.edu/~enewberry/>
* Yukai Tu                <tuyukai1994@gmail.com>
* João Pereira            <http://website.jpereira.co.uk>
* Mathias Gibbens         <gibmat@cs.arizona.edu>
* Yanbiao Li              <https://www.linkedin.com/pub/yanbiao-li/24/7a1/4ba>
* Weiwei Liu              <https://www.linkedin.com/in/weiweiliu10>
* Spencer Lee             <https://www.linkedin.com/in/spenlee>
