Oklahoma State University 130nm Library
Board of Regents for the Oklahoma Agricultural and Mechanical Colleges
VLSI Computer Architecture Research Laboratory

We love your input! We want to make contributing to this project as easy and transparent as possible, whether it's:

    Reporting a bug
    Discussing the current state of the code
    Submitting a fix
    Proposing new features
    Becoming a maintainer

  Any contributions you make will be under the Apache 2.0 Software License

  In short, when you submit code changes, your submissions are understood to be under the same Apache 2.0 License that covers the project. Feel free to contact the maintainers if that's a concern.

  Write bug reports with detail, background, and sample code

  Great Bug Reports tend to have:

    A quick summary and/or background
    Steps to reproduce
      Be specific!
      Give sample code if you can. 
    What you expected would happen
    What actually happens
    Notes (possibly including why you think this might be happening, or stuff you tried that didn't work)

Use a Consistent Coding Style

    2 spaces for indentation rather than tabs
    You can try running npm run lint for style unification

License

  By contributing, you agree that your contributions will be licensed under its Apache 2.0 License.

Develoopment Team

In no particular order, we list the team members of the development team. We have put our life blood into this project.  We hope you enjoy it.  All of us have worked hard to contribute to this project in some way.  Please contribute by using or contributing.  If you use this library, please reference Oklahoma State University VLSI Computer Architecture Research Laboratory under an Apache 2.0 license.

James Stine
Teo Ene
Landon Burleson
Ryan Swann
Ryan Ridley
Brett Mathis
Alex Underwood
S. Ross Thompson
Peter Tikalsky
