Description: <short summary of the patch>
 TODO: Put a short summary on the line above and replace this paragraph
 with a longer explanation of this change. Complete the meta-information
 with other relevant fields (see below for details). To make it easier, the
 information below has been extracted from the changelog. Adjust it or drop
 it.
 .
 ola (0.10.3.nojsmin-2+deb9u1) stretch; urgency=medium
 .
   * Fix typo in /etc/init.d/rdm_test_server; Closes: #876251.
   * Fix filename for jquery in rdm test server static HTML files;
     Closes: #912713.
Author: Wouter Verhelst <wouter@debian.org>
Bug-Debian: https://bugs.debian.org/876251
Bug-Debian: https://bugs.debian.org/912713

---
The information above should follow the Patch Tagging Guidelines, please
checkout http://dep.debian.net/deps/dep3/ to learn about the format. Here
are templates for supplementary fields that you might want to add:

Origin: <vendor|upstream|other>, <url of original patch>
Bug: <url in upstream bugtracker>
Bug-Debian: https://bugs.debian.org/<bugnumber>
Bug-Ubuntu: https://launchpad.net/bugs/<bugnumber>
Forwarded: <no|not-needed|url proving that it has been forwarded>
Reviewed-By: <name and email of someone who approved the patch>
Last-Update: 2018-11-03

--- /dev/null
+++ ola-0.10.3.nojsmin/.travis-ci.sh
@@ -0,0 +1,114 @@
+#!/bin/bash
+
+# This script is triggered from the script section of .travis.yml
+# It runs the appropriate commands depending on the task requested.
+
+set -e
+
+CPP_LINT_URL="https://raw.githubusercontent.com/google/styleguide/gh-pages/cpplint/cpplint.py";
+
+COVERITY_SCAN_BUILD_URL="https://scan.coverity.com/scripts/travisci_build_coverity_scan.sh"
+
+if [[ $TASK = 'lint' ]]; then
+  # run the lint tool only if it is the requested task
+  autoreconf -i;
+  ./configure --enable-rdm-tests --enable-ja-rule;
+  # the following is a bit of a hack to build the files normally built during
+  # the build, so they are present for linting to run against
+  make builtfiles
+  # first check we've not got any generic NOLINTs
+  # count the number of generic NOLINTs
+  nolints=$(grep -IR NOLINT * | grep -v "NOLINT(" | wc -l)
+  if [[ $nolints -ne 0 ]]; then
+    # print the output for info
+    echo $(grep -IR NOLINT * | grep -v "NOLINT(")
+    echo "Found $nolints generic NOLINTs"
+    exit 1;
+  else
+    echo "Found $nolints generic NOLINTs"
+  fi;
+  # then fetch and run the main cpplint tool
+  wget -O cpplint.py $CPP_LINT_URL;
+  chmod u+x cpplint.py;
+  ./cpplint.py \
+    --filter=-legal/copyright,-readability/streams,-runtime/arrays \
+    $(find ./ \( -name "*.h" -or -name "*.cpp" \) -and ! \( \
+        -wholename "./common/protocol/Ola.pb.*" -or \
+        -wholename "./common/rpc/Rpc.pb.*" -or \
+        -wholename "./common/rpc/TestService.pb.*" -or \
+        -wholename "./common/rdm/Pids.pb.*" -or \
+        -wholename "./config.h" -or \
+        -wholename "./plugins/*/messages/*ConfigMessages.pb.*" -or \
+        -wholename "./tools/ola_trigger/config.tab.*" -or \
+        -wholename "./tools/ola_trigger/lex.yy.cpp" \) | xargs)
+  if [[ $? -ne 0 ]]; then
+    exit 1;
+  fi;
+elif [[ $TASK = 'check-licences' ]]; then
+  # check licences only if it is the requested task
+  autoreconf -i;
+  ./configure --enable-rdm-tests --enable-ja-rule;
+  # the following is a bit of a hack to build the files normally built during
+  # the build, so they are present for licence checking to run against
+  make builtfiles
+  ./scripts/enforce_licence.py
+  if [[ $? -ne 0 ]]; then
+    exit 1;
+  fi;
+elif [[ $TASK = 'doxygen' ]]; then
+  # check doxygen only if it is the requested task
+  autoreconf -i;
+  # Doxygen is C++ only, so don't bother with RDM tests
+  ./configure --enable-ja-rule;
+  # the following is a bit of a hack to build the files normally built during
+  # the build, so they are present for Doxygen to run against
+  make builtfiles
+  # count the number of warnings
+  warnings=$(make doxygen-doc 2>&1 >/dev/null | wc -l)
+  if [[ $warnings -ne 0 ]]; then
+    # print the output for info
+    make doxygen-doc
+    echo "Found $warnings doxygen warnings"
+    exit 1;
+  else
+    echo "Found $warnings doxygen warnings"
+  fi;
+elif [[ $TASK = 'coverage' ]]; then
+  # Compile with coverage for coveralls
+  autoreconf -i;
+  # Coverage is C++ only, so don't bother with RDM tests
+  ./configure --enable-gcov --enable-ja-rule;
+  make;
+  make check;
+elif [[ $TASK = 'coverity' ]]; then
+  # Run Coverity Scan unless token is zero length
+  # The Coverity Scan script also relies on a number of other COVERITY_SCAN_
+  # variables set in .travis.yml
+  if [[ ${#COVERITY_SCAN_TOKEN} -ne 0 ]]; then
+    curl -s $COVERITY_SCAN_BUILD_URL | bash
+  else
+    echo "Skipping Coverity Scan as no token found, probably a Pull Request"
+  fi;
+elif [[ $TASK = 'jshint' ]]; then
+  cd ./javascript/new-src;
+  npm install;
+  grunt test
+elif [[ $TASK = 'flake8' ]]; then
+  autoreconf -i;
+  ./configure --enable-rdm-tests
+  # the following is a bit of a hack to build the files normally built during
+  # the build, so they are present for flake8 to run against
+  make builtfiles
+  flake8 --max-line-length 80 --exclude *_pb2.py,.git,__pycache --ignore E111,E114,E121,E127,E129 data/rdm include/ola python scripts tools/ola_mon tools/rdm
+else
+  # Otherwise compile and check as normal
+  export DISTCHECK_CONFIGURE_FLAGS='--enable-rdm-tests --enable-ja-rule'
+  autoreconf -i;
+  ./configure $DISTCHECK_CONFIGURE_FLAGS;
+  make distcheck;
+  make dist;
+  tarball=$(ls -Ut ola*.tar.gz | head -1)
+  tar -zxf $tarball;
+  tarball_root=$(echo $tarball | sed 's/.tar.gz$//')
+  ./scripts/verify_trees.py ./ $tarball_root
+fi
--- /dev/null
+++ ola-0.10.3.nojsmin/.travis.yml
@@ -0,0 +1,190 @@
+language: cpp
+sudo: false
+script:
+ - "bash -ex .travis-ci.sh"
+
+addons:
+  apt:
+    packages: &base_build
+     # This is the absolute minimum for configure to pass
+     # Non C++ based tasks use it so they can run make builtfiles
+     - ccache
+     - libcppunit-dev
+     - bison
+     - flex
+     - uuid-dev
+     - libprotobuf-dev
+     - protobuf-compiler
+     - libprotoc-dev
+     - python-protobuf
+     - python-numpy
+    packages: &core_build
+     # This is all the bits we need to enable all options
+     - *base_build
+     - libftdi-dev
+     - libftdi1
+     - libusb-1.0-0-dev
+     - liblo-dev
+     - libavahi-glib1
+     - libncurses5-dev
+     - libmicrohttpd-dev
+    packages: &core_build_gpp_latest
+     - *core_build
+     - g++-5
+    packages: &core_build_clang_latest
+     - *core_build
+     - clang-3.8
+
+matrix:
+  fast_finish: true
+  include:
+    - os: osx
+      compiler: clang
+      env: TASK='compile'
+    - os: osx
+      compiler: gcc
+      env: TASK='compile'
+    - os: linux
+      compiler: clang
+      env: TASK='compile'
+      addons:
+        apt:
+          packages:
+           - *core_build_clang_latest
+          sources:
+           - ubuntu-toolchain-r-test
+           - llvm-toolchain-precise-3.8
+    - os: linux
+      compiler: gcc
+      env: TASK='compile'
+      addons:
+        apt:
+          packages:
+           - *core_build_gpp_latest
+          sources:
+           - ubuntu-toolchain-r-test
+    - os: linux
+      compiler: gcc
+      env: TASK='coverage'
+      addons:
+        apt:
+          packages:
+           - *core_build_gpp_latest
+          sources:
+           - ubuntu-toolchain-r-test
+    - os: linux
+      compiler: gcc
+      env: TASK='coverity'
+      addons:
+        apt:
+          packages:
+           # Coverity doesn't work with g++-5 yet
+           - *core_build
+           - g++-4.9
+          sources:
+           - ubuntu-toolchain-r-test
+    - os: linux
+      env: TASK='doxygen'
+      addons:
+        apt:
+          packages:
+           - *core_build_gpp_latest
+           - doxygen
+           - graphviz
+          sources:
+           - ubuntu-toolchain-r-test
+    - os: linux
+      env: TASK='lint'
+      addons:
+        apt:
+          packages:
+           - *core_build
+    - os: linux
+      env: TASK='check-licences'
+      addons:
+        apt:
+          packages:
+           - *core_build
+    - os: linux
+      env: TASK='jshint'
+      addons:
+        apt:
+          packages:
+    - os: linux
+      env: TASK='flake8'
+      addons:
+        apt:
+          packages:
+           - *base_build
+  allow_failures:
+    - os: linux
+      compiler: gcc
+      env: TASK='coverage'
+    - os: linux
+      compiler: gcc
+      env: TASK='coverity'
+
+env:
+  global:
+   # -- BEGIN Coverity Scan ENV
+   - COVERITY_SCAN_BUILD_COMMAND_PREPEND="cov-configure --comptype gcc --compiler gcc-4.9 && autoreconf -i && ./configure --enable-ja-rule"
+   # The build command with all of the arguments that you would apply to a manual `cov-build`
+   # Usually this is the same as STANDARD_BUILD_COMMAND, exluding the automated test arguments
+   - COVERITY_SCAN_BUILD_COMMAND="make"
+   # Name of the project
+   - COVERITY_SCAN_PROJECT_NAME="$TRAVIS_REPO_SLUG"
+   # Email address for notifications related to this build
+   - COVERITY_SCAN_NOTIFICATION_EMAIL="ola-coverity@pjnewman.co.uk"
+   # Regular expression selects on which branches to run analysis
+   # Be aware of quotas. Do not run on every branch/commit
+   - COVERITY_SCAN_BRANCH_PATTERN=".*"
+   # COVERITY_SCAN_TOKEN via "travis encrypt" using the repo's public key
+   - secure: "U+NmPtScHZ1NLmkDrzpqApHmJvELV44cXgjQsxA8N8xIATckbs+DrmWSNeECENyvuOPz+nPzglSgBvJtejf97jYJIIwAExq5TJMUAIPFS6KU3mohODW2PZSoVoUyJPzFIlhzcELQgONI+ILLm29lNdQNb7GFUVtO6+jS10AFtWY="
+   # -- END Coverity Scan ENV
+
+cache:
+  apt: true
+  directories:
+    - $HOME/.cache/pip # pip cache
+    - $HOME/.npm # npm cache
+    - $HOME/.ccache # ccache cache
+
+before_cache:
+  - rm -f $HOME/.cache/pip/log/debug.log # erase log
+  - ccache -s # see how many hits ccache got
+
+install:
+  - pip install --user protobuf==3.0.0
+  - if [ "$TASK" = "coverage" ]; then pip install --user cpp-coveralls; fi
+  - if [ "$TASK" = "flake8" ]; then pip install --user flake8; fi
+  - if [ "$TASK" = "jshint" ]; then npm install -g grunt-cli; fi
+
+before_install:
+ - if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then brew update; fi
+#Fix a broken homebrew libtool install
+ - if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then brew reinstall -s libtool; fi
+ - if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then brew install ccache cppunit bison flex protobuf-c libftdi libftdi0 libusb liblo libmicrohttpd; fi # ossp-uuid already present
+ - if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then mkdir -p ${HOME}/Library/Python/2.7/lib/python/site-packages; echo 'import site; site.addsitedir("/usr/local/lib/python2.7/site-packages")' >> ${HOME}/Library/Python/2.7/lib/python/site-packages/homebrew.pth; fi
+#Coverity doesn't work with g++ 5, so only upgrade to g++ 4.9 for that
+ - if [ "$TRAVIS_OS_NAME" == "linux" -a \( "$TASK" = "compile" -o "$TASK" = "coverage" -o "$TASK" = "doxygen" \) -a "$CXX" = "g++" ]; then export CXX="ccache g++-5" CC="ccache gcc-5"; fi
+ - if [ "$TASK" = "coverity" -a "$CXX" = "g++" ]; then export CXX="ccache g++-4.9" CC="ccache gcc-4.9"; fi
+#Use the latest clang if we're compiling with clang
+ - if [ "$TRAVIS_OS_NAME" == "linux" -a "$CXX" = "clang++" ]; then export CXX="clang++-3.8" CC="clang-3.8"; fi
+#Report the compiler version
+ - $CXX --version
+
+after_failure:
+  - cat ${TRAVIS_BUILD_DIR}/ola-*/_build/test-suite.log
+
+after_success:
+  - if [ "$TASK" = "coverage" ]; then coveralls --gcov /usr/bin/gcov-5 -b . -E '.*Test\.cpp$' -E '.*\.pb\.cc$' -E '.*\.pb\.cpp$' -E '.*\.pb\.h$' -E '.*\.yy\.cpp$' -E '.*\.tab\.cpp$' -E '.*\.tab\.h$' -E '.*/doxygen/examples.*$' --gcov-options '\-lp' > /dev/null; fi
+
+after_script:
+  - if [ "$TASK" = "coverity" ]; then tail -n 10000 ${TRAVIS_BUILD_DIR}/cov-int/build-log.txt; cat ${TRAVIS_BUILD_DIR}/cov-int/scm_log.txt; fi
+
+notifications:
+  irc:
+    channels:
+     - "chat.freenode.net#openlighting"
+    on_success: change
+    on_failure: change
--- /dev/null
+++ ola-0.10.3.nojsmin/common/LICENCE
@@ -0,0 +1,13 @@
+This library is free software; you can redistribute it and/or
+modify it under the terms of the GNU Lesser General Public
+License as published by the Free Software Foundation; either
+version 2.1 of the License, or (at your option) any later version.
+
+This library is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public
+License along with this library; if not, write to the Free Software
+Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
--- /dev/null
+++ ola-0.10.3.nojsmin/examples/LICENCE
@@ -0,0 +1,13 @@
+This program is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU Library General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
--- /dev/null
+++ ola-0.10.3.nojsmin/include/ola/LICENCE
@@ -0,0 +1,13 @@
+This library is free software; you can redistribute it and/or
+modify it under the terms of the GNU Lesser General Public
+License as published by the Free Software Foundation; either
+version 2.1 of the License, or (at your option) any later version.
+
+This library is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public
+License along with this library; if not, write to the Free Software
+Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
--- /dev/null
+++ ola-0.10.3.nojsmin/include/ola/acn/LICENCE
@@ -0,0 +1,13 @@
+This program is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU Library General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
--- /dev/null
+++ ola-0.10.3.nojsmin/include/ola/e133/LICENCE
@@ -0,0 +1,13 @@
+This program is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU Library General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
--- /dev/null
+++ ola-0.10.3.nojsmin/include/olad/LICENCE
@@ -0,0 +1,13 @@
+This program is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU Library General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
--- /dev/null
+++ ola-0.10.3.nojsmin/javascript/new-src/LICENCE
@@ -0,0 +1,13 @@
+This program is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU Library General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
\ No newline at end of file
--- /dev/null
+++ ola-0.10.3.nojsmin/javascript/ola/LICENCE
@@ -0,0 +1,13 @@
+This program is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU Library General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
--- /dev/null
+++ ola-0.10.3.nojsmin/libs/LICENCE
@@ -0,0 +1,13 @@
+This program is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU Library General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
--- /dev/null
+++ ola-0.10.3.nojsmin/man/generate-html.sh
@@ -0,0 +1,45 @@
+#!/bin/sh
+
+if [ $# != 1 ]; then
+  echo "Usage: $0 <output_dir>"
+  exit 1;
+fi
+
+output_dir=$1
+if [ ! -d $output_dir ]; then
+  echo $output_dir is not a directory
+  exit 1;
+fi
+
+index_file=$output_dir/index.html;
+
+echo "Output dir: $output_dir";
+echo "Index file: $index_file";
+
+cat << 'EOF' > $index_file
+<html>
+<head>
+<title>Man pages for the Open Lighting Architecture</title>
+</head>
+<body>
+<h1>Man pages for the <a href="https://openlighting.org/ola/">Open Lighting Architecture</a></h1>
+<ul>
+EOF
+
+if [ ! -d $output_dir/man1/ ]; then
+  echo $output_dir/man1/ doesn\'t exist, please create it
+  exit 1;
+fi
+for man_file in *.1; do
+  echo "Generating $man_file";
+  output_file=$output_dir/man1/$man_file.html;
+  man2html -r $man_file -M ../index.html | sed 1,2d > $output_file;
+  chmod a+r $output_file;
+  echo "<li><a href='./man1/$man_file.html'>$man_file</a></li>" >> $index_file
+done
+
+cat << 'EOF' >> $index_file
+</ul>
+</body>
+</html>
+EOF
--- /dev/null
+++ ola-0.10.3.nojsmin/ola/LICENCE
@@ -0,0 +1,13 @@
+This library is free software; you can redistribute it and/or
+modify it under the terms of the GNU Lesser General Public
+License as published by the Free Software Foundation; either
+version 2.1 of the License, or (at your option) any later version.
+
+This library is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public
+License along with this library; if not, write to the Free Software
+Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
--- /dev/null
+++ ola-0.10.3.nojsmin/olad/LICENCE
@@ -0,0 +1,13 @@
+This program is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU Library General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
--- ola-0.10.3.nojsmin.orig/olad/www/Makefile.mk
+++ ola-0.10.3.nojsmin/olad/www/Makefile.mk
@@ -69,14 +69,6 @@ dist_img_DATA = \
     olad/www/new/img/light_bulb.png \
     olad/www/new/img/logo-mini.png \
     olad/www/new/img/logo.png
-dist_jquery_DATA = \
-    olad/www/new/libs/jquery/js/jquery.min.js
-dist_angularroute_DATA = \
-    olad/www/new/libs/angular-route/js/angular-route.min.js
-dist_angular_DATA = \
-    olad/www/new/libs/angular/js/angular.min.js
-dist_bootjs_DATA = \
-    olad/www/new/libs/bootstrap/js/bootstrap.min.js
 dist_bootfonts_DATA = \
     olad/www/new/libs/bootstrap/fonts/glyphicons-halflings-regular.eot \
     olad/www/new/libs/bootstrap/fonts/glyphicons-halflings-regular.svg \
--- /dev/null
+++ ola-0.10.3.nojsmin/plugins/LICENCE
@@ -0,0 +1,13 @@
+This program is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU Library General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
--- /dev/null
+++ ola-0.10.3.nojsmin/plugins/kinet/kinet.cpp
@@ -0,0 +1,308 @@
+/*
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * kinet.cpp
+ * Scratch pad for Kinet work
+ * Copyright (C) 2010 Simon Newton
+ */
+
+#include <ola/Callback.h>
+#include <ola/Logging.h>
+#include <ola/network/NetworkUtils.h>
+#include <ola/network/SelectServer.h>
+#include <ola/network/Socket.h>
+
+#include <iostream>
+#include <string>
+
+using std::cout;
+using std::endl;
+using std::string;
+using ola::network::SelectServer;
+using ola::network::UDPSocket;
+using ola::network::LittleEndianToHost;
+
+
+/*
+ * The KiNet protocol appears to be little-endian. We write the constants as
+ * they appear to a human and convert back and forth.
+ */
+
+// All packets seem to start with this number
+const uint32_t KINET_MAGIC = 0x4adc0104;
+// We haven't seen a non V1 protocol in the wild yet.
+const uint16_t KINET_VERSION = 0x0001;
+// No idea what this is, but we should send a poll reply when we see it
+const uint32_t KINET_DISCOVERY_COMMAND = 0x8988870a;
+
+// KiNet packet types
+typedef enum {
+  KINET_POLL = 0x0001,
+  KINET_POLL_REPLY = 0x0002,
+  KINET_SET_IP = 0x0003,
+  KINET_SET_UNIVERSE = 0x0005,
+  KINET_SET_NAME = 0x0006,
+  // KINET_?? = 0x000a;
+  KINET_DMX = 0x0101,
+  // KINET_PORTOUT = 0x0108;  // portout
+  // KINET_PORTOUT_SYNC = 0x0109;  // portout_sync
+  // KINET_?? = 0x0201;  // seems to be a discovery packet
+  // KINET_?? = 0x0203;  // get dmx address?
+} kinet_packet_type;
+
+
+/**
+ * The KiNet header
+ */
+PACK(
+struct kinet_header {
+  uint32_t magic;
+  uint16_t version;
+  uint16_t type;  // see kinet_packet_type above
+  uint32_t padding;  // always set to 0, seq #,
+                     // most of the time it's 0,
+                     // not implemented in most supplies
+});
+
+
+// A KiNet poll message
+PACK(
+struct kinet_poll {
+  uint32_t command;  // ??, Seems to always be KINET_DISCOVERY_COMMAND
+});
+
+
+// A KiNet poll reply message
+PACK(
+struct kinet_poll_reply {
+  uint32_t src_ip;
+  uint8_t hw_address[6];  // mac address
+  uint8_t  data[2];  // This contains non-0 data
+  uint32_t serial;  // The node serial #
+  uint32_t zero;
+  uint8_t node_name[60];
+  uint8_t node_label[31];
+  uint16_t zero2;
+});
+
+
+// A KiNet Set IP Command.
+// TODO(simon): Check what ip,mac dst this packet is sent to.
+PACK(
+struct kinet_set_ip {
+  uint32_t something;  // ef be ad de
+  uint8_t hw_address[6];  // The MAC address to match
+  uint16_t something2;  // 05 67
+  uint32_t new_ip;
+});
+
+
+// A KiNet Set Universe Command
+PACK(
+struct kinet_set_universe {
+  uint32_t something;  // ef be ad de
+  uint8_t universe;
+  uint8_t zero[3];
+});
+
+
+// A KiNet Set Name Command
+PACK(
+struct kinet_set_name {
+  uint32_t something;  // ef be ad de
+  uint8_t new_name[31];  // Null terminated.
+});
+
+
+// A KiNet Get Address command
+PACK(
+struct kinet_get_address {
+  uint32_t serial;
+  uint32_t something;  // 41 00 12 00
+});
+
+
+// A KiNet DMX packet
+PACK(
+struct kinet_dmx {
+  uint8_t port;  // should be set to 0 for v1
+  uint8_t flags;  // set to 0
+  uint16_t timerVal;  // set to 0
+  uint32_t universe;
+  uint8_t paylod[513];  // payload inc start code
+});
+
+
+struct kinet_port_out_flags {
+  uint16_t flags;
+    // little endian
+    // first bit is undefined  0:1;
+    // second bit is for 16 bit data, set to 0  :1;
+    // third is shall hold for sync packet :: 1;
+};
+
+
+struct kinet_port_out_sync {
+  uint32_t padding;
+}
+
+// A KiNet DMX port out packet
+PACK(
+struct kinet_port_out {
+  uint32_t universe;
+  uint8_t port;        // 1- 16
+  uint8_t pad;         // set to 0
+  portoutflags flags;
+  uint16_t length;     // little endian
+  uint16_t startCode;  // 0x0fff for chomASIC products, 0x0000 otherwise
+  uint8_t payload[512];
+});
+
+
+// The full kinet packet
+struct kinet_packet {
+  struct kinet_header header;
+  union {
+    struct kinet_poll poll;
+    struct kinet_poll_reply poll_reply;
+  } data;
+};
+
+
+uint8_t peer0_0[] = {
+  0x04, 0x01, 0xdc, 0x4a,  // magic number
+  0x01, 0x00,  // version #
+  0x02, 0x00,  // packet type (poll reply)
+  0x00, 0x00, 0x00, 0x00,  // sequence
+  0x0a, 0x00, 0x00, 0x01,  // 192.168.1.207
+  0x00, 0x0a, 0xc5, 0xff, 0xae, 0x01,  // mac address
+  0x01, 0x00,
+  0xff, 0xff, 0x00, 0x2d,  // serial #
+  0x00, 0x00, 0x00, 0x00,  // padding
+  // What follows is ascii text, with fields separated by new lines. Each field
+  // is in the form /[MD#R]:.*/
+  // It's unclear is this is a variable length field or not.
+  0x4d, 0x3a,  // M:
+  0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x20, 0x4b, 0x69, 0x6e, 0x65, 0x74, 0x69, 0x63,
+  0x73, 0x20, 0x49, 0x6e, 0x63, 0x6f, 0x72, 0x70, 0x6f, 0x72, 0x61, 0x74, 0x65,
+  0x64,  // Color Kinetics cs Incorporated
+  0x0a,  // \n
+  0x44, 0x3a,  // D:
+  0x50, 0x44, 0x53, 0x2d, 0x65,  // PDS-e
+  0x0a,  // \n
+  0x23, 0x3a,  // #:
+  0x53, 0x46, 0x54, 0x2d, 0x30, 0x30, 0x30, 0x30, 0x36, 0x36, 0x2d, 0x30, 0x30,
+  0x0a,  // SFT-000066-00
+  0x52, 0x3a,  // R:
+  0x30, 0x30,  // 00
+  0x0a,  // \n
+  0x00,
+  // offset 92
+  0x64, 0x73, 0x2d, 0x64, 0x61, 0x6e, 0x63, 0x65, 0x2d, 0x72, 0x65, 0x61, 0x72,
+  0x00,  // device name?
+  0x00, 0x95, 0x8c, 0xc7, 0xb6, 0x00,
+  0x00,
+  0xff, 0x00, 0x00,
+  0xff, 0x00, 0x00,
+  0xff, 0x00, 0x00,
+  0xff, 0x00, 0x00 };
+
+
+SelectServer ss;
+UDPSocket udp_socket;
+
+/**
+ * Check if a packet is valid KiNet
+ */
+bool IsKiNet(const kinet_packet *packet, unsigned int size) {
+  return (size > sizeof(struct kinet_header) &&
+          KINET_MAGIC == LittleEndianToHost(packet->header.magic) &&
+          KINET_VERSION == LittleEndianToHost(packet->header.version));
+}
+
+
+/**
+ * Handle a KiNet poll packet
+ */
+void HandlePoll(const struct sockaddr_in &source,
+                const kinet_packet &packet,
+                unsigned int size) {
+  ssize_t r = udp_socket.SendTo(peer0_0, sizeof(peer0_0), source);
+  OLA_INFO << "sent " << r << " bytes";
+}
+
+
+/**
+ * Handle a KiNet DMX packet
+ */
+void HandleDmx(const struct sockaddr_in &source,
+               const kinet_packet &packet,
+               unsigned int size) {
+}
+
+
+void SocketReady() {
+  kinet_packet packet;
+  ssize_t data_read = sizeof(packet);
+  struct sockaddr_in source;
+  socklen_t src_size = sizeof(source);
+
+  udp_socket.RecvFrom(reinterpret_cast<uint8_t*>(&packet),
+                      &data_read,
+                      source,
+                      src_size);
+  if (IsKiNet(&packet, data_read)) {
+    uint16_t command = LittleEndianToHost(packet.header.type);
+    switch (command) {
+      case KINET_POLL:
+        HandlePoll(source, packet, data_read);
+        break;
+      case KINET_DMX:
+        HandleDmx(source, packet, data_read);
+        break;
+      default:
+        OLA_WARN << "Unknown packet 0x" << std::hex << command;
+    }
+  } else {
+    OLA_WARN << "Not a KiNet packet";
+  }
+}
+
+
+/*
+ * Main
+ */
+int main(int argc, char *argv[]) {
+  ola::InitLogging(ola::OLA_LOG_INFO, ola::OLA_LOG_STDERR);
+
+  udp_socket.SetOnData(ola::NewCallback(&SocketReady));
+  if (!udp_socket.Init()) {
+    OLA_WARN << "Failed to init";
+    return 1;
+  }
+  if (!udp_socket.Bind(6038)) {
+    OLA_WARN << "Failed to bind";
+    return 1;
+  }
+  if (!udp_socket.EnableBroadcast()) {
+    OLA_WARN << "Failed to enabl bcast";
+    return 1;
+  }
+
+  ss.AddSocket(&udp_socket);
+
+  ss.Run();
+  return 0;
+}
--- /dev/null
+++ ola-0.10.3.nojsmin/python/examples/LICENCE
@@ -0,0 +1,13 @@
+This program is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU Library General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
--- /dev/null
+++ ola-0.10.3.nojsmin/python/ola/LICENCE
@@ -0,0 +1,13 @@
+This library is free software; you can redistribute it and/or
+modify it under the terms of the GNU Lesser General Public
+License as published by the Free Software Foundation; either
+version 2.1 of the License, or (at your option) any later version.
+
+This library is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public
+License along with this library; if not, write to the Free Software
+Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
--- /dev/null
+++ ola-0.10.3.nojsmin/scripts/enforce_licence.py
@@ -0,0 +1,328 @@
+#!/usr/bin/python
+#  This program is free software; you can redistribute it and/or modify
+#  it under the terms of the GNU General Public License as published by
+#  the Free Software Foundation; either version 2 of the License, or
+#  (at your option) any later version.
+#
+#  This program is distributed in the hope that it will be useful,
+#  but WITHOUT ANY WARRANTY; without even the implied warranty of
+#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+#  GNU Library General Public License for more details.
+#
+#  You should have received a copy of the GNU General Public License
+#  along with this program; if not, write to the Free Software
+#  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+#
+# enforce_licence.py
+# Copyright (C) 2013 Simon Newton
+
+import difflib
+import getopt
+import glob
+import os
+import pprint
+import re
+import sys
+import textwrap
+
+CPP, JS, PROTOBUF, PYTHON = xrange(4)
+
+IGNORED_DIRECTORIES = [
+  'javascript/new-src/node_modules/',
+]
+
+IGNORED_FILES = [
+  'common/rdm/testdata/duplicate_manufacturer.proto',
+  'common/rdm/testdata/duplicate_pid_name.proto',
+  'common/rdm/testdata/duplicate_pid_value.proto',
+  'common/rdm/testdata/inconsistent_pid.proto',
+  'common/rdm/testdata/invalid_esta_pid.proto',
+  'common/rdm/testdata/test_pids.proto',
+  'common/rdm/testdata/pids/overrides.proto',
+  'common/rdm/testdata/pids/pids1.proto',
+  'common/rdm/testdata/pids/pids2.proto',
+  'examples/ola-dmxconsole.cpp',
+  'examples/ola-dmxmonitor.cpp',
+  'include/ola/gen_callbacks.py',
+  'olad/www/mobile.js',
+  'olad/www/ola.js',
+  'javascript/new-src/Gruntfile.js',
+  'olad/www/new/js/app.min.js',
+  'olad/www/new/js/app.min.js.map',
+  'python/ola/PidStoreLocation.py',
+  'python/ola/Version.py',
+  'tools/ola_trigger/config.tab.cpp',
+  'tools/ola_trigger/config.tab.h',
+  'tools/ola_trigger/lex.yy.cpp',
+  'tools/rdm/DataLocation.py',
+  'tools/rdm/static/ui.multiselect.js',
+]
+
+
+def Usage(arg0):
+  print textwrap.dedent("""\
+  Usage: %s
+
+  Walk the directory tree from the current directory, and make sure all .cpp,
+  .h, .js, .proto and .py files have the appropriate Licence. The licence is
+  determined from the LICENCE file in each branch of the directory tree.
+
+    --diff               Print the diffs.
+    --fix                Fix the files.
+    --help               Display this message.""" % arg0)
+
+
+def ParseArgs():
+  """Extract the options."""
+  try:
+    opts, args = getopt.getopt(sys.argv[1:], '',
+                               ['diff', 'fix', 'help'])
+  except getopt.GetoptError, err:
+    print str(err)
+    Usage(sys.argv[0])
+    sys.exit(2)
+
+  help = False
+  fix = False
+  diff = False
+  for o, a in opts:
+    if o in ('--diff'):
+      diff = True
+    elif o in ('--fix'):
+      fix = True
+    elif o in ('-h', '--help'):
+      Usage(sys.argv[0])
+      sys.exit()
+
+  if help:
+    Usage(sys.argv[0])
+    sys.exit(0)
+  return diff, fix
+
+
+def IgnoreFile(file_name):
+  for ignored_dir in IGNORED_DIRECTORIES:
+    if file_name.rfind(ignored_dir) != -1:
+      return True
+  for ignored_file in IGNORED_FILES:
+    if file_name.endswith(ignored_file):
+      return True
+  return False
+
+
+def TransformCppLine(line):
+  """Transform a line to within a C++ multiline style comment"""
+  line = line.strip()
+  if line:
+    return ' * %s' % line
+  else:
+    return ' *'
+
+
+def TransformLicence(licence):
+  """Wrap a licence in C++ style comments"""
+  output = []
+  output.append('/*')
+  output.extend(map(TransformCppLine, licence))
+  output.append(TransformCppLine(''))
+  return '\n'.join(output)
+
+
+def TransformJsLine(line):
+  """Transform a line to within a JS multiline style comment"""
+  return TransformCppLine(line)
+
+
+def TransformCppToJsLicence(licence):
+  """Change a C++ licence to JS style"""
+  lines = licence.split('\n')
+  output = []
+  output.append('/**')
+  for l in lines[1:]:
+    output.append(TransformJsLine(l[2:]))
+  return '\n'.join(output)
+
+
+def TransformPythonLine(line):
+  """Transform a line to within a Python multiline style comment"""
+  line = line.strip()
+  if line:
+    return '# %s' % line
+  else:
+    return '#'
+
+
+def TransformCppToPythonLicence(licence):
+  """Change a C++ licence to Python style"""
+  lines = licence.split('\n')
+  output = []
+  for l in lines[1:]:
+    output.append(TransformPythonLine(l[3:]))
+  return '\n'.join(output)
+
+
+def TransformLine(line, lang):
+  if lang == CPP or lang == PROTOBUF:
+    return TransformCppLine(line)
+  elif lang == JS:
+    return TransformJsLine(line)
+  elif lang == PYTHON:
+    return TransformPythonLine(line)
+  else:
+    return line
+
+
+def ReplaceHeader(file_name, new_header, lang):
+  f = open(file_name)
+  breaks = 0
+  line = f.readline()
+  while line != '':
+    if (lang == CPP or lang == JS or lang == PROTOBUF) and \
+       re.match(r'^ \*\s*\n$', line):
+      breaks += 1
+    if lang == PYTHON and re.match(r'^#\s*\n$', line):
+      breaks += 1
+    if breaks == 3:
+      break
+    line = f.readline()
+
+  if breaks < 3:
+    print "Couldn't find header for %s so couldn't fix it" % file_name
+    f.close()
+    return
+
+  remainder = f.read()
+  f.close()
+
+  f = open(file_name, 'w')
+  f.write(new_header)
+  f.write('\n')
+  f.write(remainder)
+  f.close()
+
+
+def GetDirectoryLicences(root_dir):
+  """Walk the directory tree and determine the licence for each directory."""
+  LICENCE_FILE = 'LICENCE'
+  licences = {}
+
+  for dir_name, subdirs, files in os.walk(root_dir):
+    # skip the root_dir since the licence file is different there
+    if dir_name == root_dir:
+      continue
+
+    # skip ignored dirs since we don't check them anyways
+    skip = False
+    for ignored_dir in IGNORED_DIRECTORIES:
+      if dir_name.rfind(ignored_dir) != -1:
+        skip = True
+
+    if skip:
+      continue
+
+    # don't descend into hidden dirs like .libs and .deps
+    subdirs[:] = [d for d in subdirs if not d.startswith('.')]
+
+    if LICENCE_FILE in files:
+      f = open(os.path.join(dir_name, LICENCE_FILE))
+      lines = f.readlines()
+      f.close()
+      licences[dir_name] = TransformLicence(lines)
+      print 'Found LICENCE for directory %s' % dir_name
+
+    # use this licence for all subdirs
+    licence = licences.get(dir_name)
+    if licence is not None:
+      for sub_dir in subdirs:
+        licences[os.path.join(dir_name, sub_dir)] = licence
+  return licences
+
+
+def CheckLicenceForDir(dir_name, licence, diff, fix):
+  """Check all files in a directory contain the correct licence."""
+  errors = 0
+  # glob doesn't support { } so we iterate instead
+  for match in ['*.h', '*.cpp']:
+    for file_name in glob.glob(os.path.join(dir_name, match)):
+      # skip the generated protobuf code
+      if '.pb.' in file_name:
+        continue
+      errors += CheckLicenceForFile(file_name, licence, CPP, diff, fix)
+
+  js_licence = TransformCppToJsLicence(licence)
+  for file_name in glob.glob(os.path.join(dir_name, '*.js')):
+    errors += CheckLicenceForFile(file_name, js_licence, JS, diff, fix)
+
+  for file_name in glob.glob(os.path.join(dir_name, '*.proto')):
+    errors += CheckLicenceForFile(file_name, licence, PROTOBUF, diff, fix)
+
+  python_licence = TransformCppToPythonLicence(licence)
+  for file_name in glob.glob(os.path.join(dir_name, '*.py')):
+    # skip the generated protobuf code
+    if file_name.endswith('__init__.py') or file_name.endswith('pb2.py'):
+      continue
+    errors += CheckLicenceForFile(file_name, python_licence, PYTHON, diff, fix)
+
+  return errors
+
+
+def CheckLicenceForFile(file_name, licence, lang, diff, fix):
+  """Check a file contains the correct licence."""
+  if IgnoreFile(file_name):
+    return 0
+
+  f = open(file_name)
+  # + 1 to include the newline to have a complete line
+  header_size = len(licence) + 1
+  first_line = None
+  if lang == PYTHON:
+    first_line = f.readline()
+    if not first_line.startswith('#!') and not first_line.startswith('# !'):
+      # First line isn't a shebang, ignore it.
+      f.seek(0, os.SEEK_SET)
+      first_line = None
+  # strip the trailing newline off as we don't actually want it
+  header = f.read(header_size).rstrip('\n')
+  file_name_line = f.readline()
+  f.close()
+  if header == licence:
+    expected_line = TransformLine(os.path.basename(file_name), lang)
+    if lang != JS and file_name_line.rstrip('\n') != expected_line:
+      print ("File %s does not have a filename line after the licence; found "
+             "\"%s\" expected \"%s\"" %
+             (file_name, file_name_line.rstrip('\n'), expected_line))
+      return 1
+    return 0
+
+  if fix:
+    print 'Fixing %s' % file_name
+    if lang == PYTHON and first_line is not None:
+      licence = first_line + licence
+    ReplaceHeader(file_name, licence, lang)
+    return 1
+  else:
+    print "File %s does not start with \"%s...\"" % (
+        file_name,
+        licence.split('\n')[(0 if (lang == PYTHON) else 1)])
+    if diff:
+      d = difflib.Differ()
+      result = list(d.compare(header.splitlines(1), licence.splitlines(1)))
+      pprint.pprint(result)
+    return 1
+
+
+def main():
+  diff, fix = ParseArgs()
+  licences = GetDirectoryLicences(os.getcwd())
+  errors = 0
+  for dir_name, licence in licences.iteritems():
+    errors += CheckLicenceForDir(dir_name, licence, diff=diff, fix=fix)
+  print 'Found %d files with incorrect licences' % errors
+  if errors > 0:
+    sys.exit(1)
+  else:
+    sys.exit()
+
+
+if __name__ == '__main__':
+  main()
--- /dev/null
+++ ola-0.10.3.nojsmin/scripts/verify_trees.py
@@ -0,0 +1,129 @@
+#!/usr/bin/python
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU Library General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+#
+# verify_trees.py
+# Copyright (C) 2015 Simon Newton
+
+from __future__ import print_function
+
+import os
+import fnmatch
+import textwrap
+import sys
+
+# File & directory patterns that differ between what's in the git repo and
+# what's in the tarball.
+IGNORE_PATTERNS = [
+  '*.log',
+  '*.pc',
+  '*.swp',
+  '*.trs',
+  '*/.deps',
+  '*/.dirstamp',
+  '*/.libs',
+  '*/LICENCE',
+  '*/Makefile',
+  '*_pb2.py',
+  '*~',
+  '.git',
+  '.git/*',
+  '.gitignore',
+  '.travis-ci.sh',
+  '.travis.yml',
+  'Doxyfile',
+  'Makefile',
+  'README.md',
+  'autom4te.cache',
+  'config.h',
+  'config.status',
+  'html/*',
+  'include/ola/base/Version.h',
+  'libtool',
+  'man/generate-html.sh',
+  'ola-*.tar.gz',
+  'ola-*/*',
+  'plugins/kinet/kinet.cpp',
+  'python/ola/PidStoreLocation.py',
+  'python/ola/Version.py',
+  'scripts/*',
+  'stamp-h1',
+  'tools/rdm/DataLocation.py',
+]
+
+
+def Usage(arg0):
+  print (textwrap.dedent("""\
+  Usage: %s <treeA> <treeB>
+
+  Check for files that exist in treeA but aren't in treeB. This can be used to
+  ensure we don't miss files from the tarball.""" % arg0))
+
+
+def ShouldIgnore(path):
+  for pattern in IGNORE_PATTERNS:
+    if fnmatch.fnmatch(path, pattern):
+      return True
+  return False
+
+
+def BuildTree(root):
+  tree = set()
+  for directory, sub_dirs, files in os.walk(root):
+    rel_dir = os.path.relpath(directory, root)
+    if rel_dir == '.':
+      rel_dir = ''
+    if ShouldIgnore(rel_dir):
+      continue
+    for f in files:
+      path = os.path.join(rel_dir, f)
+      if not ShouldIgnore(path):
+        tree.add(path)
+
+  return tree
+
+
+def main():
+  if len(sys.argv) != 3:
+    Usage(sys.argv[0])
+    sys.exit(1)
+
+  tree_a_root = sys.argv[1]
+  tree_b_root = sys.argv[2]
+  for tree in (tree_a_root, tree_b_root):
+    if not os.path.isdir(tree):
+      print('Not a directory `%s`' % tree, file=sys.stderr)
+      sys.exit(2)
+
+  tree_a = BuildTree(tree_a_root)
+  tree_b = BuildTree(tree_b_root)
+
+  difference = tree_a.difference(tree_b)
+
+  if difference:
+    for file_path in difference:
+      print('Missing from tarball %s' % file_path, file=sys.stderr)
+
+    print('\n---------------------------------------', file=sys.stderr)
+    print('Either add the missing files to the appropriate Makefile.mk\n'
+          'or update IGNORE_PATTERNS in scripts/verify_trees.py',
+          file=sys.stderr)
+    print('---------------------------------------', file=sys.stderr)
+    sys.exit(1)
+
+  sys.exit()
+
+
+if __name__ == '__main__':
+  main()
--- /dev/null
+++ ola-0.10.3.nojsmin/tools/e133/LICENCE
@@ -0,0 +1,13 @@
+This program is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU Library General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
--- /dev/null
+++ ola-0.10.3.nojsmin/tools/logic/LICENCE
@@ -0,0 +1,13 @@
+This program is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU Library General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
--- /dev/null
+++ ola-0.10.3.nojsmin/tools/ola_mon/LICENCE
@@ -0,0 +1,13 @@
+This program is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU Library General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
--- /dev/null
+++ ola-0.10.3.nojsmin/tools/ola_trigger/LICENCE
@@ -0,0 +1,13 @@
+This program is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU Library General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
--- /dev/null
+++ ola-0.10.3.nojsmin/tools/rdm/LICENCE
@@ -0,0 +1,13 @@
+This program is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU Library General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
--- ola-0.10.3.nojsmin.orig/tools/rdm/Makefile.mk
+++ ola-0.10.3.nojsmin/tools/rdm/Makefile.mk
@@ -17,9 +17,7 @@ module_files = \
 testserver_static_files = \
     tools/rdm/static/MIT-LICENSE.txt \
     tools/rdm/static/common.css \
-    tools/rdm/static/jquery-1.7.2.min.js \
     tools/rdm/static/jquery-ui-1.8.21.custom.css \
-    tools/rdm/static/jquery-ui-1.8.21.custom.min.js \
     tools/rdm/static/rdm_tests.js \
     tools/rdm/static/rdmtests.html \
     tools/rdm/static/ui.multiselect.css \
--- ola-0.10.3.nojsmin.orig/tools/rdm/static/rdmtests.html
+++ ola-0.10.3.nojsmin/tools/rdm/static/rdmtests.html
@@ -3,8 +3,8 @@
   <head>
     <link type='text/css' rel='stylesheet' href='/static/jquery-ui-1.8.21.custom.css' />
     <link rel='stylesheet' href='/static/ui.multiselect.css' type='text/css'>
-    <script src='/static/jquery-1.7.2.min.js'></script>
-    <script src='/static/jquery-ui-1.8.21.custom.min.js'></script>
+    <script src='/static/jquery.min.js'></script>
+    <script src='/static/jquery-ui.min.js'></script>
     <script src='/static/ui.multiselect.js'></script>
     <script src='/static/rdm_tests.js'></script>
     <title>RDM Tests &amp; Publisher</title>
--- /dev/null
+++ ola-0.10.3.nojsmin/tools/rdmpro/LICENCE
@@ -0,0 +1,13 @@
+This program is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU Library General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
--- /dev/null
+++ ola-0.10.3.nojsmin/tools/usbpro/LICENCE
@@ -0,0 +1,13 @@
+This program is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU Library General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
