From 18933308c56a8a4d15d5bed0d74a3a22ed220fd7 Mon Sep 17 00:00:00 2001
From: Chris Hubing <chubing@internet2.edu>
Date: Wed, 4 Apr 2018 02:02:55 +0000
Subject: [PATCH 001/186] Merging grouper_noVM into grouper master

---
 Dockerfile                                    |   200 +-
 Jenkinsfile                                   |   131 +-
 LICENSE                                       |   201 +
 README.md                                     |   284 +-
 common.bash                                   |     3 +-
 container_files/api/log4j.properties          |   144 +
 .../autoexec/onbuild/0_install_java.sh        |    22 -
 container_files/bin/check.sh                  |    15 -
 container_files/bin/cleanup.sh                |    11 -
 container_files/bin/configure.sh              |    33 -
 container_files/bin/main.sh                   |    23 -
 container_files/bin/run.sh                    |     4 -
 container_files/bin/start.sh                  |    69 -
 container_files/bin/tier-bootstrap.gsh        |     8 -
 container_files/etc/MariaDB.repo              |     7 -
 .../etc/grouper.hibernate.pointer.properties  |     8 -
 .../etc/grouper.installer.properties          |    43 -
 container_files/etc/grouper.properties        |     2 -
 container_files/grouper.installer.properties  |    39 +
 container_files/httpd/grouper-www.conf        |    16 +
 container_files/httpd/ssl-enabled.conf        |    28 +
 container_files/shibboleth/attribute-map.xml  |   153 +
 container_files/shibboleth/shibd.logger       |    59 +
 .../tier-support/grouper-ws-scim.xml          |     6 +
 container_files/tier-support/grouper-ws.xml   |     4 +
 container_files/tier-support/grouper.xml      |     4 +
 .../tier-support/supervisord-tomcat.conf      |    39 +
 .../tier-support/supervisord-tomee.conf       |    31 +
 container_files/tomcat/bin/setenv.sh          |     3 +
 container_files/tomcat/conf/log4j2.xml        |    26 +
 container_files/tomcat/conf/server.xml        |   173 +
 container_files/tomcat/conf/tomcat-users.xml  |    46 +
 container_files/tomee/bin/setenv.sh           |     3 +
 container_files/tomee/conf/log4j2.xml         |    26 +
 container_files/tomee/conf/server.xml         |   164 +
 container_files/tomee/conf/tomcat-users.xml   |    51 +
 container_files/ui/classes/log4j.properties   |   144 +
 container_files/ui/web.xml                    |   203 +
 container_files/usr-local-bin/daemon          |     9 +
 container_files/usr-local-bin/gsh             |     9 +
 container_files/usr-local-bin/library.sh      |   100 +
 container_files/usr-local-bin/scim            |     7 +
 container_files/usr-local-bin/ui              |     9 +
 container_files/usr-local-bin/ui-ws           |    10 +
 container_files/usr-local-bin/ws              |     7 +
 container_files/wait-for-it/LICENSE           |    20 -
 container_files/wait-for-it/README.md         |    59 -
 container_files/wait-for-it/wait-for-it.sh    |   161 -
 container_files/ws/classes/log4j.properties   |   144 +
 manualBuild.sh                                |     5 +
 test-compose/README.md                        |    64 +
 test-compose/compose.sh                       |     2 +
 .../grouper/database_password.txt             |     0
 .../grouper/grouper-loader.properties         |    62 +
 .../grouper/grouper.client.properties         |   112 +
 .../grouper}/grouper.hibernate.properties     |    26 +-
 .../grouper/grouper.properties                |    25 +
 .../grouper/rabbitmq_password.txt             |     1 +
 .../grouper/subject.properties                |    75 +
 .../configs-and-secrets/httpd/cachain-cer.pem |     0
 .../configs-and-secrets/httpd/host-cert.pem   |    20 +
 .../configs-and-secrets/httpd/host-key.pem    |    28 +
 .../shibboleth/idp-metadata.xml               |   219 +
 .../shibboleth/shibboleth2.xml                |   136 +
 .../shibboleth/sp-cert.pem                    |    20 +
 .../configs-and-secrets/shibboleth/sp-key.pem |    28 +
 test-compose/daemon/Dockerfile                |     5 +
 test-compose/data/Dockerfile                  |    51 +
 .../conf/grouper.hibernate.properties         |    29 +
 .../container_files/conf/grouper.properties   |    25 +
 .../container_files/conf/subject.properties   |    75 +
 .../container_files/seed-data/bootstrap.gsh   |     3 +
 .../container_files/seed-data/ds-setup.inf    |    28 +
 .../container_files/seed-data/sisData.sql     |  2540 +++
 .../data/container_files/seed-data/users.ldif | 15522 ++++++++++++++++
 test-compose/docker-compose.yml               |   263 +
 test-compose/gsh/Dockerfile                   |     5 +
 test-compose/idp/Dockerfile                   |     5 +
 .../shibboleth-idp/conf/attribute-filter.xml  |    37 +
 .../conf/attribute-resolver.xml               |   293 +
 .../idp/shibboleth-idp/conf/idp.properties    |   195 +
 .../idp/shibboleth-idp/conf/ldap.properties   |    58 +
 .../conf/metadata-providers.xml               |    80 +
 .../credentials/idp-backchannel.crt           |    19 +
 .../credentials/idp-backchannel.p12           |   Bin 0 -> 2500 bytes
 .../credentials/idp-browser.p12               |   Bin 0 -> 2470 bytes
 .../credentials/idp-encryption.crt            |    19 +
 .../credentials/idp-encryption.key            |    27 +
 .../credentials/idp-signing.crt               |    19 +
 .../credentials/idp-signing.key               |    27 +
 .../idp/shibboleth-idp/credentials/sealer.jks |   Bin 0 -> 500 bytes
 .../shibboleth-idp/credentials/sealer.kver    |     2 +
 .../shibboleth-idp/metadata/grouper-sp.xml    |    78 +
 .../shibboleth-idp/metadata/idp-metadata.xml  |   219 +
 test-compose/scim/Dockerfile                  |     8 +
 .../scim/container_files/tomcat-users.xml     |    51 +
 test-compose/scim/container_files/web.xml     |    30 +
 test-compose/ui/Dockerfile                    |     7 +
 .../container_files/shibboleth/shibd.logger   |    69 +
 test-compose/ws/Dockerfile                    |     9 +
 test-compose/ws/container_files/server.xml    |   180 +
 .../ws/container_files/tomcat-users.xml       |    46 +
 test-compose/ws/container_files/web.xml       |   128 +
 103 files changed, 23277 insertions(+), 659 deletions(-)
 create mode 100644 LICENSE
 create mode 100644 container_files/api/log4j.properties
 delete mode 100755 container_files/autoexec/onbuild/0_install_java.sh
 delete mode 100755 container_files/bin/check.sh
 delete mode 100755 container_files/bin/cleanup.sh
 delete mode 100755 container_files/bin/configure.sh
 delete mode 100755 container_files/bin/main.sh
 delete mode 100755 container_files/bin/run.sh
 delete mode 100755 container_files/bin/start.sh
 delete mode 100644 container_files/bin/tier-bootstrap.gsh
 delete mode 100644 container_files/etc/MariaDB.repo
 delete mode 100644 container_files/etc/grouper.hibernate.pointer.properties
 delete mode 100644 container_files/etc/grouper.installer.properties
 delete mode 100644 container_files/etc/grouper.properties
 create mode 100644 container_files/grouper.installer.properties
 create mode 100644 container_files/httpd/grouper-www.conf
 create mode 100644 container_files/httpd/ssl-enabled.conf
 create mode 100644 container_files/shibboleth/attribute-map.xml
 create mode 100644 container_files/shibboleth/shibd.logger
 create mode 100644 container_files/tier-support/grouper-ws-scim.xml
 create mode 100644 container_files/tier-support/grouper-ws.xml
 create mode 100644 container_files/tier-support/grouper.xml
 create mode 100644 container_files/tier-support/supervisord-tomcat.conf
 create mode 100644 container_files/tier-support/supervisord-tomee.conf
 create mode 100755 container_files/tomcat/bin/setenv.sh
 create mode 100644 container_files/tomcat/conf/log4j2.xml
 create mode 100644 container_files/tomcat/conf/server.xml
 create mode 100644 container_files/tomcat/conf/tomcat-users.xml
 create mode 100755 container_files/tomee/bin/setenv.sh
 create mode 100644 container_files/tomee/conf/log4j2.xml
 create mode 100644 container_files/tomee/conf/server.xml
 create mode 100644 container_files/tomee/conf/tomcat-users.xml
 create mode 100644 container_files/ui/classes/log4j.properties
 create mode 100644 container_files/ui/web.xml
 create mode 100755 container_files/usr-local-bin/daemon
 create mode 100755 container_files/usr-local-bin/gsh
 create mode 100644 container_files/usr-local-bin/library.sh
 create mode 100755 container_files/usr-local-bin/scim
 create mode 100755 container_files/usr-local-bin/ui
 create mode 100755 container_files/usr-local-bin/ui-ws
 create mode 100755 container_files/usr-local-bin/ws
 delete mode 100644 container_files/wait-for-it/LICENSE
 delete mode 100644 container_files/wait-for-it/README.md
 delete mode 100755 container_files/wait-for-it/wait-for-it.sh
 create mode 100644 container_files/ws/classes/log4j.properties
 create mode 100755 manualBuild.sh
 create mode 100644 test-compose/README.md
 create mode 100755 test-compose/compose.sh
 create mode 100644 test-compose/configs-and-secrets/grouper/database_password.txt
 create mode 100644 test-compose/configs-and-secrets/grouper/grouper-loader.properties
 create mode 100644 test-compose/configs-and-secrets/grouper/grouper.client.properties
 rename {container_files/etc => test-compose/configs-and-secrets/grouper}/grouper.hibernate.properties (59%)
 create mode 100644 test-compose/configs-and-secrets/grouper/grouper.properties
 create mode 100644 test-compose/configs-and-secrets/grouper/rabbitmq_password.txt
 create mode 100644 test-compose/configs-and-secrets/grouper/subject.properties
 create mode 100644 test-compose/configs-and-secrets/httpd/cachain-cer.pem
 create mode 100644 test-compose/configs-and-secrets/httpd/host-cert.pem
 create mode 100644 test-compose/configs-and-secrets/httpd/host-key.pem
 create mode 100644 test-compose/configs-and-secrets/shibboleth/idp-metadata.xml
 create mode 100644 test-compose/configs-and-secrets/shibboleth/shibboleth2.xml
 create mode 100644 test-compose/configs-and-secrets/shibboleth/sp-cert.pem
 create mode 100644 test-compose/configs-and-secrets/shibboleth/sp-key.pem
 create mode 100644 test-compose/daemon/Dockerfile
 create mode 100644 test-compose/data/Dockerfile
 create mode 100644 test-compose/data/container_files/conf/grouper.hibernate.properties
 create mode 100644 test-compose/data/container_files/conf/grouper.properties
 create mode 100644 test-compose/data/container_files/conf/subject.properties
 create mode 100644 test-compose/data/container_files/seed-data/bootstrap.gsh
 create mode 100644 test-compose/data/container_files/seed-data/ds-setup.inf
 create mode 100644 test-compose/data/container_files/seed-data/sisData.sql
 create mode 100644 test-compose/data/container_files/seed-data/users.ldif
 create mode 100644 test-compose/docker-compose.yml
 create mode 100644 test-compose/gsh/Dockerfile
 create mode 100644 test-compose/idp/Dockerfile
 create mode 100644 test-compose/idp/shibboleth-idp/conf/attribute-filter.xml
 create mode 100644 test-compose/idp/shibboleth-idp/conf/attribute-resolver.xml
 create mode 100644 test-compose/idp/shibboleth-idp/conf/idp.properties
 create mode 100644 test-compose/idp/shibboleth-idp/conf/ldap.properties
 create mode 100644 test-compose/idp/shibboleth-idp/conf/metadata-providers.xml
 create mode 100644 test-compose/idp/shibboleth-idp/credentials/idp-backchannel.crt
 create mode 100644 test-compose/idp/shibboleth-idp/credentials/idp-backchannel.p12
 create mode 100644 test-compose/idp/shibboleth-idp/credentials/idp-browser.p12
 create mode 100644 test-compose/idp/shibboleth-idp/credentials/idp-encryption.crt
 create mode 100644 test-compose/idp/shibboleth-idp/credentials/idp-encryption.key
 create mode 100644 test-compose/idp/shibboleth-idp/credentials/idp-signing.crt
 create mode 100644 test-compose/idp/shibboleth-idp/credentials/idp-signing.key
 create mode 100644 test-compose/idp/shibboleth-idp/credentials/sealer.jks
 create mode 100644 test-compose/idp/shibboleth-idp/credentials/sealer.kver
 create mode 100644 test-compose/idp/shibboleth-idp/metadata/grouper-sp.xml
 create mode 100644 test-compose/idp/shibboleth-idp/metadata/idp-metadata.xml
 create mode 100644 test-compose/scim/Dockerfile
 create mode 100644 test-compose/scim/container_files/tomcat-users.xml
 create mode 100644 test-compose/scim/container_files/web.xml
 create mode 100644 test-compose/ui/Dockerfile
 create mode 100644 test-compose/ui/container_files/shibboleth/shibd.logger
 create mode 100644 test-compose/ws/Dockerfile
 create mode 100644 test-compose/ws/container_files/server.xml
 create mode 100644 test-compose/ws/container_files/tomcat-users.xml
 create mode 100644 test-compose/ws/container_files/web.xml

diff --git a/Dockerfile b/Dockerfile
index 2234186a..f4c63ac8 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -1,73 +1,131 @@
+FROM centos:centos7 as installing
+
+RUN yum update -y \
+    && yum install -y wget tar unzip dos2unix \
+    && yum clean all
+
+ENV GROUPER_VERSION=2.3.0 \
+    JAVA_HOME=/opt/java
+
+RUN java_version=8.0.131; \
+    zulu_version=8.21.0.1; \
+    echo 'Downloading the OpenJDK Zulu...' \
+    && wget -q http://cdn.azul.com/zulu/bin/zulu$zulu_version-jdk$java_version-linux_x64.tar.gz \
+    && echo "1931ed3beedee0b16fb7fd37e069b162  zulu$zulu_version-jdk$java_version-linux_x64.tar.gz" | md5sum -c - \
+    && tar -zxvf zulu$zulu_version-jdk$java_version-linux_x64.tar.gz -C /opt \
+    && ln -s /opt/zulu$zulu_version-jdk$java_version-linux_x64 $JAVA_HOME
+
+#RUN java_version=8u151; \
+#    java_bnumber=12; \
+#    java_semver=1.8.0_151; \
+#    java_hash=123b1d755416aa7579abc03f01ab946e612e141b6f7564130f2ada00ed913f1d; \
+#    echo 'Downloading the Oracle Java...' \ 
+#    && wget --no-check-certificate --no-cookies --header "Cookie: oraclelicense=accept-securebackup-cookie" \
+#    http://download.oracle.com/otn-pub/java/jdk/$java_version-b$java_bnumber/e758a0de34e24606bca991d704f6dcbf/server-jre-$java_version-linux-x64.tar.gz \
+#    && echo "$java_hash  server-jre-$java_version-linux-x64.tar.gz" | sha256sum -c - \
+#    && tar -zxvf server-jre-$java_version-linux-x64.tar.gz -C /opt \
+#    && ln -s /opt/jdk$java_semver/ $JAVA_HOME
+
+RUN echo 'Downloading Grouper Installer...' \
+    && mkdir -p /opt/grouper/$GROUPER_VERSION \
+    && wget -q -O /opt/grouper/$GROUPER_VERSION/grouperInstaller.jar http://software.internet2.edu/grouper/release/$GROUPER_VERSION/grouperInstaller.jar
+
+COPY container_files/grouper.installer.properties /opt/grouper/$GROUPER_VERSION
+
+RUN echo 'Installing Grouper'; \
+    PATH=$PATH:$JAVA_HOME/bin; \
+    cd /opt/grouper/$GROUPER_VERSION/ \
+    && $JAVA_HOME/bin/java -cp :grouperInstaller.jar edu.internet2.middleware.grouperInstaller.GrouperInstaller
+
+
+
+FROM centos:centos7 as cleanup
+
+ENV GROUPER_VERSION=2.3.0 \
+    TOMCAT_VERSION=8.5.12 \    
+    TOMEE_VERSION=7.0.0
+
+COPY --from=installing /opt/grouper/$GROUPER_VERSION/grouperInstaller.jar /opt/grouper/
+COPY --from=installing /opt/grouper/$GROUPER_VERSION/grouper.apiBinary-$GROUPER_VERSION/ /opt/grouper/grouper.apiBinary/
+COPY --from=installing /opt/grouper/$GROUPER_VERSION/grouper.ui-$GROUPER_VERSION/dist/grouper/ /opt/grouper/grouper.ui/
+COPY --from=installing /opt/grouper/$GROUPER_VERSION/grouper.ws-$GROUPER_VERSION/grouper-ws/build/dist/grouper-ws/ /opt/grouper/grouper.ws/
+COPY --from=installing /opt/grouper/$GROUPER_VERSION/grouper.ws-$GROUPER_VERSION/grouper-ws-scim/targetBuiltin/grouper-ws-scim/ /opt/grouper/grouper.scim/
+#COPY --from=installing /opt/grouper/$GROUPER_VERSION/grouper.clientBinary-$GROUPER_VERSION/ /opt/grouper/grouper.clientBinary/
+COPY --from=installing /opt/grouper/$GROUPER_VERSION/apache-tomcat-$TOMCAT_VERSION/ /opt/tomcat/
+COPY --from=installing /opt/grouper/$GROUPER_VERSION/apache-tomee-webprofile-$TOMEE_VERSION/ /opt/tomee/
+
+ADD http://central.maven.org/maven2/org/apache/logging/log4j/log4j-core/2.11.0/log4j-core-2.11.0.jar /opt/tomcat/bin
+ADD http://central.maven.org/maven2/org/apache/logging/log4j/log4j-api/2.11.0/log4j-api-2.11.0.jar /opt/tomcat/bin
+ADD http://central.maven.org/maven2/org/apache/logging/log4j/log4j-jul/2.11.0/log4j-jul-2.11.0.jar /opt/tomcat/bin
+
+ADD http://central.maven.org/maven2/org/apache/logging/log4j/log4j-core/2.11.0/log4j-core-2.11.0.jar /opt/tomee/bin
+ADD http://central.maven.org/maven2/org/apache/logging/log4j/log4j-api/2.11.0/log4j-api-2.11.0.jar /opt/tomee/bin
+ADD http://central.maven.org/maven2/org/apache/logging/log4j/log4j-jul/2.11.0/log4j-jul-2.11.0.jar /opt/tomee/bin
+
+RUN cd /opt/grouper/grouper.apiBinary/; \
+    rm -fr ddlScripts/ grouper.lck grouper.log grouper.script grouper.tmp/ gshAddGrouperSystemWsGroup.gsh logs/
+
+RUN cd /opt/tomcat/; \
+    chmod +r bin/log4j-*.jar; \
+    rm -fr webapps/docs/ webapps/examples/ webapps/host-manager/ webapps/manager/ logs/* temp/* work/* conf/logging.properties
+
+RUN cd /opt/tomee/; \
+    chmod +r bin/log4j-*.jar; \
+    rm -fr webapps/docs/ webapps/host-manager/ webapps/manager/ logs/* temp/* work/* conf/logging.properties
+
+COPY container_files/api/* /opt/grouper/grouper.apiBinary/conf/
+COPY container_files/ui/ /opt/grouper/grouper.ui/WEB-INF/
+COPY container_files/ws/ /opt/grouper/grouper.ws/WEB-INF/
+COPY container_files/tomcat/ /opt/tomcat/
+COPY container_files/tomee/ /opt/tomee/
+
+
 FROM tier/shibboleth_sp
 
-# Define args and set a default value
-ARG maintainer=tier
-ARG imagename=grouper
-ARG version=2.3.0
-ARG tierversion=17070
-
-MAINTAINER $maintainer
-LABEL Vendor="Internet2"
-LABEL ImageType="Base"
-LABEL ImageName=$imagename
-LABEL ImageOS=centos7
-LABEL Version=$version
-
-ENV VERSION=$version
-ENV TIERVERSION=$tierversion
-ENV IMAGENAME=$imagename
-ENV MAINTAINER=$maintainer
-
-ENV TOMCAT_VERSION="8.5.12"
-ENV WAIT_TIME=60
-
-LABEL Build docker build --rm --tag $maintainer/$imagename .
-
-ADD container_files /opt
-ONBUILD ADD additional_container_files /opt
-
-RUN mkdir -p /opt/grouper/$VERSION \
-      && mv /opt/etc/grouper.installer.properties /opt/grouper/$VERSION/. \
-      && mv /opt/etc/MariaDB.repo /etc/yum.repos.d/MariaDB.repo \
-      && curl -o /opt/grouper/$VERSION/grouperInstaller.jar https://software.internet2.edu/grouper/release/$VERSION/grouperInstaller.jar \
-      && yum -y update \
-      && yum -y install --setopt=tsflags=nodocs \
-        dos2unix \
-        MariaDB-client \
-	telnet \
-	emacs  \
-        mlocate \
-      && yum clean all \
-      && /opt/autoexec/bin/onbuild.sh \
-      && rm /opt/grouper/$version/grouper.apiBinary-$version/conf/grouper.hibernate.properties && \
-    cp /opt/etc/grouper.hibernate.pointer.properties /opt/grouper/$version/grouper.apiBinary-$version/conf/grouper.hibernate.properties && \
-      rm /opt/grouper/$version/grouper.ws-$version/grouper-ws/build/dist/grouper-ws/WEB-INF/classes/grouper.hibernate.properties && \
-    cp /opt/etc/grouper.hibernate.pointer.properties /opt/grouper/$version/grouper.ws-$version/grouper-ws/build/dist/grouper-ws/WEB-INF/classes/grouper.hibernate.properties && \
-    rm /opt/grouper/$version/grouper.ui-$version/dist/grouper/WEB-INF/classes/grouper.hibernate.properties && \
-    cp /opt/etc/grouper.hibernate.pointer.properties /opt/grouper/$version/grouper.ui-$version/dist/grouper/WEB-INF/classes/grouper.hibernate.properties && \
-    ln -sf /opt/bin/run.sh /usr/local/bin/run.sh && \
-    updatedb
-
-    #/opt/grouper/2.3.0/grouper.apiBinary-2.3.0/conf/grouper.hibernate.properties
-    
-# Export this variable so that shibd can find it's CURL library
-RUN LD_LIBRARY_PATH="/opt/shibboleth/lib64"
-RUN export LD_LIBRARY_PATH
-	
-# The installer creates a HSQL DB which we ignore later
-
-WORKDIR /opt/grouper/$version
-
-#VOLUME /opt/grouper/2.3.0/apache-tomcat-$TOMCAT_VERSION/logs
-
-EXPOSE 8080 8009 8005 
-
-ADD files/bin/setenv.sh /opt/tier/setenv.sh
-RUN chmod +x /opt/tier/setenv.sh
-ADD files/bin/startup.sh /usr/bin/startup.sh
-RUN chmod +x /usr/bin/startup.sh
-ADD files/bin/sendtierbeacon.sh /usr/bin/sendtierbeacon.sh
-RUN chmod +x /usr/bin/sendtierbeacon.sh
-
-
-CMD ["/usr/bin/startup.sh"]
+LABEL author="tier-packaging@internet2.edu <tier-packaging@internet2.edu>" \
+      Vendor="TIER" \
+      ImageType="Grouper" \
+      ImageName=$imagename \
+      ImageOS=centos7
+
+ENV JAVA_HOME=/opt/java \
+    PATH=$PATH:$JAVA_HOME/bin \
+    GROUPER_HOME=/opt/grouper/grouper.apiBinary
+
+RUN ln -sf /usr/share/zoneinfo/UTC /etc/localtime
+
+RUN yum update -y \
+    && yum install -y cron logrotate python-pip \
+    && pip install --upgrade pip \
+    && pip install supervisor \
+    && yum clean -y all
+
+COPY --from=installing $JAVA_HOME $JAVA_HOME
+COPY --from=cleanup /opt/tomcat/ /opt/tomcat/
+COPY --from=cleanup /opt/tomee/ /opt/tomee/
+COPY --from=cleanup /opt/grouper/ /opt/grouper/
+
+RUN groupadd -r tomcat \
+    && useradd -r -m -s /sbin/nologin -g tomcat tomcat \
+    && mkdir -p /opt/tomcat/logs/ /opt/tomcat/temp/ /opt/tomcat/work/ \
+    && chown -R tomcat:tomcat /opt/tomcat/logs/ /opt/tomcat/temp/ /opt/tomcat/work/ \
+    && chown -R tomcat:tomcat /opt/tomee/logs/ /opt/tomee/temp/ /opt/tomee/work/
+
+COPY container_files/tier-support/ /opt/tier-support/
+COPY container_files/usr-local-bin/ /usr/local/bin/
+COPY container_files/httpd/* /etc/httpd/conf.d/
+COPY container_files/shibboleth/* /etc/shibboleth/
+
+RUN cp /dev/null /etc/httpd/conf.d/ssl.conf \
+    && sed -i 's/LogFormat "/LogFormat "httpd;access_log;%{ENV}e;%{USERTOKEN}e;/g' /etc/httpd/conf/httpd.conf \
+    && echo -e "\nErrorLogFormat \"httpd;error_log;%{ENV}e;%{USERTOKEN}e;[%{u}t] [%-m:%l] [pid %P:tid %T] %7F: %E: [client\ %a] %M% ,\ referer\ %{Referer}i\"" >> /etc/httpd/conf/httpd.conf \
+    && sed -i 's/CustomLog "logs\/access_log"/CustomLog "\/tmp\/logpipe"/g' /etc/httpd/conf/httpd.conf \
+    && sed -i 's/ErrorLog "logs\/error_log"/ErrorLog "\/tmp\/logpipe"/g' /etc/httpd/conf/httpd.conf \
+    && echo -e "\nPassEnv ENV" >> /etc/httpd/conf/httpd.conf \
+    && echo -e "\nPassEnv USERTOKEN" >> /etc/httpd/conf/httpd.conf
+
+WORKDIR /opt/grouper/grouper.apiBinary/
+
+EXPOSE 80 443
+
+CMD ["bin/gsh", "-loader"]
diff --git a/Jenkinsfile b/Jenkinsfile
index dd9c05d3..e9095c52 100644
--- a/Jenkinsfile
+++ b/Jenkinsfile
@@ -1,84 +1,64 @@
-node('docker') {
 
-  stage 'Checkout'
-
-    checkout scm
-
-  stage 'Acquire util'
-
-    sh 'mkdir -p tmp'
-    dir('tmp'){
-      git([ url: "https://github.internet2.edu/docker/util.git",
-          credentialsId: "jenkins-github-access-token" ])
-      sh 'ls'
-      sh 'mv bin/* ../bin/.'
-    }
-  stage 'Environment'
-
-    def maintainer = maintainer()
-    def imagename = imagename()
-    def tag = env.BRANCH_NAME
-
-    // Tag images created on master branch with 'latest'
-    if(env.BRANCH_NAME == "master"){
-      tag = "latest"
-    }else{
-      tag = env.BRANCH_NAME
-    }
-    
-    if(!imagename){
-      echo "You must define an imagename in common.bash"
-      currentBuild.result = 'FAILURE'
+pipeline {
+    agent any
+    environment { 
+        maintainer = "t"
+        imagename = 'g'
+        tag = 'l'
     }
-    if(maintainer){
-      echo "Building ${maintainer}:${tag} for ${maintainer}"
+    stages {
+        stage('Setting build context') {
+            steps {
+                script {
+                    maintainer = maintain()
+                    imagename = imagename()
+                    if(env.BRANCH_NAME == "master") {
+                       tag = "latest"
+                    } else {
+                       tag = env.BRANCH_NAME
+                    }
+                    if(!imagename){
+                        echo "You must define an imagename in common.bash"
+                        currentBuild.result = 'FAILURE'
+                     }
+                } 
+             }
+        }    
+        stage('Build') {
+            steps {
+                echo 'step 2'
+            }
+        } 
+        stage('Push') {
+            steps {
+                script {
+                   docker.withRegistry('https://registry.hub.docker.com/',   "dockerhub-$maintainer") {
+                      def baseImg = docker.build("$maintainer/$imagename")
+                      baseImg.push("$tag")
+                   }
+               }
+            }
+        }
+        stage('Notify') {
+            steps{
+                echo "$maintainer"
+                slackSend color: 'good', message: "$maintainer/$imagename:$tag pushed to DockerHub"
+            }
+        }
     }
-
-  stage 'Build'
-    try{
-      sh 'bin/rebuild.sh >> debug'
-    } catch(error) {
-      def error_details = readFile('./debug');
-      def message = "BUILD ERROR: There was a problem building the Base Image. \n\n ${error_details}"
-      sh "rm -f ./debug"
-      handleError(message)
+    post { 
+        always { 
+            echo 'I will always say Hello again!'
+        }
+        failure {
+            // slackSend color: 'good', message: "Build failed"
+            handleError("BUILD ERROR: There was a problem building ${maintainer}/${imagename}:${tag}.")
+        }
     }
-  stage 'Start container'
-
-    sh 'bin/ci-run.sh'
-
-  stage 'Tests'
-
-    try{
-      sh 'bin/test.sh &> debug'
-    } catch(error) {
-      def error_details = readFile('./debug');
-      def message = "BUILD ERROR: There was a problem testing ${imagename}:${tag}. \n\n ${error_details}"
-      sh "rm -f ./debug"
-      handleError(message)
-    }
-    
-  stage 'Stop container'
-
-    sh 'bin/ci-stop.sh'
-
-  stage 'Push'
-    docker.withRegistry('https://registry.hub.docker.com/',   "dockerhub-$maintainer") {
-          def baseImg = docker.build("$maintainer/$imagename", "--no-cache .")
-          baseImg.push("$tag")
-          // Push to private repo to do security scan on container
-          // baseImg = docker.build("tieradmin/security-scan-$imagename")
-          // baseImg.push("$tag")
-    }
-    
-  stage 'Notify'
-
-    slackSend color: 'good', message: "$maintainer/$imagename:$tag pushed to DockerHub"
-
-
 }
 
-def maintainer() {
+
+def maintain() {
   def matcher = readFile('common.bash') =~ 'maintainer="(.+)"'
   matcher ? matcher[0][1] : 'tier'
 }
@@ -92,5 +72,6 @@ def handleError(String message){
   echo "${message}"
   currentBuild.setResult("FAILED")
   slackSend color: 'danger', message: "${message}"
+  //step([$class: 'Mailer', notifyEveryUnstableBuild: true, recipients: 'chris.bynum@levvel.io', sendToIndividuals: true])
   sh 'exit 1'
 }
diff --git a/LICENSE b/LICENSE
new file mode 100644
index 00000000..8dada3ed
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,201 @@
+                                 Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+   1. Definitions.
+
+      "License" shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
+
+      "Licensor" shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
+
+      "Legal Entity" shall mean the union of the acting entity and all
+      other entities that control, are controlled by, or are under common
+      control with that entity. For the purposes of this definition,
+      "control" means (i) the power, direct or indirect, to cause the
+      direction or management of such entity, whether by contract or
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+      outstanding shares, or (iii) beneficial ownership of such entity.
+
+      "You" (or "Your") shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
+
+      "Source" form shall mean the preferred form for making modifications,
+      including but not limited to software source code, documentation
+      source, and configuration files.
+
+      "Object" form shall mean any form resulting from mechanical
+      transformation or translation of a Source form, including but
+      not limited to compiled object code, generated documentation,
+      and conversions to other media types.
+
+      "Work" shall mean the work of authorship, whether in Source or
+      Object form, made available under the License, as indicated by a
+      copyright notice that is included in or attached to the work
+      (an example is provided in the Appendix below).
+
+      "Derivative Works" shall mean any work, whether in Source or Object
+      form, that is based on (or derived from) the Work and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship. For the purposes
+      of this License, Derivative Works shall not include works that remain
+      separable from, or merely link (or bind by name) to the interfaces of,
+      the Work and Derivative Works thereof.
+
+      "Contribution" shall mean any work of authorship, including
+      the original version of the Work and any modifications or additions
+      to that Work or Derivative Works thereof, that is intentionally
+      submitted to Licensor for inclusion in the Work by the copyright owner
+      or by an individual or Legal Entity authorized to submit on behalf of
+      the copyright owner. For the purposes of this definition, "submitted"
+      means any form of electronic, verbal, or written communication sent
+      to the Licensor or its representatives, including but not limited to
+      communication on electronic mailing lists, source code control systems,
+      and issue tracking systems that are managed by, or on behalf of, the
+      Licensor for the purpose of discussing and improving the Work, but
+      excluding communication that is conspicuously marked or otherwise
+      designated in writing by the copyright owner as "Not a Contribution."
+
+      "Contributor" shall mean Licensor and any individual or Legal Entity
+      on behalf of whom a Contribution has been received by Licensor and
+      subsequently incorporated within the Work.
+
+   2. Grant of Copyright License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      copyright license to reproduce, prepare Derivative Works of,
+      publicly display, publicly perform, sublicense, and distribute the
+      Work and such Derivative Works in Source or Object form.
+
+   3. Grant of Patent License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      (except as stated in this section) patent license to make, have made,
+      use, offer to sell, sell, import, and otherwise transfer the Work,
+      where such license applies only to those patent claims licensable
+      by such Contributor that are necessarily infringed by their
+      Contribution(s) alone or by combination of their Contribution(s)
+      with the Work to which such Contribution(s) was submitted. If You
+      institute patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
+      or a Contribution incorporated within the Work constitutes direct
+      or contributory patent infringement, then any patent licenses
+      granted to You under this License for that Work shall terminate
+      as of the date such litigation is filed.
+
+   4. Redistribution. You may reproduce and distribute copies of the
+      Work or Derivative Works thereof in any medium, with or without
+      modifications, and in Source or Object form, provided that You
+      meet the following conditions:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) You must retain, in the Source form of any Derivative Works
+          that You distribute, all copyright, patent, trademark, and
+          attribution notices from the Source form of the Work,
+          excluding those notices that do not pertain to any part of
+          the Derivative Works; and
+
+      (d) If the Work includes a "NOTICE" text file as part of its
+          distribution, then any Derivative Works that You distribute must
+          include a readable copy of the attribution notices contained
+          within such NOTICE file, excluding those notices that do not
+          pertain to any part of the Derivative Works, in at least one
+          of the following places: within a NOTICE text file distributed
+          as part of the Derivative Works; within the Source form or
+          documentation, if provided along with the Derivative Works; or,
+          within a display generated by the Derivative Works, if and
+          wherever such third-party notices normally appear. The contents
+          of the NOTICE file are for informational purposes only and
+          do not modify the License. You may add Your own attribution
+          notices within Derivative Works that You distribute, alongside
+          or as an addendum to the NOTICE text from the Work, provided
+          that such additional attribution notices cannot be construed
+          as modifying the License.
+
+      You may add Your own copyright statement to Your modifications and
+      may provide additional or different license terms and conditions
+      for use, reproduction, or distribution of Your modifications, or
+      for any such Derivative Works as a whole, provided Your use,
+      reproduction, and distribution of the Work otherwise complies with
+      the conditions stated in this License.
+
+   5. Submission of Contributions. Unless You explicitly state otherwise,
+      any Contribution intentionally submitted for inclusion in the Work
+      by You to the Licensor shall be under the terms and conditions of
+      this License, without any additional terms or conditions.
+      Notwithstanding the above, nothing herein shall supersede or modify
+      the terms of any separate license agreement you may have executed
+      with Licensor regarding such Contributions.
+
+   6. Trademarks. This License does not grant permission to use the trade
+      names, trademarks, service marks, or product names of the Licensor,
+      except as required for reasonable and customary use in describing the
+      origin of the Work and reproducing the content of the NOTICE file.
+
+   7. Disclaimer of Warranty. Unless required by applicable law or
+      agreed to in writing, Licensor provides the Work (and each
+      Contributor provides its Contributions) on an "AS IS" BASIS,
+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+      implied, including, without limitation, any warranties or conditions
+      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+      PARTICULAR PURPOSE. You are solely responsible for determining the
+      appropriateness of using or redistributing the Work and assume any
+      risks associated with Your exercise of permissions under this License.
+
+   8. Limitation of Liability. In no event and under no legal theory,
+      whether in tort (including negligence), contract, or otherwise,
+      unless required by applicable law (such as deliberate and grossly
+      negligent acts) or agreed to in writing, shall any Contributor be
+      liable to You for damages, including any direct, indirect, special,
+      incidental, or consequential damages of any character arising as a
+      result of this License or out of the use or inability to use the
+      Work (including but not limited to damages for loss of goodwill,
+      work stoppage, computer failure or malfunction, or any and all
+      other commercial damages or losses), even if such Contributor
+      has been advised of the possibility of such damages.
+
+   9. Accepting Warranty or Additional Liability. While redistributing
+      the Work or Derivative Works thereof, You may choose to offer,
+      and charge a fee for, acceptance of support, warranty, indemnity,
+      or other liability obligations and/or rights consistent with this
+      License. However, in accepting such obligations, You may act only
+      on Your own behalf and on Your sole responsibility, not on behalf
+      of any other Contributor, and only if You agree to indemnify,
+      defend, and hold each Contributor harmless for any liability
+      incurred by, or claims asserted against, such Contributor by reason
+      of your accepting any such warranty or additional liability.
+
+   END OF TERMS AND CONDITIONS
+
+   APPENDIX: How to apply the Apache License to your work.
+
+      To apply the Apache License to your work, attach the following
+      boilerplate notice, with the fields enclosed by brackets "{}"
+      replaced with your own identifying information. (Don't include
+      the brackets!)  The text should be enclosed in the appropriate
+      comment syntax for the file format. We also recommend that a
+      file or class name and description of purpose be included on the
+      same "printed page" as the copyright notice for easier
+      identification within third-party archives.
+
+   Copyright {yyyy} {name of copyright owner}
+
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
diff --git a/README.md b/README.md
index bc73affb..a45e6bbc 100644
--- a/README.md
+++ b/README.md
@@ -1,5 +1,283 @@
-# Grouper
 
-[![Build Status](https://jenkins.testbed.tier.internet2.edu/job/docker/job/grouper/job/master/badge/icon)](https://jenkins.testbed.tier.internet2.edu/job/docker/job/grouper/job/master/)
+# Supported tags
 
-Produces the container image for Grouper
\ No newline at end of file
+-	latest
+-   patch specific tags* (i.e. 2.3.0-a97-u41-w11-p16)
+
+\* Patch builds are routinely produced, but not necessarily for each patch release. The following monikers are used to construct the tag name:
+ 
+- a = api patch number
+- u = ui patch number
+- w = ws patch number
+- p = pspng patch number
+
+# Quick reference
+
+-	**Where to get help**:  
+    [tier-packaging@internet2.edu](mailto:tier-packaging@internet2.edu?subject=Grouper%20Image%20Help)
+-	**Where to file issues**:  
+	[https://github.internet2.edu/docker/grouper_noVM/issues](https://github.internet2.edu/docker/grouper_noVM/issues)
+
+-	**Maintained by**:  
+	[TIER Packaging Working Group](https://spaces.internet2.edu/display/TPWG)
+
+-	**Supported Docker versions**:  
+	[the latest release](https://github.com/docker/docker-ce/releases/latest) (down to 1.6 on a best-effort basis)
+
+# What is Grouper?
+
+Grouper is an enterprise access management system designed for the highly distributed management environment and heterogeneous information technology environment common to universities. Operating a central access management system that supports both central and distributed IT reduces risk.
+
+> [www.internet2.edu/products-services/trust-identity/grouper/](https://www.internet2.edu/products-services/trust-identity/grouper/)
+
+![logo](https://www.internet2.edu/media/medialibrary/2013/10/15/image_grouper_logowordmark_bw.png)
+
+# How to use this image
+
+This image provides support for each of the Grouper components/roles: Grouper Daemon/Loader, Grouper UI, Grouper Web Services, and Grouper SCIM Server.
+
+## Starting each role
+
+While TIER recommends/supports using Docker Swarm for orchestrating the Grouper environment, these containers can be run directly (or with other orchestration products). Both examples are shown below. It should be noted that these examples will not run independently, but required additional configuration to be provided before each container will start as expected.
+
+### Daemon/Loader
+
+Run the Grouper Daemon/Loader as a service.
+
+```console
+$ docker service create --detach --name grouper-daemon tier/grouper:latest daemon
+```
+
+Run the Grouper Daemon/Loader as a standalone container.
+
+```console
+$ docker run --detach --name grouper-daemon tier/grouper:latest daemon
+```
+
+### SCIM Server
+
+Runs the Grouper SCIM Server as a service.
+
+```console
+$ docker service create --detach --publish 9443:443 --name grouper-ws tier/grouper:latest scim
+```
+
+Runs the Grouper Web Services in a standalone container. 
+
+```console
+$ docker run --detach --publish 9443:443 --name grouper-daemon tier/grouper:latest scim
+```
+
+### UI
+
+Runs the Grouper UI as a service.
+
+```console
+$ docker service create --detach --publish 443:443 --name grouper-ui tier/grouper:latest ui
+```
+
+Runs the Grouper UI in a standalone container.
+
+```console
+$ docker run --detach --name --publish 443:443 grouper-ui tier/grouper:latest ui
+```
+
+### Web Services
+
+Runs the Grouper Web Services as a service. 
+
+```console
+$ docker service create --detach --publish 8443:443 --name grouper-ws tier/grouper:latest ws
+```
+
+Runs the Grouper Web Services in a standalone container. 
+
+```console
+$ docker run --detach --publish 8443:443 --name grouper-daemon tier/grouper:latest ws
+```
+
+### UI and Web Services
+
+> This method is good when first starting to work with Grouper, but when scaling Grouper UI or Web Services it is advisable to use the individual roles noted above.
+
+Runs the Grouper UI and Web Services as a combined service. (You should really run these as individual roles to take advantage of Docker service replicas.) 
+
+```console
+$ docker service create --detach --publish 443:443 --name grouper-web tier/grouper:latest ui-ws
+```
+
+Runs the Grouper UI and Web Services in a combined container. This good when first starting to work with Grouper, but when scaling Grouper UI or Web Services it is advisable to use the individual roles noted above.
+
+```console
+$ docker run --detach --publish 443:443 --name grouper-web tier/grouper:latest ui-ws
+```
+
+### GSH
+
+Runs the Grouper Shell in a throwaway container. This makes it easy to run Grouper commands and Grouper Shell scripts. Since it is interactive it does not run as a service.
+
+```console
+$ docker run -it --rm tier/grouper:latest bin/gsh <optional GSH args>
+```
+
+# Configuration
+
+## Grouper Configurations
+
+There are several things that are required for this image to successfully start. At a minimum, the `grouper.hibernate.properties` and `subject.properties` (or the old `sources.xml` equivalent) files need to be customized and available to the container at start-up. 
+
+Grouper config files maybe placed into `/opt/grouper/conf` and these files will be put into the appropriate location based on the role the container assumes. Docker Secrets starting with the name `grouper_` should take precedence over these files. (See below.)
+
+## Web Apps Configuration
+
+If starting the container to serve the Grouper UI, Grouper Web Services, Grouper SCIM Server components, a TLS key and cert(s) need to be applied to those containers. 
+
+The Grouper UI also requires some basic Shibboleth SP configuration. The `/etc/shibboleth/shibboleth2.xml` file should be modified to set:
+- an entityId for the SP
+- load IdP or federation metadata 
+- set the SP's encryption keys
+- the identity attribute of the subject to be passed to Grouper
+
+If encryption keys are defined in the `shibboleth2.xml` file, then the key/cert files should be provided as well. The `attribute-map.xml` file has most of the common identity attributes pre-configured, but it (and other Shibboleth SP files) can be overlaid/replaced as necessary. 
+
+## General Configuration Mechanism
+
+There are three primary ways to provide Grouper and additional configuration files to the container: Docker Config/Secrets, customized images, and bind mounts. Depending upon your needs you may use a combination of two or three of these options.
+
+### Secrets/Configs
+
+Docker Config and Docker Secrets are Docker's way of providing configurations files to a container at runtime. The primary difference between the Config and Secrets functionality is that Secrets is designed to protect resources/files that are sensitive.
+
+For passing full files into the container, this container will make any secrets with secret names prepended with `grouper_` available to the appropriate Grouper component's conf directory (i.e. `<GROUPER_HOME>/conf` or `WEB-INF/classes`). Any secrets with secret names starting with `shib_` will be available in the Shibboleth SP `/etc/shibboleth/` directory. Any secrets with secret names starting with `httpd_` will be available to `/etc/httpd/conf.d` directory. Finally, if a secret with the name of `host-key.pem` will be mapped to the httpd TLS cert used by Grouper UI, Grouper WS, and Grouper SCIM Server containers. These files will supercede any found in the underlying image.
+
+Docker Secrets can also be used to pass in strings, such as a database connection string password, into the component config. To pass in the Grouper database connection string, one might set the property and value as such:
+
+```text
+hibernate.connection.password.elConfig = ${java.lang.System.getenv().get('GROUPER_DATABASE_PASSWORD_FILE') != null ? org.apache.commons.io.FileUtils.readFileToString(java.lang.System.getenv().get('GROUPER_DATABASE_PASSWORD_FILE'), "utf-8") : java.lang.System.getenv().get('GROUPER_DATABASE_PASSWORD') }
+```
+
+Note that the default property name has been changed by appending `.elConfig`. (This causes Grouper to evaluate the string before saving the value.) The expression allows deployers to use a file containing only the database password as a Docker Secret and reference the file name via the `GROUPER_DATABASE_PASSWORD_FILE` environment property. This allows the config files to be baked into the image, if desired. Also, but not recommended, the database password could just be set in the Docker Service definition as an environment variable, `GROUPER_DATABASE_PASSWORD`. (Technically the expression can be broken up and just the desired functionality used.) Of course, using Grouper's MorphString functionality is supported and likely is the best option, but does require more effort in setting it up.
+
+Secrets can be managed using the `docker secret` command: `docker secret create grouper_grouper.hibernate.properties ./grouper.hibernate.properties`. This will securely store the file in the swarm. Secrets can then be assigned to the service `docker service create -d --name daemon --secret grouper_grouper.hibernate.properties --secret grouper_sources.xml tier/grouper daemon`.
+
+> `docker run` does not support secrets; Bind mounts need to be used instead, which is technically what Docker Compose does when not running against a Swarm.
+
+### Bind Mounts
+
+Bind mounts can be used to connect files/folders on the Docker host into the container's file system. Unless running in swarm mode, Docker Secrets are not supported, so we can use a bind mount to provide the container with the configuration files.
+
+```console
+$ docker run --detach --name daemon \
+  --mount type=bind,src=$(pwd)/grouper.hibernate.properties,dst=/run/secrets/grouper_grouper.hibernate.properties \
+  --mount type=bind,src=$(pwd)/sources.xml,dst=/run/secrets/grouper_sources.xml \
+  tier/grouper daemon
+```
+
+### Customized Images
+
+Deployers will undoubtedly want to add in their files to the container. Things like additional jar files defining Grouper Hooks, or things like images and css files. This can be accomplished by building custom images. **Deployers should NOT use this method to store sensitive configuration files.**
+
+To add a favicon to the Grouper UI, we use the tier/grouper images as a base and `COPY` our local `favicon.ico` into the image. While we are at it, we define this image as a UI image by specifying the default commnd (i.e `CMD`) of `ui`.
+
+```Dockerfile
+FROM tier/grouper:latest
+
+COPY favicon.ico /opt/grouper/grouper.ui/
+
+CMD ui
+```
+
+To build our image:
+
+```console
+$ docker build --tag=org/grouper-ui .
+```
+
+This image can now be used locally or pushed to an organization's Docker repository.
+
+
+## Environment Variables
+
+Deployers can set runtime variables to both the Grouper Shell and Loader/Daemon and to Tomcat/Tomcat EE using environment variables. These can be set using the `docker run` and `docker service creates`'s `--env` paramater.
+
+### Grouper Shell/Loader
+
+The following environment variables are used by the Grouper Shell/Loader: 
+- MEM_START: corresponds to the java's `-Xms`.
+- MEM_MAX: corresponds to java's `-Xmx`.
+
+### Tomcat/TomEE
+
+Amongst others variables defined in the `catalina.sh`, the following variables would like be useful for deployers:
+- CATALINA_OPTS: Java runtime options to only be used by Tomcat itself.
+
+# File System Endpoints
+
+Here is a list of significant directories and files that deployers should be aware of:
+
+- `/opt/grouper/conf/`: a common directory to place non-sensitive config files that will be placed into the appropriate location for each Grouper component at container start-up.
+- `/opt/grouper/lib/`: a common directory to place additional jar files that will be placed into the appropriate location for each Grouper component at container start-up.
+- `/opt/grouper/grouper.apiBinary/`: location to overlay Grouper GSH or Daemon/Loader files.
+`/opt/grouper/grouper.scim/`: location for overlaying Grouper SCIM Server web application files (expanded `grouper-ws-scim.war`).
+- `/opt/grouper/grouper.ui/`: location for overlaying Grouper UI web application files (expanded `grouper.war`).
+- `/opt/grouper/grouper.ws/`: location for overlaying Grouper Web Services web application files (expanded `grouper-ws.war`).
+- `/etc/httpd/conf.d/ssl-enabled.conf`: Can be overlaid to change the TLS settings when running Grouper UI or Web Servicse.
+- `/etc/shibboleth/`: location to overlay the Shibboleth SP configuration files used by the image.
+- `/opt/tomcat/`: used to run Grouper UI and Grouper WS
+- `/opt/tomee/`: used to run the Grouper SCIM Server.
+- `/var/run/secrets`: location where Docker Secrets are mounted into the container. Secrets starting with `grouper_`, `shib_`, and `httpd_` have special meaning. See `Secrets/Configs` above.
+
+To examine baseline image files, one might run `docker run --name=temp -it tier/grouper bash` and browse through these file system endpoints. While the container is running one may copy files out of the image/container using something like `docker cp containerId:/opt/grouper/grouper.api/conf/grouper.properties .`, which will copy the `grouper.properties` to the Docker client's present working directory. These files can then be edited and applied via the mechanisms outlined above.
+
+# Web Application Endpoints
+
+Here is a list of significant web endpoints that deployers should be aware of:
+
+- `/grouper/`: location of the Grouper UI application
+- `grouper-ws/`: location of the Grouper WS application.
+- `/grouper-ws-scim/`: location of the Grouper SCIM Server application.
+
+The endpoint that is available is dependent upon the role of the container.
+
+# Provisioning a Grouper Database
+
+Using standard methods, create a MariaDb Server and an empty Grouper database. Create a database user with privileges to create and populate schema objects. Set the appropriate database connection properties in `grouper.hibernate.properties`. Be sure to the user created with schema manipulation privileges as the db user.
+
+Next populate the database by using the following command.
+
+```console
+$ docker run -it --rm \
+  --mount type=bind,src=$(pwd)/grouper.hibernate.properties,dst=/run/secrets/grouper_grouper.hibernate.properties \
+  tier/grouper gsh -registry -check -runscript -noprompt
+```
+
+Note: a less privileged database user maybe used when running the typical Grouper roles. This user needs SELECT, INSERT, UPDATE, and DELETE privileges on the schema objects.
+
+# Logging
+
+This image outputs logs in a manner that is consistent with Docker Logging. Each log entry is prefaced with the submodule name (e.g. shibd, httpd, tomcat, grouper), the logfile name (e.g. access_log, grouper_error.log, catalina.out) and user definable environment name and a user definable token. Content found after the preface will be specific to the application ands its logging configuration.
+
+> Note: If customizing a particular component's logging, it is recommended that the file be source from the image (`docker container cp`) or from the image's source repository. 
+
+To assign the "environment" string, set the environment variable `ENV` when defining the Docker service. For the "user defined token" string, use the environment variable of `USERTOKEN`.
+
+An example might look like the following, with the env of "dev" and the usertoken of "build-2"
+
+```text
+shibd shibd.log dev build-2 2018-03-27 20:42:22 INFO Shibboleth.Listener : listener service starting
+grouper-api grouper_event.log dev build-2 2018-03-27 21:10:00,046: [DefaultQuartzScheduler_Worker-1] INFO  EventLog.info(156) -  - [fdbb0099fe9e46e5be4371eb11250d39,'GrouperSystem','application'] session: start (0ms)
+tomcat console dev build-2 Grouper starting up: version: 2.3.0, build date: null, env: <no label configured>
+``` 
+
+# Misc Notes
+
+- [HTTP Strict Transport Security (HSTS)](https://en.wikipedia.org/wiki/HTTP_Strict_Transport_Security) is enabled on the Apache HTTP Server.
+- morphStrings functionality in Grouper is supported. It is recommended that the various morphString files be associated with the containers as Docker Secrets. Set the configuration file properties to use `/var/run/secrets/secretname`.
+- Grouper UI has been pre-configured to authenticate users via Shibboleth SP. 
+- By default, Grouper WS (hosted by `/opt/tomcat/`) and the Grouper SCIM Server (hosted by `/opt/tomee/`) use tomcat-users.xml for authentication, but by default no users are enabled. LDAP-backed authentication or other methods can be used and must be configured by the deployer.
+
+# License
+
+View [license information](https://www.apache.org/licenses/LICENSE-2.0) for the software contained in this image.
+
+As with all Docker images, these likely also contain other software which may be under other licenses (such as Bash, etc from the base distribution, along with any direct or indirect dependencies of the primary software being contained).
diff --git a/common.bash b/common.bash
index abf5debf..78a82611 100644
--- a/common.bash
+++ b/common.bash
@@ -1,3 +1,2 @@
 maintainer="tier"
-imagename="grouper"
-version="2.3.0"
+imagename="grouper-multi-purpose"
diff --git a/container_files/api/log4j.properties b/container_files/api/log4j.properties
new file mode 100644
index 00000000..9b9c5d4e
--- /dev/null
+++ b/container_files/api/log4j.properties
@@ -0,0 +1,144 @@
+
+#
+# Copyright 2014 Internet2
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+#${grouper.home} will be substituted with the System property "grouper.home", which must have a trailing \ or / 
+# depending on your OS. Of course you can use absolute paths if you prefer 
+
+
+#
+# log4j Configuration
+# $Id: log4j.example.properties,v 1.13 2009-12-18 13:56:51 tzeller Exp $
+#
+
+# Appenders
+
+## Grouper API event logging
+log4j.appender.grouper_event                            = org.apache.log4j.FileAppender
+log4j.appender.grouper_event.file                       = /tmp/logpipe
+log4j.appender.grouper_event.append                     = true
+log4j.appender.grouper_event.layout                     = org.apache.log4j.PatternLayout
+log4j.appender.grouper_event.layout.ConversionPattern   = grouper-api;grouper_event.log;${ENV};${USERTOKEN};%d{ISO8601}: [%t] %-5p %C{1}.%M(%L) - %x - %m%n
+
+## Grouper API error logging
+log4j.appender.grouper_error                            = org.apache.log4j.FileAppender
+log4j.appender.grouper_error.file                       = /tmp/logpipe
+log4j.appender.grouper_errot.append                     = true
+log4j.appender.grouper_error.layout                     = org.apache.log4j.PatternLayout
+log4j.appender.grouper_error.layout.ConversionPattern   = grouper-api;grouper_error.log;${ENV};${USERTOKEN};%d{ISO8601}: [%t] %-5p %C{1}.%M(%L) - %x - %m%n
+#log4j.appender.grouper_error.layout.ConversionPattern   = %d{ISO8601}: %m%n
+
+# Debug logging (Or: logging that I haven't cleaned up yet to send elsewhere)
+log4j.appender.grouper_debug                            = org.apache.log4j.FileAppender
+log4j.appender.grouper_debug.file                       = /tmp/logpipe
+log4j.appender.grouper_debug.append                     = true
+log4j.appender.grouper_debug.layout                     = org.apache.log4j.PatternLayout
+#log4j.appender.grouper_debug.layout.ConversionPattern   = %d{ISO8601} %5p %c{2}: %m%n
+log4j.appender.grouper_debug.layout.ConversionPattern   = grouper-api;grouper_debug.log;${ENV};${USERTOKEN};%d{ISO8601}: [%t] %-5p %C{1}.%M(%L) - %x - %m%n
+
+## Benchmark logging
+log4j.appender.grouper_gb                               = org.apache.log4j.FileAppender
+log4j.appender.grouper_gb.file                          = /tmp/logpipe
+log4j.appender.grouper_gb.append                        = true
+log4j.appender.grouper_gb.layout                        = org.apache.log4j.PatternLayout
+#log4j.appender.grouper_gb.layout.ConversionPattern      = %d{ISO8601} %5p %c{2}: %m%n
+log4j.appender.grouper_gb.layout.ConversionPattern      = grouper-api;grouper_bench.log;${ENV};${USERTOKEN};%d{ISO8601}: [%t] %-5p %C{1}.%M(%L) - %x - %m%n
+
+# Loggers
+
+## Default logger; will log *everything*
+log4j.rootLogger  = ERROR, grouper_error
+
+## All Internet2 (warn to grouper_error per default logger)
+log4j.logger.edu.internet2.middleware = WARN
+
+
+# Provisioning : PSP (version 2.1+)
+log4j.logger.edu.internet2.middleware.psp = INFO
+
+# Provisioning : vt-ldap
+# log4j.logger.edu.vt.middleware.ldap = INFO
+
+# Provisioning : Grouper plugin to Shibboleth attribute resolver
+# log4j.logger.edu.internet2.middleware.grouper.shibboleth = INFO
+
+
+# For more precise (or verbose) logging, enable one or more of the
+# following logging directives.  To remove duplicate entries, just change the 
+# level, and not where to send the logs
+# http://robertmarkbramprogrammer.blogspot.com/2007/06/log4j-duplicate-lines-in-output.html
+
+## Grouper Event Logging
+## * Logs at _info_ only
+log4j.logger.edu.internet2.middleware.grouper.log.EventLog        = INFO, grouper_event
+log4j.logger.edu.internet2.middleware.grouper.RegistryInstall = INFO, grouper_event
+
+## Grouper Error Logging
+## * Logs at _warn_, _fatal_ and _error_ only (by default this is WARN due to internet2 below)
+#log4j.logger.edu.internet2.middleware.grouper              = WARN, grouper_error
+
+## Grouper Debug Logging
+## * NOTE: There is currently VERY LITTLE (useful) information sent to this.
+## * Logs at _info_ only currently
+#log4j.logger.edu.internet2.middleware.grouper              = INFO, grouper_debug
+
+## Grouper XML Export + Import Logging
+## TODO Integrate with normal logging
+log4j.logger.edu.internet2.middleware.grouper.xml.XmlExporter           = INFO, grouper_event
+log4j.logger.edu.internet2.middleware.grouper.xml.XmlImporter           = INFO, grouper_event
+
+## Grouper Benchmark Logging
+log4j.logger.edu.internet2.middleware.grouper.bench                 = INFO, grouper_gb
+
+## Grouper script to add missing group sets
+log4j.logger.edu.internet2.middleware.grouper.misc.AddMissingGroupSets   = INFO, grouper_event
+
+## Grouper Sync Point in Time Tables
+log4j.logger.edu.internet2.middleware.grouper.misc.SyncPITTables   = INFO, grouper_event
+
+## Grouper Sync Stem Set Table
+log4j.logger.edu.internet2.middleware.grouper.misc.SyncStemSets      = INFO, grouper_event
+
+## Grouper Migrate Legacy Attributes
+log4j.logger.edu.internet2.middleware.grouper.misc.MigrateLegacyAttributes = INFO, grouper_event
+
+### Subject API
+#log4j.logger.edu.internet2.middleware.subject                       = ERROR, grouper_error
+#log4j.logger.edu.internet2.middleware.subject.provider              = ERROR, grouper_error
+### Hibernate 
+#log4j.logger.org.hibernate                                          = ERROR, grouper_error
+### ehcache
+#log4j.logger.net.sf.ehcache                                         = ERROR, grouper_error
+### Spring
+#log4j.logger.org.springframework                                    = ERROR, grouper_error
+
+## Grouper Stress Testing
+log4j.logger.edu.internet2.middleware.grouper.stress                = INFO, grouper_debug
+
+
+#######################################################
+##Optional settings for debug logs
+#######################################################
+
+## Hooks debug info
+#log4j.logger.edu.internet2.middleware.grouper.hooks.examples.GroupTypeTupleIncludeExcludeHook = DEBUG
+#log4j.logger.edu.internet2.middleware.grouper.Group = DEBUG
+
+#log4j.logger.edu.internet2.middleware.grouper.hooks.examples.GroupTypeSecurityHook = DEBUG
+
+
+# added by grouper-installer
+log4j.logger.org.apache.tools.ant = WARN
diff --git a/container_files/autoexec/onbuild/0_install_java.sh b/container_files/autoexec/onbuild/0_install_java.sh
deleted file mode 100755
index a0609edc..00000000
--- a/container_files/autoexec/onbuild/0_install_java.sh
+++ /dev/null
@@ -1,22 +0,0 @@
-#!/bin/bash
-
-# Override this file with a version with the following commented out in order to use Oracle JDK.
-
-# Uncomment all the following lines to download the JDK to your Shibboleth IDP image.  By uncommenting these lines, you agree to the Oracle Binary Code License Agreement for Java SE (http://www.oracle.com/technetwork/java/javase/terms/license/index.html)
-
-#JAVA_VERSION=8u101
-#BUILD_VERSION b13
-#JAVA_HOME /usr/java/latest
-
-#wget -nv --no-cookies --no-check-certificate --header "Cookie: oraclelicense=accept-securebackup-cookie" "http://download.oracle.com/otn-pub/java/jdk/$JAVA_VERSION-$BUILD_VERSION/jdk-$JAVA_VERSION-linux-x64.rpm" -O /tmp/jdk-8-linux-x64.rpm && \
-#    yum -y install /tmp/jdk-8-linux-x64.rpm && \
-#    rm -f /tmp/jdk-8-linux-x64.rpm && \
-#    alternatives --install /usr/bin/java jar $JAVA_HOME/bin/java 200000 && \
-#    alternatives --install /usr/bin/javaws javaws $JAVA_HOME/bin/javaws 200000 && \
-#    alternatives --install /usr/bin/javac javac $JAVA_HOME/bin/javac 200000
-
-yum -y install --setopt=tsflags=nodocs \
-  java-1.8.0-openjdk \
-  java-1.8.0-openjdk-devel
-
-cd /opt/grouper/$VERSION && java -cp :grouperInstaller.jar edu.internet2.middleware.grouperInstaller.GrouperInstaller
\ No newline at end of file
diff --git a/container_files/bin/check.sh b/container_files/bin/check.sh
deleted file mode 100755
index 77b79c88..00000000
--- a/container_files/bin/check.sh
+++ /dev/null
@@ -1,15 +0,0 @@
-#!/bin/bash
-
-log="/tmp/grouper-check.log"
-date >> $log
-echo "Installing schema" >> $log
-cd /opt/grouper/2.3.0/grouper.apiBinary-2.3.0 && GROUPER_HOME=/opt/grouper/2.3.0/grouper.apiBinary-2.3.0 bin/gsh.sh -registry -drop -runscript -noprompt >> $log
-
-echo "Preparing subjects" >> $log
-cd /opt/grouper/2.3.0/grouper.apiBinary-2.3.0 && GROUPER_HOME=/opt/grouper/2.3.0/grouper.apiBinary-2.3.0 bin/gsh.sh -registry -runsqlfile /opt/grouper/2.3.0/subjects.sql -noprompt >> $log
-
-echo "Adding Quickstart data" >> $log
-cd /opt/grouper/2.3.0/grouper.apiBinary-2.3.0 && GROUPER_HOME=/opt/grouper/2.3.0/grouper.apiBinary-2.3.0 bin/gsh.sh -xmlimportold GrouperSystem /opt/grouper/2.3.0/quickstart.xml -noprompt >> $log
-
-echo "Checking" >> $log
-cd /opt/grouper/2.3.0/grouper.apiBinary-2.3.0 && GROUPER_HOME=/opt/grouper/2.3.0/grouper.apiBinary-2.3.0 bin/gsh.sh -registry -check --noprompt >> $log
diff --git a/container_files/bin/cleanup.sh b/container_files/bin/cleanup.sh
deleted file mode 100755
index 8a9bcb47..00000000
--- a/container_files/bin/cleanup.sh
+++ /dev/null
@@ -1,11 +0,0 @@
-#!/bin/bash
-
-log="/tmp/grouper-cleanup.log"
-date >> $log
-if [ -z ${COMPOSE+x} ];then
-echo "Not composed so not waiting for MariaDB and first time running was ok: " >> $log
-rm -f /tmp/firsttimerunning >> $log
-else
-echo "Composed with MariaDB, running completed" >> $log
-rm -f /tmp/firsttimerunning >> $log
-fi
diff --git a/container_files/bin/configure.sh b/container_files/bin/configure.sh
deleted file mode 100755
index d49841be..00000000
--- a/container_files/bin/configure.sh
+++ /dev/null
@@ -1,33 +0,0 @@
-#!/bin/bash
-
-log="/tmp/grouper-configure.log"
-date >> $log
-#sed -i "s|#GROUPER_SYSTEM_PASSWORD#|$GROUPER_SYSTEM_PASSWORD|g" /opt/etc/grouper.installer.properties >> $log
-
-# Long-lived configuration values, these are symlinked into place
-
-sed -i "s|#MYSQL_HOST#|$MYSQL_HOST|g" /opt/etc/grouper.hibernate.properties >> $log
-
-sed -i "s|#MYSQL_USER#|$MYSQL_USER|g" /opt/etc/grouper.hibernate.properties >> $log
-
-sed -i "s|#MYSQL_PASSWORD#|$MYSQL_PASSWORD|g" /opt/etc/grouper.hibernate.properties >> $log
-
-sed -i "s|#MYSQL_DATABASE#|$MYSQL_DATABASE|g" /opt/etc/grouper.hibernate.properties >> $log
-
-# Transient DB whitelist capability for when schema changes are needed
-
-sed -i "s|#MYSQL_HOST#|$MYSQL_HOST|g" /opt/etc/grouper.properties >> $log
-
-sed -i "s|#MYSQL_USER#|$MYSQL_USER|g" /opt/etc/grouper.properties >> $log
-
-sed -i "s|#MYSQL_DATABASE#|$MYSQL_DATABASE|g" /opt/etc/grouper.properties >> $log
-
-cat /opt/etc/grouper.hibernate.properties >> $log
-
-cat /opt/etc/grouper.properties >> $log
-
-#Configure gsh loader
-sed -i "1s|^|\n |" /opt/grouper/$VERSION/grouper.apiBinary-$VERSION/bin/gsh >> $log
-sed -i "1s|^|PWD=/opt/grouper/$VERSION/grouper.apiBinary-$VERSION/bin/ |" /opt/grouper/$VERSION/grouper.apiBinary-$VERSION/bin/gsh >> $log
-sed -i "1s|^|\n |" /opt/grouper/$VERSION/grouper.apiBinary-$VERSION/bin/gsh >> $log
-sed -i "1s|^|GROUPER_HOME=/opt/grouper/$VERSION/grouper.apiBinary-$VERSION/bin/ |" /opt/grouper/$VERSION/grouper.apiBinary-$VERSION/bin/gsh  >> $log
diff --git a/container_files/bin/main.sh b/container_files/bin/main.sh
deleted file mode 100755
index e8c6178c..00000000
--- a/container_files/bin/main.sh
+++ /dev/null
@@ -1,23 +0,0 @@
-#!/bin/bash -x
-
-log="/tmp/start-main.log"
-
-echo "Starting Container: " > $log
-date >> $log
-echo "" >> $log
-
-if [ -e "/tmp/firsttimerunning" ]; then
-
-    set -e
-    
-    /opt/bin/configure.sh >> $log
-
-    /opt/bin/check.sh >> $log
-
-    /opt/bin/cleanup.sh >> $log
- 
-else
-    echo "Grouper container has run." >> $log
-    echo "If there are problems, docker rm this container and try again." >> $log
-fi
-#exit 0
diff --git a/container_files/bin/run.sh b/container_files/bin/run.sh
deleted file mode 100755
index e686a456..00000000
--- a/container_files/bin/run.sh
+++ /dev/null
@@ -1,4 +0,0 @@
-#!/bin/bash
-while true; do
-sleep 1800
-done
diff --git a/container_files/bin/start.sh b/container_files/bin/start.sh
deleted file mode 100755
index 031228a6..00000000
--- a/container_files/bin/start.sh
+++ /dev/null
@@ -1,69 +0,0 @@
-#!/bin/bash
-
-log="/tmp/start-starting.log"
-date >> $log
-if [ -z ${COMPOSE+x} ]
-then
-  echo "Not composed so not waiting for MariaDB: " > $log
-  /opt/bin/main.sh
-  laststatus="$?"
-  echo "Not composed status: $laststatus"
-  if [ "$laststatus" != "0" ]; then
-      echo "Not composed non-zero exit status: $laststatus" >> $log
-      echo "Not composed non-zero exit status: $laststatus"
-      /opt/autoexec/bin/firstrun.sh
-      exit 1
-  else
-      echo "Grouper was configured" >>$log
-      echo "Grouper was configured"
-      echo "Starting tomcat and apache" >>$log
-      echo "Starting tomcat and apache"
-      /opt/autoexec/bin/firstrun.sh
-      echo "Adding TIER folder structure" >>$log
-      echo "Adding TIER folder structure"
-      /opt/grouper/$VERSION/grouper.apiBinary-$VERSION/bin/gsh /opt/bin/tier-bootstrap.gsh
-      /usr/local/bin/httpd-shib-foreground &
-      /opt/grouper/2.3.0/apache-tomcat-$TOMCAT_VERSION/bin/catalina.sh run &
-      /opt/grouper/$VERSION/grouper.apiBinary-$VERSION/bin/gsh -loader &
-      /usr/local/bin/run.sh
-  fi
-else
-  echo "Composed so waiting for MariaDB: " > $log
-  date >> $log
-  echo "Testing connectivy to database before continue with install"
-  mysql -u $MYSQL_USER -p$MYSQL_PASSWORD -h "$MYSQL_HOST" -e "use grouper; show tables;"
-  laststatus="$?"
-  echo "checking connectivity" >> $log
-  while [ "$laststatus" != "0" ]; do
-  mysql -u $MYSQL_USER -p$MYSQL_PASSWORD -h "$MYSQL_HOST" -e "use grouper; show tables;"
-  laststatus="$?"
-  sleep 5
-  date >> $log
-  echo "Trying to connect to mariadb container with $MYSQL_USER to database $MYSQL_DATABASE"
-  echo "Trying to connect to mariadb container with $MYSQL_USER to database $MYSQL_DATABASE" >> $log
-  done
-  /opt/bin/main.sh
-  laststatus="$?"
-  echo "Composed status: $laststatus"
-  echo "Composed status: $laststatus" >>$log
-  if [ "$laststatus" != "0" ]; then
-      echo "Composed non-zero exit status: $laststatus" >> $log
-      echo "Composed non-zero exit status: $laststatus"
-      /opt/autoexec/bin/firstrun.sh
-      exit 1
-  else
-      echo "Grouper was configured" >>$log
-      echo "Grouper was configured"
-      echo "Starting tomcat and apache" >>$log
-      echo "Starting tomcat and apache"
-      /opt/autoexec/bin/firstrun.sh
-      echo "Adding TIER folder structure" >>$log
-      echo "Adding TIER folder structure"
-      /opt/grouper/$VERSION/grouper.apiBinary-$VERSION/bin/gsh /opt/bin/tier-bootstrap.gsh
-      date >> $log
-      /usr/local/bin/httpd-shib-foreground &
-      /opt/grouper/2.3.0/apache-tomcat-$TOMCAT_VERSION/bin/catalina.sh run &
-      /opt/grouper/$VERSION/grouper.apiBinary-$VERSION/bin/gsh -loader &
-      /usr/local/bin/run.sh
-  fi
-fi
diff --git a/container_files/bin/tier-bootstrap.gsh b/container_files/bin/tier-bootstrap.gsh
deleted file mode 100644
index c6a4d703..00000000
--- a/container_files/bin/tier-bootstrap.gsh
+++ /dev/null
@@ -1,8 +0,0 @@
-gs = GrouperSession.startRootSession()
-
-addRootStem("app","app");
-addRootStem("basis","basis");
-addRootStem("bundle","bundle");
-addRootStem("org","org");
-addRootStem("ref","ref");
-addRootStem("test","test");
diff --git a/container_files/etc/MariaDB.repo b/container_files/etc/MariaDB.repo
deleted file mode 100644
index 96b9e1b6..00000000
--- a/container_files/etc/MariaDB.repo
+++ /dev/null
@@ -1,7 +0,0 @@
-# MariaDB 5.5 CentOS repository list - created 2016-08-25 14:03 UTC
-# http://downloads.mariadb.org/mariadb/repositories/
-[mariadb]
-name = MariaDB
-baseurl = http://yum.mariadb.org/5.5/centos7-amd64
-gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
-gpgcheck=1
\ No newline at end of file
diff --git a/container_files/etc/grouper.hibernate.pointer.properties b/container_files/etc/grouper.hibernate.pointer.properties
deleted file mode 100644
index 03acad51..00000000
--- a/container_files/etc/grouper.hibernate.pointer.properties
+++ /dev/null
@@ -1,8 +0,0 @@
-########################################
-## Config chaining hierarchy
-########################################
- 
-# comma separated config files that override each other (files on the right override the left)
-# each should start with file: or classpath:
-# e.g. classpath:grouper.hibernate.base.properties, file:c:/temp/myFile.properties
-grouper.hibernate.config.hierarchy = classpath:grouper.hibernate.base.properties, file:/opt/etc/grouper.hibernate.properties
\ No newline at end of file
diff --git a/container_files/etc/grouper.installer.properties b/container_files/etc/grouper.installer.properties
deleted file mode 100644
index 1c028c3b..00000000
--- a/container_files/etc/grouper.installer.properties
+++ /dev/null
@@ -1,43 +0,0 @@
-# this should be before the version number
-download.server.url = https://software.internet2.edu/grouper
-# default version to install
-grouper.version = 2.3.0
-# print out autorun keys in prompts so you can easily see how to configure the autorun
-grouperInstaller.print.autorunKeys = true
-# default to install or upgrade (default is install)
-grouperInstaller.default.installOrUpgrade = install
-# where to get grouper source from, the variable $BRANCH_NAME$ will be substituted for the branch
-download.source.url = https://github.com/Internet2/grouper/archive/$BRANCH_NAME$.zip
-# where to get grouper psp source from, the variable $BRANCH_NAME$ will be substituted for the branch
-download.pspSource.url = https://github.com/Internet2/grouper-psp/archive/$BRANCH_NAME$.zip
-##############################
-## Autorun properties
-##
-## If you uncomment one of these properties it will be used as empty, only uncomment to use
-##
-##############################
-
-#### set this to true to try to use defaults for everything.  Only things without default values will need to be set
-grouperInstaller.autorun.useDefaultsAsMuchAsAvailable = true
-########## AUTORUN PROPERTIES WITH NO DEFAULT OR ARE COMMONLY CHANGED
-## Note: not all of them need to be filled out for all operations
-# autorun grouper system password (its not secure to have a plain text pass in a config file)
-grouperInstaller.autorun.grouperSystemPassword = XXXXXXXXXX
-# autorun Enter the database URL
-grouperInstaller.autorun.dbUrl = jdbc:mysql://localhost:3306/grouper
-# autorun database user
-grouperInstaller.autorun.dbUser = grouper
-# autorun database pass (note, it is not good security to have plaintext passwords in text config files)
-grouperInstaller.autorun.dbPass = XXXXXXXXXX
-# autorun Do you want to init the database (delete all existing grouper tables, add new ones) (t|f)?
-grouperInstaller.autorun.deleteAndInitDatabase = t
-
-# [jvf] The 'fake' run-through of 
-# While running the installer, we don't have access to the database
-#grouperInstaller.autorun.deleteAndInitDatabase = f
-
-# While running the installer, we don't have access to the database
-#grouperInstaller.autorun.addQuickstartSubjectsToDb = f
-
-# grouperInstaller.autorun.addQuickstartData = f
- 
diff --git a/container_files/etc/grouper.properties b/container_files/etc/grouper.properties
deleted file mode 100644
index 83133353..00000000
--- a/container_files/etc/grouper.properties
+++ /dev/null
@@ -1,2 +0,0 @@
-db.change.allow.user.0=#MYSQL_USER#
-db.change.allow.url.0=jdbc:mysql://#MYSQL_HOST#:3306/#MYSQL_DATABASE#
\ No newline at end of file
diff --git a/container_files/grouper.installer.properties b/container_files/grouper.installer.properties
new file mode 100644
index 00000000..2705ef0d
--- /dev/null
+++ b/container_files/grouper.installer.properties
@@ -0,0 +1,39 @@
+# this should be before the version number
+download.server.url = https://software.internet2.edu/grouper
+# default version to install
+grouper.version = 2.3.0
+# print out autorun keys in prompts so you can easily see how to configure the autorun
+grouperInstaller.print.autorunKeys = true
+# default to install or upgrade (default is install)
+grouperInstaller.default.installOrUpgrade = install
+
+##############################
+## Autorun properties
+##
+## If you uncomment one of these properties it will be used as empty, only uncomment to use
+##
+##############################
+
+grouperInstaller.autorun.installAllPatches = false
+grouperInstaller.autorun.installPatchesUpToACertainPatchLevel = true
+grouperInstaller.autorun.installPatchesUpToThesePatchLevels = grouper_v2_3_0_api_patch_99,grouper_v2_3_0_ui_patch_42,grouper_v2_3_0_ws_patch_11,grouper_v2_3_0_pspng_patch_16
+
+#### set this to true to try to use defaults for everything.  Only things without default values will need to be set
+grouperInstaller.autorun.useDefaultsAsMuchAsAvailable = true
+########## AUTORUN PROPERTIES WITH NO DEFAULT OR ARE COMMONLY CHANGED
+## Note: not all of them need to be filled out for all operations
+# autorun grouper system password (its not secure to have a plain text pass in a config file)
+grouperInstaller.autorun.grouperSystemPassword = XXXXXXXXXX
+
+grouperInstaller.autorun.deleteAndInitDatabase = t
+grouperInstaller.autorun.addQuickstartData = f
+grouperInstaller.autorun.installClient = f
+ 
+grouperInstaller.autorun.installGrouperActiveMqMessaging = t
+grouperInstaller.autorun.activeMqWhereInstalled = /opt/grouper/2.3.0/grouper.apiBinary-2.3.0/
+
+grouperInstaller.autorun.installGrouperAwsSqsMessaging = t
+grouperInstaller.autorun.AwsSqsWhereInstalled = /opt/grouper/2.3.0/grouper.apiBinary-2.3.0/
+
+grouperInstaller.autorun.installGrouperRabbitMqMessaging = t
+grouperInstaller.autorun.rabbitMqWhereInstalled = /opt/grouper/2.3.0/grouper.apiBinary-2.3.0/
diff --git a/container_files/httpd/grouper-www.conf b/container_files/httpd/grouper-www.conf
new file mode 100644
index 00000000..368f7f6c
--- /dev/null
+++ b/container_files/httpd/grouper-www.conf
@@ -0,0 +1,16 @@
+
+Timeout 2400
+ProxyTimeout 2400
+ProxyBadHeader Ignore
+
+ProxyPass /grouper ajp://localhost:8009/grouper  timeout=2400
+ProxyPass /grouper-ws ajp://localhost:8009/grouper-ws  timeout=2400
+ProxyPass /grouper-ws-scim ajp://localhost:8009/grouper-ws-scim  timeout=2400
+
+<Location /grouper>
+  AuthType shibboleth
+  ShibRequestSetting requireSession 1
+  ShibRequireSession on
+  ShibUseHeaders On
+  require shibboleth
+</Location>
diff --git a/container_files/httpd/ssl-enabled.conf b/container_files/httpd/ssl-enabled.conf
new file mode 100644
index 00000000..00d75a44
--- /dev/null
+++ b/container_files/httpd/ssl-enabled.conf
@@ -0,0 +1,28 @@
+# modern configuration, tweak to your needs
+SSLProtocol             all -SSLv3 -TLSv1 -TLSv1.1
+SSLCipherSuite          ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256
+SSLHonorCipherOrder     on
+SSLCompression          off
+
+# OCSP Stapling, only in httpd 2.3.3 and later
+SSLUseStapling          on
+SSLStaplingResponderTimeout 5
+SSLStaplingReturnResponderErrors off
+SSLStaplingCache        shmcb:/var/run/ocsp(128000)
+
+Listen 443 https
+<VirtualHost *:443>
+  RewriteEngine on
+  RewriteRule   "^/$"  "/grouper/"  [R]
+  
+  SSLEngine on
+  SSLCertificateChainFile /etc/pki/tls/certs/cachain.pem
+
+  SSLCertificateFile /etc/pki/tls/certs/host-cert.pem
+
+  SSLCertificateKeyFile /etc/pki/tls/private/host-key.pem
+
+  # HSTS (mod_headers is required) (15768000 seconds = 6 months)
+  Header always set Strict-Transport-Security "max-age=15768000"
+</VirtualHost>
+
diff --git a/container_files/shibboleth/attribute-map.xml b/container_files/shibboleth/attribute-map.xml
new file mode 100644
index 00000000..a6725f3e
--- /dev/null
+++ b/container_files/shibboleth/attribute-map.xml
@@ -0,0 +1,153 @@
+<Attributes xmlns="urn:mace:shibboleth:2.0:attribute-map" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+
+    <!--
+    The mappings are a mix of SAML 1.1 and SAML 2.0 attribute names agreed to within the Shibboleth
+    community. The non-OID URNs are SAML 1.1 names and most of the OIDs are SAML 2.0 names, with a
+    few exceptions for newer attributes where the name is the same for both versions. You will
+    usually want to uncomment or map the names for both SAML versions as a unit.
+    -->
+    
+    <!-- First some useful eduPerson attributes that many sites might use. -->
+
+    <Attribute name="urn:oid:1.3.6.1.4.1.5923.1.1.1.6" id="eppn">
+        <AttributeDecoder xsi:type="ScopedAttributeDecoder"/>
+    </Attribute>
+    <Attribute name="urn:mace:dir:attribute-def:eduPersonPrincipalName" id="eppn">
+        <AttributeDecoder xsi:type="ScopedAttributeDecoder"/>
+    </Attribute>
+
+    <Attribute name="urn:oid:1.3.6.1.4.1.5923.1.1.1.9" id="affiliation">
+        <AttributeDecoder xsi:type="ScopedAttributeDecoder" caseSensitive="false"/>
+    </Attribute>
+    <Attribute name="urn:mace:dir:attribute-def:eduPersonScopedAffiliation" id="affiliation">
+        <AttributeDecoder xsi:type="ScopedAttributeDecoder" caseSensitive="false"/>
+    </Attribute>
+
+    <Attribute name="urn:oid:1.3.6.1.4.1.5923.1.1.1.1" id="unscoped-affiliation">
+        <AttributeDecoder xsi:type="StringAttributeDecoder" caseSensitive="false"/>
+    </Attribute>
+    <Attribute name="urn:mace:dir:attribute-def:eduPersonAffiliation" id="unscoped-affiliation">
+        <AttributeDecoder xsi:type="StringAttributeDecoder" caseSensitive="false"/>
+    </Attribute>
+
+    <Attribute name="urn:oid:1.3.6.1.4.1.5923.1.1.1.7" id="entitlement"/>
+    <Attribute name="urn:mace:dir:attribute-def:eduPersonEntitlement" id="entitlement"/>
+
+    <!-- A persistent id attribute that supports personalized anonymous access. -->
+    
+    <!-- First, the deprecated/incorrect version, decoded as a scoped string: -->
+    <Attribute name="urn:mace:dir:attribute-def:eduPersonTargetedID" id="targeted-id">
+        <AttributeDecoder xsi:type="ScopedAttributeDecoder"/>
+        <!-- <AttributeDecoder xsi:type="NameIDFromScopedAttributeDecoder" formatter="$NameQualifier!$SPNameQualifier!$Name" defaultQualifiers="true"/> -->
+    </Attribute>
+    
+    <!-- Second, an alternate decoder that will decode the incorrect form into the newer form. -->
+    <!--
+    <Attribute name="urn:mace:dir:attribute-def:eduPersonTargetedID" id="persistent-id">
+        <AttributeDecoder xsi:type="NameIDFromScopedAttributeDecoder" formatter="$NameQualifier!$SPNameQualifier!$Name" defaultQualifiers="true"/>
+    </Attribute>
+    -->
+    
+    <!-- Third, the new version (note the OID-style name): -->
+    <Attribute name="urn:oid:1.3.6.1.4.1.5923.1.1.1.10" id="persistent-id">
+        <AttributeDecoder xsi:type="NameIDAttributeDecoder" formatter="$NameQualifier!$SPNameQualifier!$Name" defaultQualifiers="true"/>
+    </Attribute>
+
+    <!-- Fourth, the SAML 2.0 NameID Format: -->
+    <Attribute name="urn:oasis:names:tc:SAML:2.0:nameid-format:persistent" id="persistent-id">
+        <AttributeDecoder xsi:type="NameIDAttributeDecoder" formatter="$NameQualifier!$SPNameQualifier!$Name" defaultQualifiers="true"/>
+    </Attribute>
+    
+    <!-- Some more eduPerson attributes, uncomment these to use them... -->
+    <!--
+    <Attribute name="urn:oid:1.3.6.1.4.1.5923.1.1.1.11" id="assurance"/>
+    
+    <Attribute name="urn:oid:1.3.6.1.4.1.5923.1.5.1.1" id="member"/>
+    
+    <Attribute name="urn:oid:1.3.6.1.4.1.5923.1.6.1.1" id="eduCourseOffering"/>
+    <Attribute name="urn:oid:1.3.6.1.4.1.5923.1.6.1.2" id="eduCourseMember"/>
+
+    <Attribute name="urn:oid:1.3.6.1.4.1.5923.1.1.1.5" id="primary-affiliation">
+        <AttributeDecoder xsi:type="StringAttributeDecoder" caseSensitive="false"/>
+    </Attribute>
+    <Attribute name="urn:oid:1.3.6.1.4.1.5923.1.1.1.2" id="nickname"/>
+    <Attribute name="urn:oid:1.3.6.1.4.1.5923.1.1.1.8" id="primary-orgunit-dn"/>
+    <Attribute name="urn:oid:1.3.6.1.4.1.5923.1.1.1.4" id="orgunit-dn"/>
+    <Attribute name="urn:oid:1.3.6.1.4.1.5923.1.1.1.3" id="org-dn"/>
+
+    <Attribute name="urn:mace:dir:attribute-def:eduPersonPrimaryAffiliation" id="primary-affiliation">
+        <AttributeDecoder xsi:type="StringAttributeDecoder" caseSensitive="false"/>
+    </Attribute>
+    <Attribute name="urn:mace:dir:attribute-def:eduPersonNickname" id="nickname"/>
+    <Attribute name="urn:mace:dir:attribute-def:eduPersonPrimaryOrgUnitDN" id="primary-orgunit-dn"/>
+    <Attribute name="urn:mace:dir:attribute-def:eduPersonOrgUnitDN" id="orgunit-dn"/>
+    <Attribute name="urn:mace:dir:attribute-def:eduPersonOrgDN" id="org-dn"/>
+    -->
+
+    <!-- SCHAC attributes, uncomment to use... -->
+    <!--
+    <Attribute name="urn:oid:1.3.6.1.4.1.25178.1.2.9" id="schacHomeOrganization"/>
+    -->
+    
+    <!-- Examples of LDAP-based attributes, uncomment to use these... -->
+    <!--
+    <Attribute name="urn:oid:2.5.4.3" id="cn"/>
+    <Attribute name="urn:oid:2.5.4.4" id="sn"/>
+    <Attribute name="urn:oid:2.5.4.42" id="givenName"/>
+    <Attribute name="urn:oid:2.16.840.1.113730.3.1.241" id="displayName"/>
+    -->
+    <Attribute name="urn:oid:0.9.2342.19200300.100.1.1" id="uid"/>
+    <Attribute name="urn:oid:0.9.2342.19200300.100.1.3" id="mail"/>
+    <!--
+    <Attribute name="urn:oid:2.5.4.20" id="telephoneNumber"/>
+    <Attribute name="urn:oid:2.5.4.12" id="title"/>
+    <Attribute name="urn:oid:2.5.4.43" id="initials"/>
+    <Attribute name="urn:oid:2.5.4.13" id="description"/>
+    <Attribute name="urn:oid:2.16.840.1.113730.3.1.1" id="carLicense"/>
+    <Attribute name="urn:oid:2.16.840.1.113730.3.1.2" id="departmentNumber"/>
+    <Attribute name="urn:oid:2.16.840.1.113730.3.1.3" id="employeeNumber"/>
+    <Attribute name="urn:oid:2.16.840.1.113730.3.1.4" id="employeeType"/>
+    <Attribute name="urn:oid:2.16.840.1.113730.3.1.39" id="preferredLanguage"/>
+    <Attribute name="urn:oid:0.9.2342.19200300.100.1.10" id="manager"/>
+    <Attribute name="urn:oid:2.5.4.34" id="seeAlso"/>
+    <Attribute name="urn:oid:2.5.4.23" id="facsimileTelephoneNumber"/>
+    <Attribute name="urn:oid:2.5.4.9" id="street"/>
+    <Attribute name="urn:oid:2.5.4.18" id="postOfficeBox"/>
+    <Attribute name="urn:oid:2.5.4.17" id="postalCode"/>
+    <Attribute name="urn:oid:2.5.4.8" id="st"/>
+    <Attribute name="urn:oid:2.5.4.7" id="l"/>
+    <Attribute name="urn:oid:2.5.4.10" id="o"/>
+    <Attribute name="urn:oid:2.5.4.11" id="ou"/>
+    <Attribute name="urn:oid:2.5.4.15" id="businessCategory"/>
+    <Attribute name="urn:oid:2.5.4.19" id="physicalDeliveryOfficeName"/>
+
+    <Attribute name="urn:mace:dir:attribute-def:cn" id="cn"/>
+    <Attribute name="urn:mace:dir:attribute-def:sn" id="sn"/>
+    <Attribute name="urn:mace:dir:attribute-def:givenName" id="givenName"/>
+    <Attribute name="urn:mace:dir:attribute-def:displayName" id="displayName"/>
+    <Attribute name="urn:mace:dir:attribute-def:uid" id="uid"/>
+    <Attribute name="urn:mace:dir:attribute-def:mail" id="mail"/>
+    <Attribute name="urn:mace:dir:attribute-def:telephoneNumber" id="telephoneNumber"/>
+    <Attribute name="urn:mace:dir:attribute-def:title" id="title"/>
+    <Attribute name="urn:mace:dir:attribute-def:initials" id="initials"/>
+    <Attribute name="urn:mace:dir:attribute-def:description" id="description"/>
+    <Attribute name="urn:mace:dir:attribute-def:carLicense" id="carLicense"/>
+    <Attribute name="urn:mace:dir:attribute-def:departmentNumber" id="departmentNumber"/>
+    <Attribute name="urn:mace:dir:attribute-def:employeeNumber" id="employeeNumber"/>
+    <Attribute name="urn:mace:dir:attribute-def:employeeType" id="employeeType"/>
+    <Attribute name="urn:mace:dir:attribute-def:preferredLanguage" id="preferredLanguage"/>
+    <Attribute name="urn:mace:dir:attribute-def:manager" id="manager"/>
+    <Attribute name="urn:mace:dir:attribute-def:seeAlso" id="seeAlso"/>
+    <Attribute name="urn:mace:dir:attribute-def:facsimileTelephoneNumber" id="facsimileTelephoneNumber"/>
+    <Attribute name="urn:mace:dir:attribute-def:street" id="street"/>
+    <Attribute name="urn:mace:dir:attribute-def:postOfficeBox" id="postOfficeBox"/>
+    <Attribute name="urn:mace:dir:attribute-def:postalCode" id="postalCode"/>
+    <Attribute name="urn:mace:dir:attribute-def:st" id="st"/>
+    <Attribute name="urn:mace:dir:attribute-def:l" id="l"/>
+    <Attribute name="urn:mace:dir:attribute-def:o" id="o"/>
+    <Attribute name="urn:mace:dir:attribute-def:ou" id="ou"/>
+    <Attribute name="urn:mace:dir:attribute-def:businessCategory" id="businessCategory"/>
+    <Attribute name="urn:mace:dir:attribute-def:physicalDeliveryOfficeName" id="physicalDeliveryOfficeName"/>
+    -->
+
+</Attributes>
diff --git a/container_files/shibboleth/shibd.logger b/container_files/shibboleth/shibd.logger
new file mode 100644
index 00000000..c5685b29
--- /dev/null
+++ b/container_files/shibboleth/shibd.logger
@@ -0,0 +1,59 @@
+# set overall behavior
+log4j.rootCategory=INFO, shibd_log
+
+# fairly verbose for DEBUG, so generally leave at INFO
+log4j.category.XMLTooling.XMLObject=INFO
+log4j.category.XMLTooling.KeyInfoResolver=INFO
+log4j.category.Shibboleth.IPRange=INFO
+log4j.category.Shibboleth.PropertySet=INFO
+
+# raise for low-level tracing of SOAP client HTTP/SSL behavior
+log4j.category.XMLTooling.libcurl=INFO
+
+# useful categories to tune independently:
+#
+# tracing of SAML messages and security policies
+#log4j.category.OpenSAML.MessageDecoder=DEBUG
+#log4j.category.OpenSAML.MessageEncoder=DEBUG
+#log4j.category.OpenSAML.SecurityPolicyRule=DEBUG
+#log4j.category.XMLTooling.SOAPClient=DEBUG
+# interprocess message remoting
+#log4j.category.Shibboleth.Listener=DEBUG
+# mapping of requests to applicationId
+#log4j.category.Shibboleth.RequestMapper=DEBUG
+# high level session cache operations
+#log4j.category.Shibboleth.SessionCache=DEBUG
+# persistent storage and caching
+#log4j.category.XMLTooling.StorageService=DEBUG
+
+# logs XML being signed or verified if set to DEBUG
+log4j.category.XMLTooling.Signature.Debugger=INFO, sig_log
+log4j.additivity.XMLTooling.Signature.Debugger=false
+
+# the tran log blocks the "default" appender(s) at runtime
+# Level should be left at INFO for this category
+log4j.category.Shibboleth-TRANSACTION=INFO, tran_log
+log4j.additivity.Shibboleth-TRANSACTION=false
+# uncomment to suppress particular event types
+#log4j.category.Shibboleth-TRANSACTION.AuthnRequest=WARN
+#log4j.category.Shibboleth-TRANSACTION.Login=WARN
+#log4j.category.Shibboleth-TRANSACTION.Logout=WARN
+
+# define the appenders
+
+log4j.appender.shibd_log=org.apache.log4j.FileAppender
+log4j.appender.shibd_log.fileName=/tmp/logpipe
+log4j.appender.shibd_log.maxFileSize=0
+log4j.appender.shibd_log.layout=org.apache.log4j.PatternLayout
+log4j.appender.shibd_log.layout.ConversionPattern=shibd;shibd.log;${ENV};${USERTOKEN};%d{%Y-%m-%d %H:%M:%S} %p %c %x: %m%n
+
+log4j.appender.tran_log=org.apache.log4j.FileAppender
+log4j.appender.tran_log.fileName=/tmp/logpipe
+log4j.appender.tran_log.maxFileSize=0
+log4j.appender.tran_log.layout=org.apache.log4j.PatternLayout
+log4j.appender.tran_log.layout.ConversionPattern=shibd;transaction.log;${ENV};${USERTOKEN};%d{%Y-%m-%d %H:%M:%S} %p %c %x: %m%n
+
+log4j.appender.sig_log=org.apache.log4j.FileAppender
+log4j.appender.sig_log.fileName=/tmp/logpipe
+log4j.appender.sig_log.layout=org.apache.log4j.PatternLayout
+log4j.appender.sig_log.layout.ConversionPattern=shibd;signature.log;${ENV};${USERTOKEN};%m
diff --git a/container_files/tier-support/grouper-ws-scim.xml b/container_files/tier-support/grouper-ws-scim.xml
new file mode 100644
index 00000000..bb15b17a
--- /dev/null
+++ b/container_files/tier-support/grouper-ws-scim.xml
@@ -0,0 +1,6 @@
+<Context docBase="/opt/grouper/grouper.scim/" path="/grouper-ws-scim" reloadable="false">
+    <!-- Allow our symlinks to work-->
+    <Resources allowLinking="true" />
+</Context>
+
+
diff --git a/container_files/tier-support/grouper-ws.xml b/container_files/tier-support/grouper-ws.xml
new file mode 100644
index 00000000..b9aa6478
--- /dev/null
+++ b/container_files/tier-support/grouper-ws.xml
@@ -0,0 +1,4 @@
+<Context docBase="/opt/grouper/grouper.ws/" path="/grouper-ws" reloadable="false">
+    <!-- Allow our symlinks to work-->
+    <Resources allowLinking="true" />
+</Context>
diff --git a/container_files/tier-support/grouper.xml b/container_files/tier-support/grouper.xml
new file mode 100644
index 00000000..22cfbd8a
--- /dev/null
+++ b/container_files/tier-support/grouper.xml
@@ -0,0 +1,4 @@
+<Context docBase="/opt/grouper/grouper.ui/" path="/grouper" reloadable="false">
+    <!-- Allow our symlinks to work-->
+    <Resources allowLinking="true" />
+</Context>
diff --git a/container_files/tier-support/supervisord-tomcat.conf b/container_files/tier-support/supervisord-tomcat.conf
new file mode 100644
index 00000000..30631e41
--- /dev/null
+++ b/container_files/tier-support/supervisord-tomcat.conf
@@ -0,0 +1,39 @@
+[supervisord]
+logfile=/tmp/logsuperd                              ; supervisord log file
+logfile_maxbytes=0                           ; maximum size of logfile before rotation
+loglevel=error                                  ; info, debug, warn, trace
+nodaemon=true                                  ; run supervisord as a daemon
+user=root                                       ; default user
+
+[rpcinterface:supervisor]
+supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface
+
+[supervisorctl]
+serverurl=unix:///tmp/supervisor.sock         ; use a unix:// URL  for a unix socket
+
+; Our processes
+; writing output to stdout (1) and err (2) (for Docker logging) and disabling log rotation
+
+[program:httpd]
+command=httpd -DFOREGROUND
+stderr_logfile = /tmp/loghttpd
+stderr_logfile_maxbytes=0
+stdout_logfile = /tmp/loghttpd
+stdout_logfile_maxbytes=0
+
+[program:shibbolethsp]
+user=shibd
+command=/usr/sbin/shibd -f -F
+stderr_logfile = /tmp/logshidb
+stderr_logfile_maxbytes=0
+stdout_logfile = /tmp/logshidb
+stdout_logfile_maxbytes=0
+
+[program:tomcat]
+user=tomcat
+command=/opt/tomcat/bin/catalina.sh run 
+stderr_logfile = /tmp/logtomcat
+stderr_logfile_maxbytes=0
+stdout_logfile = /tmp/logtomcat
+stdout_logfile_maxbytes=0
+
diff --git a/container_files/tier-support/supervisord-tomee.conf b/container_files/tier-support/supervisord-tomee.conf
new file mode 100644
index 00000000..35e19488
--- /dev/null
+++ b/container_files/tier-support/supervisord-tomee.conf
@@ -0,0 +1,31 @@
+[supervisord]
+logfile=/tmp/logsuperd                               ; supervisord log file
+logfile_maxbytes=0                           ; maximum size of logfile before rotation
+loglevel=error                                  ; info, debug, warn, trace
+nodaemon=true                                  ; run supervisord as a daemon
+user=root                                       ; default user
+
+[rpcinterface:supervisor]
+supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface
+
+[supervisorctl]
+serverurl=unix:///tmp/supervisor.sock         ; use a unix:// URL  for a unix socket
+
+; Our processes
+; writing output to stdout (1) and err (2) (for Docker logging) and disabling log rotation
+
+[program:httpd]
+command=httpd -DFOREGROUND
+stderr_logfile = /tmp/loghttpd
+stderr_logfile_maxbytes=0
+stdout_logfile = /tmp/loghttpd
+stdout_logfile_maxbytes=0
+
+[program:tomee]
+user=tomcat
+command=/opt/tomee/bin/catalina.sh run 
+stderr_logfile = /tmp/logtomcat
+stderr_logfile_maxbytes=0
+stdout_logfile = /tmp/logtomcat
+stdout_logfile_maxbytes=0
+
diff --git a/container_files/tomcat/bin/setenv.sh b/container_files/tomcat/bin/setenv.sh
new file mode 100755
index 00000000..c6130b5c
--- /dev/null
+++ b/container_files/tomcat/bin/setenv.sh
@@ -0,0 +1,3 @@
+CLASSPATH=/opt/tomcat/bin/*
+JAVA_OPTS="-Dlog4j.configurationFile=/opt/tomcat/conf/log4j2.xml -DENV=$ENV -DUSERTOKEN=$USERTOKEN"
+LOGGING_MANAGER=-Djava.util.logging.manager=org.apache.logging.log4j.jul.LogManager
\ No newline at end of file
diff --git a/container_files/tomcat/conf/log4j2.xml b/container_files/tomcat/conf/log4j2.xml
new file mode 100644
index 00000000..673de68c
--- /dev/null
+++ b/container_files/tomcat/conf/log4j2.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Configuration status="info">
+    <Properties>
+        <Property name="layout">%d [%t] %-5p %c- %m%n</Property>
+    </Properties>
+    <Appenders>
+        <File name="CATALINA"
+                     fileName="/tmp/logpipe">
+            <PatternLayout pattern="tomcat;catalina.out;${env:ENV};${env:USERTOKEN};${layout}"/>
+        </File>
+        <File name="LOCALHOST"
+                     fileName="/tmp/logpipe">
+            <PatternLayout pattern="tomcat;localhost.log;${env:ENV};${env:USERTOKEN};${layout}"/>
+        </File>
+
+    </Appenders>
+    <Loggers>
+        <Root level="info">
+            <AppenderRef ref="CATALINA"/>
+        </Root>
+        <Logger name="org.apache.catalina.core.ContainerBase.[Catalina].[localhost]"
+                level="info" additivity="false">
+            <AppenderRef ref="LOCALHOST"/>
+        </Logger>
+    </Loggers>
+</Configuration>
\ No newline at end of file
diff --git a/container_files/tomcat/conf/server.xml b/container_files/tomcat/conf/server.xml
new file mode 100644
index 00000000..9610fc7d
--- /dev/null
+++ b/container_files/tomcat/conf/server.xml
@@ -0,0 +1,173 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one or more
+  contributor license agreements.  See the NOTICE file distributed with
+  this work for additional information regarding copyright ownership.
+  The ASF licenses this file to You under the Apache License, Version 2.0
+  (the "License"); you may not use this file except in compliance with
+  the License.  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+-->
+<!-- Note:  A "Server" is not itself a "Container", so you may not
+     define subcomponents such as "Valves" at this level.
+     Documentation at /docs/config/server.html
+ -->
+<Server port="8005" shutdown="SHUTDOWN">
+  <Listener className="org.apache.catalina.startup.VersionLoggerListener" />
+  <!-- Security listener. Documentation at /docs/config/listeners.html
+  <Listener className="org.apache.catalina.security.SecurityListener" />
+  -->
+  <!--APR library loader. Documentation at /docs/apr.html -->
+  <Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />
+  <!-- Prevent memory leaks due to use of particular java/javax APIs-->
+  <Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />
+  <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />
+  <Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" />
+
+  <!-- Global JNDI resources
+       Documentation at /docs/jndi-resources-howto.html
+  -->
+  <GlobalNamingResources>
+    <!-- Editable user database that can also be used by
+         UserDatabaseRealm to authenticate users
+    -->
+<!--
+    <Resource name="UserDatabase" auth="Container"
+              type="org.apache.catalina.UserDatabase"
+              description="User database that can be updated and saved"
+              factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
+              pathname="conf/tomcat-users.xml" />
+-->
+  </GlobalNamingResources>
+
+  <!-- A "Service" is a collection of one or more "Connectors" that share
+       a single "Container" Note:  A "Service" is not itself a "Container",
+       so you may not define subcomponents such as "Valves" at this level.
+       Documentation at /docs/config/service.html
+   -->
+  <Service name="Catalina">
+
+    <!--The connectors can use a shared executor, you can define one or more named thread pools-->
+    <!--
+    <Executor name="tomcatThreadPool" namePrefix="catalina-exec-"
+        maxThreads="150" minSpareThreads="4"/>
+    -->
+
+
+    <!-- A "Connector" represents an endpoint by which requests are received
+         and responses are returned. Documentation at :
+         Java HTTP Connector: /docs/config/http.html
+         Java AJP  Connector: /docs/config/ajp.html
+         APR (HTTP/AJP) Connector: /docs/apr.html
+         Define a non-SSL/TLS HTTP/1.1 Connector on port 8080
+    -->
+    <Connector port="8080" protocol="HTTP/1.1" URIEncoding="UTF-8"
+               connectionTimeout="20000"
+               redirectPort="8443" />
+    <!-- A "Connector" using the shared thread pool-->
+    <!--
+    <Connector executor="tomcatThreadPool"
+               port="8080" protocol="HTTP/1.1"
+               connectionTimeout="20000"
+               redirectPort="8443" />
+    -->
+    <!-- Define a SSL/TLS HTTP/1.1 Connector on port 8443
+         This connector uses the NIO implementation. The default
+         SSLImplementation will depend on the presence of the APR/native
+         library and the useOpenSSL attribute of the
+         AprLifecycleListener.
+         Either JSSE or OpenSSL style configuration may be used regardless of
+         the SSLImplementation selected. JSSE style configuration is used below.
+    -->
+    <!--
+    <Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
+               maxThreads="150" SSLEnabled="true">
+        <SSLHostConfig>
+            <Certificate certificateKeystoreFile="conf/localhost-rsa.jks"
+                         type="RSA" />
+        </SSLHostConfig>
+    </Connector>
+    -->
+    <!-- Define a SSL/TLS HTTP/1.1 Connector on port 8443 with HTTP/2
+         This connector uses the APR/native implementation which always uses
+         OpenSSL for TLS.
+         Either JSSE or OpenSSL style configuration may be used. OpenSSL style
+         configuration is used below.
+    -->
+    <!--
+    <Connector port="8443" protocol="org.apache.coyote.http11.Http11AprProtocol"
+               maxThreads="150" SSLEnabled="true" >
+        <UpgradeProtocol className="org.apache.coyote.http2.Http2Protocol" />
+        <SSLHostConfig>
+            <Certificate certificateKeyFile="conf/localhost-rsa-key.pem"
+                         certificateFile="conf/localhost-rsa-cert.pem"
+                         certificateChainFile="conf/localhost-rsa-chain.pem"
+                         type="RSA" />
+        </SSLHostConfig>
+    </Connector>
+    -->
+
+    <!-- Define an AJP 1.3 Connector on port 8009 -->
+    <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" tomcatAuthentication="false" URIEncoding="UTF-8" />
+
+
+    <!-- An Engine represents the entry point (within Catalina) that processes
+         every request.  The Engine implementation for Tomcat stand alone
+         analyzes the HTTP headers included with the request, and passes them
+         on to the appropriate Host (virtual host).
+         Documentation at /docs/config/engine.html -->
+
+    <!-- You should set jvmRoute to support load-balancing via AJP ie :
+    <Engine name="Catalina" defaultHost="localhost" jvmRoute="jvm1">
+    -->
+    <Engine name="Catalina" defaultHost="localhost">
+
+      <!--For clustering, please take a look at documentation at:
+          /docs/cluster-howto.html  (simple how to)
+          /docs/config/cluster.html (reference documentation) -->
+      <!--
+      <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>
+      -->
+
+      <!-- Use the LockOutRealm to prevent attempts to guess user passwords
+           via a brute-force attack -->
+      <Realm className="org.apache.catalina.realm.LockOutRealm">
+        <!-- This Realm uses the UserDatabase configured in the global JNDI
+             resources under the key "UserDatabase".  Any edits
+             that are performed against this UserDatabase are immediately
+             available for use by the Realm.  -->
+<!--
+        <Realm className="org.apache.catalina.realm.UserDatabaseRealm"
+               resourceName="UserDatabase"/>
+-->
+      </Realm>
+
+      <Host name="localhost"  appBase="webapps"
+            unpackWARs="true" autoDeploy="true">
+
+        <!-- SingleSignOn valve, share authentication between web applications
+             Documentation at: /docs/config/valve.html -->
+        <!--
+        <Valve className="org.apache.catalina.authenticator.SingleSignOn" />
+        -->
+
+        <!-- Access log processes all example.
+             Documentation at: /docs/config/valve.html
+             Note: The pattern used is equivalent to using pattern="common" -->
+        <!-- Managing through Apache HTTPD Server config     
+        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
+               prefix="localhost_access_log" suffix=".txt"
+               pattern="%h %l %u %t &quot;%r&quot; %s %b" />
+        -->
+
+      </Host>
+    </Engine>
+  </Service>
+</Server>
diff --git a/container_files/tomcat/conf/tomcat-users.xml b/container_files/tomcat/conf/tomcat-users.xml
new file mode 100644
index 00000000..cef36cd4
--- /dev/null
+++ b/container_files/tomcat/conf/tomcat-users.xml
@@ -0,0 +1,46 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one or more
+  contributor license agreements.  See the NOTICE file distributed with
+  this work for additional information regarding copyright ownership.
+  The ASF licenses this file to You under the Apache License, Version 2.0
+  (the "License"); you may not use this file except in compliance with
+  the License.  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+-->
+<tomcat-users xmlns="http://tomcat.apache.org/xml"
+              xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+              xsi:schemaLocation="http://tomcat.apache.org/xml tomcat-users.xsd"
+              version="1.0">
+<role rolename="grouper_user"/>
+<!--<user username="GrouperSystem" password="XXXXXXXXXX" roles="grouper_user"/> -->
+<!--
+  NOTE:  By default, no user is included in the "manager-gui" role required
+  to operate the "/manager/html" web application.  If you wish to use this app,
+  you must define such a user - the username and password are arbitrary. It is
+  strongly recommended that you do NOT use one of the users in the commented out
+  section below since they are intended for use with the examples web
+  application.
+-->
+<!--
+  NOTE:  The sample user and role entries below are intended for use with the
+  examples web application. They are wrapped in a comment and thus are ignored
+  when reading this file. If you wish to configure these users for use with the
+  examples web application, do not forget to remove the <!.. ..> that surrounds
+  them. You will also need to set the passwords to something appropriate.
+-->
+<!--
+  <role rolename="tomcat"/>
+  <role rolename="role1"/>
+  <user username="tomcat" password="<must-be-changed>" roles="tomcat"/>
+  <user username="both" password="<must-be-changed>" roles="tomcat,role1"/>
+  <user username="role1" password="<must-be-changed>" roles="role1"/>
+-->
+</tomcat-users>
\ No newline at end of file
diff --git a/container_files/tomee/bin/setenv.sh b/container_files/tomee/bin/setenv.sh
new file mode 100755
index 00000000..2387d613
--- /dev/null
+++ b/container_files/tomee/bin/setenv.sh
@@ -0,0 +1,3 @@
+CLASSPATH=/opt/tomee/bin/*
+JAVA_OPTS="-Dlog4j.configurationFile=/opt/tomee/conf/log4j2.xml -DENV=$ENV -DUSERTOKEN=$USERTOKEN"
+LOGGING_MANAGER=-Djava.util.logging.manager=org.apache.logging.log4j.jul.LogManager
\ No newline at end of file
diff --git a/container_files/tomee/conf/log4j2.xml b/container_files/tomee/conf/log4j2.xml
new file mode 100644
index 00000000..a4bbc1b5
--- /dev/null
+++ b/container_files/tomee/conf/log4j2.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Configuration status="info">
+    <Properties>
+        <Property name="layout">%d [%t] %-5p %c- %m%n</Property>
+    </Properties>
+    <Appenders>
+        <File name="CATALINA"
+                     fileName="/tmp/logpipe">
+            <PatternLayout pattern="tomee;catalina.out;${env:ENV};${env:USERTOKEN};${layout}"/>
+        </File>
+        <File name="LOCALHOST"
+                     fileName="/tmp/logpipe">
+            <PatternLayout pattern="tomee;localhost.log;${env:ENV};${env:USERTOKEN};${layout}"/>
+        </File>
+
+    </Appenders>
+    <Loggers>
+        <Root level="info">
+            <AppenderRef ref="CATALINA"/>
+        </Root>
+        <Logger name="org.apache.catalina.core.ContainerBase.[Catalina].[localhost]"
+                level="info" additivity="false">
+            <AppenderRef ref="LOCALHOST"/>
+        </Logger>
+    </Loggers>
+</Configuration>
\ No newline at end of file
diff --git a/container_files/tomee/conf/server.xml b/container_files/tomee/conf/server.xml
new file mode 100644
index 00000000..e5c89967
--- /dev/null
+++ b/container_files/tomee/conf/server.xml
@@ -0,0 +1,164 @@
+<?xml version='1.0' encoding='utf-8'?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one or more
+  contributor license agreements.  See the NOTICE file distributed with
+  this work for additional information regarding copyright ownership.
+  The ASF licenses this file to You under the Apache License, Version 2.0
+  (the "License"); you may not use this file except in compliance with
+  the License.  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+-->
+<!-- Note:  A "Server" is not itself a "Container", so you may not
+     define subcomponents such as "Valves" at this level.
+     Documentation at /docs/config/server.html
+ -->
+<Server port="8005" shutdown="SHUTDOWN">
+  <!-- TomEE plugin for Tomcat -->
+  <Listener className="org.apache.tomee.catalina.ServerListener" />
+  <Listener className="org.apache.catalina.startup.VersionLoggerListener" />
+  <!-- Security listener. Documentation at /docs/config/listeners.html
+  <Listener className="org.apache.catalina.security.SecurityListener" />
+  -->
+  <!--APR library loader. Documentation at /docs/apr.html -->
+  <Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />
+  <!-- Prevent memory leaks due to use of particular java/javax APIs-->
+  <Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />
+  <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />
+  <Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" />
+
+  <!-- Global JNDI resources
+       Documentation at /docs/jndi-resources-howto.html
+  -->
+  <GlobalNamingResources>
+    <!-- Editable user database that can also be used by
+         UserDatabaseRealm to authenticate users
+    -->
+    <Resource name="UserDatabase" auth="Container"
+              type="org.apache.catalina.UserDatabase"
+              description="User database that can be updated and saved"
+              factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
+              pathname="conf/tomcat-users.xml" />
+  </GlobalNamingResources>
+
+  <!-- A "Service" is a collection of one or more "Connectors" that share
+       a single "Container" Note:  A "Service" is not itself a "Container",
+       so you may not define subcomponents such as "Valves" at this level.
+       Documentation at /docs/config/service.html
+   -->
+  <Service name="Catalina">
+
+    <!--The connectors can use a shared executor, you can define one or more named thread pools-->
+    <!--
+    <Executor name="tomcatThreadPool" namePrefix="catalina-exec-"
+        maxThreads="150" minSpareThreads="4"/>
+    -->
+
+
+    <!-- A "Connector" represents an endpoint by which requests are received
+         and responses are returned. Documentation at :
+         Java HTTP Connector: /docs/config/http.html
+         Java AJP  Connector: /docs/config/ajp.html
+         APR (HTTP/AJP) Connector: /docs/apr.html
+         Define a non-SSL/TLS HTTP/1.1 Connector on port 8080
+    -->
+    <Connector port="8080" protocol="HTTP/1.1" URIEncoding="UTF-8"
+               connectionTimeout="20000"
+               redirectPort="8443" xpoweredBy="false" server="Apache TomEE" />
+    <!-- A "Connector" using the shared thread pool-->
+    <!--
+    <Connector executor="tomcatThreadPool"
+               port="8080" protocol="HTTP/1.1"
+               connectionTimeout="20000"
+               redirectPort="8443" />
+    -->
+    <!-- Define a SSL/TLS HTTP/1.1 Connector on port 8443
+         This connector uses the NIO implementation with the JSSE engine. When
+         using the JSSE engine, the JSSE configuration attributes must be used.
+    -->
+    <!--
+    <Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
+               maxThreads="150" SSLEnabled="true">
+        <SSLHostConfig>
+            <Certificate certificateKeystoreFile="conf/localhost-rsa.jks"
+                         type="RSA" xpoweredBy="false" server="Apache TomEE" />
+        </SSLHostConfig>
+    </Connector>
+    -->
+    <!-- Define a SSL/TLS HTTP/1.1 Connector on port 8443 with HTTP/2
+         This connector uses the APR/native implementation. When using the
+         APR/native implementation or the OpenSSL engine with NIO or NIO2 then
+         the OpenSSL configuration attributes must be used.
+    -->
+    <!--
+    <Connector port="8443" protocol="org.apache.coyote.http11.Http11AprProtocol"
+               maxThreads="150" SSLEnabled="true" >
+        <UpgradeProtocol className="org.apache.coyote.http2.Http2Protocol" xpoweredBy="false" server="Apache TomEE" />
+        <SSLHostConfig>
+            <Certificate certificateKeyFile="conf/localhost-rsa-key.pem"
+                         certificateFile="conf/localhost-rsa-cert.pem"
+                         certificateChainFile="conf/localhost-rsa-chain.pem"
+                         type="RSA" />
+        </SSLHostConfig>
+    </Connector>
+    -->
+
+    <!-- Define an AJP 1.3 Connector on port 8009 -->
+    <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" URIEncoding="UTF-8" />
+
+
+    <!-- An Engine represents the entry point (within Catalina) that processes
+         every request.  The Engine implementation for Tomcat stand alone
+         analyzes the HTTP headers included with the request, and passes them
+         on to the appropriate Host (virtual host).
+         Documentation at /docs/config/engine.html -->
+
+    <!-- You should set jvmRoute to support load-balancing via AJP ie :
+    <Engine name="Catalina" defaultHost="localhost" jvmRoute="jvm1">
+    -->
+    <Engine name="Catalina" defaultHost="localhost">
+
+      <!--For clustering, please take a look at documentation at:
+          /docs/cluster-howto.html  (simple how to)
+          /docs/config/cluster.html (reference documentation) -->
+      <!--
+      <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>
+      -->
+
+      <!-- Use the LockOutRealm to prevent attempts to guess user passwords
+           via a brute-force attack -->
+      <Realm className="org.apache.catalina.realm.LockOutRealm">
+        <!-- This Realm uses the UserDatabase configured in the global JNDI
+             resources under the key "UserDatabase".  Any edits
+             that are performed against this UserDatabase are immediately
+             available for use by the Realm.  -->
+        <Realm className="org.apache.catalina.realm.UserDatabaseRealm"
+               resourceName="UserDatabase"/>
+      </Realm>
+
+      <Host name="localhost"  appBase="webapps"
+            unpackWARs="true" autoDeploy="true">
+
+        <!-- SingleSignOn valve, share authentication between web applications
+             Documentation at: /docs/config/valve.html -->
+        <!--
+        <Valve className="org.apache.catalina.authenticator.SingleSignOn" />
+        -->
+
+        <!-- Access log processes all example.
+             Documentation at: /docs/config/valve.html
+             Note: The pattern used is equivalent to using pattern="common" -->
+        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
+               prefix="localhost_access_log" suffix=".txt"
+               pattern="%h %l %u %t &quot;%r&quot; %s %b" />
+
+      </Host>
+    </Engine>
+  </Service>
+</Server>
\ No newline at end of file
diff --git a/container_files/tomee/conf/tomcat-users.xml b/container_files/tomee/conf/tomcat-users.xml
new file mode 100644
index 00000000..f1484fc2
--- /dev/null
+++ b/container_files/tomee/conf/tomcat-users.xml
@@ -0,0 +1,51 @@
+<?xml version='1.0' encoding='utf-8'?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one or more
+  contributor license agreements.  See the NOTICE file distributed with
+  this work for additional information regarding copyright ownership.
+  The ASF licenses this file to You under the Apache License, Version 2.0
+  (the "License"); you may not use this file except in compliance with
+  the License.  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+-->
+<tomcat-users xmlns="http://tomcat.apache.org/xml"
+              xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+              xsi:schemaLocation="http://tomcat.apache.org/xml tomcat-users.xsd"
+              version="1.0">
+<role rolename="grouper_user"/>
+<!--<user username="GrouperSystem" password="XXXXXXXXXX" roles="grouper_user"/>-->
+<!--
+  NOTE:  By default, no user is included in the "manager-gui" role required
+  to operate the "/manager/html" web application.  If you wish to use this app,
+  you must define such a user - the username and password are arbitrary. It is
+  strongly recommended that you do NOT use one of the users in the commented out
+  section below since they are intended for use with the examples web
+  application.
+-->
+<!--
+  NOTE:  The sample user and role entries below are intended for use with the
+  examples web application. They are wrapped in a comment and thus are ignored
+  when reading this file. If you wish to configure these users for use with the
+  examples web application, do not forget to remove the <!.. ..> that surrounds
+  them. You will also need to set the passwords to something appropriate.
+-->
+<!--
+  <role rolename="tomcat"/>
+  <role rolename="role1"/>
+  <user username="tomcat" password="<must-be-changed>" roles="tomcat"/>
+  <user username="both" password="<must-be-changed>" roles="tomcat,role1"/>
+  <user username="role1" password="<must-be-changed>" roles="role1"/>
+-->
+  <!-- Activate those lines to get access to TomEE GUI -->
+  <!--
+  <role rolename="tomee-admin" />
+  <user username="tomee" password="tomee" roles="tomee-admin,manager-gui" />
+  -->
+</tomcat-users>
\ No newline at end of file
diff --git a/container_files/ui/classes/log4j.properties b/container_files/ui/classes/log4j.properties
new file mode 100644
index 00000000..12e5eff8
--- /dev/null
+++ b/container_files/ui/classes/log4j.properties
@@ -0,0 +1,144 @@
+
+#
+# Copyright 2014 Internet2
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+#/opt/grouper/2.3.0/grouper.apiBinary-2.3.0/ will be substituted with the System property "grouper.home", which must have a trailing \ or / 
+# depending on your OS. Of course you can use absolute paths if you prefer 
+
+
+#
+# log4j Configuration
+# $Id: log4j.example.properties,v 1.13 2009-12-18 13:56:51 tzeller Exp $
+#
+
+# Appenders
+
+## Grouper API event logging
+log4j.appender.grouper_event                            = org.apache.log4j.FileAppender
+log4j.appender.grouper_event.file                       = /tmp/logpipe
+log4j.appender.grouper_event.append                     = true
+log4j.appender.grouper_event.layout                     = org.apache.log4j.PatternLayout
+log4j.appender.grouper_event.layout.ConversionPattern   = grouper-ui;grouper_event.log;${ENV};${USERTOKEN};%d{ISO8601}: [%t] %-5p %C{1}.%M(%L) - %x - %m%n
+
+## Grouper API error logging
+log4j.appender.grouper_error                            = org.apache.log4j.FileAppender
+log4j.appender.grouper_error.file                       = /tmp/logpipe
+log4j.appender.grouper_errot.append                     = true
+log4j.appender.grouper_error.layout                     = org.apache.log4j.PatternLayout
+log4j.appender.grouper_error.layout.ConversionPattern   = grouper-ui;grouper_error.log;${ENV};${USERTOKEN};%d{ISO8601}: [%t] %-5p %C{1}.%M(%L) - %x - %m%n
+#log4j.appender.grouper_error.layout.ConversionPattern   = %d{ISO8601}: %m%n
+
+# Debug logging (Or: logging that I haven't cleaned up yet to send elsewhere)
+log4j.appender.grouper_debug                            = org.apache.log4j.FileAppender
+log4j.appender.grouper_debug.file                       = /tmp/logpipe
+log4j.appender.grouper_debug.append                     = true
+log4j.appender.grouper_debug.layout                     = org.apache.log4j.PatternLayout
+#log4j.appender.grouper_debug.layout.ConversionPattern   = %d{ISO8601} %5p %c{2}: %m%n
+log4j.appender.grouper_debug.layout.ConversionPattern   = grouper-ui;grouper_debug.log;${ENV};${USERTOKEN};%d{ISO8601}: [%t] %-5p %C{1}.%M(%L) - %x - %m%n
+
+## Benchmark logging
+log4j.appender.grouper_gb                               = org.apache.log4j.FileAppender
+log4j.appender.grouper_gb.file                          = /tmp/logpipe
+log4j.appender.grouper_gb.append                        = true
+log4j.appender.grouper_gb.layout                        = org.apache.log4j.PatternLayout
+#log4j.appender.grouper_gb.layout.ConversionPattern      = %d{ISO8601} %5p %c{2}: %m%n
+log4j.appender.grouper_gb.layout.ConversionPattern      = grouper-ui;grouper_bench.log;${ENV};${USERTOKEN};%d{ISO8601}: [%t] %-5p %C{1}.%M(%L) - %x - %m%n
+
+# Loggers
+
+## Default logger; will log *everything*
+log4j.rootLogger  = ERROR, grouper_error
+
+## All Internet2 (warn to grouper_error per default logger)
+log4j.logger.edu.internet2.middleware = WARN
+
+
+# Provisioning : PSP (version 2.1+)
+log4j.logger.edu.internet2.middleware.psp = INFO
+
+# Provisioning : vt-ldap
+# log4j.logger.edu.vt.middleware.ldap = INFO
+
+# Provisioning : Grouper plugin to Shibboleth attribute resolver
+# log4j.logger.edu.internet2.middleware.grouper.shibboleth = INFO
+
+
+# For more precise (or verbose) logging, enable one or more of the
+# following logging directives.  To remove duplicate entries, just change the 
+# level, and not where to send the logs
+# http://robertmarkbramprogrammer.blogspot.com/2007/06/log4j-duplicate-lines-in-output.html
+
+## Grouper Event Logging
+## * Logs at _info_ only
+log4j.logger.edu.internet2.middleware.grouper.log.EventLog        = INFO, grouper_event
+log4j.logger.edu.internet2.middleware.grouper.RegistryInstall = INFO, grouper_event
+
+## Grouper Error Logging
+## * Logs at _warn_, _fatal_ and _error_ only (by default this is WARN due to internet2 below)
+#log4j.logger.edu.internet2.middleware.grouper              = WARN, grouper_error
+
+## Grouper Debug Logging
+## * NOTE: There is currently VERY LITTLE (useful) information sent to this.
+## * Logs at _info_ only currently
+#log4j.logger.edu.internet2.middleware.grouper              = INFO, grouper_debug
+
+## Grouper XML Export + Import Logging
+## TODO Integrate with normal logging
+log4j.logger.edu.internet2.middleware.grouper.xml.XmlExporter           = INFO, grouper_event
+log4j.logger.edu.internet2.middleware.grouper.xml.XmlImporter           = INFO, grouper_event
+
+## Grouper Benchmark Logging
+log4j.logger.edu.internet2.middleware.grouper.bench                 = INFO, grouper_gb
+
+## Grouper script to add missing group sets
+log4j.logger.edu.internet2.middleware.grouper.misc.AddMissingGroupSets   = INFO, grouper_event
+
+## Grouper Sync Point in Time Tables
+log4j.logger.edu.internet2.middleware.grouper.misc.SyncPITTables   = INFO, grouper_event
+
+## Grouper Sync Stem Set Table
+log4j.logger.edu.internet2.middleware.grouper.misc.SyncStemSets      = INFO, grouper_event
+
+## Grouper Migrate Legacy Attributes
+log4j.logger.edu.internet2.middleware.grouper.misc.MigrateLegacyAttributes = INFO, grouper_event
+
+### Subject API
+#log4j.logger.edu.internet2.middleware.subject                       = ERROR, grouper_error
+#log4j.logger.edu.internet2.middleware.subject.provider              = ERROR, grouper_error
+### Hibernate 
+#log4j.logger.org.hibernate                                          = ERROR, grouper_error
+### ehcache
+#log4j.logger.net.sf.ehcache                                         = ERROR, grouper_error
+### Spring
+#log4j.logger.org.springframework                                    = ERROR, grouper_error
+
+## Grouper Stress Testing
+log4j.logger.edu.internet2.middleware.grouper.stress                = INFO, grouper_debug
+
+
+#######################################################
+##Optional settings for debug logs
+#######################################################
+
+## Hooks debug info
+#log4j.logger.edu.internet2.middleware.grouper.hooks.examples.GroupTypeTupleIncludeExcludeHook = DEBUG
+#log4j.logger.edu.internet2.middleware.grouper.Group = DEBUG
+
+#log4j.logger.edu.internet2.middleware.grouper.hooks.examples.GroupTypeSecurityHook = DEBUG
+
+
+# added by grouper-installer
+log4j.logger.org.apache.tools.ant = WARN
diff --git a/container_files/ui/web.xml b/container_files/ui/web.xml
new file mode 100644
index 00000000..92d4125d
--- /dev/null
+++ b/container_files/ui/web.xml
@@ -0,0 +1,203 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:j2ee="http://java.sun.com/xml/ns/j2ee" version="2.4" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.s
+un.com/xml/ns/j2ee/web-app_2_4.xsd">
+<!--DO NOT EDIT THIS FILE. IT WILL BE OVERWRITTEN. CHANGE YOUR FILE specified by the build.properties value [additional.web.xml]. The contents of that file are merged into ${grouper-ui}/w
+ebapp/WEB-INF/web.core.xml-->
+<!--In webapp-->
+<!--Processing context-param-->
+<!--Processing filter-->
+<!--Inserting tag from merge file-->
+<filter>
+    <filter-name>GrouperUi</filter-name>
+    <filter-class>edu.internet2.middleware.grouper.ui.GrouperUiFilter</filter-class>
+</filter>
+<!--Inserting tag from merge file-->
+<filter>
+  	<filter-name>Error Catcher</filter-name>
+  	<filter-class>edu.internet2.middleware.grouper.ui.ErrorFilter</filter-class>
+  </filter>
+<!--Inserting tag from base file. Merge file was file:/opt/grouper.ui-2.3.0/temp/99.web.core-filters.xml-->
+<filter>
+  	<filter-name>Login check</filter-name>
+  	<filter-class>edu.internet2.middleware.grouper.ui.LoginCheckFilter</filter-class>
+  	<init-param>    
+  		<param-name>failureUrl</param-name>    
+  		<param-value>/index.jsp</param-value>  
+  	</init-param>
+	 	<init-param>    
+  	<param-name>ignore</param-name>    
+  		<param-value>:/populateIndex.do:/callLogin.do:/error.do:/logout.do:/status:</param-value>  
+  	</init-param>
+  	<init-param>    
+  		<param-name>grouperRole</param-name>    
+  		<param-value>*</param-value>  
+  	</init-param>
+  </filter>
+<!--Inserting tag from base file. Merge file was file:/opt/grouper.ui-2.3.0/temp/99.web.core-filters.xml-->
+<filter>
+  	<filter-name>Caller page</filter-name>
+  	<filter-class>edu.internet2.middleware.grouper.ui.CallerPageFilter</filter-class>
+    </filter>
+<!--Inserting tag from base file. Merge file was file:/opt/grouper.ui-2.3.0/temp/99.web.core-filters.xml-->
+<filter>
+    <filter-name>CSRFGuard</filter-name>
+    <filter-class>org.owasp.csrfguard.CsrfGuardFilter</filter-class>
+  </filter>
+<!--Processing filter-mapping-->
+<!--Inserting tag from merge file-->
+<filter-mapping>
+    <filter-name>GrouperUi</filter-name>
+    <url-pattern>*.do</url-pattern>
+  </filter-mapping>
+<!--Inserting tag from merge file-->
+<filter-mapping>
+    <filter-name>GrouperUi</filter-name>
+    <url-pattern>*.jsp</url-pattern>
+  </filter-mapping>
+<!--Inserting tag from merge file-->
+<filter-mapping>
+  	<filter-name>Error Catcher</filter-name>
+  	<url-pattern>*.do</url-pattern>
+  </filter-mapping>
+<!--Inserting tag from merge file-->
+<filter-mapping>
+  	<filter-name>Error Catcher</filter-name>
+  	<url-pattern>/gotoCallerPage</url-pattern>
+  </filter-mapping>
+<!--Inserting tag from base file. Merge file was file:/opt/grouper.ui-2.3.0/temp/99.web.core-filters.xml-->
+<filter-mapping>
+    <filter-name>GrouperUi</filter-name>
+    <url-pattern>/grouperUi/app/*</url-pattern>
+  </filter-mapping>
+<!--Inserting tag from base file. Merge file was file:/opt/grouper.ui-2.3.0/temp/99.web.core-filters.xml-->
+<filter-mapping>
+    <filter-name>GrouperUi</filter-name>
+    <url-pattern>/grouperUi/appHtml/*</url-pattern>
+  </filter-mapping>
+<!--Inserting tag from base file. Merge file was file:/opt/grouper.ui-2.3.0/temp/99.web.core-filters.xml-->
+<filter-mapping>
+    <filter-name>GrouperUi</filter-name>
+    <url-pattern>/grouperExternal/app/*</url-pattern>
+  </filter-mapping>
+<!--Inserting tag from base file. Merge file was file:/opt/grouper.ui-2.3.0/temp/99.web.core-filters.xml-->
+<filter-mapping>
+    <filter-name>GrouperUi</filter-name>
+    <url-pattern>/grouperExternal/appHtml/*</url-pattern>
+  </filter-mapping>
+<!--Inserting tag from base file. Merge file was file:/opt/grouper.ui-2.3.0/temp/99.web.core-filters.xml-->
+<filter-mapping>
+    <filter-name>GrouperUi</filter-name>
+    <url-pattern>/grouperExternal/public/UiV2Public.index</url-pattern>
+  </filter-mapping>
+<!--Inserting tag from base file. Merge file was file:/opt/grouper.ui-2.3.0/temp/99.web.core-filters.xml-->
+<filter-mapping>
+    <filter-name>GrouperUi</filter-name>
+    <url-pattern>/grouperExternal/public/UiV2Public.postIndex</url-pattern>
+  </filter-mapping>
+<!--Inserting tag from base file. Merge file was file:/opt/grouper.ui-2.3.0/temp/99.web.core-filters.xml-->
+<filter-mapping>
+  	<filter-name>Caller page</filter-name>
+  	<url-pattern>/gotoCallerPage</url-pattern>
+  </filter-mapping>
+<!--Inserting tag from base file. Merge file was file:/opt/grouper.ui-2.3.0/temp/99.web.core-filters.xml-->
+<filter-mapping>
+  	<filter-name>Login check</filter-name>
+  	<url-pattern>*.do</url-pattern>
+  </filter-mapping>
+<!--Inserting tag from base file. Merge file was file:/opt/grouper.ui-2.3.0/temp/99.web.core-filters.xml-->
+<filter-mapping>
+    <filter-name>CSRFGuard</filter-name>
+    <url-pattern>/*</url-pattern>
+  </filter-mapping>
+<!--Processing listener-->
+<!--Inserting tag from base file. Merge file was file:/opt/grouper.ui-2.3.0/temp/99.web.core-filters.xml-->
+<listener>
+  	<listener-class>edu.internet2.middleware.grouper.ui.GrouperSessionAttributeListener</listener-class>
+</listener>
+<!--Inserting tag from base file. Merge file was file:/opt/grouper.ui-2.3.0/temp/99.web.core-filters.xml-->
+<listener>
+    <listener-class>org.owasp.csrfguard.CsrfGuardServletContextListener</listener-class>
+  </listener>
+<!--Inserting tag from base file. Merge file was file:/opt/grouper.ui-2.3.0/temp/99.web.core-filters.xml-->
+<listener>
+    <listener-class>org.owasp.csrfguard.CsrfGuardHttpSessionListener</listener-class>
+  </listener>
+<!--Processing servlet-->
+<!--Inserting tag from base file. Merge file was file:/opt/grouper.ui-2.3.0/temp/99.web.core-filters.xml-->
+<servlet>
+    <servlet-name>StatusServlet</servlet-name>
+    <display-name>Status Servlet</display-name>
+    <servlet-class>edu.internet2.middleware.grouper.j2ee.status.GrouperStatusServlet</servlet-class>
+    <load-on-startup>1</load-on-startup>
+  </servlet>
+<!--Inserting tag from base file. Merge file was file:/opt/grouper.ui-2.3.0/temp/99.web.core-filters.xml-->
+<servlet>
+  <!-- Map the filter to a Servlet or URL -->
+
+    <servlet-name>UiServlet</servlet-name>
+    <servlet-class>edu.internet2.middleware.grouper.j2ee.GrouperUiRestServlet</servlet-class>
+    <load-on-startup>1</load-on-startup>
+  </servlet>
+<!--Inserting tag from base file. Merge file was file:/opt/grouper.ui-2.3.0/temp/99.web.core-filters.xml-->
+<servlet>
+     <servlet-name>OwaspJavaScriptServlet</servlet-name>
+     <servlet-class>org.owasp.csrfguard.servlet.JavaScriptServlet</servlet-class>
+  </servlet>
+<!--Inserting tag from base file. Merge file was file:/opt/grouper.ui-2.3.0/temp/99.web.core-filters.xml-->
+<servlet>
+    <servlet-name>action</servlet-name>
+    <servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
+    <init-param>
+      <param-name>config</param-name>
+      <param-value>/WEB-INF/struts-config.xml</param-value>
+    </init-param>
+    <load-on-startup>2</load-on-startup>
+  </servlet>
+<!--Processing servlet-mapping-->
+<!--Inserting tag from base file. Merge file was file:/opt/grouper.ui-2.3.0/temp/99.web.core-filters.xml-->
+<servlet-mapping>
+    <servlet-name>StatusServlet</servlet-name>
+    <url-pattern>/status</url-pattern>
+  </servlet-mapping>
+<!--Inserting tag from base file. Merge file was file:/opt/grouper.ui-2.3.0/temp/99.web.core-filters.xml-->
+<servlet-mapping>
+    <servlet-name>UiServlet</servlet-name>
+    <url-pattern>/grouperUi/app/*</url-pattern>
+  </servlet-mapping>
+<!--Inserting tag from base file. Merge file was file:/opt/grouper.ui-2.3.0/temp/99.web.core-filters.xml-->
+<servlet-mapping>
+    <servlet-name>UiServlet</servlet-name>
+    <url-pattern>/grouperExternal/app/*</url-pattern>
+  </servlet-mapping>
+<!--Inserting tag from base file. Merge file was file:/opt/grouper.ui-2.3.0/temp/99.web.core-filters.xml-->
+<servlet-mapping>
+    <servlet-name>UiServlet</servlet-name>
+    <url-pattern>/grouperExternal/public/UiV2Public.index</url-pattern>
+  </servlet-mapping>
+<!--Inserting tag from base file. Merge file was file:/opt/grouper.ui-2.3.0/temp/99.web.core-filters.xml-->
+<servlet-mapping>
+    <servlet-name>UiServlet</servlet-name>
+    <url-pattern>/grouperExternal/public/UiV2Public.postIndex</url-pattern>
+  </servlet-mapping>
+<!--Inserting tag from base file. Merge file was file:/opt/grouper.ui-2.3.0/temp/99.web.core-filters.xml-->
+<servlet-mapping>
+     <servlet-name>OwaspJavaScriptServlet</servlet-name>
+     <url-pattern>/grouperExternal/public/OwaspJavaScriptServlet</url-pattern>
+  </servlet-mapping>
+<!--Inserting tag from base file. Merge file was file:/opt/grouper.ui-2.3.0/temp/99.web.core-filters.xml-->
+<servlet-mapping>
+    <servlet-name>action</servlet-name>
+    <url-pattern>*.do</url-pattern>
+  </servlet-mapping>
+<!--Processing mime-mapping-->
+<!--Processing error-page-->
+<!--Processing error-page-->
+<!--Processing taglib-->
+<!--Processing resource-env-ref-->
+<!--Processing resource-ref-->
+<!--Processing security-constraint-->
+<!--Inserting tag from base file. Merge file was file:/opt/grouper.ui-2.3.0/temp/99.web.core-filters.xml-->
+<!--Processing env-entry-->
+<!--Processing ejb-ref-->
+<!--Processing ejb-local-ref-->
+</web-app>
diff --git a/container_files/usr-local-bin/daemon b/container_files/usr-local-bin/daemon
new file mode 100755
index 00000000..27f3da63
--- /dev/null
+++ b/container_files/usr-local-bin/daemon
@@ -0,0 +1,9 @@
+#!/bin/bash
+
+. /usr/local/bin/library.sh
+
+prepDaemon
+
+export GSH_JVMARGS="-DENV=$ENV -DUSERTOKEN=$USERTOKEN"
+
+exec bin/gsh -loader > /tmp/loggrouper
diff --git a/container_files/usr-local-bin/gsh b/container_files/usr-local-bin/gsh
new file mode 100755
index 00000000..0539b40a
--- /dev/null
+++ b/container_files/usr-local-bin/gsh
@@ -0,0 +1,9 @@
+#!/bin/bash
+
+. /usr/local/bin/library.sh
+
+prepDaemon
+
+export GSH_JVMARGS="-DENV=$ENV -DUSERTOKEN=$USERTOKEN"
+
+exec bin/gsh "$@" | tee /tmp/loggrouper
diff --git a/container_files/usr-local-bin/library.sh b/container_files/usr-local-bin/library.sh
new file mode 100644
index 00000000..ea7f4141
--- /dev/null
+++ b/container_files/usr-local-bin/library.sh
@@ -0,0 +1,100 @@
+#!/bin/sh
+
+setupPipe() {
+    if [ -e $1 ]; then
+        rm $1
+    fi
+    mkfifo -m 666 $1
+}
+
+# Make a "console" logging pipe that anyone can write too regardless of who owns the process.
+setupPipe /tmp/logpipe
+cat <> /tmp/logpipe &
+
+# Make loggers pipes for the supervisord connected apps' console, so that we can prepend the streams.
+setupPipe /tmp/loggrouper
+(cat <> /tmp/loggrouper | awk -v ENV="$ENV" -v UT="$USERTOKEN" '{printf "grouper;console;%s;%s;%s\n", ENV, UT, $0; fflush()}' &>/tmp/logpipe) &
+
+setupPipe /tmp/loghttpd
+(cat <> /tmp/loghttpd  | awk -v ENV="$ENV" -v UT="$USERTOKEN" '{printf "httpd;console;%s;%s;%s\n", ENV, UT, $0; fflush()}' &>/tmp/logpipe) &
+
+setupPipe /tmp/logshibd
+(cat <> /tmp/logshibd | awk -v ENV="$ENV" -v UT="$USERTOKEN" '{printf "shibd;console;%s;%s;%s", ENV, UT, $0; fflush()}' &>/tmp/logpipe) &
+
+setupPipe /tmp/logtomcat
+(cat <> /tmp/logtomcat | awk -v ENV="$ENV" -v UT="$USERTOKEN" '{printf "tomcat;console;%s;%s;%s\n", ENV, UT, $0; fflush()}' &>/tmp/logpipe) &
+
+setupPipe /tmp/logsuperd
+(cat <> /tmp/logsuperd | awk -v ENV="$ENV" -v UT="$USERTOKEN" '{printf "supervisord;console;%s;%s;%s\n", ENV, UT, $0; fflush()}' &>/tmp/logpipe) &
+
+
+linkGrouperSecrets() {
+    for filepath in /run/secrets/*; do
+        local label_file=`basename $filepath`
+        local file=$(echo $label_file| cut -d'_' -f 2)
+
+        if [[ $label_file == grouper_* ]]; then
+            ln -sf /run/secrets/$label_file $1/$file
+        elif [[ $label_file == shib_* ]]; then
+            ln -sf /run/secrets/$label_file /etc/shibboleth/$file
+        elif [[ $label_file == httpd_* ]]; then
+            ln -sf /run/secrets/$label_file /etc/httpd/conf.d/$file
+        elif [ "$label_file" == "host-key.pem" ]; then
+            ln -sf /run/secrets/host-key.pem /etc/pki/tls/private/host-key.pem
+        fi
+    done
+}
+
+prepDaemon() {
+    local dest=/opt/grouper/grouper.apiBinary
+    linkGrouperSecrets $dest/conf
+
+    if [ -d "/opt/grouper/conf" ]; then
+        cp /opt/grouper/conf/* $dest/conf/
+    fi
+    if [ -d "/opt/grouper/lib" ]; then
+        cp /opt/grouper/lib/* $dest/lib/
+    fi      
+}
+
+prepSCIM() {
+    local dest=/opt/grouper/grouper.scim/WEB-INF
+    linkGrouperSecrets $dest/classes
+
+    if [ -d "/opt/grouper/conf" ]; then
+        cp /opt/grouper/conf/* $dest/classes/
+    fi
+    if [ -d "/opt/grouper/lib" ]; then
+        cp /opt/grouper/lib/* $dest/lib/
+    fi
+
+    cp /opt/tier-support/grouper-ws-scim.xml /opt/tomee/conf/Catalina/localhost/
+}
+
+prepUI() {
+    local dest=/opt/grouper/grouper.ui/WEB-INF
+    linkGrouperSecrets $dest/classes
+
+    if [ -d "/opt/grouper/conf" ]; then
+        cp /opt/grouper/conf/* $dest/classes/
+    fi
+    if [ -d "/opt/grouper/lib" ]; then
+        cp /opt/grouper/lib/* $dest/lib/
+    fi
+
+    cp /opt/tier-support/grouper.xml /opt/tomcat/conf/Catalina/localhost/
+}
+
+prepWS() {
+    local dest=/opt/grouper/grouper.ws/WEB-INF
+    linkGrouperSecrets $dest/classes
+    
+    if [ -d "/opt/grouper/conf" ]; then
+        cp /opt/grouper/conf/* $dest/classes/
+    fi
+    if [ -d "/opt/grouper/lib" ]; then
+        cp /opt/grouper/lib/* $dest/lib/
+    fi
+
+    cp /opt/tier-support/grouper-ws.xml /opt/tomcat/conf/Catalina/localhost/
+}
diff --git a/container_files/usr-local-bin/scim b/container_files/usr-local-bin/scim
new file mode 100755
index 00000000..ffe12b37
--- /dev/null
+++ b/container_files/usr-local-bin/scim
@@ -0,0 +1,7 @@
+#!/bin/bash
+
+. /usr/local/bin/library.sh
+
+prepSCIM
+
+exec /usr/bin/supervisord -c /opt/tier-support/supervisord-tomee.conf
diff --git a/container_files/usr-local-bin/ui b/container_files/usr-local-bin/ui
new file mode 100755
index 00000000..a03ed585
--- /dev/null
+++ b/container_files/usr-local-bin/ui
@@ -0,0 +1,9 @@
+#!/bin/bash
+
+. /usr/local/bin/library.sh
+
+prepUI
+
+export LD_LIBRARY_PATH=/opt/shibboleth/lib64:$LD_LIBRARY_PATH
+
+exec /usr/bin/supervisord -c /opt/tier-support/supervisord-tomcat.conf
diff --git a/container_files/usr-local-bin/ui-ws b/container_files/usr-local-bin/ui-ws
new file mode 100755
index 00000000..de1384c4
--- /dev/null
+++ b/container_files/usr-local-bin/ui-ws
@@ -0,0 +1,10 @@
+#!/bin/bash
+
+. /usr/local/bin/library.sh
+
+prepUI
+prepWS
+
+export LD_LIBRARY_PATH=/opt/shibboleth/lib64:$LD_LIBRARY_PATH
+
+/usr/bin/supervisord -c /opt/tier-support/supervisord-tomcat.conf
diff --git a/container_files/usr-local-bin/ws b/container_files/usr-local-bin/ws
new file mode 100755
index 00000000..0e10b688
--- /dev/null
+++ b/container_files/usr-local-bin/ws
@@ -0,0 +1,7 @@
+#!/bin/bash
+
+. /usr/local/bin/library.sh
+
+prepWS
+
+exec /usr/bin/supervisord -c /opt/tier-support/supervisord-tomcat.conf
diff --git a/container_files/wait-for-it/LICENSE b/container_files/wait-for-it/LICENSE
deleted file mode 100644
index bd18d0c4..00000000
--- a/container_files/wait-for-it/LICENSE
+++ /dev/null
@@ -1,20 +0,0 @@
-The MIT License (MIT)
-Copyright (c) 2016 Giles Hall
-
-Permission is hereby granted, free of charge, to any person obtaining a copy of
-this software and associated documentation files (the "Software"), to deal in
-the Software without restriction, including without limitation the rights to
-use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
-of the Software, and to permit persons to whom the Software is furnished to do
-so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
diff --git a/container_files/wait-for-it/README.md b/container_files/wait-for-it/README.md
deleted file mode 100644
index 3a65c3d7..00000000
--- a/container_files/wait-for-it/README.md
+++ /dev/null
@@ -1,59 +0,0 @@
-`wait-for-it.sh` is a pure bash script that will wait on the availability of a host and TCP port.  It is useful for synchronizing the spin-up of interdependent services, such as linked docker containers.  Since it is a pure bash script, it does not have any external dependencies.
-
-## Usage
-
-```
-wait-for-it.sh host:port [-s] [-t timeout] [-- command args]
--h HOST | --host=HOST       Host or IP under test
--p PORT | --port=PORT       TCP port under test
-                            Alternatively, you specify the host and port as host:port
--s | --strict               Only execute subcommand if the test succeeds
--q | --quiet                Don't output any status messages
--t TIMEOUT | --timeout=TIMEOUT
-                            Timeout in seconds, zero for no timeout
--- COMMAND ARGS             Execute command with args after the test finishes
-```
-
-## Examples
-
-For example, let's test to see if we can access port 80 on www.google.com, and if it is available, echo the message `google is up`.
-
-```
-$ ./wait-for-it.sh www.google.com:80 -- echo "google is up"
-wait-for-it.sh: waiting 15 seconds for www.google.com:80
-wait-for-it.sh: www.google.com:80 is available after 0 seconds
-google is up
-```
-
-You can set your own timeout with the `-t` or `--timeout=` option.  Setting the timeout value to 0 will disable the timeout:
-
-```
-$ ./wait-for-it.sh -t 0 www.google.com:80 -- echo "google is up"
-wait-for-it.sh: waiting for www.google.com:80 without a timeout
-wait-for-it.sh: www.google.com:80 is available after 0 seconds
-google is up
-```
-
-The subcommand will be executed regardless if the service is up or not.  If you wish to execute the subcommand only if the service is up, add the `--strict` argument. In this example, we will test port 81 on www.google.com which will fail:
-
-```
-$ ./wait-for-it.sh www.google.com:81 --timeout=1 --strict -- echo "google is up"
-wait-for-it.sh: waiting 1 seconds for www.google.com:81
-wait-for-it.sh: timeout occurred after waiting 1 seconds for www.google.com:81
-wait-for-it.sh: strict mode, refusing to execute subprocess
-```
-
-If you don't want to execute a subcommand, leave off the `--` argument.  This way, you can test the exit condition of `wait-for-it.sh` in your own scripts, and determine how to proceed:
-
-```
-$ ./wait-for-it.sh www.google.com:80
-wait-for-it.sh: waiting 15 seconds for www.google.com:80
-wait-for-it.sh: www.google.com:80 is available after 0 seconds
-$ echo $?
-0
-$ ./wait-for-it.sh www.google.com:81
-wait-for-it.sh: waiting 15 seconds for www.google.com:81
-wait-for-it.sh: timeout occurred after waiting 15 seconds for www.google.com:81
-$ echo $?
-124
-```
diff --git a/container_files/wait-for-it/wait-for-it.sh b/container_files/wait-for-it/wait-for-it.sh
deleted file mode 100755
index eca6c3b9..00000000
--- a/container_files/wait-for-it/wait-for-it.sh
+++ /dev/null
@@ -1,161 +0,0 @@
-#!/usr/bin/env bash
-#   Use this script to test if a given TCP host/port are available
-
-cmdname=$(basename $0)
-
-echoerr() { if [[ $QUIET -ne 1 ]]; then echo "$@" 1>&2; fi }
-
-usage()
-{
-    cat << USAGE >&2
-Usage:
-    $cmdname host:port [-s] [-t timeout] [-- command args]
-    -h HOST | --host=HOST       Host or IP under test
-    -p PORT | --port=PORT       TCP port under test
-                                Alternatively, you specify the host and port as host:port
-    -s | --strict               Only execute subcommand if the test succeeds
-    -q | --quiet                Don't output any status messages
-    -t TIMEOUT | --timeout=TIMEOUT
-                                Timeout in seconds, zero for no timeout
-    -- COMMAND ARGS             Execute command with args after the test finishes
-USAGE
-    exit 1
-}
-
-wait_for()
-{
-    if [[ $TIMEOUT -gt 0 ]]; then
-        echoerr "$cmdname: waiting $TIMEOUT seconds for $HOST:$PORT"
-    else
-        echoerr "$cmdname: waiting for $HOST:$PORT without a timeout"
-    fi
-    start_ts=$(date +%s)
-    while :
-    do
-        (echo > /dev/tcp/$HOST/$PORT) >/dev/null 2>&1
-        result=$?
-        if [[ $result -eq 0 ]]; then
-            end_ts=$(date +%s)
-            echoerr "$cmdname: $HOST:$PORT is available after $((end_ts - start_ts)) seconds"
-            break
-        fi
-        sleep 1
-    done
-    return $result
-}
-
-wait_for_wrapper()
-{
-    # In order to support SIGINT during timeout: http://unix.stackexchange.com/a/57692
-    if [[ $QUIET -eq 1 ]]; then
-        timeout $TIMEOUT $0 --quiet --child --host=$HOST --port=$PORT --timeout=$TIMEOUT &
-    else
-        timeout $TIMEOUT $0 --child --host=$HOST --port=$PORT --timeout=$TIMEOUT &
-    fi
-    PID=$!
-    trap "kill -INT -$PID" INT
-    wait $PID
-    RESULT=$?
-    if [[ $RESULT -ne 0 ]]; then
-        echoerr "$cmdname: timeout occurred after waiting $TIMEOUT seconds for $HOST:$PORT"
-    fi
-    return $RESULT
-}
-
-# process arguments
-while [[ $# -gt 0 ]]
-do
-    case "$1" in
-        *:* )
-        hostport=(${1//:/ })
-        HOST=${hostport[0]}
-        PORT=${hostport[1]}
-        shift 1
-        ;;
-        --child)
-        CHILD=1
-        shift 1
-        ;;
-        -q | --quiet)
-        QUIET=1
-        shift 1
-        ;;
-        -s | --strict)
-        STRICT=1
-        shift 1
-        ;;
-        -h)
-        HOST="$2"
-        if [[ $HOST == "" ]]; then break; fi
-        shift 2
-        ;;
-        --host=*)
-        HOST="${1#*=}"
-        shift 1
-        ;;
-        -p)
-        PORT="$2"
-        if [[ $PORT == "" ]]; then break; fi
-        shift 2
-        ;;
-        --port=*)
-        PORT="${1#*=}"
-        shift 1
-        ;;
-        -t)
-        TIMEOUT="$2"
-        if [[ $TIMEOUT == "" ]]; then break; fi
-        shift 2
-        ;;
-        --timeout=*)
-        TIMEOUT="${1#*=}"
-        shift 1
-        ;;
-        --)
-        shift
-        CLI="$@"
-        break
-        ;;
-        --help)
-        usage
-        ;;
-        *)
-        echoerr "Unknown argument: $1"
-        usage
-        ;;
-    esac
-done
-
-if [[ "$HOST" == "" || "$PORT" == "" ]]; then
-    echoerr "Error: you need to provide a host and port to test."
-    usage
-fi
-
-TIMEOUT=${TIMEOUT:-15}
-STRICT=${STRICT:-0}
-CHILD=${CHILD:-0}
-QUIET=${QUIET:-0}
-
-if [[ $CHILD -gt 0 ]]; then
-    wait_for
-    RESULT=$?
-    exit $RESULT
-else
-    if [[ $TIMEOUT -gt 0 ]]; then
-        wait_for_wrapper
-        RESULT=$?
-    else
-        wait_for
-        RESULT=$?
-    fi
-fi
-
-if [[ $CLI != "" ]]; then
-    if [[ $RESULT -ne 0 && $STRICT -eq 1 ]]; then
-        echoerr "$cmdname: strict mode, refusing to execute subprocess"
-        exit $RESULT
-    fi
-    exec $CLI
-else
-    exit $RESULT
-fi
diff --git a/container_files/ws/classes/log4j.properties b/container_files/ws/classes/log4j.properties
new file mode 100644
index 00000000..c104dc10
--- /dev/null
+++ b/container_files/ws/classes/log4j.properties
@@ -0,0 +1,144 @@
+
+#
+# Copyright 2014 Internet2
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+#${grouper.home} will be substituted with the System property "grouper.home", which must have a trailing \ or / 
+# depending on your OS. Of course you can use absolute paths if you prefer 
+
+
+#
+# log4j Configuration
+# $Id: log4j.example.properties,v 1.13 2009-12-18 13:56:51 tzeller Exp $
+#
+
+# Appenders
+
+## Grouper API event logging
+log4j.appender.grouper_event                            = org.apache.log4j.FileAppender
+log4j.appender.grouper_event.file                       = /tmp/logpipe
+log4j.appender.grouper_event.append                     = true
+log4j.appender.grouper_event.layout                     = org.apache.log4j.PatternLayout
+log4j.appender.grouper_event.layout.ConversionPattern   = grouper-ws;grouper_event.log;${ENV};${USERTOKEN};%d{ISO8601}: [%t] %-5p %C{1}.%M(%L) - %x - %m%n
+
+## Grouper API error logging
+log4j.appender.grouper_error                            = org.apache.log4j.FileAppender
+log4j.appender.grouper_error.file                       = /tmp/logpipe
+log4j.appender.grouper_errot.append                     = true
+log4j.appender.grouper_error.layout                     = org.apache.log4j.PatternLayout
+log4j.appender.grouper_error.layout.ConversionPattern   = grouper-ws;grouper_error.log;${ENV};${USERTOKEN};%d{ISO8601}: [%t] %-5p %C{1}.%M(%L) - %x - %m%n
+#log4j.appender.grouper_error.layout.ConversionPattern   = %d{ISO8601}: %m%n
+
+# Debug logging (Or: logging that I haven't cleaned up yet to send elsewhere)
+log4j.appender.grouper_debug                            = org.apache.log4j.FileAppender
+log4j.appender.grouper_debug.file                       = /tmp/logpipe
+log4j.appender.grouper_debug.append                     = true
+log4j.appender.grouper_debug.layout                     = org.apache.log4j.PatternLayout
+#log4j.appender.grouper_debug.layout.ConversionPattern   = %d{ISO8601} %5p %c{2}: %m%n
+log4j.appender.grouper_debug.layout.ConversionPattern   = grouper-ws;grouper_debug.log;${ENV};${USERTOKEN};%d{ISO8601}: [%t] %-5p %C{1}.%M(%L) - %x - %m%n
+
+## Benchmark logging
+log4j.appender.grouper_gb                               = org.apache.log4j.FileAppender
+log4j.appender.grouper_gb.file                          = /tmp/logpipe
+log4j.appender.grouper_gb.append                        = true
+log4j.appender.grouper_gb.layout                        = org.apache.log4j.PatternLayout
+#log4j.appender.grouper_gb.layout.ConversionPattern      = %d{ISO8601} %5p %c{2}: %m%n
+log4j.appender.grouper_gb.layout.ConversionPattern      = grouper-ws;grouper_bench.log;${ENV};${USERTOKEN};%d{ISO8601}: [%t] %-5p %C{1}.%M(%L) - %x - %m%n
+
+# Loggers
+
+## Default logger; will log *everything*
+log4j.rootLogger  = ERROR, grouper_error
+
+## All Internet2 (warn to grouper_error per default logger)
+log4j.logger.edu.internet2.middleware = WARN
+
+
+# Provisioning : PSP (version 2.1+)
+log4j.logger.edu.internet2.middleware.psp = INFO
+
+# Provisioning : vt-ldap
+# log4j.logger.edu.vt.middleware.ldap = INFO
+
+# Provisioning : Grouper plugin to Shibboleth attribute resolver
+# log4j.logger.edu.internet2.middleware.grouper.shibboleth = INFO
+
+
+# For more precise (or verbose) logging, enable one or more of the
+# following logging directives.  To remove duplicate entries, just change the 
+# level, and not where to send the logs
+# http://robertmarkbramprogrammer.blogspot.com/2007/06/log4j-duplicate-lines-in-output.html
+
+## Grouper Event Logging
+## * Logs at _info_ only
+log4j.logger.edu.internet2.middleware.grouper.log.EventLog        = INFO, grouper_event
+log4j.logger.edu.internet2.middleware.grouper.RegistryInstall = INFO, grouper_event
+
+## Grouper Error Logging
+## * Logs at _warn_, _fatal_ and _error_ only (by default this is WARN due to internet2 below)
+#log4j.logger.edu.internet2.middleware.grouper              = WARN, grouper_error
+
+## Grouper Debug Logging
+## * NOTE: There is currently VERY LITTLE (useful) information sent to this.
+## * Logs at _info_ only currently
+#log4j.logger.edu.internet2.middleware.grouper              = INFO, grouper_debug
+
+## Grouper XML Export + Import Logging
+## TODO Integrate with normal logging
+log4j.logger.edu.internet2.middleware.grouper.xml.XmlExporter           = INFO, grouper_event
+log4j.logger.edu.internet2.middleware.grouper.xml.XmlImporter           = INFO, grouper_event
+
+## Grouper Benchmark Logging
+log4j.logger.edu.internet2.middleware.grouper.bench                 = INFO, grouper_gb
+
+## Grouper script to add missing group sets
+log4j.logger.edu.internet2.middleware.grouper.misc.AddMissingGroupSets   = INFO, grouper_event
+
+## Grouper Sync Point in Time Tables
+log4j.logger.edu.internet2.middleware.grouper.misc.SyncPITTables   = INFO, grouper_event
+
+## Grouper Sync Stem Set Table
+log4j.logger.edu.internet2.middleware.grouper.misc.SyncStemSets      = INFO, grouper_event
+
+## Grouper Migrate Legacy Attributes
+log4j.logger.edu.internet2.middleware.grouper.misc.MigrateLegacyAttributes = INFO, grouper_event
+
+### Subject API
+#log4j.logger.edu.internet2.middleware.subject                       = ERROR, grouper_error
+#log4j.logger.edu.internet2.middleware.subject.provider              = ERROR, grouper_error
+### Hibernate 
+#log4j.logger.org.hibernate                                          = ERROR, grouper_error
+### ehcache
+#log4j.logger.net.sf.ehcache                                         = ERROR, grouper_error
+### Spring
+#log4j.logger.org.springframework                                    = ERROR, grouper_error
+
+## Grouper Stress Testing
+log4j.logger.edu.internet2.middleware.grouper.stress                = INFO, grouper_debug
+
+
+#######################################################
+##Optional settings for debug logs
+#######################################################
+
+## Hooks debug info
+#log4j.logger.edu.internet2.middleware.grouper.hooks.examples.GroupTypeTupleIncludeExcludeHook = DEBUG
+#log4j.logger.edu.internet2.middleware.grouper.Group = DEBUG
+
+#log4j.logger.edu.internet2.middleware.grouper.hooks.examples.GroupTypeSecurityHook = DEBUG
+
+
+# added by grouper-installer
+log4j.logger.org.apache.tools.ant = WARN
diff --git a/manualBuild.sh b/manualBuild.sh
new file mode 100755
index 00000000..67b7d8a8
--- /dev/null
+++ b/manualBuild.sh
@@ -0,0 +1,5 @@
+docker build --pull --tag=tier/grouper:latest . \
+
+if [[ "$OSTYPE" == "darwin"* ]]; then
+  say build complete
+fi
diff --git a/test-compose/README.md b/test-compose/README.md
new file mode 100644
index 00000000..2dc53e0e
--- /dev/null
+++ b/test-compose/README.md
@@ -0,0 +1,64 @@
+The `test-compose` directory contains an example Grouper environment that starts up the various Grouper components. This example demonstrates how one might go about customizing and deploying their Grouper containers, using the TIER Grouper image as a base image. 
+
+In this example, the following cases are covered by this example:
+
+- A demo directory and SIS database are included, populated with approximately 1,000 test subjects.
+- Grouper is configured to use this directory as the subject source.
+- Grouper Loader creates groups based on the data in the SIS table.
+- Grouper UI is protected by a Shibboleth IdP (included) that connects to this directory server.
+- Grouper WS is protected by http basic auth that authenticates against the directory server.
+- Grouper publishes event data to a RabbitMQ instance (included). 
+
+It should be noted that while this example uses Docker Compose as a build and deployment vehicle, ideally one should use a CI server to build and publish institution specific images to an image repository as changes to the institution's customizations are committed to the source repository. These images would then be deployed to Docker Swarm, assuming that the appropriate Docker Secrets and Configs have been published to the swarm.
+
+# Getting Started
+
+From `test-compose` directory, run:
+
+```console
+$ docker-compose up -d
+```
+
+This will build each of our customized images after downloading the TIER Grouper image. It will create containers for each of our components using the configuation specified in the `docker-compose.yml` file.
+
+To stop the Grouper environment, run:
+
+```console
+$ docker-compose down
+```
+
+When doing iterative work, such as testing UI changes or configuration changes, I find if handy to use the following command:
+
+```console
+$ docker-compose kill; docker-compose rm -f; docker-compose build && docker-compose up
+```
+
+This command will clear out any remaining containers, as defined by the `docker-compose.yml` file, from the Docker host, rebuild our custom images, and start new instances of them. Because we do not specify the `-d` on the `up` command, the containers will not be forked causing the container logs to be displayed to the console, and the command prompt will not return until hitting `Ctrl+C`, which will kill the running containers.
+
+# Testing Endpoints
+
+The components can be accessed at the following urls, with
+
+Grouper UI: https://localhost/grouper (username: banderson, password: password (from ldap) or password1 (from tomcat-users.xml))
+Grouper WS: https://localhost:8443/grouper-ws/status?diagnosticType=all
+Grouper SCIM: https://localhost:9443/grouper-ws-scim/ (username: banderson, password: password (from tomcat-users.xml))
+RabbmitMQ: http://localhost:15672/ (username: guest, password: guest) 
+MariaDB: Port 3306 (username: root, password: (no password) )
+389-ds Directory: Port 389 (username: cn=Directory Manager, password: password)
+
+Note that when accessing the Grouper UI, Grouper WS, or Shibboleth IdP, your browser will prompt you about an untrusted certificate. It is OK to ignore the warning while working with this example configuration.
+
+# Additional Notes
+
+- In this example, we use a variety of ways to pass in passwords (Grouper database, LDAP, Grouper Client, and RabbitMQ). The point is to demonstrate possibilities and not demonstrating what is required. (See the image readme for more details.)
+- Docker `configs` are not supported by Docker Compose (when run in a non-Swarm mode), so those are represented in the `docker-compose.yml` file as bind mount volumes.
+- The Grouper config files in the `data` image's `conf` directory are used to build the sample grouper database and ldap store. They are not used when the container is instantiated as there is no Grouper runtime in this container.
+- The containers will use Docker Secrets and bind mounts for non-sensitive files that are read from the `configs-ans-secrets` directory in the `test-compose` directory.
+- With regard to RabbitMQ, the deployer must manually add a queue named `sampleQueue` to see Grouper messages in RabbitMQ. Messages will be dropped by RabbitMQ (and the Grouper Deamon will log errors) until this occurs.
+- In this example, we don't care about the IdP secrets. They are baked into the overlay instead of using Docker Secrets. (This is not best practice for an IdP configuration, but that isn't the focus of this example.)
+
+# Future TODOs
+
+- Add a Docker Stack example
+
+> This docker-stack.yml file uses the `configs` syntax which is part of the Compose file format v3.3 and requires Docker Engine version 17.06.0+ (released on 2017-06-28). Users of older engine versions will need convert `config` references to use bind mounts. After this change, everything else should work as expected.
diff --git a/test-compose/compose.sh b/test-compose/compose.sh
new file mode 100755
index 00000000..b572bad6
--- /dev/null
+++ b/test-compose/compose.sh
@@ -0,0 +1,2 @@
+#!/bin/sh
+docker-compose up --build -d
diff --git a/test-compose/configs-and-secrets/grouper/database_password.txt b/test-compose/configs-and-secrets/grouper/database_password.txt
new file mode 100644
index 00000000..e69de29b
diff --git a/test-compose/configs-and-secrets/grouper/grouper-loader.properties b/test-compose/configs-and-secrets/grouper/grouper-loader.properties
new file mode 100644
index 00000000..07c4f56a
--- /dev/null
+++ b/test-compose/configs-and-secrets/grouper/grouper-loader.properties
@@ -0,0 +1,62 @@
+#################################
+## LDAP connections
+#################################
+# specify the ldap connection with user, pass, url
+# the string after "ldap." is the ID of the connection, and it should not have
+# spaces or other special chars in it.  In this case is it "personLdap"
+ 
+#note the URL should start with ldap: or ldaps: if it is SSL.  
+#It should contain the server and port (optional if not default), and baseDn,
+#e.g. ldaps://ldapserver.school.edu:636/dc=school,dc=edu
+ldap.demo.url = ldap://data:389/dc=example,dc=edu
+ 
+#optional, if authenticated
+ldap.demo.user = cn=admin,dc=internet2,dc=edu
+ 
+#optional, if authenticated note the password can be stored encrypted in an external file
+ldap.demo.pass = ${java.lang.System.getenv().get('SUBJECT_SOURCE_LDAP_PASSWORD_FILE') != null ? org.apache.commons.io.FileUtils.readFileToString(java.lang.System.getenv().get('SUBJECT_SOURCE_LDAP_PASSWORD_FILE'), "utf-8") : java.lang.System.getenv().get('SUBJECT_SOURCE_LDAP_PASSWORD')}
+ 
+#optional, if you are using tls, set this to true.  Generally you will not be using an SSL URL to use TLS...
+ldap.demo.tls = false
+ 
+#optional, if using sasl
+#ldap.personLdap.saslAuthorizationId =
+#ldap.personLdap.saslRealm =
+ 
+#optional (note, time limit is for search operations, timeout is for connection timeouts),
+#most of these default to vt-ldap defaults.  times are in millis
+#validateOnCheckout defaults to true if all other validate methods are false
+#ldap.personLdap.batchSize =
+#ldap.personLdap.countLimit =
+#ldap.personLdap.timeLimit =
+#ldap.personLdap.timeout =
+#ldap.personLdap.minPoolSize =
+#ldap.personLdap.maxPoolSize =
+#ldap.personLdap.validateOnCheckIn =
+#ldap.personLdap.validateOnCheckOut =
+#ldap.personLdap.validatePeriodically =
+#ldap.personLdap.validateTimerPeriod =
+#ldap.personLdap.pruneTimerPeriod =
+#if connections expire after a certain amount of time, this is it, in millis, defaults to 300000 (5 minutes)
+#ldap.personLdap.expirationTime =
+
+#make the paths fully qualified and not relative to the loader group.
+loader.ldap.requireTopStemAsStemFromConfigGroup=false
+
+#####################################
+## Messaging integration with change log
+#####################################
+changeLog.consumer.rabbitMqMessagingSample.quartzCron = 0 * * * * ?                                                          
+
+# note, change "messagingSample" in key to be the name of the consumer.  e.g. changeLog.consumer.someNameAnyName.class
+changeLog.consumer.rabbitMqMessagingSample.class = edu.internet2.middleware.grouper.changeLog.esb.consumer.EsbConsumer
+
+changeLog.consumer.rabbitMqMessagingSample.publisher.class = edu.internet2.middleware.grouper.changeLog.esb.consumer.EsbMessagingPublisher
+changeLog.consumer.rabbitMqMessagingSample.publisher.messagingSystemName = rabbitmq
+# note, routingKey property is valid only for rabbitmq. For other messaging systems, it is ignored.
+changeLog.consumer.rabbitMqMessagingSample.publisher.routingKey = 
+## queue or topic
+changeLog.consumer.rabbitMqMessagingSample.publisher.messageQueueType = queue
+changeLog.consumer.rabbitMqMessagingSample.publisher.queueOrTopicName = sampleQueue
+## this is optional if not using "id" for subjectId, need to be a subject attribute in the sources.xml
+#changeLog.consumer.rabbitMqMessagingSample.publisher.addSubjectAttributes = email
diff --git a/test-compose/configs-and-secrets/grouper/grouper.client.properties b/test-compose/configs-and-secrets/grouper/grouper.client.properties
new file mode 100644
index 00000000..5169c718
--- /dev/null
+++ b/test-compose/configs-and-secrets/grouper/grouper.client.properties
@@ -0,0 +1,112 @@
+#
+# Copyright 2014 Internet2
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+#
+# Grouper client configuration
+# $Id: grouper.client.example.properties,v 1.24 2009-12-30 04:23:02 mchyzer Exp $
+#
+
+# The grouper client uses Grouper Configuration Overlays (documented on wiki)
+# By default the configuration is read from grouper.client.base.properties
+# (which should not be edited), and the grouper.client.properties overlays
+# the base settings.  See the grouper.client.base.properties for the possible
+# settings that can be applied to the grouper.client.properties
+
+########################################
+## LDAP connection settings
+########################################
+
+# url of directory, including the base DN (distinguished name)
+# e.g. ldap://server.school.edu/dc=school,dc=edu
+# e.g. ldaps://server.school.edu/dc=school,dc=edu
+grouperClient.ldap.url =
+
+# kerberos principal used to connect to ldap
+grouperClient.ldap.login =
+
+# password for shared secret authentication to ldap
+# or you can put a filename with an encrypted password
+grouperClient.ldap.password =
+
+########################################
+## Web service Connection settings
+########################################
+
+# url of web service, should include everything up to the first resource to access
+# e.g. http://groups.school.edu:8090/grouper-ws/servicesRest
+# e.g. https://groups.school.edu/grouper-ws/servicesRest
+grouperClient.webService.url = https://ws/grouper-ws/servicesRest
+
+# kerberos principal used to connect to web service
+grouperClient.webService.login = banderson
+
+# password for shared secret authentication to web service
+# or you can put a filename with an encrypted password
+grouperClient.webService.password = ${java.lang.System.getenv().get('GROUPER_CLIENT_WEBSERVICE_PASSWORD_FILE') != null ? org.apache.commons.io.FileUtils.readFileToString(java.lang.System.getenv().get('GROUPER_CLIENT_WEBSERVICE_PASSWORD_FILE'), "utf-8") : java.lang.System.getenv().get('GROUPER_CLIENT_WEBSERVICE_PASSWORD') }
+
+
+################################
+## Grouper Messaging System
+################################
+ 
+# name of messaging system which is the default
+grouper.messaging.default.name.of.messaging.system = rabbitmq
+ 
+# name of a messaging system.  note, "grouperBuiltinMessaging" can be arbitrary
+# grouper.messaging.system.grouperBuiltinMessaging.name = grouperBuiltinMessaging
+ 
+# class that implements edu.internet2.middleware.grouperClient.messaging.GrouperMessagingSystem
+# grouper.messaging.system.grouperBuiltinMessaging.class = edu.internet2.middleware.grouper.messaging.GrouperBuiltinMessagingSystem
+ 
+# name of a messaging system.  note, "grouperBuiltinMessaging" can be arbitrary
+grouper.messaging.system.rabbitmqSystem.name = rabbitmqSystem
+ 
+# class that implements edu.internet2.middleware.grouperClient.messaging.GrouperMessagingSystem
+grouper.messaging.system.rabbitmqSystem.class = edu.internet2.middleware.grouperMessagingRabbitmq.GrouperMessagingRabbitmqSystem
+ 
+# host address of rabbitmq queue
+grouper.messaging.system.rabbitmqSystem.host = rabbitmq
+ 
+# virtual host of rabbitmq queue
+grouper.messaging.system.rabbitmqSystem.virtualhost =
+ 
+# port of rabbitmq queue
+grouper.messaging.system.rabbitmqSystem.port =
+ 
+grouper.messaging.system.rabbitmqSystem.defaultPageSize = 10
+ 
+grouper.messaging.system.rabbitmqSystem.maxPageSize = 50
+ 
+ 
+# name of a messaging system, required
+grouper.messaging.system.rabbitmq.name = rabbitmq
+ 
+# default system settings to this messaging system, note, there is only one level of inheritance
+grouper.messaging.system.rabbitmq.defaultSystemName = rabbitmqSystem
+
+grouper.messaging.system.rabbitmq.user = guest
+
+#pass
+grouper.messaging.system.rabbitmq.password = ${java.lang.System.getenv().get('RABBITMQ_PASSWORD_FILE') != null ? org.apache.commons.io.FileUtils.readFileToString(java.lang.System.getenv().get('RABBITMQ_PASSWORD_FILE'), "utf-8") : java.lang.System.getenv().get('RABBITMQ_PASSWORD') }
+# set the following three properties if you want to use TLS connection to rabbitmq. All three need to be populated.
+# TLS Version
+#grouper.messaging.system.rabbitmqSystem.tlsVersion = TLSv1.1
+ 
+# path to trust store file
+#grouper.messaging.system.rabbitmqSystem.pathToTrustStore =
+ 
+# trust passphrase
+#grouper.messaging.system.rabbitmqSystem.trustPassphrase =
\ No newline at end of file
diff --git a/container_files/etc/grouper.hibernate.properties b/test-compose/configs-and-secrets/grouper/grouper.hibernate.properties
similarity index 59%
rename from container_files/etc/grouper.hibernate.properties
rename to test-compose/configs-and-secrets/grouper/grouper.hibernate.properties
index a198ae7b..96abb4cd 100644
--- a/container_files/etc/grouper.hibernate.properties
+++ b/test-compose/configs-and-secrets/grouper/grouper.hibernate.properties
@@ -1,19 +1,3 @@
-#
-# Copyright 2014 Internet2
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#   http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-
 #
 # Grouper Hibernate Configuration
 # $Id: grouper.hibernate.example.properties,v 1.9 2009-08-11 20:18:09 mchyzer Exp $
@@ -36,14 +20,10 @@
 # e.g. hsqldb (b):      jdbc:hsqldb:hsql://localhost:9001/grouper
 # e.g. postgres:        jdbc:postgresql://localhost:5432/database
 # e.g. mssql:           jdbc:sqlserver://localhost:3280;databaseName=grouper
-hibernate.connection.url = jdbc:mysql://#MYSQL_HOST#:3306/#MYSQL_DATABASE#
+hibernate.connection.url = jdbc:mysql://data:3306/grouper?CharSet=utf8&useUnicode=true&characterEncoding=utf8
 
-hibernate.connection.username         = #MYSQL_USER#
+hibernate.connection.username         = root
 # If you are using an empty password, depending upon your version of
 # Java and Ant you may need to specify a password of "".
 # Note: you can keep passwords external and encrypted: https://bugs.internet2.edu/jira/browse/GRP-122
-hibernate.connection.password         = #MYSQL_PASSWORD#
-
-
-hibernate.dialect               = org.hibernate.dialect.MySQL5Dialect
-hibernate.connection.driver_class = com.mysql.jdbc.Driver
\ No newline at end of file
+hibernate.connection.password.elConfig = ${java.lang.System.getenv().get('GROUPER_DATABASE_PASSWORD_FILE') != null ? org.apache.commons.io.FileUtils.readFileToString(java.lang.System.getenv().get('GROUPER_DATABASE_PASSWORD_FILE'), "utf-8") : java.lang.System.getenv().get('GROUPER_DATABASE_PASSWORD') }
diff --git a/test-compose/configs-and-secrets/grouper/grouper.properties b/test-compose/configs-and-secrets/grouper/grouper.properties
new file mode 100644
index 00000000..c9312878
--- /dev/null
+++ b/test-compose/configs-and-secrets/grouper/grouper.properties
@@ -0,0 +1,25 @@
+#
+# Grouper Configuration
+# $Id: grouper.example.properties,v 1.48 2009-12-16 06:02:30 mchyzer Exp $
+#
+
+# Grouper uses Grouper Configuration Overlays (documented on wiki)
+# By default the configuration is read from grouper.base.properties
+# (which should not be edited), and the grouper.properties overlays
+# the base settings.  See the grouper.base.properties for the possible
+# settings that can be applied to the grouper.properties
+
+#if groups like the wheel group should be auto-created for convenience (note: check config needs to be on)
+configuration.autocreate.system.groups = true
+
+# A wheel group allows you to enable non-GrouperSystem subjects to act
+# like a root user when interacting with the registry.
+groups.wheel.use                      = true
+
+# Set to the name of the group you want to treat as the wheel group.
+# The members of this group will be treated as root-like users.
+groups.wheel.group                    = etc:sysadmingroup
+
+# Used to allow Include Exclude groups
+grouperIncludeExclude.use = true
+grouperIncludeExclude.requireGroups.use = true
diff --git a/test-compose/configs-and-secrets/grouper/rabbitmq_password.txt b/test-compose/configs-and-secrets/grouper/rabbitmq_password.txt
new file mode 100644
index 00000000..158f6752
--- /dev/null
+++ b/test-compose/configs-and-secrets/grouper/rabbitmq_password.txt
@@ -0,0 +1 @@
+guest
\ No newline at end of file
diff --git a/test-compose/configs-and-secrets/grouper/subject.properties b/test-compose/configs-and-secrets/grouper/subject.properties
new file mode 100644
index 00000000..fd5b25cd
--- /dev/null
+++ b/test-compose/configs-and-secrets/grouper/subject.properties
@@ -0,0 +1,75 @@
+subject.sources.xml.location =
+
+subjectApi.source.ldap.id = ldap
+subjectApi.source.ldap.name = EDU Ldap 
+subjectApi.source.ldap.types = person
+subjectApi.source.ldap.adapterClass = edu.internet2.middleware.grouper.subj.GrouperJndiSourceAdapter
+subjectApi.source.ldap.param.INITIAL_CONTEXT_FACTORY.value = com.sun.jndi.ldap.LdapCtxFactory
+subjectApi.source.ldap.param.PROVIDER_URL.value = ldap://data:389
+subjectApi.source.ldap.param.SECURITY_AUTHENTICATION.value = simple
+subjectApi.source.ldap.param.SECURITY_PRINCIPAL.value = cn=admin,dc=internet2,dc=edu
+subjectApi.source.ldap.param.SECURITY_CREDENTIALS.value.elConfig = ${java.lang.System.getenv().get('SUBJECT_SOURCE_LDAP_PASSWORD_FILE') != null ? org.apache.commons.io.FileUtils.readFileToString(java.lang.System.getenv().get('SUBJECT_SOURCE_LDAP_PASSWORD_FILE'), "utf-8") : java.lang.System.getenv().get('SUBJECT_SOURCE_LDAP_PASSWORD')}
+subjectApi.source.ldap.param.SubjectID_AttributeType.value = uid
+subjectApi.source.ldap.param.SubjectID_formatToLowerCase.value = false
+subjectApi.source.ldap.param.Name_AttributeType.value = cn
+subjectApi.source.ldap.param.Description_AttributeType.value = cn
+subjectApi.source.ldap.param.VTLDAP_VALIDATOR.value = ConnectLdapValidator
+subjectApi.source.ldap.param.subjectVirtualAttribute_0_searchAttribute0.value = ${subjectUtils.defaultIfBlank(subject.getAttributeValueOrCommaSeparated('uid'), "")},${subjectUtils.defaultIfBlank(subject.getAttributeValueOrCommaSeparated('cn'), "")},${subjectUtils.defaultIfBlank(subject.getAttributeValueOrCommaSeparated('exampleEduRegId'), "")}
+subjectApi.source.ldap.param.sortAttribute0.value = cn
+subjectApi.source.ldap.param.searchAttribute0.value = searchAttribute0
+
+# STATUS SECTION for searches to filter out inactives and allow
+# the user to filter by status with e.g. status=all
+# this is optional, and advanced
+#
+# field in database or ldap or endpoint that is the status field
+#subjectApi.source.example.param.statusDatastoreFieldName.value = status
+
+# search string from user which represents the status.  e.g. status=active
+#subjectApi.source.example.param.statusLabel.value = status
+
+# available statuses from screen (if not specified, any will be allowed). comma separated list.
+# Note, this is optional and you probably dont want to configure it, it is mostly necessary
+# when you have multiple sources with statuses...  if someone types an invalid status
+# and you have this configured, it will not filter by it
+#subjectApi.source.example.param.statusesFromUser.value = Active, Inactive, Pending, All
+
+# all label from the user
+#subjectApi.source.example.param.statusAllFromUser.value = All
+
+# if no status is specified, this will be used (e.g. for active only).  Note, the value should be of the
+# form the user would type in
+#subjectApi.source.example.param.statusSearchDefault.value = status=active
+
+# translate between screen values of status, and the data store value.  Increment the 0 to 1, 2, etc for more translations.
+# so the user could enter: status=active, and that could translate to status_col=A.  The 'user' is what the user types in,
+# the 'datastore' is what is in the datastore.  The user part is not case-sensitive.  Note, this could be a many to one
+#subjectApi.source.example.param.statusTranslateUser0.value = active
+#subjectApi.source.example.param.statusTranslateDatastore0.value = A
+
+# subject identifier to store in grouper's member table.  this is used to increase speed of loader and perhaps for provisioning
+# you can have up to max 1 subject identifier
+#subjectApi.source.example.param.subjectIdentifierAttribute0.value = uid
+
+#searchSubject: find a subject by ID.  ID is generally an opaque and permanent identifier, e.g. 12345678.
+#  Each subject has one and only on ID.  Returns one result when searching for one ID.
+subjectApi.source.ldap.search.searchSubject.param.filter.value = (&(uid=%TERM%)(objectclass=person))
+subjectApi.source.ldap.search.searchSubject.param.scope.value = SUBTREE_SCOPE
+subjectApi.source.ldap.search.searchSubject.param.base.value = ou=people,dc=internet2,dc=edu
+
+#searchSubjectByIdentifier: find a subject by identifier.  Identifier is anything that uniquely
+#  identifies the user, e.g. jsmith or jsmith@institution.edu.
+#  Subjects can have multiple identifiers.  Note: it is nice to have if identifiers are unique
+#  even across sources.  Returns one result when searching for one identifier.
+subjectApi.source.ldap.search.searchSubjectByIdentifier.param.filter.value = (&(|(uid=%TERM%)(employeeNumber=%TERM%))(objectclass=person))
+subjectApi.source.ldap.search.searchSubjectByIdentifier.param.scope.value = SUBTREE_SCOPE
+subjectApi.source.ldap.search.searchSubjectByIdentifier.param.base.value = ou=people,dc=internet2,dc=edu
+
+#   search: find subjects by free form search.  Returns multiple results.
+
+subjectApi.source.ldap.search.search.param.filter.value = (&(|(|(uid=%TERM%)(cn=*%TERM%*))(uid=%TERM%*))(objectclass=person))
+subjectApi.source.ldap.search.search.param.scope.value = SUBTREE_SCOPE
+subjectApi.source.ldap.search.search.param.base.value = ou=people,dc=internet2,dc=edu
+
+subjectApi.source.ldap.attributes = givenName, sn, uid, mail, employeeNumber
+subjectApi.source.ldap.internalAttributes = searchAttribute0
diff --git a/test-compose/configs-and-secrets/httpd/cachain-cer.pem b/test-compose/configs-and-secrets/httpd/cachain-cer.pem
new file mode 100644
index 00000000..e69de29b
diff --git a/test-compose/configs-and-secrets/httpd/host-cert.pem b/test-compose/configs-and-secrets/httpd/host-cert.pem
new file mode 100644
index 00000000..9cc228a0
--- /dev/null
+++ b/test-compose/configs-and-secrets/httpd/host-cert.pem
@@ -0,0 +1,20 @@
+-----BEGIN CERTIFICATE-----
+MIIDPDCCAiQCCQDNZe8r0hVtuTANBgkqhkiG9w0BAQUFADBgMQswCQYDVQQGEwJV
+UzELMAkGA1UECAwCTUkxEjAQBgNVBAcMCUFubiBBcmJvcjEXMBUGA1UECgwOSW50
+ZXJuZXQyL1RJRVIxFzAVBgNVBAMMDnNwLmV4YW1wbGUub3JnMB4XDTE3MDkyMjE5
+NTAzNVoXDTI3MDkyMDE5NTAzNVowYDELMAkGA1UEBhMCVVMxCzAJBgNVBAgMAk1J
+MRIwEAYDVQQHDAlBbm4gQXJib3IxFzAVBgNVBAoMDkludGVybmV0Mi9USUVSMRcw
+FQYDVQQDDA5zcC5leGFtcGxlLm9yZzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC
+AQoCggEBAMTNJmsNpTpR4NrDJwOgK/o3UYlNdi1c6xBflt+liLAsQc160QReV4dS
+SGK8LZvN58a/BTIsH8dLhQlUQ8qQUY2AfolVrNxb7Waumeh/POzYUTRylnoGpU3W
+bGMEPxE/AdgP5U/adYvyu4XI5epv7wjZJOTqcVag15SalY+aso+ZC/5l+UzRxmWB
+ZxKTsSL1y7PFehY4/Zl3Y3oGVsVl/zspt5lteoZQeeVxUX29S3Af11yHY4xpEp+7
+rvAzY/nlsTiHAsUoCFK/NFQ2evvSRx52B9Fk1cWP1MDVDm2QjQqD9xBGYSnX6bhQ
+ejVx7JUJHlblu2Q5p5XdW0BihgFluoECAwEAATANBgkqhkiG9w0BAQUFAAOCAQEA
+n/qhYnIviPs4tglCdrw+M7gbqKNWadDC3F9HDYzlJMFeS/ae2turhEUgQPbYPDQQ
+eO3oOILtvCXNFUPM58jf8V5YFRrOqrTgx44kexQDaHO5YYNft5tF5TdvBYE2gOVr
+GdYrH2iSP8WX+Yy7JH5uqkfwWzEntWHJdey39rCWKAUCCB35+/2b4N53Qmlv2+ug
+CpNJYFtXInd4YMmM5HjXLyoWXtjnKiwDqYUCeYPSwAajnCqRqRXUX0gYTFDRiwRP
+HbmO9We0nqoc/71nikmGGoSRMO/zWVMFjwmAx1fGiWdU61sjGX8sHifzmVyJVEBI
+Z75p+JrWYZJYrx/vpWxL8g==
+-----END CERTIFICATE-----
diff --git a/test-compose/configs-and-secrets/httpd/host-key.pem b/test-compose/configs-and-secrets/httpd/host-key.pem
new file mode 100644
index 00000000..1b0b579b
--- /dev/null
+++ b/test-compose/configs-and-secrets/httpd/host-key.pem
@@ -0,0 +1,28 @@
+-----BEGIN PRIVATE KEY-----
+MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDEzSZrDaU6UeDa
+wycDoCv6N1GJTXYtXOsQX5bfpYiwLEHNetEEXleHUkhivC2bzefGvwUyLB/HS4UJ
+VEPKkFGNgH6JVazcW+1mrpnofzzs2FE0cpZ6BqVN1mxjBD8RPwHYD+VP2nWL8ruF
+yOXqb+8I2STk6nFWoNeUmpWPmrKPmQv+ZflM0cZlgWcSk7Ei9cuzxXoWOP2Zd2N6
+BlbFZf87KbeZbXqGUHnlcVF9vUtwH9dch2OMaRKfu67wM2P55bE4hwLFKAhSvzRU
+Nnr70kcedgfRZNXFj9TA1Q5tkI0Kg/cQRmEp1+m4UHo1ceyVCR5W5btkOaeV3VtA
+YoYBZbqBAgMBAAECggEAA/5t0ypZug9DUu0283niqpdIzlKGHXGPS6vE8hD37ytW
+wobFiyMm/5YJ5gcPnePV2lCyGEyQ8Ih10LSnE4tOPGLpLnxQn8A11ymf8fnzEJNr
+Qnc42o0b+bJqTLAfX4g5z1qzOqWiUQ7CA3sKP3G6FiHh/8tKNYnaFif09Q8cpJFb
+YDDkvm48NJgsrIoCgmaFIQIn+yDzGQKWwTNMIks+RByWpc67j1x1kiyQM1RfrEev
+Yyq/ZkP66IYZzmZKpFCWGs5qbRZdxyXNpq85DjwA99lAH7vxtMJHQM4z1h1eDH4L
+Ma5hEnmmHu4D5lF2GDQYflvuFdDGH5tThO6MV0IrSQKBgQD+kvEtNxJCMxLOVFyV
+NWF3pk/i2nkD+53t/VPXjMPtW7IesouEGzU82I/fT2wUTkNwFdkVpv37qoLypKZm
+npJFxr6abQNjiDh2Fsh8/iuJfvdZUFJbCEY6NS58qgjix8XCQKRD06EugK7uekIZ
+zJnttF3qVBBD8Z8Uwxz8i+jF1wKBgQDF51y/5XB6Bz47cdxw7P8NsfnTz2V3H0HU
+OnlEBANbhmBadjU8dqbM54Nxbn7VOdooXPuSnAKJ9vPDg1n5Y/GO+lgldNzfyK6g
+HnbldSu0zBvAaGvmAjLjetEtOkBqYkrHJlT6JAems/Kc/YX5uooAz9/jNJFXP9++
+KbjH3CzHZwKBgQC6ppxEDZPKi83nD/2NvMTIyFzcNFj0LaEepFW7vc7NkiSn0zrt
+0lEXWqUqEv5oaPWTEcHH2VdxFRTLuSL0LKGMnWqUqQcKDA9xrcSzuFvNhRTwHC81
+5XwwI1wBNV4sgFKj2WdW/6y2/szDt0oNxnC50zvkmlwOpPKBc4kmNaKmowKBgBmC
+uXIDIXyZcmw3QTNNWZNqXcnv8iRo4xN4dilOWyBxMfp3QmWI5feD4G2+0Jqr2nNZ
+iRRdB/bA3qtVQ0PinkDQBIzPg6lVNS1uv+TUNc4YgXtL+pyrq+Om8U/jMmqEQR9q
+0YltG49houSZyatnYGK6aSHgpNuaYD0jI66fsyYBAoGAMefyD0I/ncArjuf58hVQ
+zSjxfcvlja9okrC8ZgqsVluezcm4rQNcSjBnESGTCjJC7O29AofGLHkvnsBQDiGk
+hE38IRisd+okXdApr41ifWDhmtASud5q6wlhOpMmQxg+OALf1rTvFYhbnFEXV/KY
+e5A4iXLRIbxbmXZDa35Rebw=
+-----END PRIVATE KEY-----
diff --git a/test-compose/configs-and-secrets/shibboleth/idp-metadata.xml b/test-compose/configs-and-secrets/shibboleth/idp-metadata.xml
new file mode 100644
index 00000000..5a708244
--- /dev/null
+++ b/test-compose/configs-and-secrets/shibboleth/idp-metadata.xml
@@ -0,0 +1,219 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+     This is example metadata only. Do *NOT* supply it as is without review,
+     and do *NOT* provide it in real time to your partners.
+
+     This metadata is not dynamic - it will not change as your configuration changes.
+-->
+<EntityDescriptor  xmlns="urn:oasis:names:tc:SAML:2.0:metadata" xmlns:ds="http://www.w3.org/2000/09/xmldsig#" xmlns:shibmd="urn:mace:shibboleth:metadata:1.0" xmlns:xml="http://www.w3.org/XML/1998/namespace" xmlns:mdui="urn:oasis:names:tc:SAML:metadata:ui" entityID="https://idptestbed/idp/shibboleth">
+
+    <IDPSSODescriptor protocolSupportEnumeration="urn:oasis:names:tc:SAML:2.0:protocol urn:oasis:names:tc:SAML:1.1:protocol urn:mace:shibboleth:1.0">
+
+        <Extensions>
+            <shibmd:Scope regexp="false">example.org</shibmd:Scope>
+<!--
+    Fill in the details for your IdP here 
+
+            <mdui:UIInfo>
+                <mdui:DisplayName xml:lang="en">A Name for the IdP at idptestbed</mdui:DisplayName>
+                <mdui:Description xml:lang="en">Enter a description of your IdP at idptestbed</mdui:Description>
+                <mdui:Logo height="80" width="80">https://localhost/Path/To/Logo.png</mdui:Logo>
+            </mdui:UIInfo>
+-->
+        </Extensions>
+
+        <KeyDescriptor use="signing">
+            <ds:KeyInfo>
+                    <ds:X509Data>
+                        <ds:X509Certificate>
+MIIDEzCCAfugAwIBAgIUS9SuTXwsFVVG+LjOEAbLqqT/el0wDQYJKoZIhvcNAQEL
+BQAwFTETMBEGA1UEAwwKaWRwdGVzdGJlZDAeFw0xNTEyMTEwMjIwMjZaFw0zNTEy
+MTEwMjIwMjZaMBUxEzARBgNVBAMMCmlkcHRlc3RiZWQwggEiMA0GCSqGSIb3DQEB
+AQUAA4IBDwAwggEKAoIBAQCMAoDHx8xCIfv/6QKqt9mcHYmEJ8y2dKprUbpdcOjH
+YvNPIl/lHPsUyrb+Nc+q2CDeiWjVk1mWYq0UpIwpBMuw1H6+oOqr4VQRi65pin0M
+SfE0MWIaFo5FPvpvoptkHD4gvREbm4swyXGMczcMRfqgalFXhUD2wz8W3XAM5Cq2
+03XeJbj6TwjvKatG5XPdeUe2FBGuOO2q54L1hcIGnLMCQrg7D31lR13PJbjnJ0No
+5C3k8TPuny6vJsBC03GNLNKfmrKVTdzr3VKp1uay1G3DL9314fgmbl8HA5iRQmy+
+XInUU6/8NXZSF59p3ITAOvZQeZsbJjg5gGDip5OZo9YlAgMBAAGjWzBZMB0GA1Ud
+DgQWBBRPlM4VkKZ0U4ec9GrIhFQl0hNbLDA4BgNVHREEMTAvggppZHB0ZXN0YmVk
+hiFodHRwczovL2lkcHRlc3RiZWQvaWRwL3NoaWJib2xldGgwDQYJKoZIhvcNAQEL
+BQADggEBAIZ0a1ov3my3ljJG588I/PHx+TxAWONWmpKbO9c/qI3Drxk4oRIffiac
+ANxdvtabgIzrlk5gMMisD7oyqHJiWgKv5Bgctd8w3IS3lLl7wHX65mTKQRXniG98
+NIjkvfrhe2eeJxecOqnDI8GOhIGCIqZUn8ShdM/yHjhQ2Mh0Hj3U0LlKvnmfGSQl
+j0viGwbFCaNaIP3zc5UmCrdE5h8sWL3Fu7ILKM9RyFa2ILHrJScV9t623IcHffHP
+IeaY/WtuapsrqRFxuQL9QFWN0FsRIdLmjTq+00+B/XnnKRKFBuWfjhHLF/uu8f+E
+t6Lf23Kb8yD6ZR7dihMZAGHnYQ/hlhM=
+                        </ds:X509Certificate>
+                    </ds:X509Data>
+            </ds:KeyInfo>
+
+        </KeyDescriptor>
+        <KeyDescriptor use="signing">
+            <ds:KeyInfo>
+                    <ds:X509Data>
+                        <ds:X509Certificate>
+MIIDFDCCAfygAwIBAgIVAN3vv+b7KN5Se9m1RZsCllp/B/hdMA0GCSqGSIb3DQEB
+CwUAMBUxEzARBgNVBAMMCmlkcHRlc3RiZWQwHhcNMTUxMjExMDIyMDE0WhcNMzUx
+MjExMDIyMDE0WjAVMRMwEQYDVQQDDAppZHB0ZXN0YmVkMIIBIjANBgkqhkiG9w0B
+AQEFAAOCAQ8AMIIBCgKCAQEAh91caeY0Q85uhaUyqFwP2bMjwMFxMzRlAoqBHd7g
+u6eo4duaeLz1BaoR2XTBpNNvFR5oHH+TkKahVDGeH5+kcnIpxI8JPdsZml1srvf2
+Z6dzJsulJZUdpqnngycTkGtZgEoC1vmYVky2BSAIIifmdh6s0epbHnMGLsHzMKfJ
+Cb/Q6dYzRWTCPtzE2VMuQqqWgeyMr7u14x/Vqr9RPEFsgY8GIu5jzB6AyUIwrLg+
+MNkv6aIdcHwxYTGL7ijfy6rSWrgBflQoYRYNEnseK0ZHgJahz4ovCag6wZAoPpBs
+uYlY7lEr89Ucb6NHx3uqGMsXlDFdE4QwfDLLhCYHPvJ0uwIDAQABo1swWTAdBgNV
+HQ4EFgQUAkOgED3iYdmvQEOMm6u/JmD/UTQwOAYDVR0RBDEwL4IKaWRwdGVzdGJl
+ZIYhaHR0cHM6Ly9pZHB0ZXN0YmVkL2lkcC9zaGliYm9sZXRoMA0GCSqGSIb3DQEB
+CwUAA4IBAQBIdd4YWlnvJjql8+zKKgmWgIY7U8DA8e6QcbAf8f8cdE33RSnjI63X
+sv/y9GfmbAVAD6RIAXPFFeRYJ08GOxGI9axfNaKdlsklJ9bk4ducHqgCSWYVer3s
+RQBjxyOfSTvk9YCJvdJVQRJLcCvxwKakFCsOSnV3t9OvN86Ak+fKPVB5j2fM/0fZ
+Kqjn3iqgdNPTLXPsuJLJO5lITRiBa4onmVelAiCstI9PQiaEck+oAHnMTnC9JE/B
+DHv3e4rwq3LznlqPw0GSd7xqNTdMDwNOWjkuOr3sGpWS8ms/ZHHXV1Vd22uPe70i
+s00xrv14zLifcc8oj5DYzOhYRifRXgHX
+                        </ds:X509Certificate>
+                    </ds:X509Data>
+            </ds:KeyInfo>
+
+        </KeyDescriptor>
+        <KeyDescriptor use="encryption">
+            <ds:KeyInfo>
+                    <ds:X509Data>
+                        <ds:X509Certificate>
+MIIDEzCCAfugAwIBAgIUG6Nn1rlERS1vsi88tcdzSYX0oqAwDQYJKoZIhvcNAQEL
+BQAwFTETMBEGA1UEAwwKaWRwdGVzdGJlZDAeFw0xNTEyMTEwMjIwMTRaFw0zNTEy
+MTEwMjIwMTRaMBUxEzARBgNVBAMMCmlkcHRlc3RiZWQwggEiMA0GCSqGSIb3DQEB
+AQUAA4IBDwAwggEKAoIBAQCBXv0o3fmT8iluyLjJ4lBAVCW+ZRVyEXPYQuRi7vfD
+cO4a6d1kxiJLsaK0W88VNxjFQRr8PgDkWr28vwoH1rgk4pLsszLD48DBzD942peJ
+l/S6FnsIJjmaHcBh4pbNhU4yowu63iKkvttrcZAEbpEro6Z8CziWEx8sywoaYEQG
+ifPkr9ORV6Cn3txq+9gMBePG41GrtZrUGIu+xrndL0Shh4Pq0eq/9MAsVlIIXEa8
+9WfH8J2kFcTOfoWtIc70b7TLZQsx4YnNcnrGLSUEcstFyPLX+Xtv5SNZF89OOIxX
+VNjNvgE5DbJb9hMM4UAFqI+1bo9QqtxwThjc/sOvIxzNAgMBAAGjWzBZMB0GA1Ud
+DgQWBBStTyogRPuAVG6q7yPyav1uvE+7pTA4BgNVHREEMTAvggppZHB0ZXN0YmVk
+hiFodHRwczovL2lkcHRlc3RiZWQvaWRwL3NoaWJib2xldGgwDQYJKoZIhvcNAQEL
+BQADggEBAFMfoOv+oISGjvamq7+Y4G7ep5vxlAPeK3RATYPYvAmyH946qZXh98ni
+QXyuqZW5P5eEt86toY45IwDU5r09SKwHughEe99iiEkxh0mb2qo84qX9/qcg+kyN
+jeLd/OSyolpUCEFNwOFcog7pj7Eer+6AHbwTn1Mjb5TBsKwtDMJsaxPvdj0u7M5r
+xL/wHkFhn1rCo2QiojzjSlV3yLTh49iTyhE3cG+RxaNKDCxhp0jSSLX1BW/ZoPA8
++PMJEA+Q0QbyRD8aJOHN5O8jGxCa/ZzcOnYVL6AsEXoDiY3vAUYh1FUonOWw0m9H
+p+tGUbGS2l873J5PrsbpeKEVR/IIoKo=
+                        </ds:X509Certificate>
+                    </ds:X509Data>
+            </ds:KeyInfo>
+
+        </KeyDescriptor>
+
+        <!--
+        <ArtifactResolutionService Binding="urn:oasis:names:tc:SAML:1.0:bindings:SOAP-binding" Location="https://localhost:8443/idp/profile/SAML1/SOAP/ArtifactResolution" index="1"/>
+        <ArtifactResolutionService Binding="urn:oasis:names:tc:SAML:2.0:bindings:SOAP" Location="https://localhost:8443/idp/profile/SAML2/SOAP/ArtifactResolution" index="2"/>
+        -->
+
+        <!--
+        <SingleLogoutService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect" Location="https://localhost/idp/profile/SAML2/Redirect/SLO"/>
+        <SingleLogoutService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST" Location="https://localhost/idp/profile/SAML2/POST/SLO"/>
+        <SingleLogoutService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST-SimpleSign" Location="https://localhost/idp/profile/SAML2/POST-SimpleSign/SLO"/>
+        <SingleLogoutService Binding="urn:oasis:names:tc:SAML:2.0:bindings:SOAP" Location="https://localhost:8443/idp/profile/SAML2/SOAP/SLO"/>
+        -->
+
+        <NameIDFormat>urn:mace:shibboleth:1.0:nameIdentifier</NameIDFormat>
+        <NameIDFormat>urn:oasis:names:tc:SAML:2.0:nameid-format:transient</NameIDFormat>
+
+        <SingleSignOnService Binding="urn:mace:shibboleth:1.0:profiles:AuthnRequest" Location="https://localhost:4443/idp/profile/Shibboleth/SSO"/>
+        <SingleSignOnService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST" Location="https://localhost:4443/idp/profile/SAML2/POST/SSO"/>
+        <SingleSignOnService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST-SimpleSign" Location="https://localhost:4443/idp/profile/SAML2/POST-SimpleSign/SSO"/>
+        <SingleSignOnService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect" Location="https://localhost:4443/idp/profile/SAML2/Redirect/SSO"/>
+
+    </IDPSSODescriptor>
+
+
+    <AttributeAuthorityDescriptor protocolSupportEnumeration="urn:oasis:names:tc:SAML:1.1:protocol">
+
+        <Extensions>
+            <shibmd:Scope regexp="false">localhost</shibmd:Scope>
+        </Extensions>
+
+        <KeyDescriptor use="signing">
+            <ds:KeyInfo>
+                    <ds:X509Data>
+                        <ds:X509Certificate>
+MIIDEzCCAfugAwIBAgIUS9SuTXwsFVVG+LjOEAbLqqT/el0wDQYJKoZIhvcNAQEL
+BQAwFTETMBEGA1UEAwwKaWRwdGVzdGJlZDAeFw0xNTEyMTEwMjIwMjZaFw0zNTEy
+MTEwMjIwMjZaMBUxEzARBgNVBAMMCmlkcHRlc3RiZWQwggEiMA0GCSqGSIb3DQEB
+AQUAA4IBDwAwggEKAoIBAQCMAoDHx8xCIfv/6QKqt9mcHYmEJ8y2dKprUbpdcOjH
+YvNPIl/lHPsUyrb+Nc+q2CDeiWjVk1mWYq0UpIwpBMuw1H6+oOqr4VQRi65pin0M
+SfE0MWIaFo5FPvpvoptkHD4gvREbm4swyXGMczcMRfqgalFXhUD2wz8W3XAM5Cq2
+03XeJbj6TwjvKatG5XPdeUe2FBGuOO2q54L1hcIGnLMCQrg7D31lR13PJbjnJ0No
+5C3k8TPuny6vJsBC03GNLNKfmrKVTdzr3VKp1uay1G3DL9314fgmbl8HA5iRQmy+
+XInUU6/8NXZSF59p3ITAOvZQeZsbJjg5gGDip5OZo9YlAgMBAAGjWzBZMB0GA1Ud
+DgQWBBRPlM4VkKZ0U4ec9GrIhFQl0hNbLDA4BgNVHREEMTAvggppZHB0ZXN0YmVk
+hiFodHRwczovL2lkcHRlc3RiZWQvaWRwL3NoaWJib2xldGgwDQYJKoZIhvcNAQEL
+BQADggEBAIZ0a1ov3my3ljJG588I/PHx+TxAWONWmpKbO9c/qI3Drxk4oRIffiac
+ANxdvtabgIzrlk5gMMisD7oyqHJiWgKv5Bgctd8w3IS3lLl7wHX65mTKQRXniG98
+NIjkvfrhe2eeJxecOqnDI8GOhIGCIqZUn8ShdM/yHjhQ2Mh0Hj3U0LlKvnmfGSQl
+j0viGwbFCaNaIP3zc5UmCrdE5h8sWL3Fu7ILKM9RyFa2ILHrJScV9t623IcHffHP
+IeaY/WtuapsrqRFxuQL9QFWN0FsRIdLmjTq+00+B/XnnKRKFBuWfjhHLF/uu8f+E
+t6Lf23Kb8yD6ZR7dihMZAGHnYQ/hlhM=
+                        </ds:X509Certificate>
+                    </ds:X509Data>
+            </ds:KeyInfo>
+
+        </KeyDescriptor>
+        <KeyDescriptor use="signing">
+            <ds:KeyInfo>
+                    <ds:X509Data>
+                        <ds:X509Certificate>
+MIIDFDCCAfygAwIBAgIVAN3vv+b7KN5Se9m1RZsCllp/B/hdMA0GCSqGSIb3DQEB
+CwUAMBUxEzARBgNVBAMMCmlkcHRlc3RiZWQwHhcNMTUxMjExMDIyMDE0WhcNMzUx
+MjExMDIyMDE0WjAVMRMwEQYDVQQDDAppZHB0ZXN0YmVkMIIBIjANBgkqhkiG9w0B
+AQEFAAOCAQ8AMIIBCgKCAQEAh91caeY0Q85uhaUyqFwP2bMjwMFxMzRlAoqBHd7g
+u6eo4duaeLz1BaoR2XTBpNNvFR5oHH+TkKahVDGeH5+kcnIpxI8JPdsZml1srvf2
+Z6dzJsulJZUdpqnngycTkGtZgEoC1vmYVky2BSAIIifmdh6s0epbHnMGLsHzMKfJ
+Cb/Q6dYzRWTCPtzE2VMuQqqWgeyMr7u14x/Vqr9RPEFsgY8GIu5jzB6AyUIwrLg+
+MNkv6aIdcHwxYTGL7ijfy6rSWrgBflQoYRYNEnseK0ZHgJahz4ovCag6wZAoPpBs
+uYlY7lEr89Ucb6NHx3uqGMsXlDFdE4QwfDLLhCYHPvJ0uwIDAQABo1swWTAdBgNV
+HQ4EFgQUAkOgED3iYdmvQEOMm6u/JmD/UTQwOAYDVR0RBDEwL4IKaWRwdGVzdGJl
+ZIYhaHR0cHM6Ly9pZHB0ZXN0YmVkL2lkcC9zaGliYm9sZXRoMA0GCSqGSIb3DQEB
+CwUAA4IBAQBIdd4YWlnvJjql8+zKKgmWgIY7U8DA8e6QcbAf8f8cdE33RSnjI63X
+sv/y9GfmbAVAD6RIAXPFFeRYJ08GOxGI9axfNaKdlsklJ9bk4ducHqgCSWYVer3s
+RQBjxyOfSTvk9YCJvdJVQRJLcCvxwKakFCsOSnV3t9OvN86Ak+fKPVB5j2fM/0fZ
+Kqjn3iqgdNPTLXPsuJLJO5lITRiBa4onmVelAiCstI9PQiaEck+oAHnMTnC9JE/B
+DHv3e4rwq3LznlqPw0GSd7xqNTdMDwNOWjkuOr3sGpWS8ms/ZHHXV1Vd22uPe70i
+s00xrv14zLifcc8oj5DYzOhYRifRXgHX
+                        </ds:X509Certificate>
+                    </ds:X509Data>
+            </ds:KeyInfo>
+
+        </KeyDescriptor>
+        <KeyDescriptor use="encryption">
+            <ds:KeyInfo>
+                    <ds:X509Data>
+                        <ds:X509Certificate>
+MIIDEzCCAfugAwIBAgIUG6Nn1rlERS1vsi88tcdzSYX0oqAwDQYJKoZIhvcNAQEL
+BQAwFTETMBEGA1UEAwwKaWRwdGVzdGJlZDAeFw0xNTEyMTEwMjIwMTRaFw0zNTEy
+MTEwMjIwMTRaMBUxEzARBgNVBAMMCmlkcHRlc3RiZWQwggEiMA0GCSqGSIb3DQEB
+AQUAA4IBDwAwggEKAoIBAQCBXv0o3fmT8iluyLjJ4lBAVCW+ZRVyEXPYQuRi7vfD
+cO4a6d1kxiJLsaK0W88VNxjFQRr8PgDkWr28vwoH1rgk4pLsszLD48DBzD942peJ
+l/S6FnsIJjmaHcBh4pbNhU4yowu63iKkvttrcZAEbpEro6Z8CziWEx8sywoaYEQG
+ifPkr9ORV6Cn3txq+9gMBePG41GrtZrUGIu+xrndL0Shh4Pq0eq/9MAsVlIIXEa8
+9WfH8J2kFcTOfoWtIc70b7TLZQsx4YnNcnrGLSUEcstFyPLX+Xtv5SNZF89OOIxX
+VNjNvgE5DbJb9hMM4UAFqI+1bo9QqtxwThjc/sOvIxzNAgMBAAGjWzBZMB0GA1Ud
+DgQWBBStTyogRPuAVG6q7yPyav1uvE+7pTA4BgNVHREEMTAvggppZHB0ZXN0YmVk
+hiFodHRwczovL2lkcHRlc3RiZWQvaWRwL3NoaWJib2xldGgwDQYJKoZIhvcNAQEL
+BQADggEBAFMfoOv+oISGjvamq7+Y4G7ep5vxlAPeK3RATYPYvAmyH946qZXh98ni
+QXyuqZW5P5eEt86toY45IwDU5r09SKwHughEe99iiEkxh0mb2qo84qX9/qcg+kyN
+jeLd/OSyolpUCEFNwOFcog7pj7Eer+6AHbwTn1Mjb5TBsKwtDMJsaxPvdj0u7M5r
+xL/wHkFhn1rCo2QiojzjSlV3yLTh49iTyhE3cG+RxaNKDCxhp0jSSLX1BW/ZoPA8
++PMJEA+Q0QbyRD8aJOHN5O8jGxCa/ZzcOnYVL6AsEXoDiY3vAUYh1FUonOWw0m9H
+p+tGUbGS2l873J5PrsbpeKEVR/IIoKo=
+                        </ds:X509Certificate>
+                    </ds:X509Data>
+            </ds:KeyInfo>
+
+        </KeyDescriptor>
+
+        
+        <AttributeService Binding="urn:oasis:names:tc:SAML:1.0:bindings:SOAP-binding" Location="https://localhost:8443/idp/profile/SAML1/SOAP/AttributeQuery"/>
+        <AttributeService Binding="urn:oasis:names:tc:SAML:2.0:bindings:SOAP" Location="https://localhost:8443/idp/profile/SAML2/SOAP/AttributeQuery"/> 
+        <!-- If you uncomment the above you should add urn:oasis:names:tc:SAML:2.0:protocol to the protocolSupportEnumeration above -->
+
+    </AttributeAuthorityDescriptor>
+
+</EntityDescriptor>
diff --git a/test-compose/configs-and-secrets/shibboleth/shibboleth2.xml b/test-compose/configs-and-secrets/shibboleth/shibboleth2.xml
new file mode 100644
index 00000000..0c38f822
--- /dev/null
+++ b/test-compose/configs-and-secrets/shibboleth/shibboleth2.xml
@@ -0,0 +1,136 @@
+<SPConfig xmlns="urn:mace:shibboleth:2.0:native:sp:config"
+    xmlns:conf="urn:mace:shibboleth:2.0:native:sp:config"
+    xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion"
+    xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol"    
+    xmlns:md="urn:oasis:names:tc:SAML:2.0:metadata"
+    clockSkew="180">
+
+    <!--
+    By default, in-memory StorageService, ReplayCache, ArtifactMap, and SessionCache
+    are used. See example-shibboleth2.xml for samples of explicitly configuring them.
+    -->
+
+    <!--
+    To customize behavior for specific resources on Apache, and to link vhosts or
+    resources to ApplicationOverride settings below, use web server options/commands.
+    See https://wiki.shibboleth.net/confluence/display/SHIB2/NativeSPConfigurationElements for help.
+    
+    For examples with the RequestMap XML syntax instead, see the example-shibboleth2.xml
+    file, and the https://wiki.shibboleth.net/confluence/display/SHIB2/NativeSPRequestMapHowTo topic.
+    -->
+    <TCPListener address="127.0.0.1" port="1600"/> 
+
+
+    <!-- The ApplicationDefaults element is where most of Shibboleth's SAML bits are defined. -->
+    <ApplicationDefaults entityID="https://grouperdemo/shibboleth"
+                         REMOTE_USER="uid">
+
+        <!--
+        Controls session lifetimes, address checks, cookie handling, and the protocol handlers.
+        You MUST supply an effectively unique handlerURL value for each of your applications.
+        The value defaults to /Shibboleth.sso, and should be a relative path, with the SP computing
+        a relative value based on the virtual host. Using handlerSSL="true", the default, will force
+        the protocol to be https. You should also set cookieProps to "https" for SSL-only sites.
+        Note that while we default checkAddress to "false", this has a negative impact on the
+        security of your site. Stealing sessions via cookie theft is much easier with this disabled.
+        -->
+        <Sessions lifetime="28800" timeout="28800" relayState="ss:mem"
+                  checkAddress="false" handlerSSL="true" cookieProps="https">
+
+            <!--
+            Configures SSO for a default IdP. To allow for >1 IdP, remove
+            entityID property and adjust discoveryURL to point to discovery service.
+            (Set discoveryProtocol to "WAYF" for legacy Shibboleth WAYF support.)
+            You can also override entityID on /Login query string, or in RequestMap/htaccess.
+            -->
+		<SSO entityID="https://idptestbed/idp/shibboleth">
+			SAML2
+		</SSO>
+
+            <!-- SAML and local-only logout. -->
+            <Logout>SAML2 Local</Logout>
+            
+            <!-- Extension service that generates "approximate" metadata based on SP configuration. -->
+            <Handler type="MetadataGenerator" Location="/Metadata" signing="false"/>
+
+            <!-- Status reporting service. -->
+            <Handler type="Status" Location="/Status" acl="127.0.0.1 ::1"/>
+
+            <!-- Session diagnostic service. -->
+            <Handler type="Session" Location="/Session" showAttributeValues="true"/>
+
+            <!-- JSON feed of discovery information. -->
+            <Handler type="DiscoveryFeed" Location="/DiscoFeed"/>
+        </Sessions>
+
+        <!--
+        Allows overriding of error template information/filenames. You can
+        also add attributes with values that can be plugged into the templates.
+        -->
+        <Errors supportContact="root@localhost"
+            helpLocation="/about.html"
+            styleSheet="/shibboleth-sp/main.css"/>
+        
+        <!-- Example of remotely supplied batch of signed metadata. -->
+        <!--
+        <MetadataProvider type="XML" validate="true"
+	      uri="http://example.org/federation-metadata.xml"
+              backingFilePath="federation-metadata.xml" reloadInterval="7200">
+            <MetadataFilter type="RequireValidUntil" maxValidityInterval="2419200"/>
+            <MetadataFilter type="Signature" certificate="fedsigner.pem"/>
+            <DiscoveryFilter type="Blacklist" matcher="EntityAttributes" trimTags="true" 
+              attributeName="http://macedir.org/entity-category"
+              attributeNameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri"
+              attributeValue="http://refeds.org/category/hide-from-discovery" />
+        </MetadataProvider>
+        -->
+
+        <MetadataProvider type="XML" validate="true" file="idp-metadata.xml"/>
+
+        <!--
+        InCommon
+	  <MetadataProvider type="XML" validate="true"
+		uri="http://md.incommon.org/InCommon/InCommon-metadata.xml"
+              backingFilePath="federation-metadata.xml" reloadInterval="7200">
+            <MetadataFilter type="RequireValidUntil" maxValidityInterval="2419200"/>
+		<MetdataFilter type="Signature" certificate="inc-md-cert.pem"/>
+            <DiscoveryFilter type="Blacklist" matcher="EntityAttributes" trimTags="true" 
+              attributeName="http://macedir.org/entity-category"
+              attributeNameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri"
+              attributeValue="http://refeds.org/category/hide-from-discovery" />
+        </MetadataProvider>
+        -->
+
+        <!-- Map to extract attributes from SAML assertions. -->
+        <AttributeExtractor type="XML" validate="true" reloadChanges="false" path="attribute-map.xml"/>
+        
+        <!-- Use a SAML query if no attributes are supplied during SSO. -->
+        <AttributeResolver type="Query" subjectMatch="true"/>
+
+        <!-- Default filtering policy for recognized attributes, lets other data pass. -->
+        <AttributeFilter type="XML" validate="true" path="attribute-policy.xml"/>
+
+        <!-- Simple file-based resolver for using a single keypair. -->
+        <CredentialResolver type="File" key="sp-key.pem" certificate="sp-cert.pem"/>
+
+        <!--
+        The default settings can be overridden by creating ApplicationOverride elements (see
+        the https://wiki.shibboleth.net/confluence/display/SHIB2/NativeSPApplicationOverride topic).
+        Resource requests are mapped by web server commands, or the RequestMapper, to an
+        applicationId setting.
+        
+        Example of a second application (for a second vhost) that has a different entityID.
+        Resources on the vhost would map to an applicationId of "admin":
+        -->
+        <!--
+        <ApplicationOverride id="admin" entityID="https://admin.example.org/shibboleth"/>
+        -->
+    </ApplicationDefaults>
+    
+    <!-- Policies that determine how to process and authenticate runtime messages. -->
+    <SecurityPolicyProvider type="XML" validate="true" path="security-policy.xml"/>
+
+    <!-- Low-level configuration about protocols and bindings available for use. -->
+    <ProtocolProvider type="XML" validate="true" reloadChanges="false" path="protocols.xml"/>
+
+</SPConfig>
diff --git a/test-compose/configs-and-secrets/shibboleth/sp-cert.pem b/test-compose/configs-and-secrets/shibboleth/sp-cert.pem
new file mode 100644
index 00000000..9cc228a0
--- /dev/null
+++ b/test-compose/configs-and-secrets/shibboleth/sp-cert.pem
@@ -0,0 +1,20 @@
+-----BEGIN CERTIFICATE-----
+MIIDPDCCAiQCCQDNZe8r0hVtuTANBgkqhkiG9w0BAQUFADBgMQswCQYDVQQGEwJV
+UzELMAkGA1UECAwCTUkxEjAQBgNVBAcMCUFubiBBcmJvcjEXMBUGA1UECgwOSW50
+ZXJuZXQyL1RJRVIxFzAVBgNVBAMMDnNwLmV4YW1wbGUub3JnMB4XDTE3MDkyMjE5
+NTAzNVoXDTI3MDkyMDE5NTAzNVowYDELMAkGA1UEBhMCVVMxCzAJBgNVBAgMAk1J
+MRIwEAYDVQQHDAlBbm4gQXJib3IxFzAVBgNVBAoMDkludGVybmV0Mi9USUVSMRcw
+FQYDVQQDDA5zcC5leGFtcGxlLm9yZzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC
+AQoCggEBAMTNJmsNpTpR4NrDJwOgK/o3UYlNdi1c6xBflt+liLAsQc160QReV4dS
+SGK8LZvN58a/BTIsH8dLhQlUQ8qQUY2AfolVrNxb7Waumeh/POzYUTRylnoGpU3W
+bGMEPxE/AdgP5U/adYvyu4XI5epv7wjZJOTqcVag15SalY+aso+ZC/5l+UzRxmWB
+ZxKTsSL1y7PFehY4/Zl3Y3oGVsVl/zspt5lteoZQeeVxUX29S3Af11yHY4xpEp+7
+rvAzY/nlsTiHAsUoCFK/NFQ2evvSRx52B9Fk1cWP1MDVDm2QjQqD9xBGYSnX6bhQ
+ejVx7JUJHlblu2Q5p5XdW0BihgFluoECAwEAATANBgkqhkiG9w0BAQUFAAOCAQEA
+n/qhYnIviPs4tglCdrw+M7gbqKNWadDC3F9HDYzlJMFeS/ae2turhEUgQPbYPDQQ
+eO3oOILtvCXNFUPM58jf8V5YFRrOqrTgx44kexQDaHO5YYNft5tF5TdvBYE2gOVr
+GdYrH2iSP8WX+Yy7JH5uqkfwWzEntWHJdey39rCWKAUCCB35+/2b4N53Qmlv2+ug
+CpNJYFtXInd4YMmM5HjXLyoWXtjnKiwDqYUCeYPSwAajnCqRqRXUX0gYTFDRiwRP
+HbmO9We0nqoc/71nikmGGoSRMO/zWVMFjwmAx1fGiWdU61sjGX8sHifzmVyJVEBI
+Z75p+JrWYZJYrx/vpWxL8g==
+-----END CERTIFICATE-----
diff --git a/test-compose/configs-and-secrets/shibboleth/sp-key.pem b/test-compose/configs-and-secrets/shibboleth/sp-key.pem
new file mode 100644
index 00000000..1b0b579b
--- /dev/null
+++ b/test-compose/configs-and-secrets/shibboleth/sp-key.pem
@@ -0,0 +1,28 @@
+-----BEGIN PRIVATE KEY-----
+MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDEzSZrDaU6UeDa
+wycDoCv6N1GJTXYtXOsQX5bfpYiwLEHNetEEXleHUkhivC2bzefGvwUyLB/HS4UJ
+VEPKkFGNgH6JVazcW+1mrpnofzzs2FE0cpZ6BqVN1mxjBD8RPwHYD+VP2nWL8ruF
+yOXqb+8I2STk6nFWoNeUmpWPmrKPmQv+ZflM0cZlgWcSk7Ei9cuzxXoWOP2Zd2N6
+BlbFZf87KbeZbXqGUHnlcVF9vUtwH9dch2OMaRKfu67wM2P55bE4hwLFKAhSvzRU
+Nnr70kcedgfRZNXFj9TA1Q5tkI0Kg/cQRmEp1+m4UHo1ceyVCR5W5btkOaeV3VtA
+YoYBZbqBAgMBAAECggEAA/5t0ypZug9DUu0283niqpdIzlKGHXGPS6vE8hD37ytW
+wobFiyMm/5YJ5gcPnePV2lCyGEyQ8Ih10LSnE4tOPGLpLnxQn8A11ymf8fnzEJNr
+Qnc42o0b+bJqTLAfX4g5z1qzOqWiUQ7CA3sKP3G6FiHh/8tKNYnaFif09Q8cpJFb
+YDDkvm48NJgsrIoCgmaFIQIn+yDzGQKWwTNMIks+RByWpc67j1x1kiyQM1RfrEev
+Yyq/ZkP66IYZzmZKpFCWGs5qbRZdxyXNpq85DjwA99lAH7vxtMJHQM4z1h1eDH4L
+Ma5hEnmmHu4D5lF2GDQYflvuFdDGH5tThO6MV0IrSQKBgQD+kvEtNxJCMxLOVFyV
+NWF3pk/i2nkD+53t/VPXjMPtW7IesouEGzU82I/fT2wUTkNwFdkVpv37qoLypKZm
+npJFxr6abQNjiDh2Fsh8/iuJfvdZUFJbCEY6NS58qgjix8XCQKRD06EugK7uekIZ
+zJnttF3qVBBD8Z8Uwxz8i+jF1wKBgQDF51y/5XB6Bz47cdxw7P8NsfnTz2V3H0HU
+OnlEBANbhmBadjU8dqbM54Nxbn7VOdooXPuSnAKJ9vPDg1n5Y/GO+lgldNzfyK6g
+HnbldSu0zBvAaGvmAjLjetEtOkBqYkrHJlT6JAems/Kc/YX5uooAz9/jNJFXP9++
+KbjH3CzHZwKBgQC6ppxEDZPKi83nD/2NvMTIyFzcNFj0LaEepFW7vc7NkiSn0zrt
+0lEXWqUqEv5oaPWTEcHH2VdxFRTLuSL0LKGMnWqUqQcKDA9xrcSzuFvNhRTwHC81
+5XwwI1wBNV4sgFKj2WdW/6y2/szDt0oNxnC50zvkmlwOpPKBc4kmNaKmowKBgBmC
+uXIDIXyZcmw3QTNNWZNqXcnv8iRo4xN4dilOWyBxMfp3QmWI5feD4G2+0Jqr2nNZ
+iRRdB/bA3qtVQ0PinkDQBIzPg6lVNS1uv+TUNc4YgXtL+pyrq+Om8U/jMmqEQR9q
+0YltG49houSZyatnYGK6aSHgpNuaYD0jI66fsyYBAoGAMefyD0I/ncArjuf58hVQ
+zSjxfcvlja9okrC8ZgqsVluezcm4rQNcSjBnESGTCjJC7O29AofGLHkvnsBQDiGk
+hE38IRisd+okXdApr41ifWDhmtASud5q6wlhOpMmQxg+OALf1rTvFYhbnFEXV/KY
+e5A4iXLRIbxbmXZDa35Rebw=
+-----END PRIVATE KEY-----
diff --git a/test-compose/daemon/Dockerfile b/test-compose/daemon/Dockerfile
new file mode 100644
index 00000000..f6203505
--- /dev/null
+++ b/test-compose/daemon/Dockerfile
@@ -0,0 +1,5 @@
+FROM tier/grouper:latest
+
+LABEL author="tier-packaging@internet2.edu <tier-packaging@internet2.edu>"
+
+CMD ["daemon"]
diff --git a/test-compose/data/Dockerfile b/test-compose/data/Dockerfile
new file mode 100644
index 00000000..35317837
--- /dev/null
+++ b/test-compose/data/Dockerfile
@@ -0,0 +1,51 @@
+FROM tier/grouper:latest
+
+LABEL author="tier-packaging@internet2.edu <tier-packaging@internet2.edu>"
+ 
+COPY container_files/seed-data/ /seed-data/
+COPY container_files/conf/ /opt/grouper/grouper.apiBinary/conf/
+
+RUN yum install -y epel-release \
+    && yum update -y \
+    && yum install -y 389-ds-base 389-admin 389-adminutil mariadb-server mariadb \
+    && yum clean all
+
+RUN mysql_install_db \
+    && chown -R mysql:mysql /var/lib/mysql/ \
+    && sed -i 's/^\(bind-address\s.*\)/# \1/' /etc/my.cnf \
+    && sed -i 's/^\(log_error\s.*\)/# \1/' /etc/my.cnf \
+    && sed -i 's/\[mysqld\]/\[mysqld\]\ncharacter_set_server = utf8/' /etc/my.cnf \
+    && sed -i 's/\[mysqld\]/\[mysqld\]\ncollation_server = utf8_general_ci/' /etc/my.cnf \
+    && sed -i 's/\[mysqld\]/\[mysqld\]\nport = 3306/' /etc/my.cnf \
+    && cat  /etc/my.cnf \
+    && echo "/usr/bin/mysqld_safe &" > /tmp/config \
+    && echo "mysqladmin --silent --wait=30 ping || exit 1" >> /tmp/config \
+    && echo "mysql -e 'GRANT ALL PRIVILEGES ON *.* TO \"root\"@\"%\" WITH GRANT OPTION;'" >> /tmp/config \
+    && echo "mysql -e 'CREATE DATABASE grouper CHARACTER SET utf8 COLLATE utf8_bin;'" >> /tmp/config \
+    && bash /tmp/config \
+    && rm -f /tmp/config \
+    && mysql grouper < /seed-data/sisData.sql
+
+RUN useradd ldapadmin \
+    && rm -fr /var/lock /usr/lib/systemd/system \
+    # The 389-ds setup will fail because the hostname can't reliable be determined, so we'll bypass it and then install. \
+    && sed -i 's/checkHostname {/checkHostname {\nreturn();/g' /usr/lib64/dirsrv/perl/DSUtil.pm \
+    # Not doing SELinux \
+    && sed -i 's/updateSelinuxPolicy($inf);//g' /usr/lib64/dirsrv/perl/* \
+    # Do not restart at the end \
+    && sed -i '/if (@errs = startServer($inf))/,/}/d' /usr/lib64/dirsrv/perl/* \
+    && setup-ds.pl --silent --file /seed-data/ds-setup.inf \
+    && /usr/sbin/ns-slapd -D /etc/dirsrv/slapd-dir \ 
+    && sleep 3 \
+    && ldapadd -H ldap:/// -f /seed-data/users.ldif -x -D "cn=Directory Manager" -w password
+
+RUN (/usr/sbin/ns-slapd -D /etc/dirsrv/slapd-dir &) \
+    && while ! curl -s ldap://localhost:389 > /dev/null; do echo waiting for ldap to start; sleep 1; done; \
+    (mysqld_safe & ) \
+    && while ! curl -s localhost:3306 > /dev/null; do echo waiting for mysqld to start; sleep 1; done; \
+    bin/gsh -registry -check -runscript -noprompt \
+    && bin/gsh /seed-data/bootstrap.gsh
+
+EXPOSE 389 3306
+
+CMD /usr/sbin/ns-slapd -D /etc/dirsrv/slapd-dir && mysqld_safe
diff --git a/test-compose/data/container_files/conf/grouper.hibernate.properties b/test-compose/data/container_files/conf/grouper.hibernate.properties
new file mode 100644
index 00000000..154b8ebf
--- /dev/null
+++ b/test-compose/data/container_files/conf/grouper.hibernate.properties
@@ -0,0 +1,29 @@
+#
+# Grouper Hibernate Configuration
+# $Id: grouper.hibernate.example.properties,v 1.9 2009-08-11 20:18:09 mchyzer Exp $
+#
+
+# The grouper hibernate config uses Grouper Configuration Overlays (documented on wiki)
+# By default the configuration is read from grouper.hibernate.base.properties
+# (which should not be edited), and the grouper.hibernate.properties overlays
+# the base settings.  See the grouper.hibernate.base.properties for the possible
+# settings that can be applied to the grouper.hibernate.properties
+
+########################################
+## DB settings
+########################################
+
+# e.g. mysql:           jdbc:mysql://localhost:3306/grouper
+# e.g. p6spy (log sql): [use the URL that your DB requires]
+# e.g. oracle:          jdbc:oracle:thin:@server.school.edu:1521:sid
+# e.g. hsqldb (a):      jdbc:hsqldb:dist/run/grouper;create=true
+# e.g. hsqldb (b):      jdbc:hsqldb:hsql://localhost:9001/grouper
+# e.g. postgres:        jdbc:postgresql://localhost:5432/database
+# e.g. mssql:           jdbc:sqlserver://localhost:3280;databaseName=grouper
+hibernate.connection.url = jdbc:mysql://localhost:3306/grouper?CharSet=utf8&useUnicode=true&characterEncoding=utf8
+
+hibernate.connection.username         = root
+# If you are using an empty password, depending upon your version of
+# Java and Ant you may need to specify a password of "".
+# Note: you can keep passwords external and encrypted: https://bugs.internet2.edu/jira/browse/GRP-122
+hibernate.connection.password =
diff --git a/test-compose/data/container_files/conf/grouper.properties b/test-compose/data/container_files/conf/grouper.properties
new file mode 100644
index 00000000..c9312878
--- /dev/null
+++ b/test-compose/data/container_files/conf/grouper.properties
@@ -0,0 +1,25 @@
+#
+# Grouper Configuration
+# $Id: grouper.example.properties,v 1.48 2009-12-16 06:02:30 mchyzer Exp $
+#
+
+# Grouper uses Grouper Configuration Overlays (documented on wiki)
+# By default the configuration is read from grouper.base.properties
+# (which should not be edited), and the grouper.properties overlays
+# the base settings.  See the grouper.base.properties for the possible
+# settings that can be applied to the grouper.properties
+
+#if groups like the wheel group should be auto-created for convenience (note: check config needs to be on)
+configuration.autocreate.system.groups = true
+
+# A wheel group allows you to enable non-GrouperSystem subjects to act
+# like a root user when interacting with the registry.
+groups.wheel.use                      = true
+
+# Set to the name of the group you want to treat as the wheel group.
+# The members of this group will be treated as root-like users.
+groups.wheel.group                    = etc:sysadmingroup
+
+# Used to allow Include Exclude groups
+grouperIncludeExclude.use = true
+grouperIncludeExclude.requireGroups.use = true
diff --git a/test-compose/data/container_files/conf/subject.properties b/test-compose/data/container_files/conf/subject.properties
new file mode 100644
index 00000000..a8231911
--- /dev/null
+++ b/test-compose/data/container_files/conf/subject.properties
@@ -0,0 +1,75 @@
+subject.sources.xml.location =
+
+subjectApi.source.ldap.id = ldap
+subjectApi.source.ldap.name = EDU Ldap 
+subjectApi.source.ldap.types = person
+subjectApi.source.ldap.adapterClass = edu.internet2.middleware.grouper.subj.GrouperJndiSourceAdapter
+subjectApi.source.ldap.param.INITIAL_CONTEXT_FACTORY.value = com.sun.jndi.ldap.LdapCtxFactory
+subjectApi.source.ldap.param.PROVIDER_URL.value = ldap://localhost:389
+subjectApi.source.ldap.param.SECURITY_AUTHENTICATION.value = simple
+subjectApi.source.ldap.param.SECURITY_PRINCIPAL.value = cn=admin,dc=internet2,dc=edu
+subjectApi.source.ldap.param.SECURITY_CREDENTIALS.value = password
+subjectApi.source.ldap.param.SubjectID_AttributeType.value = uid
+subjectApi.source.ldap.param.SubjectID_formatToLowerCase.value = false
+subjectApi.source.ldap.param.Name_AttributeType.value = cn
+subjectApi.source.ldap.param.Description_AttributeType.value = cn
+subjectApi.source.ldap.param.VTLDAP_VALIDATOR.value = ConnectLdapValidator
+subjectApi.source.ldap.param.subjectVirtualAttribute_0_searchAttribute0.value = ${subjectUtils.defaultIfBlank(subject.getAttributeValueOrCommaSeparated('uid'), "")},${subjectUtils.defaultIfBlank(subject.getAttributeValueOrCommaSeparated('cn'), "")},${subjectUtils.defaultIfBlank(subject.getAttributeValueOrCommaSeparated('exampleEduRegId'), "")}
+subjectApi.source.ldap.param.sortAttribute0.value = cn
+subjectApi.source.ldap.param.searchAttribute0.value = searchAttribute0
+
+# STATUS SECTION for searches to filter out inactives and allow
+# the user to filter by status with e.g. status=all
+# this is optional, and advanced
+#
+# field in database or ldap or endpoint that is the status field
+#subjectApi.source.example.param.statusDatastoreFieldName.value = status
+
+# search string from user which represents the status.  e.g. status=active
+#subjectApi.source.example.param.statusLabel.value = status
+
+# available statuses from screen (if not specified, any will be allowed). comma separated list.
+# Note, this is optional and you probably dont want to configure it, it is mostly necessary
+# when you have multiple sources with statuses...  if someone types an invalid status
+# and you have this configured, it will not filter by it
+#subjectApi.source.example.param.statusesFromUser.value = Active, Inactive, Pending, All
+
+# all label from the user
+#subjectApi.source.example.param.statusAllFromUser.value = All
+
+# if no status is specified, this will be used (e.g. for active only).  Note, the value should be of the
+# form the user would type in
+#subjectApi.source.example.param.statusSearchDefault.value = status=active
+
+# translate between screen values of status, and the data store value.  Increment the 0 to 1, 2, etc for more translations.
+# so the user could enter: status=active, and that could translate to status_col=A.  The 'user' is what the user types in,
+# the 'datastore' is what is in the datastore.  The user part is not case-sensitive.  Note, this could be a many to one
+#subjectApi.source.example.param.statusTranslateUser0.value = active
+#subjectApi.source.example.param.statusTranslateDatastore0.value = A
+
+# subject identifier to store in grouper's member table.  this is used to increase speed of loader and perhaps for provisioning
+# you can have up to max 1 subject identifier
+#subjectApi.source.example.param.subjectIdentifierAttribute0.value = uid
+
+#searchSubject: find a subject by ID.  ID is generally an opaque and permanent identifier, e.g. 12345678.
+#  Each subject has one and only on ID.  Returns one result when searching for one ID.
+subjectApi.source.ldap.search.searchSubject.param.filter.value = (&(uid=%TERM%)(objectclass=person))
+subjectApi.source.ldap.search.searchSubject.param.scope.value = SUBTREE_SCOPE
+subjectApi.source.ldap.search.searchSubject.param.base.value = ou=people,dc=internet2,dc=edu
+
+#searchSubjectByIdentifier: find a subject by identifier.  Identifier is anything that uniquely
+#  identifies the user, e.g. jsmith or jsmith@institution.edu.
+#  Subjects can have multiple identifiers.  Note: it is nice to have if identifiers are unique
+#  even across sources.  Returns one result when searching for one identifier.
+subjectApi.source.ldap.search.searchSubjectByIdentifier.param.filter.value = (&(|(uid=%TERM%)(employeeNumber=%TERM%))(objectclass=person))
+subjectApi.source.ldap.search.searchSubjectByIdentifier.param.scope.value = SUBTREE_SCOPE
+subjectApi.source.ldap.search.searchSubjectByIdentifier.param.base.value = ou=people,dc=internet2,dc=edu
+
+#   search: find subjects by free form search.  Returns multiple results.
+
+subjectApi.source.ldap.search.search.param.filter.value = (&(|(|(uid=%TERM%)(cn=*%TERM%*))(uid=%TERM%*))(objectclass=person))
+subjectApi.source.ldap.search.search.param.scope.value = SUBTREE_SCOPE
+subjectApi.source.ldap.search.search.param.base.value = ou=people,dc=internet2,dc=edu
+
+subjectApi.source.ldap.attributes = givenName, sn, uid, mail, employeeNumber
+subjectApi.source.ldap.internalAttributes = searchAttribute0
diff --git a/test-compose/data/container_files/seed-data/bootstrap.gsh b/test-compose/data/container_files/seed-data/bootstrap.gsh
new file mode 100644
index 00000000..e2a018aa
--- /dev/null
+++ b/test-compose/data/container_files/seed-data/bootstrap.gsh
@@ -0,0 +1,3 @@
+gs = GrouperSession.startRootSession()
+
+addMember("etc:sysadmingroup","banderson");
diff --git a/test-compose/data/container_files/seed-data/ds-setup.inf b/test-compose/data/container_files/seed-data/ds-setup.inf
new file mode 100644
index 00000000..ae365ca4
--- /dev/null
+++ b/test-compose/data/container_files/seed-data/ds-setup.inf
@@ -0,0 +1,28 @@
+[General]
+AdminDomain = example.edu
+ConfigDirectoryAdminID = admin
+ConfigDirectoryAdminPwd = admin
+ConfigDirectoryLdapURL = ldap://localhost:389/o=NetscapeRoot
+FullMachineName = localhost
+ServerRoot = /usr/lib64/dirsrv
+SuiteSpotGroup = nobody
+SuiteSpotUserID = nobody
+
+[admin]
+Port = 9830
+ServerAdminID = admin
+ServerAdminPwd = admin
+ServerIpAddress = 0.0.0.0
+SysUser = nobody
+
+[slapd]
+AddOrgEntries = Yes
+AddSampleEntries = No
+InstallLdifFile = suggest
+RootDN = cn=Directory Manager
+RootDNPwd = password
+ServerIdentifier = dir
+ServerPort = 389
+SlapdConfigForMC = yes
+Suffix = dc=internet2,dc=edu
+UseExistingMC = No
diff --git a/test-compose/data/container_files/seed-data/sisData.sql b/test-compose/data/container_files/seed-data/sisData.sql
new file mode 100644
index 00000000..44452bf8
--- /dev/null
+++ b/test-compose/data/container_files/seed-data/sisData.sql
@@ -0,0 +1,2540 @@
+CREATE TABLE SIS_COURSES (
+  uid varchar(255) NOT NULL,
+  surname varchar(255) default NULL,
+  givenName varchar(255) default NULL,
+  courseId varchar(255) default NULL,
+  PRIMARY KEY (uid, courseId)
+);
+
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('kwhite','White','Karl','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('kwhite','White','Karl','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('kwhite','White','Karl','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('kwhite','White','Karl','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('whenderson','Henderson','William','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('ddavis','Davis','David','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('ddavis','Davis','David','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('cmorrison','Morrison','Colin','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('cmorrison','Morrison','Colin','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('cmorrison','Morrison','Colin','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('cmorrison','Morrison','Colin','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('danderson','Anderson','Donna','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('danderson','Anderson','Donna','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('danderson','Anderson','Donna','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('amorrison','Morrison','Ann','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('amorrison','Morrison','Ann','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('amorrison','Morrison','Ann','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('wprice','Price','William','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('wprice','Price','William','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mroberts','Roberts','Marie','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mroberts','Roberts','Marie','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mroberts','Roberts','Marie','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mroberts','Roberts','Marie','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('kjohnson','Johnson','Kiersten','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('kjohnson','Johnson','Kiersten','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jbrown','Brown','James','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('agasper','Gasper','Ann','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jscott','Scott','Jennifer','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jscott','Scott','Jennifer','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jscott','Scott','Jennifer','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('bbutler','Butler','Betty','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('bbutler','Butler','Betty','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('bbutler','Butler','Betty','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('bbutler','Butler','Betty','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('tmorrison','Morrison','Thomas','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('tmorrison','Morrison','Thomas','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('tmorrison','Morrison','Thomas','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jbrown14','Brown','Jennifer','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jbrown14','Brown','Jennifer','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('gjohnson','Johnson','Greg','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('gjohnson','Johnson','Greg','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('gjohnson','Johnson','Greg','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('rmartinez','Martinez','Robert','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('rmartinez','Martinez','Robert','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jlewis','Lewis','Jo','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jlewis','Lewis','Jo','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jlewis','Lewis','Jo','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mgasper','Gasper','Mary','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mgasper','Gasper','Mary','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mgasper','Gasper','Mary','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mgasper','Gasper','Mary','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('kvales','Vales','Karoline','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('kvales','Vales','Karoline','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('tgrady','Grady','Thomas','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('tgrady','Grady','Thomas','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('kmorrison','Morrison','Kiersten','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('dgrady','Grady','David','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('dgrady','Grady','David','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mthompson','Thompson','Mary','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mthompson','Thompson','Mary','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mthompson','Thompson','Mary','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mthompson','Thompson','Mary','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('bgasper','Gasper','Bill','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('bgasper','Gasper','Bill','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('dlopez','Lopez','David','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('dlopez','Lopez','David','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('dlopez','Lopez','David','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('hwhite','White','Heather','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('hwhite','White','Heather','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('hwhite','White','Heather','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('ddavis27','Davis','Donna','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('ddavis27','Davis','Donna','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('ddavis27','Davis','Donna','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('ddavis27','Davis','Donna','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('bgasper28','Gasper','Bill','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('bgasper28','Gasper','Bill','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jjohnson','Johnson','Jennifer','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jjohnson','Johnson','Jennifer','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jjohnson','Johnson','Jennifer','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jjohnson','Johnson','Jennifer','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('amorrison30','Morrison','Ann','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('kmartinez','Martinez','Karl','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('kmartinez','Martinez','Karl','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('kmartinez','Martinez','Karl','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('ahenderson','Henderson','Ann','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('ahenderson','Henderson','Ann','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('avales','Vales','Ann','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('ggonazles','Gonazles','Greg','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('ggonazles','Gonazles','Greg','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('bdoe','Doe','Blake','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('bdoe','Doe','Blake','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('bdoe','Doe','Blake','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('bdoe','Doe','Blake','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('plangenberg','Langenberg','Paul','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('gvales','Vales','Greg','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('gvales','Vales','Greg','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('gvales','Vales','Greg','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('nhenderson','Henderson','Nancy','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('wthompson','Thompson','William','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('wthompson','Thompson','William','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('kvales40','Vales','Karl','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('kvales40','Vales','Karl','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('kvales40','Vales','Karl','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('kvales40','Vales','Karl','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('blee','Lee','Bill','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('blee','Lee','Bill','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('blee','Lee','Bill','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mlee','Lee','Marie','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mlee','Lee','Marie','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mlee','Lee','Marie','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('kclark','Clark','Kiersten','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('kclark','Clark','Kiersten','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('kclark','Clark','Kiersten','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('wscott','Scott','William','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('dbutler','Butler','Donna','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('dbutler','Butler','Donna','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('dbutler','Butler','Donna','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('awhite','White','Ann','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('awhite','White','Ann','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('hdoe','Doe','Heather','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('hdoe','Doe','Heather','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('dlangenberg','Langenberg','David','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('dlangenberg','Langenberg','David','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('dlangenberg','Langenberg','David','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('ethompson','Thompson','Eric','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('ethompson','Thompson','Eric','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('ethompson','Thompson','Eric','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('ethompson','Thompson','Eric','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jbrown50','Brown','Jennifer','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jbrown50','Brown','Jennifer','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jbrown50','Brown','Jennifer','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mgonazles','Gonazles','Michael','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('gbutler','Butler','Greg','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('gbutler','Butler','Greg','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('gbutler','Butler','Greg','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mvales','Vales','Mark','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mvales','Vales','Mark','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mvales','Vales','Mark','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mlewis','Lewis','Michael','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mlewis','Lewis','Michael','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mlewis','Lewis','Michael','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mlewis','Lewis','Michael','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('hvales','Vales','Heather','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('hvales','Vales','Heather','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('hvales','Vales','Heather','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jscott56','Scott','Jo','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jscott56','Scott','Jo','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('sdoe','Doe','Sarah','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('sdoe','Doe','Sarah','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('sdoe','Doe','Sarah','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('sdoe','Doe','Sarah','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('svales','Vales','Sarah','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('svales','Vales','Sarah','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('hmorrison','Morrison','Heather','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('hmorrison','Morrison','Heather','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('hmorrison','Morrison','Heather','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('hmorrison','Morrison','Heather','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jlopez','Lopez','Jennifer','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jlopez','Lopez','Jennifer','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jlopez','Lopez','Jennifer','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('dlangenberg61','Langenberg','Donna','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('dlangenberg61','Langenberg','Donna','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('bgrady','Grady','Betty','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('bgrady','Grady','Betty','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('bgrady','Grady','Betty','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jmorrison','Morrison','Jennifer','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jmorrison','Morrison','Jennifer','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jmorrison','Morrison','Jennifer','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jmorrison','Morrison','Jennifer','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('wvales','Vales','William','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('wvales','Vales','William','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mmartinez','Martinez','Mark','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mmartinez','Martinez','Mark','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mmartinez','Martinez','Mark','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mmartinez','Martinez','Mark','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jmartinez','Martinez','Jennifer','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jmartinez','Martinez','Jennifer','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jmartinez','Martinez','Jennifer','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mgasper67','Gasper','Mary','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mgasper67','Gasper','Mary','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mgasper67','Gasper','Mary','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mgasper67','Gasper','Mary','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('dpeterson','Peterson','David','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('dpeterson','Peterson','David','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('eprice','Price','Erik','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('eprice','Price','Erik','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('eprice','Price','Erik','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jgasper','Gasper','James','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jgasper','Gasper','James','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jgasper','Gasper','James','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jclark','Clark','Jennifer','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jclark','Clark','Jennifer','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('bpeterson','Peterson','Betty','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('bpeterson','Peterson','Betty','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('wsmith','Smith','William','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('wsmith','Smith','William','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('lwilliams','Williams','Lisa','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('lwilliams','Williams','Lisa','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('lwilliams','Williams','Lisa','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('dgrady76','Grady','David','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('dgrady76','Grady','David','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('dgrady76','Grady','David','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jmartinez77','Martinez','Jo','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('dlewis','Lewis','Donna','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('dlewis','Lewis','Donna','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('dlewis','Lewis','Donna','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('dlewis','Lewis','Donna','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('wscott79','Scott','William','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('wscott79','Scott','William','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('ddoe','Doe','Donna','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('ddoe','Doe','Donna','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('ddoe','Doe','Donna','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('ddoe','Doe','Donna','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('gmorrison','Morrison','Greg','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('gmorrison','Morrison','Greg','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('gmorrison','Morrison','Greg','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('khenderson','Henderson','Kim','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('kpeterson','Peterson','Karoline','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('kpeterson','Peterson','Karoline','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('kpeterson','Peterson','Karoline','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('kpeterson','Peterson','Karoline','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('eprice84','Price','Erik','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('hsmith','Smith','Heather','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('hsmith','Smith','Heather','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('hsmith','Smith','Heather','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('hsmith','Smith','Heather','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('dwilliams','Williams','Donna','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('dwilliams','Williams','Donna','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('klopez','Lopez','Karl','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('wjohnson','Johnson','William','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('wjohnson','Johnson','William','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('wbrown','Brown','William','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('hbrown','Brown','Heather','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('hbrown','Brown','Heather','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('hbrown','Brown','Heather','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('hbrown','Brown','Heather','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('kroberts','Roberts','Kim','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('kroberts','Roberts','Kim','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('kroberts','Roberts','Kim','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('kroberts','Roberts','Kim','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('dwalters','Walters','Donna','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('nlee','Lee','Nancy','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('nlee','Lee','Nancy','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('nlee','Lee','Nancy','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('nlee','Lee','Nancy','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('sgonazles','Gonazles','Sarah','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('sgonazles','Gonazles','Sarah','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('handerson','Anderson','Heather','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('danderson96','Anderson','David','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('danderson96','Anderson','David','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('danderson96','Anderson','David','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('danderson96','Anderson','David','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('dgrady97','Grady','David','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('dgrady97','Grady','David','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jgrady','Grady','James','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jgrady','Grady','James','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jthompson','Thompson','John','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jthompson','Thompson','John','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('kthompson','Thompson','Kiersten','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('kthompson','Thompson','Kiersten','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('kthompson','Thompson','Kiersten','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jpeterson','Peterson','John','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jpeterson','Peterson','John','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('lmorrison','Morrison','Lisa','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('lmorrison','Morrison','Lisa','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('glee','Lee','Greg','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('glee','Lee','Greg','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('lhenderson','Henderson','Lori','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('lhenderson','Henderson','Lori','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('lhenderson','Henderson','Lori','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('lhenderson','Henderson','Lori','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mscott','Scott','Marie','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('ldavis','Davis','Lori','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('ldavis','Davis','Lori','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('ldavis','Davis','Lori','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jroberts','Roberts','James','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jroberts','Roberts','James','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jroberts','Roberts','James','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jroberts','Roberts','James','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('asmith','Smith','Ann','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mbrown','Brown','Mark','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mbrown','Brown','Mark','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mbrown','Brown','Mark','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('kwhite110','White','Kim','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('kwhite110','White','Kim','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('kwhite110','White','Kim','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('kwhite110','White','Kim','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mroberts111','Roberts','Mark','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mroberts111','Roberts','Mark','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mwhite','White','Mark','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mwhite','White','Mark','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mwhite','White','Mark','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jprice','Price','Jim','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jprice','Price','Jim','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('msmith','Smith','Michael','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('msmith','Smith','Michael','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('msmith','Smith','Michael','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('sclark','Clark','Sarah','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('sclark','Clark','Sarah','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('sclark','Clark','Sarah','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('dvales','Vales','Donna','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('dvales','Vales','Donna','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('dvales','Vales','Donna','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('kjohnson117','Johnson','Kim','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('dsmith','Smith','David','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('bwhite','White','Blake','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('bwhite','White','Blake','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('bwhite','White','Blake','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('ldoe','Doe','Lori','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('ldoe','Doe','Lori','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('dlangenberg121','Langenberg','David','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('gwilliams','Williams','Greg','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('gwilliams','Williams','Greg','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('kclark123','Clark','Karoline','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('kclark123','Clark','Karoline','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('kclark123','Clark','Karoline','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('ewilliams','Williams','Eric','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('egonazles','Gonazles','Eric','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('egonazles','Gonazles','Eric','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('egonazles','Gonazles','Eric','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('rprice','Price','Robert','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('rprice','Price','Robert','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('rprice','Price','Robert','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('rprice','Price','Robert','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('ewalters','Walters','Erik','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('clangenberg','Langenberg','Colin','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('clangenberg','Langenberg','Colin','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('cmorrison129','Morrison','Colin','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mbutler','Butler','Mary','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mbutler','Butler','Mary','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mbutler','Butler','Mary','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mbutler','Butler','Mary','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('smartinez','Martinez','Sarah','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('smartinez','Martinez','Sarah','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('smartinez','Martinez','Sarah','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('smartinez','Martinez','Sarah','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('klewis','Lewis','Karl','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('klewis','Lewis','Karl','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mwilliams','Williams','Marie','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mwilliams','Williams','Marie','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('dsmith134','Smith','David','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('dsmith134','Smith','David','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('gpeterson','Peterson','Greg','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('gpeterson','Peterson','Greg','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('gpeterson','Peterson','Greg','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('gpeterson','Peterson','Greg','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('bgrady136','Grady','Betty','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('bgrady136','Grady','Betty','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mthompson137','Thompson','Mark','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mthompson137','Thompson','Mark','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mthompson137','Thompson','Mark','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mroberts138','Roberts','Mary','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mroberts138','Roberts','Mary','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mroberts138','Roberts','Mary','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mroberts138','Roberts','Mary','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('janderson','Anderson','James','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('janderson','Anderson','James','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('janderson','Anderson','James','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('janderson','Anderson','James','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jscott140','Scott','Jo','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jscott140','Scott','Jo','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jscott140','Scott','Jo','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jscott140','Scott','Jo','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('ddavis141','Davis','Donna','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('ddavis141','Davis','Donna','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jbutler','Butler','Jennifer','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jbutler','Butler','Jennifer','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jlewis143','Lewis','Jo','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('janderson144','Anderson','John','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mlangenberg','Langenberg','Marie','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mlangenberg','Langenberg','Marie','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jthompson146','Thompson','Jennifer','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jthompson146','Thompson','Jennifer','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jthompson146','Thompson','Jennifer','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('hvales147','Vales','Heather','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jwhite','White','John','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jwhite','White','John','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jwhite','White','John','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jwhite','White','John','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('tgasper','Gasper','Thomas','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('tgasper','Gasper','Thomas','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('tgasper','Gasper','Thomas','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('tgasper','Gasper','Thomas','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('bjohnson','Johnson','Bill','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mroberts151','Roberts','Mark','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mroberts151','Roberts','Mark','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('wthompson152','Thompson','William','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('wthompson152','Thompson','William','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('wthompson152','Thompson','William','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mdoe','Doe','Michael','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mdoe','Doe','Michael','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mdoe','Doe','Michael','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('bgonazles','Gonazles','Bill','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('bgonazles','Gonazles','Bill','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('bgonazles','Gonazles','Bill','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mthompson155','Thompson','Mark','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mthompson155','Thompson','Mark','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('dlee','Lee','David','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('broberts','Roberts','Bill','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('broberts','Roberts','Bill','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('broberts','Roberts','Bill','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jvales','Vales','John','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jvales','Vales','John','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jvales','Vales','John','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('wwilliams','Williams','William','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('wwilliams','Williams','William','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('wwilliams','Williams','William','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('wwilliams160','Williams','William','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('wwilliams160','Williams','William','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('wwilliams160','Williams','William','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('ggasper','Gasper','Greg','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('ggasper','Gasper','Greg','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('rlopez','Lopez','Robert','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('rlopez','Lopez','Robert','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('rlopez','Lopez','Robert','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('rlopez','Lopez','Robert','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mgrady','Grady','Michael','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('lpeterson','Peterson','Lisa','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('lpeterson','Peterson','Lisa','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('lpeterson','Peterson','Lisa','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('ljohnson','Johnson','Lori','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('ljohnson','Johnson','Lori','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('gscott','Scott','Greg','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mprice','Price','Marie','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mprice','Price','Marie','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('bprice','Price','Bill','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('aanderson','Anderson','Ann','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('aanderson','Anderson','Ann','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('aanderson','Anderson','Ann','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('aanderson','Anderson','Ann','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('bprice170','Price','Blake','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('hscott','Scott','Heather','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('hthompson','Thompson','Heather','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jmorrison173','Morrison','Jo','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jmorrison173','Morrison','Jo','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jmorrison173','Morrison','Jo','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mprice174','Price','Mary','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('hprice','Price','Heather','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('kbutler','Butler','Karoline','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('kbutler','Butler','Karoline','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('kbutler','Butler','Karoline','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('kbutler','Butler','Karoline','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('bjohnson177','Johnson','Blake','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('bjohnson177','Johnson','Blake','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jlee','Lee','Jennifer','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jlee','Lee','Jennifer','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jlee','Lee','Jennifer','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jlee','Lee','Jennifer','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('rwilliams','Williams','Robert','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('rwilliams','Williams','Robert','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('rwilliams','Williams','Robert','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jprice180','Price','Jo','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jprice180','Price','Jo','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('kgasper','Gasper','Kim','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('kgasper','Gasper','Kim','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('kgasper','Gasper','Kim','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('kgasper','Gasper','Kim','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('cthompson','Thompson','Colin','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('cthompson','Thompson','Colin','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('ethompson183','Thompson','Eric','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('ethompson183','Thompson','Eric','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('ethompson183','Thompson','Eric','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('ethompson183','Thompson','Eric','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('bclark','Clark','Betty','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('bclark','Clark','Betty','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('bclark','Clark','Betty','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('llee','Lee','Lori','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('llee','Lee','Lori','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('llee','Lee','Lori','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('kpeterson186','Peterson','Karl','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('kpeterson186','Peterson','Karl','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('kpeterson186','Peterson','Karl','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('wlee','Lee','William','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('wlee','Lee','William','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('wlee','Lee','William','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('gjohnson188','Johnson','Greg','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('gjohnson188','Johnson','Greg','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mlopez','Lopez','Michael','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mlopez','Lopez','Michael','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mlopez','Lopez','Michael','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mlopez','Lopez','Michael','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('sgrady','Grady','Sarah','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('sgrady','Grady','Sarah','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('pbrown','Brown','Paul','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('pbrown','Brown','Paul','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('pbrown','Brown','Paul','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mwilliams192','Williams','Mary','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mwilliams192','Williams','Mary','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mwilliams192','Williams','Mary','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jlewis193','Lewis','James','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jlewis193','Lewis','James','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('nbrown','Brown','Nancy','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('nbrown','Brown','Nancy','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jwalters','Walters','Jo','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jwalters','Walters','Jo','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('hdoe196','Doe','Heather','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mlewis197','Lewis','Michael','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mlewis197','Lewis','Michael','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mlewis197','Lewis','Michael','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('blewis','Lewis','Bill','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('blewis','Lewis','Bill','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('blewis','Lewis','Bill','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('blewis','Lewis','Bill','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mwalters','Walters','Michael','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mwalters','Walters','Michael','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mwalters','Walters','Michael','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mwalters','Walters','Michael','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('llopez','Lopez','Lisa','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('llopez','Lopez','Lisa','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('llopez','Lopez','Lisa','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jwalters201','Walters','James','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jwalters201','Walters','James','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jwalters201','Walters','James','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jwalters201','Walters','James','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('kmorrison202','Morrison','Karoline','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('kmorrison202','Morrison','Karoline','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('kmorrison202','Morrison','Karoline','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('kmorrison202','Morrison','Karoline','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('bgrady203','Grady','Bill','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('bgrady203','Grady','Bill','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('clewis','Lewis','Colin','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('hwhite205','White','Heather','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('hwhite205','White','Heather','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('hwhite205','White','Heather','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('dprice','Price','David','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jlee207','Lee','John','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jlee207','Lee','John','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jlee207','Lee','John','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jbutler208','Butler','John','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('bdavis','Davis','Betty','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('bdavis','Davis','Betty','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('bdavis','Davis','Betty','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('bdavis','Davis','Betty','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jroberts210','Roberts','Jennifer','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jroberts210','Roberts','Jennifer','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jroberts210','Roberts','Jennifer','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('gjohnson211','Johnson','Greg','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('gjohnson211','Johnson','Greg','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('gjohnson211','Johnson','Greg','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jlangenberg','Langenberg','Jennifer','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jlangenberg','Langenberg','Jennifer','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jlangenberg','Langenberg','Jennifer','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jlangenberg','Langenberg','Jennifer','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('dhenderson','Henderson','Donna','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('dhenderson','Henderson','Donna','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('dhenderson','Henderson','Donna','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('dhenderson','Henderson','Donna','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('pmartinez','Martinez','Paul','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('pmartinez','Martinez','Paul','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('pmartinez','Martinez','Paul','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('pmartinez','Martinez','Paul','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('ganderson','Anderson','Greg','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('ganderson','Anderson','Greg','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('ganderson','Anderson','Greg','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('ganderson','Anderson','Greg','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mpeterson','Peterson','Mary','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mpeterson','Peterson','Mary','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mpeterson','Peterson','Mary','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mpeterson','Peterson','Mary','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('klopez217','Lopez','Karoline','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('klopez217','Lopez','Karoline','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('klopez217','Lopez','Karoline','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('klopez217','Lopez','Karoline','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('tgasper218','Gasper','Thomas','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('tgasper218','Gasper','Thomas','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('tgasper218','Gasper','Thomas','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('tgasper218','Gasper','Thomas','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('lsmith','Smith','Lori','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('ebutler','Butler','Eric','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('ebutler','Butler','Eric','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jvales221','Vales','Jim','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jvales221','Vales','Jim','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jvales221','Vales','Jim','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jvales222','Vales','James','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jvales222','Vales','James','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('kjohnson223','Johnson','Karoline','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('kjohnson223','Johnson','Karoline','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('kscott','Scott','Kiersten','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('dwilliams225','Williams','David','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('bclark226','Clark','Betty','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('bclark226','Clark','Betty','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mwhite227','White','Marie','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('danderson228','Anderson','David','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('danderson228','Anderson','David','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('danderson228','Anderson','David','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('dgrady229','Grady','David','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('dgrady229','Grady','David','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jgrady230','Grady','James','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jgrady230','Grady','James','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jgrady230','Grady','James','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jdoe','Doe','James','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jdoe','Doe','James','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jdoe','Doe','James','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jdoe','Doe','James','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('dmorrison','Morrison','David','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mclark','Clark','Marie','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('plopez','Lopez','Paul','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('plopez','Lopez','Paul','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('plopez','Lopez','Paul','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('plopez','Lopez','Paul','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('hlewis','Lewis','Heather','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('dsmith236','Smith','David','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('dsmith236','Smith','David','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('dsmith236','Smith','David','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('dsmith236','Smith','David','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('kbutler237','Butler','Kiersten','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('kbutler237','Butler','Kiersten','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('kbutler237','Butler','Kiersten','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('kdavis','Davis','Kim','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('kdavis','Davis','Kim','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('kdoe','Doe','Kiersten','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('kdoe','Doe','Kiersten','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('kgrady','Grady','Karl','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('kgrady','Grady','Karl','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jprice241','Price','James','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('shenderson','Henderson','Sarah','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('shenderson','Henderson','Sarah','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('shenderson','Henderson','Sarah','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('kmorrison243','Morrison','Kiersten','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('kmorrison243','Morrison','Kiersten','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mgonazles244','Gonazles','Mark','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('alewis','Lewis','Ann','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('alewis','Lewis','Ann','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('alewis','Lewis','Ann','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('alewis','Lewis','Ann','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mdavis','Davis','Michael','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mdavis','Davis','Michael','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('manderson','Anderson','Marie','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('manderson','Anderson','Marie','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('bmorrison','Morrison','Blake','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('msmith249','Smith','Marie','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('msmith249','Smith','Marie','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jdoe250','Doe','James','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jdoe250','Doe','James','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jdoe250','Doe','James','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jgasper251','Gasper','James','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jgasper251','Gasper','James','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jgasper251','Gasper','James','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jscott252','Scott','Jo','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jscott252','Scott','Jo','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jscott252','Scott','Jo','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('kwhite253','White','Karoline','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('kwhite253','White','Karoline','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('kwhite253','White','Karoline','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('kwhite253','White','Karoline','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('wbrown254','Brown','William','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('wbrown254','Brown','William','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('wbrown254','Brown','William','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('wbrown254','Brown','William','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mpeterson255','Peterson','Mark','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mpeterson255','Peterson','Mark','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mpeterson255','Peterson','Mark','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mpeterson255','Peterson','Mark','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('kthompson256','Thompson','Kiersten','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('kthompson256','Thompson','Kiersten','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('kthompson256','Thompson','Kiersten','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jscott257','Scott','Jo','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jscott257','Scott','Jo','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jscott257','Scott','Jo','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jscott257','Scott','Jo','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mlangenberg258','Langenberg','Mary','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('khenderson259','Henderson','Karoline','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('khenderson259','Henderson','Karoline','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('hbutler','Butler','Heather','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('hbutler','Butler','Heather','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mbutler261','Butler','Marie','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mbutler261','Butler','Marie','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mbutler261','Butler','Marie','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jmorrison262','Morrison','Jennifer','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jmorrison262','Morrison','Jennifer','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jmorrison262','Morrison','Jennifer','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jmorrison262','Morrison','Jennifer','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('rdavis','Davis','Robert','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('rdavis','Davis','Robert','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('rdavis','Davis','Robert','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('rdavis','Davis','Robert','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('kbutler264','Butler','Kim','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('kbutler264','Butler','Kim','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('kbutler264','Butler','Kim','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('kbutler264','Butler','Kim','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jwhite265','White','James','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jwhite265','White','James','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jwhite265','White','James','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jwhite265','White','James','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jwilliams','Williams','James','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('llangenberg','Langenberg','Lisa','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('llangenberg','Langenberg','Lisa','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('llangenberg','Langenberg','Lisa','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jhenderson','Henderson','John','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jhenderson','Henderson','John','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jlangenberg269','Langenberg','Jennifer','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jlangenberg269','Langenberg','Jennifer','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jlangenberg269','Langenberg','Jennifer','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mdoe270','Doe','Michael','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mdoe270','Doe','Michael','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mbrown271','Brown','Mark','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mbrown271','Brown','Mark','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mbrown271','Brown','Mark','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mbrown271','Brown','Mark','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jvales272','Vales','John','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('tdavis','Davis','Thomas','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('tdavis','Davis','Thomas','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('ejohnson','Johnson','Eric','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('ejohnson','Johnson','Eric','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jpeterson275','Peterson','John','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jpeterson275','Peterson','John','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jpeterson275','Peterson','John','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jpeterson275','Peterson','John','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('gsmith','Smith','Greg','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('gsmith','Smith','Greg','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('klopez278','Lopez','Kim','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('klopez278','Lopez','Kim','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('klopez278','Lopez','Kim','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('sclark279','Clark','Sarah','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('sclark279','Clark','Sarah','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('sclark279','Clark','Sarah','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('abrown','Brown','Ann','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('abrown','Brown','Ann','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jwhite281','White','Jim','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jwhite281','White','Jim','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jwhite281','White','Jim','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jwhite281','White','Jim','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('hgrady','Grady','Heather','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('hgrady','Grady','Heather','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('hgrady','Grady','Heather','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('kwhite283','White','Kim','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('kwhite283','White','Kim','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('bsmith','Smith','Betty','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('elopez','Lopez','Eric','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('elopez','Lopez','Eric','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('elopez','Lopez','Eric','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('pclark','Clark','Paul','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('pclark','Clark','Paul','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('glee287','Lee','Greg','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('glee287','Lee','Greg','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('glee287','Lee','Greg','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('glee287','Lee','Greg','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jwhite288','White','Jennifer','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jwhite288','White','Jennifer','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jwhite288','White','Jennifer','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jwhite288','White','Jennifer','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('rdavis289','Davis','Robert','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('rdavis289','Davis','Robert','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jgasper290','Gasper','James','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('nwhite','White','Nancy','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('nwhite','White','Nancy','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('nwhite','White','Nancy','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('nwhite','White','Nancy','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('kpeterson292','Peterson','Kiersten','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('kpeterson292','Peterson','Kiersten','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('klewis293','Lewis','Kiersten','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jvales294','Vales','John','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jvales294','Vales','John','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jvales294','Vales','John','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jvales294','Vales','John','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('rdoe','Doe','Robert','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('rdoe','Doe','Robert','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('rdoe','Doe','Robert','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('bbrown','Brown','Blake','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('bbrown','Brown','Blake','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mlangenberg297','Langenberg','Mark','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mlangenberg297','Langenberg','Mark','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mlangenberg297','Langenberg','Mark','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mlangenberg297','Langenberg','Mark','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('broberts298','Roberts','Bill','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('broberts298','Roberts','Bill','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('broberts298','Roberts','Bill','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('broberts298','Roberts','Bill','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('ldoe299','Doe','Lori','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('ggasper300','Gasper','Greg','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('ggasper300','Gasper','Greg','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('ggasper300','Gasper','Greg','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('lroberts','Roberts','Lori','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('lroberts','Roberts','Lori','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('lroberts','Roberts','Lori','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('lroberts','Roberts','Lori','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('kwhite302','White','Kiersten','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('kwhite302','White','Kiersten','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('kwhite302','White','Kiersten','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('kwhite302','White','Kiersten','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('dwilliams303','Williams','David','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('bpeterson304','Peterson','Bill','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('bpeterson304','Peterson','Bill','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('bpeterson304','Peterson','Bill','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('bpeterson304','Peterson','Bill','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('swalters','Walters','Sarah','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('swalters','Walters','Sarah','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('swalters','Walters','Sarah','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('swalters','Walters','Sarah','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('edavis','Davis','Eric','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('edavis','Davis','Eric','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('edavis','Davis','Eric','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('bthompson','Thompson','Blake','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('bthompson','Thompson','Blake','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('bthompson','Thompson','Blake','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('bthompson','Thompson','Blake','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('slangenberg','Langenberg','Sarah','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('slangenberg','Langenberg','Sarah','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('slangenberg','Langenberg','Sarah','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('dwilliams309','Williams','Donna','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('dwilliams309','Williams','Donna','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('cpeterson','Peterson','Colin','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mlee311','Lee','Mary','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('elopez312','Lopez','Eric','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('elopez312','Lopez','Eric','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('pmartinez313','Martinez','Paul','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('pmartinez313','Martinez','Paul','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('pmartinez313','Martinez','Paul','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('lwilliams314','Williams','Lisa','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('lwilliams314','Williams','Lisa','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('lwilliams314','Williams','Lisa','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('kpeterson315','Peterson','Kiersten','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('kpeterson315','Peterson','Kiersten','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('kpeterson315','Peterson','Kiersten','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('kpeterson315','Peterson','Kiersten','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('kvales316','Vales','Kiersten','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('hbutler317','Butler','Heather','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('hbutler317','Butler','Heather','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('hbutler317','Butler','Heather','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('hbutler317','Butler','Heather','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jwalters318','Walters','John','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('kthompson319','Thompson','Kiersten','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('kthompson319','Thompson','Kiersten','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('kthompson319','Thompson','Kiersten','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('kthompson319','Thompson','Kiersten','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mscott320','Scott','Mary','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('rbutler','Butler','Robert','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('rbutler','Butler','Robert','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('rbutler','Butler','Robert','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('rbutler','Butler','Robert','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mclark322','Clark','Mark','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mclark322','Clark','Mark','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('hhenderson','Henderson','Heather','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('hhenderson','Henderson','Heather','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('hdoe324','Doe','Heather','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('hdoe324','Doe','Heather','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('hdoe324','Doe','Heather','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('hdoe324','Doe','Heather','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mdoe325','Doe','Mark','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mdoe325','Doe','Mark','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('klopez326','Lopez','Kiersten','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('klopez326','Lopez','Kiersten','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('klopez326','Lopez','Kiersten','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('dlewis327','Lewis','David','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('dlewis327','Lewis','David','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('dlewis327','Lewis','David','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('wlee328','Lee','William','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('wlee328','Lee','William','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('wlee328','Lee','William','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mthompson329','Thompson','Mary','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('gbrown','Brown','Greg','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('gbrown','Brown','Greg','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('gbrown','Brown','Greg','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('gbrown','Brown','Greg','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('rmartinez331','Martinez','Robert','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('rmartinez331','Martinez','Robert','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('klee','Lee','Karl','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mjohnson','Johnson','Marie','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('lwilliams334','Williams','Lisa','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('lwilliams334','Williams','Lisa','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('lwilliams334','Williams','Lisa','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('tbrown','Brown','Thomas','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('tbrown','Brown','Thomas','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('tbrown','Brown','Thomas','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('tbrown','Brown','Thomas','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jwalters336','Walters','James','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jwalters336','Walters','James','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jwalters336','Walters','James','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('lbutler','Butler','Lisa','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('lbutler','Butler','Lisa','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('lbutler','Butler','Lisa','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('lbutler','Butler','Lisa','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('kbrown','Brown','Kiersten','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('kbrown','Brown','Kiersten','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('pjohnson','Johnson','Paul','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('pjohnson','Johnson','Paul','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jprice340','Price','John','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jprice341','Price','Jim','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('lhenderson342','Henderson','Lisa','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('lhenderson342','Henderson','Lisa','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('kwhite343','White','Kim','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('klopez344','Lopez','Karl','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('bgonazles345','Gonazles','Bill','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('apeterson','Peterson','Ann','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('dbutler347','Butler','David','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('speterson','Peterson','Sarah','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jpeterson349','Peterson','James','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jpeterson349','Peterson','James','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jpeterson349','Peterson','James','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('gjohnson350','Johnson','Greg','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('gjohnson350','Johnson','Greg','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('gjohnson350','Johnson','Greg','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('lthompson','Thompson','Lisa','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('lthompson','Thompson','Lisa','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('nclark','Clark','Nancy','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('nclark','Clark','Nancy','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('swilliams','Williams','Sarah','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jprice354','Price','Jennifer','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jprice354','Price','Jennifer','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('lclark','Clark','Lori','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('lclark','Clark','Lori','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('ghenderson','Henderson','Greg','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('ghenderson','Henderson','Greg','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('ghenderson','Henderson','Greg','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('egonazles357','Gonazles','Eric','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('egonazles357','Gonazles','Eric','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('egonazles357','Gonazles','Eric','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('egonazles357','Gonazles','Eric','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('dlangenberg358','Langenberg','Donna','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('dlangenberg358','Langenberg','Donna','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('dlangenberg358','Langenberg','Donna','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('cbrown','Brown','Colin','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('cbrown','Brown','Colin','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('cbrown','Brown','Colin','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('twalters','Walters','Thomas','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('twalters','Walters','Thomas','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('twalters','Walters','Thomas','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('swhite','White','Sarah','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('swhite','White','Sarah','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('swhite','White','Sarah','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('swhite','White','Sarah','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('rwalters','Walters','Robert','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('rwalters','Walters','Robert','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('rwalters','Walters','Robert','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('rwalters','Walters','Robert','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('eroberts','Roberts','Erik','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('bvales','Vales','Blake','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('bvales','Vales','Blake','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('bdoe365','Doe','Betty','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('bdoe365','Doe','Betty','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('bdoe365','Doe','Betty','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('bdoe365','Doe','Betty','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('nlee366','Lee','Nancy','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('nlee366','Lee','Nancy','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('nlee366','Lee','Nancy','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('tmorrison367','Morrison','Thomas','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('kbutler368','Butler','Kiersten','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('kbutler368','Butler','Kiersten','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('bdavis369','Davis','Bill','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('bdavis369','Davis','Bill','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('bdavis369','Davis','Bill','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('kdavis370','Davis','Kiersten','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('llewis','Lewis','Lori','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('djohnson','Johnson','Donna','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('djohnson','Johnson','Donna','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('djohnson','Johnson','Donna','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jlangenberg373','Langenberg','James','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jlangenberg373','Langenberg','James','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jlangenberg373','Langenberg','James','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jlangenberg373','Langenberg','James','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('klangenberg','Langenberg','Karoline','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jthompson375','Thompson','John','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jthompson375','Thompson','John','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jgonazles','Gonazles','Jennifer','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mscott377','Scott','Mark','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mscott377','Scott','Mark','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mscott377','Scott','Mark','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mscott377','Scott','Mark','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jsmith378','Smith','Jennifer','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jsmith378','Smith','Jennifer','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mroberts379','Roberts','Marie','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mroberts379','Roberts','Marie','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('kprice','Price','Kiersten','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('tclark','Clark','Thomas','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('egasper','Gasper','Erik','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('egasper','Gasper','Erik','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('egasper','Gasper','Erik','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('egasper','Gasper','Erik','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jjohnson383','Johnson','James','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jjohnson383','Johnson','James','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jjohnson383','Johnson','James','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jjohnson383','Johnson','James','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('cdavis','Davis','Colin','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('cdavis','Davis','Colin','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('cdavis','Davis','Colin','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('escott','Scott','Eric','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('escott','Scott','Eric','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('escott','Scott','Eric','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('escott','Scott','Eric','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('kmartinez386','Martinez','Karoline','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('kmartinez386','Martinez','Karoline','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('lgrady','Grady','Lori','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jmartinez388','Martinez','Jo','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('alangenberg','Langenberg','Ann','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('alangenberg','Langenberg','Ann','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('blewis390','Lewis','Betty','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('pjohnson391','Johnson','Paul','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('pjohnson391','Johnson','Paul','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('pjohnson391','Johnson','Paul','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('llee392','Lee','Lori','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('llee392','Lee','Lori','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('llee392','Lee','Lori','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('slewis','Lewis','Sarah','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('slewis','Lewis','Sarah','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('nwalters','Walters','Nancy','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('nwalters','Walters','Nancy','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('hscott395','Scott','Heather','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('hscott395','Scott','Heather','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('hscott395','Scott','Heather','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('edavis396','Davis','Erik','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('dlangenberg397','Langenberg','Donna','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('dlangenberg397','Langenberg','Donna','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('dlangenberg397','Langenberg','Donna','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('plangenberg398','Langenberg','Paul','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('plangenberg398','Langenberg','Paul','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('plangenberg398','Langenberg','Paul','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mscott399','Scott','Michael','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mscott399','Scott','Michael','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mscott399','Scott','Michael','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mscott399','Scott','Michael','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jgasper400','Gasper','Jo','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jgasper400','Gasper','Jo','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('kmartinez401','Martinez','Karoline','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('kmartinez401','Martinez','Karoline','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('cwalters','Walters','Colin','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('cgasper','Gasper','Colin','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('cgasper','Gasper','Colin','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('cgasper','Gasper','Colin','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('cgasper','Gasper','Colin','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jwilliams404','Williams','James','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jwilliams404','Williams','James','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jwilliams404','Williams','James','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jwilliams404','Williams','James','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('rwalters405','Walters','Robert','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('rwalters405','Walters','Robert','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('rwalters405','Walters','Robert','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('kvales406','Vales','Karl','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('bscott','Scott','Bill','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('bscott','Scott','Bill','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('hmorrison408','Morrison','Heather','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('hmorrison408','Morrison','Heather','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('hmorrison408','Morrison','Heather','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('hmorrison408','Morrison','Heather','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('eanderson','Anderson','Eric','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mlangenberg410','Langenberg','Mark','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('msmith411','Smith','Mark','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('msmith411','Smith','Mark','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('msmith411','Smith','Mark','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('wpeterson','Peterson','William','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('wpeterson','Peterson','William','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('wpeterson','Peterson','William','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('wpeterson','Peterson','William','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mgasper413','Gasper','Marie','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mgasper413','Gasper','Marie','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mgasper413','Gasper','Marie','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mgasper413','Gasper','Marie','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('bvales414','Vales','Blake','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('bvales414','Vales','Blake','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('bvales414','Vales','Blake','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('bgrady415','Grady','Blake','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('bgrady415','Grady','Blake','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('bgrady415','Grady','Blake','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('bgrady415','Grady','Blake','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('plee','Lee','Paul','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('plee','Lee','Paul','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('plee','Lee','Paul','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('kwilliams','Williams','Kim','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('kwilliams','Williams','Kim','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('kwilliams','Williams','Kim','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('kwilliams','Williams','Kim','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('wwilliams418','Williams','William','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('wwilliams418','Williams','William','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('wwilliams418','Williams','William','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jbutler419','Butler','Jennifer','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('hvales420','Vales','Heather','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('hvales420','Vales','Heather','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('hvales420','Vales','Heather','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('kroberts421','Roberts','Karl','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('bdoe422','Doe','Betty','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('bdoe422','Doe','Betty','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('bdoe422','Doe','Betty','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('dclark','Clark','David','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('dclark','Clark','David','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mhenderson','Henderson','Michael','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mhenderson','Henderson','Michael','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mhenderson','Henderson','Michael','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('dhenderson425','Henderson','David','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('dhenderson425','Henderson','David','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('dhenderson425','Henderson','David','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('dhenderson425','Henderson','David','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('dgonazles','Gonazles','David','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('dgonazles','Gonazles','David','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('dgrady427','Grady','David','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jjohnson428','Johnson','Jennifer','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jjohnson428','Johnson','Jennifer','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jjohnson428','Johnson','Jennifer','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jjohnson428','Johnson','Jennifer','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jlewis429','Lewis','Jennifer','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('klangenberg430','Langenberg','Kim','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('klangenberg430','Langenberg','Kim','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('klangenberg430','Langenberg','Kim','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('klangenberg430','Langenberg','Kim','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('ddoe431','Doe','David','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('ddoe431','Doe','David','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('escott432','Scott','Eric','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('escott432','Scott','Eric','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('escott432','Scott','Eric','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('lwalters','Walters','Lisa','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('lwalters','Walters','Lisa','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('gsmith434','Smith','Greg','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('gsmith434','Smith','Greg','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('gsmith434','Smith','Greg','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('kwalters','Walters','Karl','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('tmorrison436','Morrison','Thomas','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('tmorrison436','Morrison','Thomas','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('tmorrison436','Morrison','Thomas','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('bbutler437','Butler','Bill','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mgonazles438','Gonazles','Mark','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('rwalters439','Walters','Robert','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('rwalters439','Walters','Robert','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('kclark440','Clark','Karl','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('nvales','Vales','Nancy','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('nvales','Vales','Nancy','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jwalters442','Walters','James','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jwalters442','Walters','James','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jwalters442','Walters','James','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('bwilliams','Williams','Bill','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jgrady444','Grady','Jim','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jgrady444','Grady','Jim','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jgrady444','Grady','Jim','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('escott445','Scott','Erik','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('escott445','Scott','Erik','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('bclark446','Clark','Bill','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('bclark446','Clark','Bill','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('bclark446','Clark','Bill','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('bclark446','Clark','Bill','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('klopez447','Lopez','Kiersten','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('klopez447','Lopez','Kiersten','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('klopez447','Lopez','Kiersten','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('klopez447','Lopez','Kiersten','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('slee','Lee','Sarah','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('dwilliams449','Williams','Donna','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('dwilliams449','Williams','Donna','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('dwilliams449','Williams','Donna','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('dwilliams449','Williams','Donna','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('klewis450','Lewis','Kim','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('elangenberg','Langenberg','Eric','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('elangenberg','Langenberg','Eric','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('elangenberg','Langenberg','Eric','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('elangenberg','Langenberg','Eric','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('rvales','Vales','Robert','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('rvales','Vales','Robert','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('rvales','Vales','Robert','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('rvales','Vales','Robert','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jgasper453','Gasper','Jo','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mgasper454','Gasper','Mark','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mgasper454','Gasper','Mark','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mgasper454','Gasper','Mark','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mgasper454','Gasper','Mark','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jclark455','Clark','James','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('bgasper456','Gasper','Betty','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('bgasper456','Gasper','Betty','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('bgasper456','Gasper','Betty','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('bgasper456','Gasper','Betty','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('bwilliams457','Williams','Blake','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('kprice458','Price','Karl','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('kprice458','Price','Karl','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('ksmith','Smith','Kiersten','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('ksmith','Smith','Kiersten','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('ksmith','Smith','Kiersten','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('ksmith','Smith','Kiersten','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('lbutler460','Butler','Lori','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('lbutler460','Butler','Lori','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('lbutler460','Butler','Lori','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mlewis461','Lewis','Mark','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mlewis461','Lewis','Mark','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mlewis461','Lewis','Mark','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mlewis461','Lewis','Mark','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jmorrison462','Morrison','Jo','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jmorrison462','Morrison','Jo','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jmorrison462','Morrison','Jo','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('msmith463','Smith','Mary','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('blopez','Lopez','Blake','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('hdavis','Davis','Heather','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('bwilliams466','Williams','Betty','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('bwilliams466','Williams','Betty','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('bwilliams466','Williams','Betty','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('bwilliams466','Williams','Betty','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('gdavis','Davis','Greg','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('gdavis','Davis','Greg','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('gdavis','Davis','Greg','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('gdavis','Davis','Greg','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mgonazles468','Gonazles','Michael','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mgonazles468','Gonazles','Michael','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mgonazles468','Gonazles','Michael','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mlopez469','Lopez','Mary','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mlopez469','Lopez','Mary','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mlopez469','Lopez','Mary','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('eroberts470','Roberts','Eric','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('eroberts470','Roberts','Eric','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('eroberts470','Roberts','Eric','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('eroberts470','Roberts','Eric','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('bsmith471','Smith','Blake','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('bsmith471','Smith','Blake','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('bsmith471','Smith','Blake','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('bsmith471','Smith','Blake','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('rwilliams472','Williams','Robert','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('rwilliams472','Williams','Robert','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('rwilliams472','Williams','Robert','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('rwilliams472','Williams','Robert','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jdavis','Davis','Jennifer','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jdavis','Davis','Jennifer','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('egrady','Grady','Erik','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('dpeterson475','Peterson','Donna','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('dpeterson475','Peterson','Donna','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('dpeterson475','Peterson','Donna','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('lwilliams476','Williams','Lisa','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('lwilliams476','Williams','Lisa','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('lwilliams476','Williams','Lisa','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('lwilliams476','Williams','Lisa','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('eroberts477','Roberts','Erik','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('eroberts477','Roberts','Erik','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('pvales','Vales','Paul','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('pvales','Vales','Paul','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jscott479','Scott','Jim','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('bdavis480','Davis','Betty','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jgrady481','Grady','Jim','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jgrady481','Grady','Jim','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('nbrown482','Brown','Nancy','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('nbrown482','Brown','Nancy','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('nbrown482','Brown','Nancy','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('nbrown482','Brown','Nancy','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('blee483','Lee','Betty','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('blee483','Lee','Betty','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jclark484','Clark','Jim','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jclark484','Clark','Jim','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jclark484','Clark','Jim','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('dbrown','Brown','David','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('dbrown','Brown','David','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('pgonazles','Gonazles','Paul','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('pgonazles','Gonazles','Paul','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('pgonazles','Gonazles','Paul','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mwhite487','White','Mark','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mwhite487','White','Mark','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mwhite487','White','Mark','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mwhite487','White','Mark','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('svales488','Vales','Sarah','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('svales488','Vales','Sarah','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('svales488','Vales','Sarah','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('svales488','Vales','Sarah','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('egasper489','Gasper','Eric','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('kdoe490','Doe','Kim','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('kdoe490','Doe','Kim','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('bmorrison491','Morrison','Bill','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('bmorrison491','Morrison','Bill','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('lvales','Vales','Lori','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('lvales','Vales','Lori','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('lvales','Vales','Lori','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('hdavis493','Davis','Heather','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jthompson494','Thompson','James','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jthompson494','Thompson','James','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('kdoe495','Doe','Karl','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('kwilliams496','Williams','Kim','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('egasper497','Gasper','Erik','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('pvales498','Vales','Paul','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('sscott','Scott','Sarah','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('sscott','Scott','Sarah','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('tmartinez','Martinez','Thomas','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mvales501','Vales','Marie','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mvales501','Vales','Marie','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mvales501','Vales','Marie','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mvales501','Vales','Marie','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mhenderson502','Henderson','Mark','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mdavis503','Davis','Mark','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mdavis503','Davis','Mark','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mdoe504','Doe','Mary','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mdoe504','Doe','Mary','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mdoe504','Doe','Mary','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('bgrady505','Grady','Betty','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('bgrady505','Grady','Betty','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('bgrady505','Grady','Betty','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mmartinez506','Martinez','Michael','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mmartinez506','Martinez','Michael','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('bwalters','Walters','Betty','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('bwalters','Walters','Betty','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('bwalters','Walters','Betty','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('bwalters','Walters','Betty','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('avales508','Vales','Ann','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('avales508','Vales','Ann','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('avales508','Vales','Ann','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('avales508','Vales','Ann','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('dlangenberg509','Langenberg','David','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('dlangenberg509','Langenberg','David','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('tlopez','Lopez','Thomas','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('tlopez','Lopez','Thomas','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('tlopez','Lopez','Thomas','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('lclark511','Clark','Lisa','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('lclark511','Clark','Lisa','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('panderson','Anderson','Paul','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('panderson','Anderson','Paul','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('panderson','Anderson','Paul','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('bjohnson513','Johnson','Bill','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('bjohnson513','Johnson','Bill','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('bjohnson513','Johnson','Bill','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('bjohnson513','Johnson','Bill','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('wlopez','Lopez','William','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('tmartinez515','Martinez','Thomas','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('tmartinez515','Martinez','Thomas','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('wclark','Clark','William','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('wclark','Clark','William','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('wclark','Clark','William','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('wclark','Clark','William','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jwilliams517','Williams','Jim','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('hwilliams','Williams','Heather','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('hwilliams','Williams','Heather','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('hwilliams','Williams','Heather','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('llopez519','Lopez','Lori','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('klopez520','Lopez','Karoline','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('klopez520','Lopez','Karoline','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('klopez520','Lopez','Karoline','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('tlee','Lee','Thomas','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('tlee','Lee','Thomas','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('tlee','Lee','Thomas','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('tlee','Lee','Thomas','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mscott522','Scott','Mary','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mscott522','Scott','Mary','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('danderson523','Anderson','David','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('danderson523','Anderson','David','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jgonazles524','Gonazles','Jim','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('hgasper','Gasper','Heather','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('hgasper','Gasper','Heather','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('hgasper','Gasper','Heather','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('ehenderson','Henderson','Eric','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('ehenderson','Henderson','Eric','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('ehenderson','Henderson','Eric','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('bscott527','Scott','Bill','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('bscott527','Scott','Bill','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('ewhite','White','Eric','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('ewhite','White','Eric','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('sroberts','Roberts','Sarah','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('pbutler','Butler','Paul','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('gdavis531','Davis','Greg','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('wjohnson532','Johnson','William','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('escott533','Scott','Eric','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('escott533','Scott','Eric','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('escott533','Scott','Eric','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('escott533','Scott','Eric','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('kmartinez534','Martinez','Karl','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('kmartinez534','Martinez','Karl','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('kmartinez534','Martinez','Karl','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('kmartinez534','Martinez','Karl','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('kbrown535','Brown','Kiersten','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('kbrown535','Brown','Kiersten','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jlangenberg536','Langenberg','John','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jlangenberg536','Langenberg','John','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('gdavis537','Davis','Greg','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('gdavis537','Davis','Greg','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('gdavis537','Davis','Greg','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('gdavis537','Davis','Greg','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('wdoe','Doe','William','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('wdoe','Doe','William','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('wdoe','Doe','William','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('kthompson539','Thompson','Kiersten','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('kthompson539','Thompson','Kiersten','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('ldavis540','Davis','Lisa','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('ldavis540','Davis','Lisa','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('ldavis540','Davis','Lisa','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('bmartinez','Martinez','Blake','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('bmartinez','Martinez','Blake','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('lroberts542','Roberts','Lisa','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('lroberts542','Roberts','Lisa','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('lroberts542','Roberts','Lisa','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('lroberts542','Roberts','Lisa','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('ksmith543','Smith','Karl','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('ksmith543','Smith','Karl','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('ksmith543','Smith','Karl','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('ksmith543','Smith','Karl','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jclark544','Clark','John','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jclark544','Clark','John','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jbutler545','Butler','Jennifer','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jbutler545','Butler','Jennifer','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jbutler545','Butler','Jennifer','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jgrady546','Grady','John','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jgrady546','Grady','John','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jlee547','Lee','Jennifer','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jlee547','Lee','Jennifer','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jlee547','Lee','Jennifer','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jlee547','Lee','Jennifer','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('csmith','Smith','Colin','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('csmith','Smith','Colin','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('csmith','Smith','Colin','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('csmith','Smith','Colin','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('tpeterson','Peterson','Thomas','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mgonazles550','Gonazles','Marie','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mgonazles550','Gonazles','Marie','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mgonazles550','Gonazles','Marie','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mgonazles550','Gonazles','Marie','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('bwhite551','White','Bill','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('bwhite551','White','Bill','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('nhenderson552','Henderson','Nancy','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('nhenderson552','Henderson','Nancy','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('blewis553','Lewis','Bill','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('blewis553','Lewis','Bill','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('blewis553','Lewis','Bill','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mjohnson554','Johnson','Michael','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mjohnson554','Johnson','Michael','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('ganderson555','Anderson','Greg','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('ganderson555','Anderson','Greg','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('ganderson555','Anderson','Greg','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('slewis556','Lewis','Sarah','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('slewis556','Lewis','Sarah','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('slewis556','Lewis','Sarah','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('dvales557','Vales','Donna','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('dvales557','Vales','Donna','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('dvales557','Vales','Donna','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jlopez558','Lopez','John','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jlopez558','Lopez','John','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jlopez558','Lopez','John','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jlopez558','Lopez','John','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('kmartinez559','Martinez','Karl','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('kmartinez559','Martinez','Karl','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('kmartinez559','Martinez','Karl','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('kmartinez559','Martinez','Karl','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('kthompson560','Thompson','Karl','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('kroberts561','Roberts','Karoline','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('kroberts561','Roberts','Karoline','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('kroberts561','Roberts','Karoline','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('kroberts561','Roberts','Karoline','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mbrown562','Brown','Mary','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('blopez563','Lopez','Betty','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('blopez563','Lopez','Betty','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('blopez563','Lopez','Betty','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jroberts564','Roberts','Jo','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jroberts564','Roberts','Jo','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jroberts564','Roberts','Jo','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jroberts564','Roberts','Jo','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jlopez565','Lopez','Jennifer','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jlopez565','Lopez','Jennifer','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('bwalters566','Walters','Blake','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('bwalters566','Walters','Blake','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('bwalters566','Walters','Blake','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('kvales567','Vales','Karoline','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mlopez568','Lopez','Michael','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mlopez568','Lopez','Michael','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mlopez568','Lopez','Michael','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mlopez568','Lopez','Michael','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('tmorrison569','Morrison','Thomas','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('tmorrison569','Morrison','Thomas','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('tmorrison569','Morrison','Thomas','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('tmorrison569','Morrison','Thomas','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('bdavis570','Davis','Blake','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('bdavis570','Davis','Blake','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('bdavis570','Davis','Blake','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('sdavis','Davis','Sarah','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('sdavis','Davis','Sarah','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('sdavis','Davis','Sarah','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('banderson572','Anderson','Blake','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('banderson572','Anderson','Blake','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('banderson572','Anderson','Blake','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('wanderson','Anderson','William','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('wanderson','Anderson','William','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('wanderson','Anderson','William','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('wanderson','Anderson','William','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('bprice574','Price','Bill','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('bprice574','Price','Bill','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('bprice574','Price','Bill','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('bprice574','Price','Bill','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jbutler575','Butler','Jennifer','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jbutler575','Butler','Jennifer','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jbutler575','Butler','Jennifer','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jbutler575','Butler','Jennifer','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jscott576','Scott','Jennifer','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jscott576','Scott','Jennifer','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jscott576','Scott','Jennifer','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('ddoe577','Doe','David','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('ddoe577','Doe','David','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('tdavis578','Davis','Thomas','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('tdavis578','Davis','Thomas','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('tdavis578','Davis','Thomas','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('tdavis578','Davis','Thomas','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('slangenberg579','Langenberg','Sarah','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('slangenberg579','Langenberg','Sarah','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('bvales580','Vales','Betty','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('lpeterson581','Peterson','Lori','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('lpeterson581','Peterson','Lori','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('lpeterson581','Peterson','Lori','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('bmartinez582','Martinez','Blake','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('bmartinez582','Martinez','Blake','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('bmartinez582','Martinez','Blake','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('asmith583','Smith','Ann','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('asmith583','Smith','Ann','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('asmith583','Smith','Ann','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('aprice','Price','Ann','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('aprice','Price','Ann','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('ehenderson585','Henderson','Eric','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('lmorrison586','Morrison','Lisa','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('lmorrison586','Morrison','Lisa','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('chenderson','Henderson','Colin','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('lbrown','Brown','Lori','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('lbrown','Brown','Lori','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('lbrown','Brown','Lori','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('lbrown','Brown','Lori','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('psmith','Smith','Paul','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('klee590','Lee','Karl','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('klee590','Lee','Karl','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('kdoe591','Doe','Karl','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('kdoe591','Doe','Karl','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('kdoe591','Doe','Karl','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('kdoe591','Doe','Karl','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('ldoe592','Doe','Lisa','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mvales593','Vales','Marie','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('ahenderson594','Henderson','Ann','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('ahenderson594','Henderson','Ann','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('aroberts','Roberts','Ann','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('aroberts','Roberts','Ann','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('aroberts','Roberts','Ann','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('dthompson','Thompson','David','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('dthompson','Thompson','David','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('dbrown597','Brown','Donna','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('dbrown597','Brown','Donna','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('dbrown597','Brown','Donna','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('tmartinez598','Martinez','Thomas','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('tmartinez598','Martinez','Thomas','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('kbrown599','Brown','Karl','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('kbrown599','Brown','Karl','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('pclark600','Clark','Paul','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('pclark600','Clark','Paul','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('pclark600','Clark','Paul','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mprice601','Price','Michael','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('lbutler602','Butler','Lisa','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jhenderson603','Henderson','Jennifer','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jhenderson603','Henderson','Jennifer','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('kscott604','Scott','Karoline','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('kscott604','Scott','Karoline','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('kscott604','Scott','Karoline','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('ddoe605','Doe','David','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('ddoe605','Doe','David','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('djohnson606','Johnson','David','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('pbutler607','Butler','Paul','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('pbutler607','Butler','Paul','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('pbutler607','Butler','Paul','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('pbutler607','Butler','Paul','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jbutler608','Butler','Jennifer','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jbutler608','Butler','Jennifer','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jbutler608','Butler','Jennifer','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jbutler608','Butler','Jennifer','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('ksmith609','Smith','Kim','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('ksmith609','Smith','Kim','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jpeterson610','Peterson','James','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('kbutler611','Butler','Karl','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('kbutler611','Butler','Karl','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('kbutler611','Butler','Karl','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('wwhite','White','William','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('wwhite','White','William','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('dpeterson613','Peterson','David','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('dpeterson613','Peterson','David','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('dpeterson613','Peterson','David','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('dpeterson613','Peterson','David','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('klopez614','Lopez','Karl','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('klopez614','Lopez','Karl','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('klopez614','Lopez','Karl','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('tjohnson','Johnson','Thomas','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mlee616','Lee','Mark','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mlee616','Lee','Mark','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jprice617','Price','Jennifer','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jprice617','Price','Jennifer','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jprice617','Price','Jennifer','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jprice617','Price','Jennifer','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('ghenderson618','Henderson','Greg','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('rwalters619','Walters','Robert','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('rwalters619','Walters','Robert','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('bmorrison620','Morrison','Betty','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('bmorrison620','Morrison','Betty','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('landerson','Anderson','Lisa','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('landerson','Anderson','Lisa','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('landerson','Anderson','Lisa','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('landerson','Anderson','Lisa','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('landerson622','Anderson','Lori','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('landerson622','Anderson','Lori','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('landerson622','Anderson','Lori','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('landerson622','Anderson','Lori','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('pprice','Price','Paul','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('pprice','Price','Paul','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('nsmith','Smith','Nancy','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('nsmith','Smith','Nancy','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('nsmith','Smith','Nancy','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('nsmith','Smith','Nancy','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jpeterson625','Peterson','James','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jpeterson625','Peterson','James','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jpeterson625','Peterson','James','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jpeterson625','Peterson','James','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mlopez626','Lopez','Mary','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mlopez626','Lopez','Mary','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mlopez626','Lopez','Mary','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mlopez626','Lopez','Mary','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('dvales627','Vales','Donna','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('dvales627','Vales','Donna','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('dvales627','Vales','Donna','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('dvales627','Vales','Donna','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('ethompson628','Thompson','Erik','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('rdoe629','Doe','Robert','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('rdoe629','Doe','Robert','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('rdoe629','Doe','Robert','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('rdoe629','Doe','Robert','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('cjohnson','Johnson','Colin','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('cjohnson','Johnson','Colin','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('cjohnson','Johnson','Colin','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('cjohnson','Johnson','Colin','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mwilliams631','Williams','Michael','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mwilliams631','Williams','Michael','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mwilliams631','Williams','Michael','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mwilliams631','Williams','Michael','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jpeterson632','Peterson','John','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('bgonazles633','Gonazles','Bill','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('bgonazles633','Gonazles','Bill','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('danderson634','Anderson','David','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('kwalters635','Walters','Kim','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('kwalters635','Walters','Kim','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('kwalters635','Walters','Kim','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('kwalters635','Walters','Kim','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('adoe','Doe','Ann','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('adoe','Doe','Ann','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('cdoe','Doe','Colin','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('ddoe638','Doe','David','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('edavis639','Davis','Erik','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('edavis639','Davis','Erik','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('edavis639','Davis','Erik','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('edavis639','Davis','Erik','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('hwhite640','White','Heather','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('dprice641','Price','David','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('dprice641','Price','David','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('dprice641','Price','David','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('dprice641','Price','David','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('klopez642','Lopez','Kim','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('klopez642','Lopez','Kim','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('klopez642','Lopez','Kim','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('klopez642','Lopez','Kim','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('abrown643','Brown','Ann','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mwhite644','White','Mary','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mwhite644','White','Mary','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('kwhite645','White','Kiersten','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('kwhite645','White','Kiersten','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('kwhite645','White','Kiersten','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('kwhite645','White','Kiersten','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('edoe','Doe','Erik','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mgonazles647','Gonazles','Mark','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mgonazles647','Gonazles','Mark','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mgonazles647','Gonazles','Mark','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jhenderson648','Henderson','James','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jhenderson648','Henderson','James','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('bsmith649','Smith','Bill','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('bsmith649','Smith','Bill','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('bsmith649','Smith','Bill','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('lmorrison650','Morrison','Lisa','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('lmorrison650','Morrison','Lisa','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('lmorrison650','Morrison','Lisa','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('llangenberg651','Langenberg','Lori','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('llangenberg651','Langenberg','Lori','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('llangenberg651','Langenberg','Lori','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('llangenberg651','Langenberg','Lori','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jwalters652','Walters','Jim','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jwalters652','Walters','Jim','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('tjohnson653','Johnson','Thomas','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('tjohnson653','Johnson','Thomas','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('tjohnson653','Johnson','Thomas','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jwalters654','Walters','Jo','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jwalters654','Walters','Jo','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('bmorrison655','Morrison','Betty','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mclark656','Clark','Michael','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mclark656','Clark','Michael','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mclark656','Clark','Michael','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mclark656','Clark','Michael','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('ewilliams657','Williams','Erik','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('ewilliams657','Williams','Erik','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('ewilliams657','Williams','Erik','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jlewis658','Lewis','John','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jlewis658','Lewis','John','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('kgrady659','Grady','Kiersten','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('kgrady659','Grady','Kiersten','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('wmartinez','Martinez','William','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('wmartinez','Martinez','William','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('pwilliams','Williams','Paul','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('pwilliams','Williams','Paul','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('kjohnson662','Johnson','Kim','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('kjohnson662','Johnson','Kim','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('kjohnson662','Johnson','Kim','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('smartinez663','Martinez','Sarah','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('smartinez663','Martinez','Sarah','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('smartinez663','Martinez','Sarah','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mvales664','Vales','Marie','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('klangenberg665','Langenberg','Karl','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('msmith666','Smith','Marie','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mvales667','Vales','Mark','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jwalters668','Walters','James','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jwalters668','Walters','James','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jwalters668','Walters','James','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jwalters668','Walters','James','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('pgonazles669','Gonazles','Paul','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('pgonazles669','Gonazles','Paul','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('dvales670','Vales','Donna','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('dvales670','Vales','Donna','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('dclark671','Clark','David','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('bdoe672','Doe','Betty','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('bdoe672','Doe','Betty','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('bdoe672','Doe','Betty','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mbrown673','Brown','Mark','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mbrown673','Brown','Mark','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mbrown673','Brown','Mark','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('kdoe674','Doe','Karoline','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('kdoe674','Doe','Karoline','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('kdoe674','Doe','Karoline','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('kdoe674','Doe','Karoline','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('wthompson675','Thompson','William','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('wthompson675','Thompson','William','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('dmorrison676','Morrison','David','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('edoe677','Doe','Erik','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('edoe677','Doe','Erik','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('edoe677','Doe','Erik','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('nlangenberg','Langenberg','Nancy','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('nlangenberg','Langenberg','Nancy','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('kpeterson679','Peterson','Karl','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('hgonazles','Gonazles','Heather','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('hgonazles','Gonazles','Heather','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('droberts','Roberts','Donna','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('dgonazles682','Gonazles','David','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('dgonazles682','Gonazles','David','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mmorrison','Morrison','Mark','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('cmorrison684','Morrison','Colin','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('cmorrison684','Morrison','Colin','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('cmorrison684','Morrison','Colin','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jlewis685','Lewis','Jim','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jlewis685','Lewis','Jim','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jlewis685','Lewis','Jim','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jlewis685','Lewis','Jim','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jjohnson686','Johnson','Jennifer','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jjohnson686','Johnson','Jennifer','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('elee','Lee','Erik','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('elee','Lee','Erik','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('elee','Lee','Erik','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('elee','Lee','Erik','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('ddoe688','Doe','Donna','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('ddoe688','Doe','Donna','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('droberts689','Roberts','Donna','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('droberts689','Roberts','Donna','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mgonazles690','Gonazles','Mary','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mgonazles690','Gonazles','Mary','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('awilliams','Williams','Ann','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('gwalters','Walters','Greg','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('gwalters','Walters','Greg','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('gwalters','Walters','Greg','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('gwalters','Walters','Greg','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('wgonazles','Gonazles','William','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mlewis694','Lewis','Michael','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mlewis694','Lewis','Michael','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('avales695','Vales','Ann','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('avales695','Vales','Ann','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mjohnson696','Johnson','Michael','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mjohnson696','Johnson','Michael','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('kanderson','Anderson','Kim','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('kanderson','Anderson','Kim','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('kanderson','Anderson','Kim','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('troberts','Roberts','Thomas','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('troberts','Roberts','Thomas','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('troberts','Roberts','Thomas','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('dlewis699','Lewis','David','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('dlewis699','Lewis','David','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('dlewis699','Lewis','David','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('dwalters700','Walters','Donna','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('kbrown701','Brown','Kim','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('kbrown701','Brown','Kim','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('kbrown701','Brown','Kim','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('ewhite702','White','Erik','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('ewhite702','White','Erik','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('ewhite702','White','Erik','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('ewhite702','White','Erik','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('lwalters703','Walters','Lori','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('lwalters703','Walters','Lori','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('lwalters703','Walters','Lori','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('alangenberg704','Langenberg','Ann','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('bbrown705','Brown','Bill','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('bbrown705','Brown','Bill','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('blangenberg','Langenberg','Blake','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mlewis707','Lewis','Michael','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mlewis707','Lewis','Michael','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mlewis707','Lewis','Michael','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('ksmith708','Smith','Karl','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('ksmith708','Smith','Karl','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('ksmith708','Smith','Karl','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('ksmith708','Smith','Karl','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('clopez','Lopez','Colin','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('clopez','Lopez','Colin','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mclark710','Clark','Mark','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mclark710','Clark','Mark','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mclark710','Clark','Mark','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('tprice','Price','Thomas','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('tprice','Price','Thomas','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('tprice','Price','Thomas','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('tprice','Price','Thomas','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('klewis712','Lewis','Karl','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('klewis712','Lewis','Karl','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mbutler713','Butler','Marie','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mbutler713','Butler','Marie','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mbutler713','Butler','Marie','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mbutler713','Butler','Marie','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mmorrison714','Morrison','Mark','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mmorrison714','Morrison','Mark','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mmorrison714','Morrison','Mark','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('gsmith715','Smith','Greg','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('gsmith715','Smith','Greg','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('gsmith715','Smith','Greg','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('randerson','Anderson','Robert','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('randerson','Anderson','Robert','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('randerson','Anderson','Robert','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('klangenberg717','Langenberg','Kiersten','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('klangenberg717','Langenberg','Kiersten','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mlangenberg718','Langenberg','Mary','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('plee719','Lee','Paul','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('plee719','Lee','Paul','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('dclark720','Clark','Donna','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('bbrown721','Brown','Blake','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('bbrown721','Brown','Blake','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('bvales722','Vales','Blake','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('emartinez','Martinez','Erik','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('emartinez','Martinez','Erik','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('kgonazles','Gonazles','Karl','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('kgonazles','Gonazles','Karl','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('kgonazles','Gonazles','Karl','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('kgonazles','Gonazles','Karl','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('lvales725','Vales','Lisa','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('lvales725','Vales','Lisa','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('lvales725','Vales','Lisa','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('kgrady726','Grady','Karl','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('kgrady726','Grady','Karl','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('aanderson727','Anderson','Ann','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('awhite728','White','Ann','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('lwilliams729','Williams','Lori','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('bclark730','Clark','Bill','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('bclark730','Clark','Bill','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('dwilliams731','Williams','David','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('dwilliams732','Williams','David','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('dlewis733','Lewis','David','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('dlewis733','Lewis','David','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('ndoe','Doe','Nancy','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('ndoe','Doe','Nancy','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('ndoe','Doe','Nancy','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jjohnson735','Johnson','Jennifer','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jjohnson735','Johnson','Jennifer','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jjohnson735','Johnson','Jennifer','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jgonazles736','Gonazles','Jennifer','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('lprice','Price','Lisa','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('lprice','Price','Lisa','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('lprice','Price','Lisa','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('lprice','Price','Lisa','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('rdoe738','Doe','Robert','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('rdoe738','Doe','Robert','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('rdoe738','Doe','Robert','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('dbrown739','Brown','David','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('handerson740','Anderson','Heather','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('handerson740','Anderson','Heather','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jmartinez741','Martinez','Jo','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jmartinez741','Martinez','Jo','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('agonazles','Gonazles','Ann','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('edavis743','Davis','Erik','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('edavis743','Davis','Erik','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('edavis743','Davis','Erik','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('edavis743','Davis','Erik','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jpeterson744','Peterson','James','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jpeterson744','Peterson','James','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jpeterson744','Peterson','James','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jpeterson744','Peterson','James','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('bprice745','Price','Betty','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('bprice745','Price','Betty','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('bprice745','Price','Betty','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('bprice745','Price','Betty','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jwilliams746','Williams','Jim','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jwilliams746','Williams','Jim','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jwilliams746','Williams','Jim','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jwilliams746','Williams','Jim','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('rroberts','Roberts','Robert','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('rroberts','Roberts','Robert','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('rroberts','Roberts','Robert','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('rroberts','Roberts','Robert','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('kroberts748','Roberts','Karl','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('kroberts748','Roberts','Karl','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('janderson749','Anderson','Jim','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('janderson749','Anderson','Jim','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('janderson749','Anderson','Jim','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('janderson749','Anderson','Jim','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('broberts750','Roberts','Bill','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('broberts750','Roberts','Bill','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('broberts750','Roberts','Bill','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('elopez751','Lopez','Erik','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('manderson752','Anderson','Michael','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('manderson752','Anderson','Michael','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('kbutler753','Butler','Karoline','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('kbutler753','Butler','Karoline','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('kbutler753','Butler','Karoline','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('kbutler753','Butler','Karoline','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('gclark','Clark','Greg','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('gclark','Clark','Greg','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('gclark','Clark','Greg','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jwilliams755','Williams','Jo','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jwilliams755','Williams','Jo','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('llopez756','Lopez','Lori','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('llopez756','Lopez','Lori','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('llopez756','Lopez','Lori','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('khenderson757','Henderson','Kim','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('khenderson757','Henderson','Kim','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('khenderson757','Henderson','Kim','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('cjohnson758','Johnson','Colin','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('cjohnson758','Johnson','Colin','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('cjohnson758','Johnson','Colin','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('kgasper759','Gasper','Kim','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('kgasper759','Gasper','Kim','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jlewis760','Lewis','James','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jlewis760','Lewis','James','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jlewis760','Lewis','James','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jlewis760','Lewis','James','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('llee761','Lee','Lori','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('llee761','Lee','Lori','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('llee761','Lee','Lori','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('rvales762','Vales','Robert','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('rvales762','Vales','Robert','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('rvales762','Vales','Robert','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('rvales762','Vales','Robert','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jgasper763','Gasper','John','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jgasper763','Gasper','John','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jgasper763','Gasper','John','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jgasper763','Gasper','John','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mprice764','Price','Marie','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mprice764','Price','Marie','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mprice764','Price','Marie','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('asmith765','Smith','Ann','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('asmith765','Smith','Ann','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('kanderson766','Anderson','Kiersten','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('kanderson766','Anderson','Kiersten','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('tbrown767','Brown','Thomas','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('tbrown767','Brown','Thomas','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('kvales768','Vales','Karoline','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('kvales768','Vales','Karoline','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('kvales768','Vales','Karoline','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('kvales768','Vales','Karoline','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jhenderson769','Henderson','Jo','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jhenderson769','Henderson','Jo','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jhenderson769','Henderson','Jo','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jhenderson769','Henderson','Jo','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jjohnson770','Johnson','James','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('wroberts','Roberts','William','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('wroberts','Roberts','William','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('wroberts','Roberts','William','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('wroberts','Roberts','William','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('cpeterson772','Peterson','Colin','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('tdoe','Doe','Thomas','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('tdoe','Doe','Thomas','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('tdoe','Doe','Thomas','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('tdoe','Doe','Thomas','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('hroberts','Roberts','Heather','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('hroberts','Roberts','Heather','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mprice775','Price','Michael','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mprice775','Price','Michael','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mprice775','Price','Michael','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('lroberts776','Roberts','Lori','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('lroberts776','Roberts','Lori','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('lroberts776','Roberts','Lori','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('lroberts776','Roberts','Lori','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mdavis777','Davis','Marie','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mdavis777','Davis','Marie','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('kgonazles778','Gonazles','Karoline','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('kgonazles778','Gonazles','Karoline','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('kgonazles778','Gonazles','Karoline','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('kgonazles778','Gonazles','Karoline','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mvales779','Vales','Mary','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mvales779','Vales','Mary','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mvales779','Vales','Mary','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jdoe780','Doe','Jo','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('dmartinez','Martinez','David','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('dvales782','Vales','David','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('tprice783','Price','Thomas','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('tprice783','Price','Thomas','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('tprice783','Price','Thomas','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('tprice783','Price','Thomas','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('dmorrison784','Morrison','Donna','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('dgonazles785','Gonazles','David','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('dgonazles785','Gonazles','David','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('dgonazles785','Gonazles','David','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('dgonazles785','Gonazles','David','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('swalters786','Walters','Sarah','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('swalters786','Walters','Sarah','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('swalters786','Walters','Sarah','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('hpeterson','Peterson','Heather','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('hpeterson','Peterson','Heather','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('hpeterson','Peterson','Heather','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jlee788','Lee','Jennifer','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('nlopez','Lopez','Nancy','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('nlopez','Lopez','Nancy','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('nlopez','Lopez','Nancy','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('nlopez','Lopez','Nancy','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('kwhite790','White','Kim','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('kwhite790','White','Kim','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('kwhite790','White','Kim','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('nbutler','Butler','Nancy','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jroberts792','Roberts','Jo','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jroberts792','Roberts','Jo','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jroberts792','Roberts','Jo','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('hclark','Clark','Heather','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('hclark','Clark','Heather','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('hclark','Clark','Heather','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('nclark794','Clark','Nancy','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('nclark794','Clark','Nancy','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('dpeterson795','Peterson','David','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('dpeterson795','Peterson','David','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('dpeterson795','Peterson','David','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('hbrown796','Brown','Heather','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('hbrown796','Brown','Heather','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('hbrown796','Brown','Heather','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('hlewis797','Lewis','Heather','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('hlewis797','Lewis','Heather','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('hlewis797','Lewis','Heather','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('blewis798','Lewis','Betty','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('blewis798','Lewis','Betty','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('blewis798','Lewis','Betty','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('blewis798','Lewis','Betty','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('sroberts799','Roberts','Sarah','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('sroberts799','Roberts','Sarah','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('sroberts799','Roberts','Sarah','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('sroberts799','Roberts','Sarah','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('clewis800','Lewis','Colin','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('clewis800','Lewis','Colin','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('clewis800','Lewis','Colin','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jclark801','Clark','Jim','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jclark801','Clark','Jim','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jvales802','Vales','Jim','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jvales802','Vales','Jim','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jlewis803','Lewis','John','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jlewis803','Lewis','John','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jlewis803','Lewis','John','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jlewis803','Lewis','John','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jgasper804','Gasper','John','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jgasper804','Gasper','John','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('rdavis805','Davis','Robert','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('rdavis805','Davis','Robert','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('rdavis805','Davis','Robert','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('rdavis805','Davis','Robert','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('dwilliams806','Williams','David','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('dwilliams806','Williams','David','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('dwilliams806','Williams','David','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jscott807','Scott','Jennifer','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jscott807','Scott','Jennifer','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jscott807','Scott','Jennifer','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('wwilliams808','Williams','William','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('edavis809','Davis','Eric','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('edavis809','Davis','Eric','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('edavis809','Davis','Eric','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mprice810','Price','Marie','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mprice810','Price','Marie','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mprice810','Price','Marie','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('bhenderson','Henderson','Betty','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('bhenderson','Henderson','Betty','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('bhenderson','Henderson','Betty','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('hhenderson812','Henderson','Heather','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('hhenderson812','Henderson','Heather','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('hhenderson812','Henderson','Heather','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('hhenderson812','Henderson','Heather','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('kscott813','Scott','Karl','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('kscott813','Scott','Karl','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('kscott813','Scott','Karl','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('ddoe814','Doe','David','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('ddoe814','Doe','David','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('ddoe814','Doe','David','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('ewilliams815','Williams','Erik','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('ewilliams815','Williams','Erik','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jsmith816','Smith','Jo','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jsmith816','Smith','Jo','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jsmith816','Smith','Jo','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jsmith816','Smith','Jo','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('lvales817','Vales','Lisa','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('lvales817','Vales','Lisa','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('lvales817','Vales','Lisa','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('lvales817','Vales','Lisa','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('lpeterson818','Peterson','Lori','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('dgasper','Gasper','David','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('dgasper','Gasper','David','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('nlangenberg820','Langenberg','Nancy','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('nlangenberg820','Langenberg','Nancy','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jhenderson821','Henderson','Jo','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jhenderson821','Henderson','Jo','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('ddavis822','Davis','David','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('ddavis822','Davis','David','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('ddavis822','Davis','David','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('kgasper823','Gasper','Karl','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('kgasper823','Gasper','Karl','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('kgasper823','Gasper','Karl','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('kgasper823','Gasper','Karl','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jprice824','Price','John','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jprice824','Price','John','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jprice824','Price','John','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jprice824','Price','John','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('aclark','Clark','Ann','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jclark826','Clark','Jennifer','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jclark826','Clark','Jennifer','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jclark826','Clark','Jennifer','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jclark826','Clark','Jennifer','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('lmartinez','Martinez','Lori','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('lmartinez','Martinez','Lori','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('lmartinez','Martinez','Lori','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('lmartinez','Martinez','Lori','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jpeterson828','Peterson','Jim','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jpeterson828','Peterson','Jim','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jpeterson828','Peterson','Jim','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jpeterson828','Peterson','Jim','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jdoe829','Doe','Jennifer','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jdoe829','Doe','Jennifer','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jdoe829','Doe','Jennifer','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jdoe829','Doe','Jennifer','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('nmorrison','Morrison','Nancy','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('ehenderson831','Henderson','Eric','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('ehenderson831','Henderson','Eric','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('ehenderson831','Henderson','Eric','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('kwhite832','White','Kiersten','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('dhenderson833','Henderson','Donna','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('dhenderson833','Henderson','Donna','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('dbrown834','Brown','Donna','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('dbrown834','Brown','Donna','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('dbrown834','Brown','Donna','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('manderson835','Anderson','Marie','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('manderson835','Anderson','Marie','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('manderson835','Anderson','Marie','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('ggasper836','Gasper','Greg','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('ggasper836','Gasper','Greg','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('ggasper836','Gasper','Greg','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('ggasper836','Gasper','Greg','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mlewis837','Lewis','Marie','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mlewis837','Lewis','Marie','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('kclark838','Clark','Karl','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('kclark838','Clark','Karl','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('kclark838','Clark','Karl','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('kclark838','Clark','Karl','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('dclark839','Clark','David','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('dclark839','Clark','David','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('dclark839','Clark','David','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('blewis840','Lewis','Blake','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('blewis840','Lewis','Blake','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('blewis840','Lewis','Blake','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('wlewis','Lewis','William','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jbutler842','Butler','John','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jbutler842','Butler','John','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('bbutler843','Butler','Betty','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('gthompson','Thompson','Greg','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('gthompson','Thompson','Greg','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('gthompson','Thompson','Greg','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('gthompson','Thompson','Greg','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('glangenberg','Langenberg','Greg','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('glangenberg','Langenberg','Greg','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('ajohnson','Johnson','Ann','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('ajohnson','Johnson','Ann','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('ajohnson','Johnson','Ann','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('awhite847','White','Ann','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('awhite847','White','Ann','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('awhite847','White','Ann','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('dhenderson848','Henderson','David','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('dhenderson848','Henderson','David','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mwilliams849','Williams','Mark','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('nprice','Price','Nancy','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('nprice','Price','Nancy','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('nprice','Price','Nancy','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('dthompson851','Thompson','Donna','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('dthompson851','Thompson','Donna','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('ebutler852','Butler','Erik','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('ebutler852','Butler','Erik','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('ebutler852','Butler','Erik','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('ebutler852','Butler','Erik','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('kdavis853','Davis','Kim','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('kdavis853','Davis','Kim','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('kdavis853','Davis','Kim','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('tgasper854','Gasper','Thomas','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('alangenberg855','Langenberg','Ann','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('kclark856','Clark','Kim','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('kclark856','Clark','Kim','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('wdavis','Davis','William','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('kwalters858','Walters','Karoline','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('kwalters858','Walters','Karoline','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('kwalters858','Walters','Karoline','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('kwalters858','Walters','Karoline','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('eprice859','Price','Erik','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('eprice859','Price','Erik','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('eprice859','Price','Erik','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('eprice859','Price','Erik','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('slee860','Lee','Sarah','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('slee860','Lee','Sarah','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('slee860','Lee','Sarah','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('slee860','Lee','Sarah','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jwalters861','Walters','James','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('rprice862','Price','Robert','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('rprice862','Price','Robert','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('rprice862','Price','Robert','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('rprice862','Price','Robert','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('tmartinez863','Martinez','Thomas','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('tmartinez863','Martinez','Thomas','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('tmartinez863','Martinez','Thomas','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('tmartinez863','Martinez','Thomas','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mclark864','Clark','Mary','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mclark864','Clark','Mary','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('lwalters865','Walters','Lisa','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('lwalters865','Walters','Lisa','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('lwalters865','Walters','Lisa','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('lwalters865','Walters','Lisa','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('handerson866','Anderson','Heather','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('dhenderson867','Henderson','David','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('ldoe868','Doe','Lisa','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('ldoe868','Doe','Lisa','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('ldoe868','Doe','Lisa','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('ldoe868','Doe','Lisa','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('ggonazles869','Gonazles','Greg','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('ggonazles869','Gonazles','Greg','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('kanderson870','Anderson','Karoline','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('kanderson870','Anderson','Karoline','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('kanderson870','Anderson','Karoline','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('kanderson870','Anderson','Karoline','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('ajohnson871','Johnson','Ann','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('ajohnson871','Johnson','Ann','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('bgasper872','Gasper','Betty','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('bgasper872','Gasper','Betty','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('bgasper872','Gasper','Betty','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('bgasper872','Gasper','Betty','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jlee873','Lee','John','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jlee873','Lee','John','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('khenderson874','Henderson','Karoline','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('khenderson874','Henderson','Karoline','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jwilliams875','Williams','John','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jwilliams875','Williams','John','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('nwilliams','Williams','Nancy','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('nwilliams','Williams','Nancy','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('nwilliams','Williams','Nancy','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('nwilliams','Williams','Nancy','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('kbrown877','Brown','Karoline','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('bthompson878','Thompson','Blake','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('bthompson878','Thompson','Blake','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('bthompson878','Thompson','Blake','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('rdavis879','Davis','Robert','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('rdavis879','Davis','Robert','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('rdavis879','Davis','Robert','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('rdavis879','Davis','Robert','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('gthompson880','Thompson','Greg','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('gthompson880','Thompson','Greg','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('gthompson880','Thompson','Greg','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('bpeterson881','Peterson','Blake','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('bpeterson881','Peterson','Blake','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('bpeterson881','Peterson','Blake','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('bpeterson881','Peterson','Blake','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mbrown882','Brown','Marie','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mbrown882','Brown','Marie','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mbrown882','Brown','Marie','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jmartinez883','Martinez','James','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jmartinez883','Martinez','James','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jmartinez883','Martinez','James','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('hwhite884','White','Heather','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('lhenderson885','Henderson','Lisa','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('lhenderson885','Henderson','Lisa','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('lhenderson885','Henderson','Lisa','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('lhenderson885','Henderson','Lisa','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('thenderson','Henderson','Thomas','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('thenderson','Henderson','Thomas','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('thenderson','Henderson','Thomas','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('sdavis887','Davis','Sarah','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('dclark888','Clark','David','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('dclark888','Clark','David','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('dclark888','Clark','David','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('dclark888','Clark','David','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('dpeterson889','Peterson','David','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('dpeterson889','Peterson','David','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('dpeterson889','Peterson','David','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jbutler890','Butler','James','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('ksmith891','Smith','Kiersten','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('ksmith891','Smith','Kiersten','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('rlopez892','Lopez','Robert','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('rlopez892','Lopez','Robert','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('ksmith893','Smith','Kiersten','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jdavis894','Davis','John','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jdavis894','Davis','John','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('ddoe895','Doe','Donna','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('ddoe895','Doe','Donna','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('ddoe895','Doe','Donna','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('msmith896','Smith','Michael','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('msmith896','Smith','Michael','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mdavis897','Davis','Michael','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mdavis897','Davis','Michael','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mdavis897','Davis','Michael','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mmartinez898','Martinez','Marie','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jlangenberg899','Langenberg','Jennifer','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jlangenberg899','Langenberg','Jennifer','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('cdavis900','Davis','Colin','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('cdavis900','Davis','Colin','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('cdavis900','Davis','Colin','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('cdavis900','Davis','Colin','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jmartinez901','Martinez','John','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jmartinez901','Martinez','John','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('tmartinez902','Martinez','Thomas','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('tmartinez902','Martinez','Thomas','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('tmartinez902','Martinez','Thomas','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('tmartinez902','Martinez','Thomas','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('bprice903','Price','Bill','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('bprice903','Price','Bill','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jdavis904','Davis','Jo','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jdavis904','Davis','Jo','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jdavis904','Davis','Jo','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jdavis904','Davis','Jo','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jmartinez905','Martinez','Jo','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jmartinez905','Martinez','Jo','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('landerson906','Anderson','Lori','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('rlee','Lee','Robert','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('rlee','Lee','Robert','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('rlee','Lee','Robert','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('rlee','Lee','Robert','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('dlewis908','Lewis','David','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jlopez909','Lopez','Jo','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jlopez909','Lopez','Jo','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('kgasper910','Gasper','Karoline','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('kgasper910','Gasper','Karoline','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('kgasper910','Gasper','Karoline','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mscott911','Scott','Michael','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('smorrison','Morrison','Sarah','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('smorrison','Morrison','Sarah','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('smorrison','Morrison','Sarah','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('smorrison','Morrison','Sarah','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('kjohnson913','Johnson','Karl','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('kjohnson913','Johnson','Karl','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('kjohnson913','Johnson','Karl','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('bwhite914','White','Bill','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('bwhite914','White','Bill','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('bwhite914','White','Bill','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('bwhite914','White','Bill','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('kgonazles915','Gonazles','Kim','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('kgonazles915','Gonazles','Kim','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('kgonazles915','Gonazles','Kim','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jgasper916','Gasper','Jennifer','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jlewis917','Lewis','James','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jlewis917','Lewis','James','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mjohnson918','Johnson','Mark','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('ddavis919','Davis','David','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('ddavis919','Davis','David','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('ddavis919','Davis','David','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('ddavis919','Davis','David','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('dvales920','Vales','Donna','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mlangenberg921','Langenberg','Mary','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mlangenberg921','Langenberg','Mary','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mlangenberg921','Langenberg','Mary','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jvales922','Vales','Jim','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mgrady923','Grady','Mary','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('hsmith924','Smith','Heather','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('hsmith924','Smith','Heather','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('lgrady925','Grady','Lori','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('gbutler926','Butler','Greg','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('gbutler926','Butler','Greg','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('gbutler926','Butler','Greg','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jwhite927','White','Jennifer','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jwhite927','White','Jennifer','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jwhite927','White','Jennifer','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('bpeterson928','Peterson','Betty','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('nlewis','Lewis','Nancy','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('nlewis','Lewis','Nancy','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jroberts930','Roberts','Jennifer','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jroberts930','Roberts','Jennifer','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jroberts930','Roberts','Jennifer','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('kpeterson931','Peterson','Kiersten','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('lhenderson932','Henderson','Lori','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jlewis933','Lewis','James','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jlewis933','Lewis','James','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jlewis933','Lewis','James','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jlewis933','Lewis','James','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('dlangenberg934','Langenberg','David','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('dlangenberg934','Langenberg','David','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('dlangenberg934','Langenberg','David','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('kbutler935','Butler','Kim','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('rjohnson','Johnson','Robert','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jwalters937','Walters','Jennifer','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jwalters937','Walters','Jennifer','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jwalters937','Walters','Jennifer','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('kgonazles938','Gonazles','Kiersten','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mgasper939','Gasper','Marie','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mgasper939','Gasper','Marie','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mgasper939','Gasper','Marie','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mgasper939','Gasper','Marie','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('klopez940','Lopez','Kim','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('klopez940','Lopez','Kim','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('klopez940','Lopez','Kim','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('klopez940','Lopez','Kim','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jwhite941','White','Jennifer','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jgonazles942','Gonazles','James','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jgonazles942','Gonazles','James','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jgonazles942','Gonazles','James','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jgonazles942','Gonazles','James','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('khenderson943','Henderson','Kim','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('khenderson943','Henderson','Kim','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('khenderson943','Henderson','Kim','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mhenderson944','Henderson','Mark','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mhenderson944','Henderson','Mark','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mhenderson944','Henderson','Mark','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('cprice','Price','Colin','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('cprice','Price','Colin','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('cprice','Price','Colin','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('cprice','Price','Colin','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('janderson946','Anderson','Jim','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('janderson946','Anderson','Jim','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('ejohnson947','Johnson','Erik','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('ejohnson947','Johnson','Erik','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('ejohnson947','Johnson','Erik','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('ejohnson947','Johnson','Erik','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('janderson948','Anderson','John','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('janderson948','Anderson','John','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('janderson948','Anderson','John','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('janderson948','Anderson','John','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('lhenderson949','Henderson','Lisa','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('lhenderson949','Henderson','Lisa','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('lhenderson949','Henderson','Lisa','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('lhenderson949','Henderson','Lisa','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mlee950','Lee','Mary','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mlee950','Lee','Mary','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('ewilliams951','Williams','Eric','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('ewilliams951','Williams','Eric','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('ewilliams951','Williams','Eric','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('plewis','Lewis','Paul','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('plewis','Lewis','Paul','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('plewis','Lewis','Paul','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mclark953','Clark','Marie','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mclark953','Clark','Marie','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('dwilliams954','Williams','David','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('rroberts955','Roberts','Robert','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jsmith956','Smith','Jo','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jwhite957','White','Jennifer','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jwhite957','White','Jennifer','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jwhite957','White','Jennifer','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jwhite957','White','Jennifer','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('bwalters958','Walters','Bill','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('bwalters958','Walters','Bill','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('bwalters958','Walters','Bill','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mhenderson959','Henderson','Mark','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mhenderson959','Henderson','Mark','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mhenderson959','Henderson','Mark','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mhenderson959','Henderson','Mark','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mgasper960','Gasper','Mark','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mgasper960','Gasper','Mark','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mgasper960','Gasper','Mark','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('ppeterson','Peterson','Paul','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('ppeterson','Peterson','Paul','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jscott962','Scott','John','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jscott962','Scott','John','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('hdavis963','Davis','Heather','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('hdavis963','Davis','Heather','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('hdavis963','Davis','Heather','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('pwhite','White','Paul','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('dwalters965','Walters','David','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('dwalters965','Walters','David','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('dwalters965','Walters','David','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('blopez966','Lopez','Blake','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('bgrady967','Grady','Blake','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('bgrady967','Grady','Blake','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('bgrady967','Grady','Blake','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('bclark968','Clark','Bill','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('bclark968','Clark','Bill','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('bclark968','Clark','Bill','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('bclark968','Clark','Bill','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('lprice969','Price','Lisa','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('wpeterson970','Peterson','William','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('wpeterson970','Peterson','William','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('wpeterson970','Peterson','William','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('wpeterson970','Peterson','William','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('banderson971','Anderson','Betty','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('banderson971','Anderson','Betty','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('hprice972','Price','Heather','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('hprice972','Price','Heather','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mpeterson973','Peterson','Marie','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mpeterson973','Peterson','Marie','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mpeterson973','Peterson','Marie','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('ngonazles','Gonazles','Nancy','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('ngonazles','Gonazles','Nancy','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jvales975','Vales','James','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jvales975','Vales','James','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jvales975','Vales','James','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jvales975','Vales','James','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jpeterson976','Peterson','Jennifer','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jpeterson976','Peterson','Jennifer','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jpeterson976','Peterson','Jennifer','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('kmartinez977','Martinez','Kim','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('pbrown978','Brown','Paul','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('pbrown978','Brown','Paul','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('dbutler979','Butler','Donna','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('dbutler979','Butler','Donna','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('dbutler979','Butler','Donna','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('hmorrison980','Morrison','Heather','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('hmorrison980','Morrison','Heather','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('hmorrison980','Morrison','Heather','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('cdoe981','Doe','Colin','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('cdoe981','Doe','Colin','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('cdoe981','Doe','Colin','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('alee','Lee','Ann','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('alee','Lee','Ann','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('alee','Lee','Ann','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jlee983','Lee','Jo','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jlee983','Lee','Jo','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jlee983','Lee','Jo','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mprice984','Price','Marie','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mprice984','Price','Marie','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mprice984','Price','Marie','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jbutler985','Butler','Jo','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jbutler985','Butler','Jo','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jbutler985','Butler','Jo','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mmartinez986','Martinez','Mary','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mmartinez986','Martinez','Mary','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('mmartinez986','Martinez','Mary','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('hmartinez','Martinez','Heather','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('hmartinez','Martinez','Heather','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('hmartinez','Martinez','Heather','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('twalters988','Walters','Thomas','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('twalters988','Walters','Thomas','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('twalters988','Walters','Thomas','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('twalters988','Walters','Thomas','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('kwilliams989','Williams','Karl','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('kwilliams989','Williams','Karl','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('kwilliams989','Williams','Karl','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('emartinez990','Martinez','Eric','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('emartinez990','Martinez','Eric','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('emartinez990','Martinez','Eric','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('klee991','Lee','Karoline','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('klee991','Lee','Karoline','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('bjohnson992','Johnson','Bill','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('bjohnson992','Johnson','Bill','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('bjohnson992','Johnson','Bill','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('bjohnson992','Johnson','Bill','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('wdavis993','Davis','William','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('wdavis993','Davis','William','CS252');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('bgonazles994','Gonazles','Blake','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jvales995','Vales','Jennifer','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('jvales995','Vales','Jennifer','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('kjohnson996','Johnson','Kiersten','CS251');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('ggrady','Grady','Greg','SCI123');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('ggrady','Grady','Greg','MATH101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('ggrady','Grady','Greg','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('lbutler998','Butler','Lori','ACCT101');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('lbutler998','Butler','Lori','MATH100');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('lbutler998','Butler','Lori','ACCT201');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('lbutler998','Butler','Lori','SCI404');
+INSERT INTO SIS_COURSES (uid, surname, givenName, courseId) VALUES ('tgasper999','Gasper','Thomas','CS252');
diff --git a/test-compose/data/container_files/seed-data/users.ldif b/test-compose/data/container_files/seed-data/users.ldif
new file mode 100644
index 00000000..aa4cf253
--- /dev/null
+++ b/test-compose/data/container_files/seed-data/users.ldif
@@ -0,0 +1,15522 @@
+dn: cn=admin,dc=internet2,dc=edu
+objectClass: simpleSecurityObject
+objectClass: organizationalRole
+cn: admin
+userPassword: password
+description: LDAP administrator
+
+dn: uid=jsmith,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+givenName: Joe
+uid: jsmith
+sn: Smith
+cn: John Smith
+userPassword: password
+
+dn: uid=banderson,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+givenName: Bob
+uid: banderson
+sn: Anderson
+cn: Bob Anderson
+userPassword: password
+
+dn: cn=users,ou=Groups,dc=internet2,dc=edu
+objectClass: groupOfUniqueNames
+objectClass: top
+uniqueMember: uid=banderson,ou=People,dc=internet2,dc=edu
+uniqueMember: uid=jsmith,ou=People,dc=internet2,dc=edu
+cn: users
+
+
+
+
+
+
+dn: uid=kwhite,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: White
+givenName: Karl
+cn: Karl White
+uid: kwhite
+mail: kwhite@example.edu
+businessCategory:Law
+userPassword: password
+eduPersonAffiliation: member
+eduPersonAffiliation: student
+
+dn: uid=whenderson,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Henderson
+givenName: William
+cn: William Henderson
+uid: whenderson
+mail: whenderson@example.edu
+businessCategory:Advising
+userPassword: password
+eduPersonAffiliation: community
+
+dn: uid=ddavis,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Davis
+givenName: David
+cn: David Davis
+uid: ddavis
+mail: ddavis@example.edu
+businessCategory:Computer Science
+userPassword: password
+eduPersonAffiliation: staff
+
+dn: uid=cmorrison,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Morrison
+givenName: Colin
+cn: Colin Morrison
+uid: cmorrison
+mail: cmorrison@example.edu
+businessCategory:Financial Aid
+userPassword: password
+eduPersonAffiliation: member
+eduPersonAffiliation: faculty
+
+dn: uid=danderson,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Anderson
+givenName: Donna
+cn: Donna Anderson
+uid: danderson
+mail: danderson@example.edu
+businessCategory:Account Payable
+userPassword: password
+eduPersonAffiliation: member
+
+dn: uid=amorrison,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Morrison
+givenName: Ann
+cn: Ann Morrison
+uid: amorrison
+mail: amorrison@example.edu
+businessCategory:Law
+userPassword: password
+eduPersonAffiliation: student
+eduPersonAffiliation: alum
+
+dn: uid=wprice,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Price
+givenName: William
+cn: William Price
+uid: wprice
+mail: wprice@example.edu
+businessCategory:Account Payable
+userPassword: password
+eduPersonAffiliation: community
+
+dn: uid=mroberts,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Roberts
+givenName: Marie
+cn: Marie Roberts
+uid: mroberts
+mail: mroberts@example.edu
+businessCategory:Law
+userPassword: password
+eduPersonAffiliation: student
+eduPersonAffiliation: community
+
+dn: uid=kjohnson,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Johnson
+givenName: Kiersten
+cn: Kiersten Johnson
+uid: kjohnson
+mail: kjohnson@example.edu
+businessCategory:Physical Education
+userPassword: password
+eduPersonAffiliation: faculty
+
+dn: uid=jbrown,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Brown
+givenName: James
+cn: James Brown
+uid: jbrown
+mail: jbrown@example.edu
+businessCategory:Information Technology
+userPassword: password
+eduPersonAffiliation: alum
+eduPersonAffiliation: staff
+
+dn: uid=agasper,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Gasper
+givenName: Ann
+cn: Ann Gasper
+uid: agasper
+mail: agasper@example.edu
+businessCategory:Computer Science
+userPassword: password
+eduPersonAffiliation: student
+eduPersonAffiliation: community
+
+dn: uid=jscott,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Scott
+givenName: Jennifer
+cn: Jennifer Scott
+uid: jscott
+mail: jscott@example.edu
+businessCategory:Business
+userPassword: password
+eduPersonAffiliation: community
+eduPersonAffiliation: student
+
+dn: uid=bbutler,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Butler
+givenName: Betty
+cn: Betty Butler
+uid: bbutler
+mail: bbutler@example.edu
+businessCategory:Purchasing
+userPassword: password
+eduPersonAffiliation: community
+eduPersonAffiliation: member
+
+dn: uid=tmorrison,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Morrison
+givenName: Thomas
+cn: Thomas Morrison
+uid: tmorrison
+mail: tmorrison@example.edu
+businessCategory:Purchasing
+userPassword: password
+eduPersonAffiliation: student
+eduPersonAffiliation: staff
+
+dn: uid=jbrown14,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Brown
+givenName: Jennifer
+cn: Jennifer Brown
+uid: jbrown14
+mail: jbrown14@example.edu
+businessCategory:Accounting
+userPassword: password
+eduPersonAffiliation: member
+eduPersonAffiliation: staff
+
+dn: uid=gjohnson,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Johnson
+givenName: Greg
+cn: Greg Johnson
+uid: gjohnson
+mail: gjohnson@example.edu
+businessCategory:Physical Education
+userPassword: password
+eduPersonAffiliation: community
+eduPersonAffiliation: alum
+
+dn: uid=rmartinez,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Martinez
+givenName: Robert
+cn: Robert Martinez
+uid: rmartinez
+mail: rmartinez@example.edu
+businessCategory:Financial Aid
+userPassword: password
+eduPersonAffiliation: staff
+eduPersonAffiliation: faculty
+
+dn: uid=jlewis,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Lewis
+givenName: Jo
+cn: Jo Lewis
+uid: jlewis
+mail: jlewis@example.edu
+businessCategory:Accounting
+userPassword: password
+eduPersonAffiliation: community
+eduPersonAffiliation: student
+
+dn: uid=mgasper,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Gasper
+givenName: Mary
+cn: Mary Gasper
+uid: mgasper
+mail: mgasper@example.edu
+businessCategory:Physical Education
+userPassword: password
+eduPersonAffiliation: faculty
+
+dn: uid=kvales,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Vales
+givenName: Karoline
+cn: Karoline Vales
+uid: kvales
+mail: kvales@example.edu
+businessCategory:Information Technology
+userPassword: password
+eduPersonAffiliation: student
+eduPersonAffiliation: alum
+
+dn: uid=tgrady,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Grady
+givenName: Thomas
+cn: Thomas Grady
+uid: tgrady
+mail: tgrady@example.edu
+businessCategory:Law
+userPassword: password
+eduPersonAffiliation: alum
+
+dn: uid=kmorrison,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Morrison
+givenName: Kiersten
+cn: Kiersten Morrison
+uid: kmorrison
+mail: kmorrison@example.edu
+businessCategory:Information Technology
+userPassword: password
+eduPersonAffiliation: staff
+eduPersonAffiliation: faculty
+
+dn: uid=dgrady,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Grady
+givenName: David
+cn: David Grady
+uid: dgrady
+mail: dgrady@example.edu
+businessCategory:Advising
+userPassword: password
+eduPersonAffiliation: community
+
+dn: uid=mthompson,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Thompson
+givenName: Mary
+cn: Mary Thompson
+uid: mthompson
+mail: mthompson@example.edu
+businessCategory:Financial Aid
+userPassword: password
+eduPersonAffiliation: staff
+eduPersonAffiliation: student
+
+dn: uid=bgasper,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Gasper
+givenName: Bill
+cn: Bill Gasper
+uid: bgasper
+mail: bgasper@example.edu
+businessCategory:Business
+userPassword: password
+eduPersonAffiliation: alum
+
+dn: uid=dlopez,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Lopez
+givenName: David
+cn: David Lopez
+uid: dlopez
+mail: dlopez@example.edu
+businessCategory:Account Payable
+userPassword: password
+eduPersonAffiliation: staff
+eduPersonAffiliation: faculty
+
+dn: uid=hwhite,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: White
+givenName: Heather
+cn: Heather White
+uid: hwhite
+mail: hwhite@example.edu
+businessCategory:Physical Education
+userPassword: password
+eduPersonAffiliation: staff
+
+dn: uid=ddavis27,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Davis
+givenName: Donna
+cn: Donna Davis
+uid: ddavis27
+mail: ddavis27@example.edu
+businessCategory:Accounting
+userPassword: password
+eduPersonAffiliation: staff
+eduPersonAffiliation: community
+
+dn: uid=bgasper28,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Gasper
+givenName: Bill
+cn: Bill Gasper
+uid: bgasper28
+mail: bgasper28@example.edu
+businessCategory:Engineering
+userPassword: password
+eduPersonAffiliation: faculty
+
+dn: uid=jjohnson,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Johnson
+givenName: Jennifer
+cn: Jennifer Johnson
+uid: jjohnson
+mail: jjohnson@example.edu
+businessCategory:Financial Aid
+userPassword: password
+eduPersonAffiliation: student
+eduPersonAffiliation: alum
+
+dn: uid=amorrison30,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Morrison
+givenName: Ann
+cn: Ann Morrison
+uid: amorrison30
+mail: amorrison30@example.edu
+businessCategory:Financial Aid
+userPassword: password
+eduPersonAffiliation: alum
+
+dn: uid=kmartinez,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Martinez
+givenName: Karl
+cn: Karl Martinez
+uid: kmartinez
+mail: kmartinez@example.edu
+businessCategory:Accounting
+userPassword: password
+eduPersonAffiliation: student
+
+dn: uid=ahenderson,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Henderson
+givenName: Ann
+cn: Ann Henderson
+uid: ahenderson
+mail: ahenderson@example.edu
+businessCategory:Accounting
+userPassword: password
+eduPersonAffiliation: member
+eduPersonAffiliation: student
+
+dn: uid=avales,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Vales
+givenName: Ann
+cn: Ann Vales
+uid: avales
+mail: avales@example.edu
+businessCategory:Purchasing
+userPassword: password
+eduPersonAffiliation: student
+eduPersonAffiliation: alum
+
+dn: uid=ggonazles,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Gonazles
+givenName: Greg
+cn: Greg Gonazles
+uid: ggonazles
+mail: ggonazles@example.edu
+businessCategory:Language Arts
+userPassword: password
+eduPersonAffiliation: community
+
+dn: uid=bdoe,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Doe
+givenName: Blake
+cn: Blake Doe
+uid: bdoe
+mail: bdoe@example.edu
+businessCategory:Business
+userPassword: password
+eduPersonAffiliation: student
+
+dn: uid=plangenberg,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Langenberg
+givenName: Paul
+cn: Paul Langenberg
+uid: plangenberg
+mail: plangenberg@example.edu
+businessCategory:Information Technology
+userPassword: password
+eduPersonAffiliation: staff
+
+dn: uid=gvales,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Vales
+givenName: Greg
+cn: Greg Vales
+uid: gvales
+mail: gvales@example.edu
+businessCategory:Language Arts
+userPassword: password
+eduPersonAffiliation: community
+eduPersonAffiliation: member
+
+dn: uid=nhenderson,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Henderson
+givenName: Nancy
+cn: Nancy Henderson
+uid: nhenderson
+mail: nhenderson@example.edu
+businessCategory:Physical Education
+userPassword: password
+eduPersonAffiliation: member
+
+dn: uid=wthompson,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Thompson
+givenName: William
+cn: William Thompson
+uid: wthompson
+mail: wthompson@example.edu
+businessCategory:Law
+userPassword: password
+eduPersonAffiliation: staff
+
+dn: uid=kvales40,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Vales
+givenName: Karl
+cn: Karl Vales
+uid: kvales40
+mail: kvales40@example.edu
+businessCategory:Business
+userPassword: password
+eduPersonAffiliation: community
+
+dn: uid=blee,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Lee
+givenName: Bill
+cn: Bill Lee
+uid: blee
+mail: blee@example.edu
+businessCategory:Engineering
+userPassword: password
+eduPersonAffiliation: member
+eduPersonAffiliation: community
+
+dn: uid=mlee,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Lee
+givenName: Marie
+cn: Marie Lee
+uid: mlee
+mail: mlee@example.edu
+businessCategory:Information Technology
+userPassword: password
+eduPersonAffiliation: staff
+
+dn: uid=kclark,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Clark
+givenName: Kiersten
+cn: Kiersten Clark
+uid: kclark
+mail: kclark@example.edu
+businessCategory:Financial Aid
+userPassword: password
+eduPersonAffiliation: staff
+
+dn: uid=wscott,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Scott
+givenName: William
+cn: William Scott
+uid: wscott
+mail: wscott@example.edu
+businessCategory:Language Arts
+userPassword: password
+eduPersonAffiliation: community
+
+dn: uid=dbutler,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Butler
+givenName: Donna
+cn: Donna Butler
+uid: dbutler
+mail: dbutler@example.edu
+businessCategory:Financial Aid
+userPassword: password
+eduPersonAffiliation: community
+
+dn: uid=awhite,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: White
+givenName: Ann
+cn: Ann White
+uid: awhite
+mail: awhite@example.edu
+businessCategory:Purchasing
+userPassword: password
+eduPersonAffiliation: faculty
+eduPersonAffiliation: alum
+
+dn: uid=hdoe,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Doe
+givenName: Heather
+cn: Heather Doe
+uid: hdoe
+mail: hdoe@example.edu
+businessCategory:Financial Aid
+userPassword: password
+eduPersonAffiliation: community
+eduPersonAffiliation: alum
+
+dn: uid=dlangenberg,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Langenberg
+givenName: David
+cn: David Langenberg
+uid: dlangenberg
+mail: dlangenberg@example.edu
+businessCategory:Language Arts
+userPassword: password
+eduPersonAffiliation: alum
+eduPersonAffiliation: faculty
+
+dn: uid=ethompson,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Thompson
+givenName: Eric
+cn: Eric Thompson
+uid: ethompson
+mail: ethompson@example.edu
+businessCategory:Law
+userPassword: password
+eduPersonAffiliation: member
+
+dn: uid=jbrown50,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Brown
+givenName: Jennifer
+cn: Jennifer Brown
+uid: jbrown50
+mail: jbrown50@example.edu
+businessCategory:Account Payable
+userPassword: password
+eduPersonAffiliation: alum
+eduPersonAffiliation: staff
+
+dn: uid=mgonazles,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Gonazles
+givenName: Michael
+cn: Michael Gonazles
+uid: mgonazles
+mail: mgonazles@example.edu
+businessCategory:Computer Science
+userPassword: password
+eduPersonAffiliation: student
+eduPersonAffiliation: community
+
+dn: uid=gbutler,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Butler
+givenName: Greg
+cn: Greg Butler
+uid: gbutler
+mail: gbutler@example.edu
+businessCategory:Information Technology
+userPassword: password
+eduPersonAffiliation: community
+eduPersonAffiliation: staff
+
+dn: uid=mvales,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Vales
+givenName: Mark
+cn: Mark Vales
+uid: mvales
+mail: mvales@example.edu
+businessCategory:Engineering
+userPassword: password
+eduPersonAffiliation: student
+
+dn: uid=mlewis,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Lewis
+givenName: Michael
+cn: Michael Lewis
+uid: mlewis
+mail: mlewis@example.edu
+businessCategory:Information Technology
+userPassword: password
+eduPersonAffiliation: student
+
+dn: uid=hvales,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Vales
+givenName: Heather
+cn: Heather Vales
+uid: hvales
+mail: hvales@example.edu
+businessCategory:Information Technology
+userPassword: password
+eduPersonAffiliation: community
+
+dn: uid=jscott56,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Scott
+givenName: Jo
+cn: Jo Scott
+uid: jscott56
+mail: jscott56@example.edu
+businessCategory:Purchasing
+userPassword: password
+eduPersonAffiliation: faculty
+eduPersonAffiliation: alum
+
+dn: uid=sdoe,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Doe
+givenName: Sarah
+cn: Sarah Doe
+uid: sdoe
+mail: sdoe@example.edu
+businessCategory:Business
+userPassword: password
+eduPersonAffiliation: member
+eduPersonAffiliation: student
+
+dn: uid=svales,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Vales
+givenName: Sarah
+cn: Sarah Vales
+uid: svales
+mail: svales@example.edu
+businessCategory:Advising
+userPassword: password
+eduPersonAffiliation: student
+
+dn: uid=hmorrison,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Morrison
+givenName: Heather
+cn: Heather Morrison
+uid: hmorrison
+mail: hmorrison@example.edu
+businessCategory:Engineering
+userPassword: password
+eduPersonAffiliation: faculty
+eduPersonAffiliation: student
+
+dn: uid=jlopez,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Lopez
+givenName: Jennifer
+cn: Jennifer Lopez
+uid: jlopez
+mail: jlopez@example.edu
+businessCategory:Language Arts
+userPassword: password
+eduPersonAffiliation: alum
+eduPersonAffiliation: faculty
+
+dn: uid=dlangenberg61,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Langenberg
+givenName: Donna
+cn: Donna Langenberg
+uid: dlangenberg61
+mail: dlangenberg61@example.edu
+businessCategory:Law
+userPassword: password
+eduPersonAffiliation: student
+eduPersonAffiliation: staff
+
+dn: uid=bgrady,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Grady
+givenName: Betty
+cn: Betty Grady
+uid: bgrady
+mail: bgrady@example.edu
+businessCategory:Accounting
+userPassword: password
+eduPersonAffiliation: alum
+
+dn: uid=jmorrison,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Morrison
+givenName: Jennifer
+cn: Jennifer Morrison
+uid: jmorrison
+mail: jmorrison@example.edu
+businessCategory:Law
+userPassword: password
+eduPersonAffiliation: staff
+
+dn: uid=wvales,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Vales
+givenName: William
+cn: William Vales
+uid: wvales
+mail: wvales@example.edu
+businessCategory:Law
+userPassword: password
+eduPersonAffiliation: member
+
+dn: uid=mmartinez,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Martinez
+givenName: Mark
+cn: Mark Martinez
+uid: mmartinez
+mail: mmartinez@example.edu
+businessCategory:Physical Education
+userPassword: password
+eduPersonAffiliation: alum
+
+dn: uid=jmartinez,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Martinez
+givenName: Jennifer
+cn: Jennifer Martinez
+uid: jmartinez
+mail: jmartinez@example.edu
+businessCategory:Information Technology
+userPassword: password
+eduPersonAffiliation: community
+eduPersonAffiliation: member
+
+dn: uid=mgasper67,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Gasper
+givenName: Mary
+cn: Mary Gasper
+uid: mgasper67
+mail: mgasper67@example.edu
+businessCategory:Computer Science
+userPassword: password
+eduPersonAffiliation: staff
+
+dn: uid=dpeterson,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Peterson
+givenName: David
+cn: David Peterson
+uid: dpeterson
+mail: dpeterson@example.edu
+businessCategory:Advising
+userPassword: password
+eduPersonAffiliation: student
+eduPersonAffiliation: alum
+
+dn: uid=eprice,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Price
+givenName: Erik
+cn: Erik Price
+uid: eprice
+mail: eprice@example.edu
+businessCategory:Business
+userPassword: password
+eduPersonAffiliation: alum
+
+dn: uid=jgasper,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Gasper
+givenName: James
+cn: James Gasper
+uid: jgasper
+mail: jgasper@example.edu
+businessCategory:Accounting
+userPassword: password
+eduPersonAffiliation: staff
+eduPersonAffiliation: alum
+
+dn: uid=jclark,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Clark
+givenName: Jennifer
+cn: Jennifer Clark
+uid: jclark
+mail: jclark@example.edu
+businessCategory:Business
+userPassword: password
+eduPersonAffiliation: faculty
+eduPersonAffiliation: member
+
+dn: uid=bpeterson,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Peterson
+givenName: Betty
+cn: Betty Peterson
+uid: bpeterson
+mail: bpeterson@example.edu
+businessCategory:Account Payable
+userPassword: password
+eduPersonAffiliation: alum
+eduPersonAffiliation: community
+
+dn: uid=wsmith,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Smith
+givenName: William
+cn: William Smith
+uid: wsmith
+mail: wsmith@example.edu
+businessCategory:Information Technology
+userPassword: password
+eduPersonAffiliation: faculty
+
+dn: uid=lwilliams,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Williams
+givenName: Lisa
+cn: Lisa Williams
+uid: lwilliams
+mail: lwilliams@example.edu
+businessCategory:Purchasing
+userPassword: password
+eduPersonAffiliation: faculty
+
+dn: uid=dgrady76,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Grady
+givenName: David
+cn: David Grady
+uid: dgrady76
+mail: dgrady76@example.edu
+businessCategory:Physical Education
+userPassword: password
+eduPersonAffiliation: member
+
+dn: uid=jmartinez77,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Martinez
+givenName: Jo
+cn: Jo Martinez
+uid: jmartinez77
+mail: jmartinez77@example.edu
+businessCategory:Law
+userPassword: password
+eduPersonAffiliation: faculty
+eduPersonAffiliation: alum
+
+dn: uid=dlewis,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Lewis
+givenName: Donna
+cn: Donna Lewis
+uid: dlewis
+mail: dlewis@example.edu
+businessCategory:Financial Aid
+userPassword: password
+eduPersonAffiliation: community
+eduPersonAffiliation: member
+
+dn: uid=wscott79,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Scott
+givenName: William
+cn: William Scott
+uid: wscott79
+mail: wscott79@example.edu
+businessCategory:Account Payable
+userPassword: password
+eduPersonAffiliation: faculty
+eduPersonAffiliation: staff
+
+dn: uid=ddoe,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Doe
+givenName: Donna
+cn: Donna Doe
+uid: ddoe
+mail: ddoe@example.edu
+businessCategory:Physical Education
+userPassword: password
+eduPersonAffiliation: student
+eduPersonAffiliation: community
+
+dn: uid=gmorrison,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Morrison
+givenName: Greg
+cn: Greg Morrison
+uid: gmorrison
+mail: gmorrison@example.edu
+businessCategory:Language Arts
+userPassword: password
+eduPersonAffiliation: staff
+eduPersonAffiliation: faculty
+
+dn: uid=khenderson,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Henderson
+givenName: Kim
+cn: Kim Henderson
+uid: khenderson
+mail: khenderson@example.edu
+businessCategory:Account Payable
+userPassword: password
+eduPersonAffiliation: member
+eduPersonAffiliation: community
+
+dn: uid=kpeterson,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Peterson
+givenName: Karoline
+cn: Karoline Peterson
+uid: kpeterson
+mail: kpeterson@example.edu
+businessCategory:Accounting
+userPassword: password
+eduPersonAffiliation: community
+
+dn: uid=eprice84,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Price
+givenName: Erik
+cn: Erik Price
+uid: eprice84
+mail: eprice84@example.edu
+businessCategory:Computer Science
+userPassword: password
+eduPersonAffiliation: faculty
+
+dn: uid=hsmith,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Smith
+givenName: Heather
+cn: Heather Smith
+uid: hsmith
+mail: hsmith@example.edu
+businessCategory:Business
+userPassword: password
+eduPersonAffiliation: faculty
+eduPersonAffiliation: staff
+
+dn: uid=dwilliams,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Williams
+givenName: Donna
+cn: Donna Williams
+uid: dwilliams
+mail: dwilliams@example.edu
+businessCategory:Financial Aid
+userPassword: password
+eduPersonAffiliation: alum
+eduPersonAffiliation: staff
+
+dn: uid=klopez,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Lopez
+givenName: Karl
+cn: Karl Lopez
+uid: klopez
+mail: klopez@example.edu
+businessCategory:Advising
+userPassword: password
+eduPersonAffiliation: staff
+eduPersonAffiliation: community
+
+dn: uid=wjohnson,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Johnson
+givenName: William
+cn: William Johnson
+uid: wjohnson
+mail: wjohnson@example.edu
+businessCategory:Accounting
+userPassword: password
+eduPersonAffiliation: staff
+
+dn: uid=wbrown,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Brown
+givenName: William
+cn: William Brown
+uid: wbrown
+mail: wbrown@example.edu
+businessCategory:Physical Education
+userPassword: password
+eduPersonAffiliation: member
+
+dn: uid=hbrown,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Brown
+givenName: Heather
+cn: Heather Brown
+uid: hbrown
+mail: hbrown@example.edu
+businessCategory:Law
+userPassword: password
+eduPersonAffiliation: faculty
+
+dn: uid=kroberts,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Roberts
+givenName: Kim
+cn: Kim Roberts
+uid: kroberts
+mail: kroberts@example.edu
+businessCategory:Account Payable
+userPassword: password
+eduPersonAffiliation: community
+
+dn: uid=dwalters,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Walters
+givenName: Donna
+cn: Donna Walters
+uid: dwalters
+mail: dwalters@example.edu
+businessCategory:Advising
+userPassword: password
+eduPersonAffiliation: community
+
+dn: uid=nlee,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Lee
+givenName: Nancy
+cn: Nancy Lee
+uid: nlee
+mail: nlee@example.edu
+businessCategory:Computer Science
+userPassword: password
+eduPersonAffiliation: faculty
+eduPersonAffiliation: member
+
+dn: uid=sgonazles,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Gonazles
+givenName: Sarah
+cn: Sarah Gonazles
+uid: sgonazles
+mail: sgonazles@example.edu
+businessCategory:Computer Science
+userPassword: password
+eduPersonAffiliation: faculty
+
+dn: uid=handerson,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Anderson
+givenName: Heather
+cn: Heather Anderson
+uid: handerson
+mail: handerson@example.edu
+businessCategory:Purchasing
+userPassword: password
+eduPersonAffiliation: member
+
+dn: uid=danderson96,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Anderson
+givenName: David
+cn: David Anderson
+uid: danderson96
+mail: danderson96@example.edu
+businessCategory:Advising
+userPassword: password
+eduPersonAffiliation: alum
+
+dn: uid=dgrady97,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Grady
+givenName: David
+cn: David Grady
+uid: dgrady97
+mail: dgrady97@example.edu
+businessCategory:Advising
+userPassword: password
+eduPersonAffiliation: community
+
+dn: uid=jgrady,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Grady
+givenName: James
+cn: James Grady
+uid: jgrady
+mail: jgrady@example.edu
+businessCategory:Purchasing
+userPassword: password
+eduPersonAffiliation: student
+
+dn: uid=jthompson,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Thompson
+givenName: John
+cn: John Thompson
+uid: jthompson
+mail: jthompson@example.edu
+businessCategory:Engineering
+userPassword: password
+eduPersonAffiliation: alum
+eduPersonAffiliation: community
+
+dn: uid=kthompson,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Thompson
+givenName: Kiersten
+cn: Kiersten Thompson
+uid: kthompson
+mail: kthompson@example.edu
+businessCategory:Accounting
+userPassword: password
+eduPersonAffiliation: staff
+eduPersonAffiliation: member
+
+dn: uid=jpeterson,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Peterson
+givenName: John
+cn: John Peterson
+uid: jpeterson
+mail: jpeterson@example.edu
+businessCategory:Advising
+userPassword: password
+eduPersonAffiliation: alum
+eduPersonAffiliation: student
+
+dn: uid=lmorrison,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Morrison
+givenName: Lisa
+cn: Lisa Morrison
+uid: lmorrison
+mail: lmorrison@example.edu
+businessCategory:Advising
+userPassword: password
+eduPersonAffiliation: alum
+eduPersonAffiliation: staff
+
+dn: uid=glee,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Lee
+givenName: Greg
+cn: Greg Lee
+uid: glee
+mail: glee@example.edu
+businessCategory:Language Arts
+userPassword: password
+eduPersonAffiliation: staff
+eduPersonAffiliation: faculty
+
+dn: uid=lhenderson,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Henderson
+givenName: Lori
+cn: Lori Henderson
+uid: lhenderson
+mail: lhenderson@example.edu
+businessCategory:Financial Aid
+userPassword: password
+eduPersonAffiliation: alum
+eduPersonAffiliation: faculty
+
+dn: uid=mscott,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Scott
+givenName: Marie
+cn: Marie Scott
+uid: mscott
+mail: mscott@example.edu
+businessCategory:Information Technology
+userPassword: password
+eduPersonAffiliation: faculty
+
+dn: uid=ldavis,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Davis
+givenName: Lori
+cn: Lori Davis
+uid: ldavis
+mail: ldavis@example.edu
+businessCategory:Language Arts
+userPassword: password
+eduPersonAffiliation: staff
+
+dn: uid=jroberts,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Roberts
+givenName: James
+cn: James Roberts
+uid: jroberts
+mail: jroberts@example.edu
+businessCategory:Engineering
+userPassword: password
+eduPersonAffiliation: student
+eduPersonAffiliation: community
+
+dn: uid=asmith,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Smith
+givenName: Ann
+cn: Ann Smith
+uid: asmith
+mail: asmith@example.edu
+businessCategory:Financial Aid
+userPassword: password
+eduPersonAffiliation: student
+eduPersonAffiliation: staff
+
+dn: uid=mbrown,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Brown
+givenName: Mark
+cn: Mark Brown
+uid: mbrown
+mail: mbrown@example.edu
+businessCategory:Advising
+userPassword: password
+eduPersonAffiliation: community
+
+dn: uid=kwhite110,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: White
+givenName: Kim
+cn: Kim White
+uid: kwhite110
+mail: kwhite110@example.edu
+businessCategory:Purchasing
+userPassword: password
+eduPersonAffiliation: alum
+eduPersonAffiliation: student
+
+dn: uid=mroberts111,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Roberts
+givenName: Mark
+cn: Mark Roberts
+uid: mroberts111
+mail: mroberts111@example.edu
+businessCategory:Law
+userPassword: password
+eduPersonAffiliation: faculty
+
+dn: uid=mwhite,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: White
+givenName: Mark
+cn: Mark White
+uid: mwhite
+mail: mwhite@example.edu
+businessCategory:Advising
+userPassword: password
+eduPersonAffiliation: staff
+
+dn: uid=jprice,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Price
+givenName: Jim
+cn: Jim Price
+uid: jprice
+mail: jprice@example.edu
+businessCategory:Accounting
+userPassword: password
+eduPersonAffiliation: faculty
+eduPersonAffiliation: staff
+
+dn: uid=msmith,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Smith
+givenName: Michael
+cn: Michael Smith
+uid: msmith
+mail: msmith@example.edu
+businessCategory:Language Arts
+userPassword: password
+eduPersonAffiliation: alum
+eduPersonAffiliation: community
+
+dn: uid=sclark,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Clark
+givenName: Sarah
+cn: Sarah Clark
+uid: sclark
+mail: sclark@example.edu
+businessCategory:Law
+userPassword: password
+eduPersonAffiliation: member
+eduPersonAffiliation: alum
+
+dn: uid=dvales,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Vales
+givenName: Donna
+cn: Donna Vales
+uid: dvales
+mail: dvales@example.edu
+businessCategory:Financial Aid
+userPassword: password
+eduPersonAffiliation: community
+
+dn: uid=kjohnson117,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Johnson
+givenName: Kim
+cn: Kim Johnson
+uid: kjohnson117
+mail: kjohnson117@example.edu
+businessCategory:Advising
+userPassword: password
+eduPersonAffiliation: alum
+eduPersonAffiliation: student
+
+dn: uid=dsmith,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Smith
+givenName: David
+cn: David Smith
+uid: dsmith
+mail: dsmith@example.edu
+businessCategory:Account Payable
+userPassword: password
+eduPersonAffiliation: staff
+
+dn: uid=bwhite,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: White
+givenName: Blake
+cn: Blake White
+uid: bwhite
+mail: bwhite@example.edu
+businessCategory:Language Arts
+userPassword: password
+eduPersonAffiliation: member
+
+dn: uid=ldoe,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Doe
+givenName: Lori
+cn: Lori Doe
+uid: ldoe
+mail: ldoe@example.edu
+businessCategory:Language Arts
+userPassword: password
+eduPersonAffiliation: faculty
+
+dn: uid=dlangenberg121,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Langenberg
+givenName: David
+cn: David Langenberg
+uid: dlangenberg121
+mail: dlangenberg121@example.edu
+businessCategory:Business
+userPassword: password
+eduPersonAffiliation: community
+
+dn: uid=gwilliams,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Williams
+givenName: Greg
+cn: Greg Williams
+uid: gwilliams
+mail: gwilliams@example.edu
+businessCategory:Financial Aid
+userPassword: password
+eduPersonAffiliation: faculty
+
+dn: uid=kclark123,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Clark
+givenName: Karoline
+cn: Karoline Clark
+uid: kclark123
+mail: kclark123@example.edu
+businessCategory:Financial Aid
+userPassword: password
+eduPersonAffiliation: staff
+
+dn: uid=ewilliams,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Williams
+givenName: Eric
+cn: Eric Williams
+uid: ewilliams
+mail: ewilliams@example.edu
+businessCategory:Language Arts
+userPassword: password
+eduPersonAffiliation: faculty
+
+dn: uid=egonazles,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Gonazles
+givenName: Eric
+cn: Eric Gonazles
+uid: egonazles
+mail: egonazles@example.edu
+businessCategory:Engineering
+userPassword: password
+eduPersonAffiliation: alum
+
+dn: uid=rprice,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Price
+givenName: Robert
+cn: Robert Price
+uid: rprice
+mail: rprice@example.edu
+businessCategory:Account Payable
+userPassword: password
+eduPersonAffiliation: student
+
+dn: uid=ewalters,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Walters
+givenName: Erik
+cn: Erik Walters
+uid: ewalters
+mail: ewalters@example.edu
+businessCategory:Law
+userPassword: password
+eduPersonAffiliation: student
+eduPersonAffiliation: staff
+
+dn: uid=clangenberg,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Langenberg
+givenName: Colin
+cn: Colin Langenberg
+uid: clangenberg
+mail: clangenberg@example.edu
+businessCategory:Financial Aid
+userPassword: password
+eduPersonAffiliation: alum
+
+dn: uid=cmorrison129,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Morrison
+givenName: Colin
+cn: Colin Morrison
+uid: cmorrison129
+mail: cmorrison129@example.edu
+businessCategory:Engineering
+userPassword: password
+eduPersonAffiliation: community
+
+dn: uid=mbutler,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Butler
+givenName: Mary
+cn: Mary Butler
+uid: mbutler
+mail: mbutler@example.edu
+businessCategory:Financial Aid
+userPassword: password
+eduPersonAffiliation: staff
+eduPersonAffiliation: alum
+
+dn: uid=smartinez,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Martinez
+givenName: Sarah
+cn: Sarah Martinez
+uid: smartinez
+mail: smartinez@example.edu
+businessCategory:Business
+userPassword: password
+eduPersonAffiliation: student
+
+dn: uid=klewis,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Lewis
+givenName: Karl
+cn: Karl Lewis
+uid: klewis
+mail: klewis@example.edu
+businessCategory:Accounting
+userPassword: password
+eduPersonAffiliation: staff
+eduPersonAffiliation: faculty
+
+dn: uid=mwilliams,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Williams
+givenName: Marie
+cn: Marie Williams
+uid: mwilliams
+mail: mwilliams@example.edu
+businessCategory:Language Arts
+userPassword: password
+eduPersonAffiliation: faculty
+
+dn: uid=dsmith134,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Smith
+givenName: David
+cn: David Smith
+uid: dsmith134
+mail: dsmith134@example.edu
+businessCategory:Information Technology
+userPassword: password
+eduPersonAffiliation: community
+
+dn: uid=gpeterson,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Peterson
+givenName: Greg
+cn: Greg Peterson
+uid: gpeterson
+mail: gpeterson@example.edu
+businessCategory:Language Arts
+userPassword: password
+eduPersonAffiliation: staff
+eduPersonAffiliation: faculty
+
+dn: uid=bgrady136,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Grady
+givenName: Betty
+cn: Betty Grady
+uid: bgrady136
+mail: bgrady136@example.edu
+businessCategory:Engineering
+userPassword: password
+eduPersonAffiliation: student
+eduPersonAffiliation: member
+
+dn: uid=mthompson137,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Thompson
+givenName: Mark
+cn: Mark Thompson
+uid: mthompson137
+mail: mthompson137@example.edu
+businessCategory:Account Payable
+userPassword: password
+eduPersonAffiliation: faculty
+
+dn: uid=mroberts138,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Roberts
+givenName: Mary
+cn: Mary Roberts
+uid: mroberts138
+mail: mroberts138@example.edu
+businessCategory:Engineering
+userPassword: password
+eduPersonAffiliation: faculty
+eduPersonAffiliation: member
+
+dn: uid=janderson,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Anderson
+givenName: James
+cn: James Anderson
+uid: janderson
+mail: janderson@example.edu
+businessCategory:Accounting
+userPassword: password
+eduPersonAffiliation: faculty
+eduPersonAffiliation: community
+
+dn: uid=jscott140,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Scott
+givenName: Jo
+cn: Jo Scott
+uid: jscott140
+mail: jscott140@example.edu
+businessCategory:Advising
+userPassword: password
+eduPersonAffiliation: community
+eduPersonAffiliation: faculty
+
+dn: uid=ddavis141,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Davis
+givenName: Donna
+cn: Donna Davis
+uid: ddavis141
+mail: ddavis141@example.edu
+businessCategory:Financial Aid
+userPassword: password
+eduPersonAffiliation: member
+eduPersonAffiliation: alum
+
+dn: uid=jbutler,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Butler
+givenName: Jennifer
+cn: Jennifer Butler
+uid: jbutler
+mail: jbutler@example.edu
+businessCategory:Law
+userPassword: password
+eduPersonAffiliation: member
+eduPersonAffiliation: alum
+
+dn: uid=jlewis143,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Lewis
+givenName: Jo
+cn: Jo Lewis
+uid: jlewis143
+mail: jlewis143@example.edu
+businessCategory:Information Technology
+userPassword: password
+eduPersonAffiliation: member
+
+dn: uid=janderson144,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Anderson
+givenName: John
+cn: John Anderson
+uid: janderson144
+mail: janderson144@example.edu
+businessCategory:Computer Science
+userPassword: password
+eduPersonAffiliation: alum
+eduPersonAffiliation: faculty
+
+dn: uid=mlangenberg,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Langenberg
+givenName: Marie
+cn: Marie Langenberg
+uid: mlangenberg
+mail: mlangenberg@example.edu
+businessCategory:Physical Education
+userPassword: password
+eduPersonAffiliation: community
+eduPersonAffiliation: staff
+
+dn: uid=jthompson146,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Thompson
+givenName: Jennifer
+cn: Jennifer Thompson
+uid: jthompson146
+mail: jthompson146@example.edu
+businessCategory:Law
+userPassword: password
+eduPersonAffiliation: member
+eduPersonAffiliation: community
+
+dn: uid=hvales147,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Vales
+givenName: Heather
+cn: Heather Vales
+uid: hvales147
+mail: hvales147@example.edu
+businessCategory:Engineering
+userPassword: password
+eduPersonAffiliation: staff
+
+dn: uid=jwhite,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: White
+givenName: John
+cn: John White
+uid: jwhite
+mail: jwhite@example.edu
+businessCategory:Information Technology
+userPassword: password
+eduPersonAffiliation: staff
+
+dn: uid=tgasper,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Gasper
+givenName: Thomas
+cn: Thomas Gasper
+uid: tgasper
+mail: tgasper@example.edu
+businessCategory:Information Technology
+userPassword: password
+eduPersonAffiliation: alum
+eduPersonAffiliation: student
+
+dn: uid=bjohnson,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Johnson
+givenName: Bill
+cn: Bill Johnson
+uid: bjohnson
+mail: bjohnson@example.edu
+businessCategory:Accounting
+userPassword: password
+eduPersonAffiliation: alum
+
+dn: uid=mroberts151,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Roberts
+givenName: Mark
+cn: Mark Roberts
+uid: mroberts151
+mail: mroberts151@example.edu
+businessCategory:Accounting
+userPassword: password
+eduPersonAffiliation: alum
+eduPersonAffiliation: student
+
+dn: uid=wthompson152,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Thompson
+givenName: William
+cn: William Thompson
+uid: wthompson152
+mail: wthompson152@example.edu
+businessCategory:Accounting
+userPassword: password
+eduPersonAffiliation: community
+eduPersonAffiliation: staff
+
+dn: uid=mdoe,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Doe
+givenName: Michael
+cn: Michael Doe
+uid: mdoe
+mail: mdoe@example.edu
+businessCategory:Business
+userPassword: password
+eduPersonAffiliation: staff
+
+dn: uid=bgonazles,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Gonazles
+givenName: Bill
+cn: Bill Gonazles
+uid: bgonazles
+mail: bgonazles@example.edu
+businessCategory:Language Arts
+userPassword: password
+eduPersonAffiliation: student
+
+dn: uid=mthompson155,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Thompson
+givenName: Mark
+cn: Mark Thompson
+uid: mthompson155
+mail: mthompson155@example.edu
+businessCategory:Advising
+userPassword: password
+eduPersonAffiliation: community
+
+dn: uid=dlee,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Lee
+givenName: David
+cn: David Lee
+uid: dlee
+mail: dlee@example.edu
+businessCategory:Information Technology
+userPassword: password
+eduPersonAffiliation: staff
+eduPersonAffiliation: faculty
+
+dn: uid=broberts,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Roberts
+givenName: Bill
+cn: Bill Roberts
+uid: broberts
+mail: broberts@example.edu
+businessCategory:Physical Education
+userPassword: password
+eduPersonAffiliation: community
+
+dn: uid=jvales,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Vales
+givenName: John
+cn: John Vales
+uid: jvales
+mail: jvales@example.edu
+businessCategory:Business
+userPassword: password
+eduPersonAffiliation: student
+
+dn: uid=wwilliams,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Williams
+givenName: William
+cn: William Williams
+uid: wwilliams
+mail: wwilliams@example.edu
+businessCategory:Advising
+userPassword: password
+eduPersonAffiliation: faculty
+eduPersonAffiliation: alum
+
+dn: uid=wwilliams160,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Williams
+givenName: William
+cn: William Williams
+uid: wwilliams160
+mail: wwilliams160@example.edu
+businessCategory:Financial Aid
+userPassword: password
+eduPersonAffiliation: student
+eduPersonAffiliation: community
+
+dn: uid=ggasper,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Gasper
+givenName: Greg
+cn: Greg Gasper
+uid: ggasper
+mail: ggasper@example.edu
+businessCategory:Account Payable
+userPassword: password
+eduPersonAffiliation: staff
+
+dn: uid=rlopez,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Lopez
+givenName: Robert
+cn: Robert Lopez
+uid: rlopez
+mail: rlopez@example.edu
+businessCategory:Account Payable
+userPassword: password
+eduPersonAffiliation: staff
+eduPersonAffiliation: student
+
+dn: uid=mgrady,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Grady
+givenName: Michael
+cn: Michael Grady
+uid: mgrady
+mail: mgrady@example.edu
+businessCategory:Language Arts
+userPassword: password
+eduPersonAffiliation: alum
+
+dn: uid=lpeterson,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Peterson
+givenName: Lisa
+cn: Lisa Peterson
+uid: lpeterson
+mail: lpeterson@example.edu
+businessCategory:Computer Science
+userPassword: password
+eduPersonAffiliation: faculty
+eduPersonAffiliation: student
+
+dn: uid=ljohnson,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Johnson
+givenName: Lori
+cn: Lori Johnson
+uid: ljohnson
+mail: ljohnson@example.edu
+businessCategory:Physical Education
+userPassword: password
+eduPersonAffiliation: member
+eduPersonAffiliation: alum
+
+dn: uid=gscott,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Scott
+givenName: Greg
+cn: Greg Scott
+uid: gscott
+mail: gscott@example.edu
+businessCategory:Physical Education
+userPassword: password
+eduPersonAffiliation: faculty
+eduPersonAffiliation: alum
+
+dn: uid=mprice,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Price
+givenName: Marie
+cn: Marie Price
+uid: mprice
+mail: mprice@example.edu
+businessCategory:Account Payable
+userPassword: password
+eduPersonAffiliation: community
+
+dn: uid=bprice,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Price
+givenName: Bill
+cn: Bill Price
+uid: bprice
+mail: bprice@example.edu
+businessCategory:Account Payable
+userPassword: password
+eduPersonAffiliation: member
+
+dn: uid=aanderson,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Anderson
+givenName: Ann
+cn: Ann Anderson
+uid: aanderson
+mail: aanderson@example.edu
+businessCategory:Account Payable
+userPassword: password
+eduPersonAffiliation: member
+
+dn: uid=bprice170,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Price
+givenName: Blake
+cn: Blake Price
+uid: bprice170
+mail: bprice170@example.edu
+businessCategory:Engineering
+userPassword: password
+eduPersonAffiliation: alum
+
+dn: uid=hscott,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Scott
+givenName: Heather
+cn: Heather Scott
+uid: hscott
+mail: hscott@example.edu
+businessCategory:Engineering
+userPassword: password
+eduPersonAffiliation: member
+eduPersonAffiliation: alum
+
+dn: uid=hthompson,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Thompson
+givenName: Heather
+cn: Heather Thompson
+uid: hthompson
+mail: hthompson@example.edu
+businessCategory:Advising
+userPassword: password
+eduPersonAffiliation: staff
+eduPersonAffiliation: student
+
+dn: uid=jmorrison173,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Morrison
+givenName: Jo
+cn: Jo Morrison
+uid: jmorrison173
+mail: jmorrison173@example.edu
+businessCategory:Financial Aid
+userPassword: password
+eduPersonAffiliation: alum
+
+dn: uid=mprice174,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Price
+givenName: Mary
+cn: Mary Price
+uid: mprice174
+mail: mprice174@example.edu
+businessCategory:Computer Science
+userPassword: password
+eduPersonAffiliation: community
+
+dn: uid=hprice,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Price
+givenName: Heather
+cn: Heather Price
+uid: hprice
+mail: hprice@example.edu
+businessCategory:Information Technology
+userPassword: password
+eduPersonAffiliation: member
+
+dn: uid=kbutler,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Butler
+givenName: Karoline
+cn: Karoline Butler
+uid: kbutler
+mail: kbutler@example.edu
+businessCategory:Language Arts
+userPassword: password
+eduPersonAffiliation: community
+
+dn: uid=bjohnson177,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Johnson
+givenName: Blake
+cn: Blake Johnson
+uid: bjohnson177
+mail: bjohnson177@example.edu
+businessCategory:Account Payable
+userPassword: password
+eduPersonAffiliation: alum
+eduPersonAffiliation: member
+
+dn: uid=jlee,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Lee
+givenName: Jennifer
+cn: Jennifer Lee
+uid: jlee
+mail: jlee@example.edu
+businessCategory:Financial Aid
+userPassword: password
+eduPersonAffiliation: alum
+eduPersonAffiliation: faculty
+
+dn: uid=rwilliams,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Williams
+givenName: Robert
+cn: Robert Williams
+uid: rwilliams
+mail: rwilliams@example.edu
+businessCategory:Purchasing
+userPassword: password
+eduPersonAffiliation: member
+eduPersonAffiliation: alum
+
+dn: uid=jprice180,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Price
+givenName: Jo
+cn: Jo Price
+uid: jprice180
+mail: jprice180@example.edu
+businessCategory:Account Payable
+userPassword: password
+eduPersonAffiliation: community
+
+dn: uid=kgasper,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Gasper
+givenName: Kim
+cn: Kim Gasper
+uid: kgasper
+mail: kgasper@example.edu
+businessCategory:Language Arts
+userPassword: password
+eduPersonAffiliation: community
+eduPersonAffiliation: student
+
+dn: uid=cthompson,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Thompson
+givenName: Colin
+cn: Colin Thompson
+uid: cthompson
+mail: cthompson@example.edu
+businessCategory:Advising
+userPassword: password
+eduPersonAffiliation: staff
+eduPersonAffiliation: faculty
+
+dn: uid=ethompson183,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Thompson
+givenName: Eric
+cn: Eric Thompson
+uid: ethompson183
+mail: ethompson183@example.edu
+businessCategory:Physical Education
+userPassword: password
+eduPersonAffiliation: member
+eduPersonAffiliation: alum
+
+dn: uid=bclark,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Clark
+givenName: Betty
+cn: Betty Clark
+uid: bclark
+mail: bclark@example.edu
+businessCategory:Advising
+userPassword: password
+eduPersonAffiliation: faculty
+eduPersonAffiliation: staff
+
+dn: uid=llee,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Lee
+givenName: Lori
+cn: Lori Lee
+uid: llee
+mail: llee@example.edu
+businessCategory:Account Payable
+userPassword: password
+eduPersonAffiliation: alum
+
+dn: uid=kpeterson186,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Peterson
+givenName: Karl
+cn: Karl Peterson
+uid: kpeterson186
+mail: kpeterson186@example.edu
+businessCategory:Purchasing
+userPassword: password
+eduPersonAffiliation: staff
+
+dn: uid=wlee,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Lee
+givenName: William
+cn: William Lee
+uid: wlee
+mail: wlee@example.edu
+businessCategory:Law
+userPassword: password
+eduPersonAffiliation: community
+
+dn: uid=gjohnson188,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Johnson
+givenName: Greg
+cn: Greg Johnson
+uid: gjohnson188
+mail: gjohnson188@example.edu
+businessCategory:Engineering
+userPassword: password
+eduPersonAffiliation: alum
+eduPersonAffiliation: member
+
+dn: uid=mlopez,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Lopez
+givenName: Michael
+cn: Michael Lopez
+uid: mlopez
+mail: mlopez@example.edu
+businessCategory:Financial Aid
+userPassword: password
+eduPersonAffiliation: staff
+
+dn: uid=sgrady,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Grady
+givenName: Sarah
+cn: Sarah Grady
+uid: sgrady
+mail: sgrady@example.edu
+businessCategory:Accounting
+userPassword: password
+eduPersonAffiliation: faculty
+
+dn: uid=pbrown,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Brown
+givenName: Paul
+cn: Paul Brown
+uid: pbrown
+mail: pbrown@example.edu
+businessCategory:Physical Education
+userPassword: password
+eduPersonAffiliation: member
+eduPersonAffiliation: student
+
+dn: uid=mwilliams192,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Williams
+givenName: Mary
+cn: Mary Williams
+uid: mwilliams192
+mail: mwilliams192@example.edu
+businessCategory:Physical Education
+userPassword: password
+eduPersonAffiliation: student
+
+dn: uid=jlewis193,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Lewis
+givenName: James
+cn: James Lewis
+uid: jlewis193
+mail: jlewis193@example.edu
+businessCategory:Financial Aid
+userPassword: password
+eduPersonAffiliation: faculty
+eduPersonAffiliation: student
+
+dn: uid=nbrown,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Brown
+givenName: Nancy
+cn: Nancy Brown
+uid: nbrown
+mail: nbrown@example.edu
+businessCategory:Account Payable
+userPassword: password
+eduPersonAffiliation: alum
+eduPersonAffiliation: faculty
+
+dn: uid=jwalters,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Walters
+givenName: Jo
+cn: Jo Walters
+uid: jwalters
+mail: jwalters@example.edu
+businessCategory:Engineering
+userPassword: password
+eduPersonAffiliation: alum
+eduPersonAffiliation: staff
+
+dn: uid=hdoe196,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Doe
+givenName: Heather
+cn: Heather Doe
+uid: hdoe196
+mail: hdoe196@example.edu
+businessCategory:Advising
+userPassword: password
+eduPersonAffiliation: student
+eduPersonAffiliation: community
+
+dn: uid=mlewis197,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Lewis
+givenName: Michael
+cn: Michael Lewis
+uid: mlewis197
+mail: mlewis197@example.edu
+businessCategory:Purchasing
+userPassword: password
+eduPersonAffiliation: alum
+
+dn: uid=blewis,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Lewis
+givenName: Bill
+cn: Bill Lewis
+uid: blewis
+mail: blewis@example.edu
+businessCategory:Purchasing
+userPassword: password
+eduPersonAffiliation: staff
+
+dn: uid=mwalters,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Walters
+givenName: Michael
+cn: Michael Walters
+uid: mwalters
+mail: mwalters@example.edu
+businessCategory:Advising
+userPassword: password
+eduPersonAffiliation: student
+eduPersonAffiliation: alum
+
+dn: uid=llopez,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Lopez
+givenName: Lisa
+cn: Lisa Lopez
+uid: llopez
+mail: llopez@example.edu
+businessCategory:Engineering
+userPassword: password
+eduPersonAffiliation: community
+
+dn: uid=jwalters201,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Walters
+givenName: James
+cn: James Walters
+uid: jwalters201
+mail: jwalters201@example.edu
+businessCategory:Physical Education
+userPassword: password
+eduPersonAffiliation: faculty
+eduPersonAffiliation: student
+
+dn: uid=kmorrison202,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Morrison
+givenName: Karoline
+cn: Karoline Morrison
+uid: kmorrison202
+mail: kmorrison202@example.edu
+businessCategory:Computer Science
+userPassword: password
+eduPersonAffiliation: alum
+eduPersonAffiliation: member
+
+dn: uid=bgrady203,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Grady
+givenName: Bill
+cn: Bill Grady
+uid: bgrady203
+mail: bgrady203@example.edu
+businessCategory:Business
+userPassword: password
+eduPersonAffiliation: staff
+
+dn: uid=clewis,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Lewis
+givenName: Colin
+cn: Colin Lewis
+uid: clewis
+mail: clewis@example.edu
+businessCategory:Engineering
+userPassword: password
+eduPersonAffiliation: faculty
+
+dn: uid=hwhite205,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: White
+givenName: Heather
+cn: Heather White
+uid: hwhite205
+mail: hwhite205@example.edu
+businessCategory:Advising
+userPassword: password
+eduPersonAffiliation: member
+eduPersonAffiliation: student
+
+dn: uid=dprice,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Price
+givenName: David
+cn: David Price
+uid: dprice
+mail: dprice@example.edu
+businessCategory:Physical Education
+userPassword: password
+eduPersonAffiliation: staff
+eduPersonAffiliation: faculty
+
+dn: uid=jlee207,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Lee
+givenName: John
+cn: John Lee
+uid: jlee207
+mail: jlee207@example.edu
+businessCategory:Law
+userPassword: password
+eduPersonAffiliation: community
+
+dn: uid=jbutler208,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Butler
+givenName: John
+cn: John Butler
+uid: jbutler208
+mail: jbutler208@example.edu
+businessCategory:Physical Education
+userPassword: password
+eduPersonAffiliation: member
+
+dn: uid=bdavis,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Davis
+givenName: Betty
+cn: Betty Davis
+uid: bdavis
+mail: bdavis@example.edu
+businessCategory:Financial Aid
+userPassword: password
+eduPersonAffiliation: alum
+
+dn: uid=jroberts210,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Roberts
+givenName: Jennifer
+cn: Jennifer Roberts
+uid: jroberts210
+mail: jroberts210@example.edu
+businessCategory:Account Payable
+userPassword: password
+eduPersonAffiliation: member
+
+dn: uid=gjohnson211,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Johnson
+givenName: Greg
+cn: Greg Johnson
+uid: gjohnson211
+mail: gjohnson211@example.edu
+businessCategory:Business
+userPassword: password
+eduPersonAffiliation: member
+
+dn: uid=jlangenberg,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Langenberg
+givenName: Jennifer
+cn: Jennifer Langenberg
+uid: jlangenberg
+mail: jlangenberg@example.edu
+businessCategory:Advising
+userPassword: password
+eduPersonAffiliation: faculty
+eduPersonAffiliation: alum
+
+dn: uid=dhenderson,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Henderson
+givenName: Donna
+cn: Donna Henderson
+uid: dhenderson
+mail: dhenderson@example.edu
+businessCategory:Information Technology
+userPassword: password
+eduPersonAffiliation: staff
+eduPersonAffiliation: student
+
+dn: uid=pmartinez,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Martinez
+givenName: Paul
+cn: Paul Martinez
+uid: pmartinez
+mail: pmartinez@example.edu
+businessCategory:Purchasing
+userPassword: password
+eduPersonAffiliation: student
+eduPersonAffiliation: faculty
+
+dn: uid=ganderson,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Anderson
+givenName: Greg
+cn: Greg Anderson
+uid: ganderson
+mail: ganderson@example.edu
+businessCategory:Business
+userPassword: password
+eduPersonAffiliation: faculty
+eduPersonAffiliation: member
+
+dn: uid=mpeterson,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Peterson
+givenName: Mary
+cn: Mary Peterson
+uid: mpeterson
+mail: mpeterson@example.edu
+businessCategory:Accounting
+userPassword: password
+eduPersonAffiliation: alum
+eduPersonAffiliation: member
+
+dn: uid=klopez217,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Lopez
+givenName: Karoline
+cn: Karoline Lopez
+uid: klopez217
+mail: klopez217@example.edu
+businessCategory:Physical Education
+userPassword: password
+eduPersonAffiliation: member
+
+dn: uid=tgasper218,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Gasper
+givenName: Thomas
+cn: Thomas Gasper
+uid: tgasper218
+mail: tgasper218@example.edu
+businessCategory:Law
+userPassword: password
+eduPersonAffiliation: alum
+
+dn: uid=lsmith,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Smith
+givenName: Lori
+cn: Lori Smith
+uid: lsmith
+mail: lsmith@example.edu
+businessCategory:Engineering
+userPassword: password
+eduPersonAffiliation: member
+
+dn: uid=ebutler,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Butler
+givenName: Eric
+cn: Eric Butler
+uid: ebutler
+mail: ebutler@example.edu
+businessCategory:Accounting
+userPassword: password
+eduPersonAffiliation: student
+eduPersonAffiliation: faculty
+
+dn: uid=jvales221,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Vales
+givenName: Jim
+cn: Jim Vales
+uid: jvales221
+mail: jvales221@example.edu
+businessCategory:Business
+userPassword: password
+eduPersonAffiliation: faculty
+eduPersonAffiliation: staff
+
+dn: uid=jvales222,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Vales
+givenName: James
+cn: James Vales
+uid: jvales222
+mail: jvales222@example.edu
+businessCategory:Financial Aid
+userPassword: password
+eduPersonAffiliation: community
+
+dn: uid=kjohnson223,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Johnson
+givenName: Karoline
+cn: Karoline Johnson
+uid: kjohnson223
+mail: kjohnson223@example.edu
+businessCategory:Computer Science
+userPassword: password
+eduPersonAffiliation: student
+eduPersonAffiliation: faculty
+
+dn: uid=kscott,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Scott
+givenName: Kiersten
+cn: Kiersten Scott
+uid: kscott
+mail: kscott@example.edu
+businessCategory:Accounting
+userPassword: password
+eduPersonAffiliation: community
+
+dn: uid=dwilliams225,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Williams
+givenName: David
+cn: David Williams
+uid: dwilliams225
+mail: dwilliams225@example.edu
+businessCategory:Language Arts
+userPassword: password
+eduPersonAffiliation: faculty
+eduPersonAffiliation: staff
+
+dn: uid=bclark226,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Clark
+givenName: Betty
+cn: Betty Clark
+uid: bclark226
+mail: bclark226@example.edu
+businessCategory:Physical Education
+userPassword: password
+eduPersonAffiliation: member
+eduPersonAffiliation: faculty
+
+dn: uid=mwhite227,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: White
+givenName: Marie
+cn: Marie White
+uid: mwhite227
+mail: mwhite227@example.edu
+businessCategory:Language Arts
+userPassword: password
+eduPersonAffiliation: staff
+
+dn: uid=danderson228,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Anderson
+givenName: David
+cn: David Anderson
+uid: danderson228
+mail: danderson228@example.edu
+businessCategory:Law
+userPassword: password
+eduPersonAffiliation: staff
+
+dn: uid=dgrady229,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Grady
+givenName: David
+cn: David Grady
+uid: dgrady229
+mail: dgrady229@example.edu
+businessCategory:Computer Science
+userPassword: password
+eduPersonAffiliation: faculty
+eduPersonAffiliation: student
+
+dn: uid=jgrady230,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Grady
+givenName: James
+cn: James Grady
+uid: jgrady230
+mail: jgrady230@example.edu
+businessCategory:Business
+userPassword: password
+eduPersonAffiliation: student
+
+dn: uid=jdoe,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Doe
+givenName: James
+cn: James Doe
+uid: jdoe
+mail: jdoe@example.edu
+businessCategory:Language Arts
+userPassword: password
+eduPersonAffiliation: community
+
+dn: uid=dmorrison,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Morrison
+givenName: David
+cn: David Morrison
+uid: dmorrison
+mail: dmorrison@example.edu
+businessCategory:Business
+userPassword: password
+eduPersonAffiliation: community
+
+dn: uid=mclark,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Clark
+givenName: Marie
+cn: Marie Clark
+uid: mclark
+mail: mclark@example.edu
+businessCategory:Financial Aid
+userPassword: password
+eduPersonAffiliation: student
+eduPersonAffiliation: faculty
+
+dn: uid=plopez,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Lopez
+givenName: Paul
+cn: Paul Lopez
+uid: plopez
+mail: plopez@example.edu
+businessCategory:Business
+userPassword: password
+eduPersonAffiliation: alum
+
+dn: uid=hlewis,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Lewis
+givenName: Heather
+cn: Heather Lewis
+uid: hlewis
+mail: hlewis@example.edu
+businessCategory:Advising
+userPassword: password
+eduPersonAffiliation: faculty
+
+dn: uid=dsmith236,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Smith
+givenName: David
+cn: David Smith
+uid: dsmith236
+mail: dsmith236@example.edu
+businessCategory:Accounting
+userPassword: password
+eduPersonAffiliation: member
+
+dn: uid=kbutler237,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Butler
+givenName: Kiersten
+cn: Kiersten Butler
+uid: kbutler237
+mail: kbutler237@example.edu
+businessCategory:Law
+userPassword: password
+eduPersonAffiliation: student
+eduPersonAffiliation: faculty
+
+dn: uid=kdavis,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Davis
+givenName: Kim
+cn: Kim Davis
+uid: kdavis
+mail: kdavis@example.edu
+businessCategory:Business
+userPassword: password
+eduPersonAffiliation: staff
+eduPersonAffiliation: student
+
+dn: uid=kdoe,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Doe
+givenName: Kiersten
+cn: Kiersten Doe
+uid: kdoe
+mail: kdoe@example.edu
+businessCategory:Engineering
+userPassword: password
+eduPersonAffiliation: faculty
+eduPersonAffiliation: member
+
+dn: uid=kgrady,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Grady
+givenName: Karl
+cn: Karl Grady
+uid: kgrady
+mail: kgrady@example.edu
+businessCategory:Purchasing
+userPassword: password
+eduPersonAffiliation: member
+
+dn: uid=jprice241,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Price
+givenName: James
+cn: James Price
+uid: jprice241
+mail: jprice241@example.edu
+businessCategory:Financial Aid
+userPassword: password
+eduPersonAffiliation: staff
+
+dn: uid=shenderson,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Henderson
+givenName: Sarah
+cn: Sarah Henderson
+uid: shenderson
+mail: shenderson@example.edu
+businessCategory:Accounting
+userPassword: password
+eduPersonAffiliation: community
+
+dn: uid=kmorrison243,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Morrison
+givenName: Kiersten
+cn: Kiersten Morrison
+uid: kmorrison243
+mail: kmorrison243@example.edu
+businessCategory:Account Payable
+userPassword: password
+eduPersonAffiliation: student
+eduPersonAffiliation: alum
+
+dn: uid=mgonazles244,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Gonazles
+givenName: Mark
+cn: Mark Gonazles
+uid: mgonazles244
+mail: mgonazles244@example.edu
+businessCategory:Accounting
+userPassword: password
+eduPersonAffiliation: student
+eduPersonAffiliation: faculty
+
+dn: uid=alewis,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Lewis
+givenName: Ann
+cn: Ann Lewis
+uid: alewis
+mail: alewis@example.edu
+businessCategory:Account Payable
+userPassword: password
+eduPersonAffiliation: faculty
+eduPersonAffiliation: community
+
+dn: uid=mdavis,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Davis
+givenName: Michael
+cn: Michael Davis
+uid: mdavis
+mail: mdavis@example.edu
+businessCategory:Accounting
+userPassword: password
+eduPersonAffiliation: student
+eduPersonAffiliation: community
+
+dn: uid=manderson,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Anderson
+givenName: Marie
+cn: Marie Anderson
+uid: manderson
+mail: manderson@example.edu
+businessCategory:Accounting
+userPassword: password
+eduPersonAffiliation: staff
+
+dn: uid=bmorrison,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Morrison
+givenName: Blake
+cn: Blake Morrison
+uid: bmorrison
+mail: bmorrison@example.edu
+businessCategory:Business
+userPassword: password
+eduPersonAffiliation: alum
+eduPersonAffiliation: student
+
+dn: uid=msmith249,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Smith
+givenName: Marie
+cn: Marie Smith
+uid: msmith249
+mail: msmith249@example.edu
+businessCategory:Information Technology
+userPassword: password
+eduPersonAffiliation: faculty
+eduPersonAffiliation: member
+
+dn: uid=jdoe250,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Doe
+givenName: James
+cn: James Doe
+uid: jdoe250
+mail: jdoe250@example.edu
+businessCategory:Advising
+userPassword: password
+eduPersonAffiliation: faculty
+
+dn: uid=jgasper251,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Gasper
+givenName: James
+cn: James Gasper
+uid: jgasper251
+mail: jgasper251@example.edu
+businessCategory:Purchasing
+userPassword: password
+eduPersonAffiliation: alum
+eduPersonAffiliation: faculty
+
+dn: uid=jscott252,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Scott
+givenName: Jo
+cn: Jo Scott
+uid: jscott252
+mail: jscott252@example.edu
+businessCategory:Financial Aid
+userPassword: password
+eduPersonAffiliation: member
+eduPersonAffiliation: alum
+
+dn: uid=kwhite253,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: White
+givenName: Karoline
+cn: Karoline White
+uid: kwhite253
+mail: kwhite253@example.edu
+businessCategory:Law
+userPassword: password
+eduPersonAffiliation: faculty
+
+dn: uid=wbrown254,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Brown
+givenName: William
+cn: William Brown
+uid: wbrown254
+mail: wbrown254@example.edu
+businessCategory:Law
+userPassword: password
+eduPersonAffiliation: faculty
+
+dn: uid=mpeterson255,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Peterson
+givenName: Mark
+cn: Mark Peterson
+uid: mpeterson255
+mail: mpeterson255@example.edu
+businessCategory:Language Arts
+userPassword: password
+eduPersonAffiliation: community
+eduPersonAffiliation: student
+
+dn: uid=kthompson256,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Thompson
+givenName: Kiersten
+cn: Kiersten Thompson
+uid: kthompson256
+mail: kthompson256@example.edu
+businessCategory:Physical Education
+userPassword: password
+eduPersonAffiliation: community
+eduPersonAffiliation: faculty
+
+dn: uid=jscott257,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Scott
+givenName: Jo
+cn: Jo Scott
+uid: jscott257
+mail: jscott257@example.edu
+businessCategory:Financial Aid
+userPassword: password
+eduPersonAffiliation: student
+eduPersonAffiliation: faculty
+
+dn: uid=mlangenberg258,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Langenberg
+givenName: Mary
+cn: Mary Langenberg
+uid: mlangenberg258
+mail: mlangenberg258@example.edu
+businessCategory:Physical Education
+userPassword: password
+eduPersonAffiliation: student
+eduPersonAffiliation: alum
+
+dn: uid=khenderson259,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Henderson
+givenName: Karoline
+cn: Karoline Henderson
+uid: khenderson259
+mail: khenderson259@example.edu
+businessCategory:Engineering
+userPassword: password
+eduPersonAffiliation: member
+
+dn: uid=hbutler,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Butler
+givenName: Heather
+cn: Heather Butler
+uid: hbutler
+mail: hbutler@example.edu
+businessCategory:Business
+userPassword: password
+eduPersonAffiliation: student
+eduPersonAffiliation: member
+
+dn: uid=mbutler261,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Butler
+givenName: Marie
+cn: Marie Butler
+uid: mbutler261
+mail: mbutler261@example.edu
+businessCategory:Advising
+userPassword: password
+eduPersonAffiliation: faculty
+
+dn: uid=jmorrison262,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Morrison
+givenName: Jennifer
+cn: Jennifer Morrison
+uid: jmorrison262
+mail: jmorrison262@example.edu
+businessCategory:Engineering
+userPassword: password
+eduPersonAffiliation: member
+
+dn: uid=rdavis,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Davis
+givenName: Robert
+cn: Robert Davis
+uid: rdavis
+mail: rdavis@example.edu
+businessCategory:Physical Education
+userPassword: password
+eduPersonAffiliation: alum
+eduPersonAffiliation: member
+
+dn: uid=kbutler264,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Butler
+givenName: Kim
+cn: Kim Butler
+uid: kbutler264
+mail: kbutler264@example.edu
+businessCategory:Computer Science
+userPassword: password
+eduPersonAffiliation: student
+
+dn: uid=jwhite265,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: White
+givenName: James
+cn: James White
+uid: jwhite265
+mail: jwhite265@example.edu
+businessCategory:Financial Aid
+userPassword: password
+eduPersonAffiliation: faculty
+eduPersonAffiliation: community
+
+dn: uid=jwilliams,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Williams
+givenName: James
+cn: James Williams
+uid: jwilliams
+mail: jwilliams@example.edu
+businessCategory:Language Arts
+userPassword: password
+eduPersonAffiliation: member
+eduPersonAffiliation: alum
+
+dn: uid=llangenberg,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Langenberg
+givenName: Lisa
+cn: Lisa Langenberg
+uid: llangenberg
+mail: llangenberg@example.edu
+businessCategory:Advising
+userPassword: password
+eduPersonAffiliation: faculty
+
+dn: uid=jhenderson,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Henderson
+givenName: John
+cn: John Henderson
+uid: jhenderson
+mail: jhenderson@example.edu
+businessCategory:Accounting
+userPassword: password
+eduPersonAffiliation: alum
+eduPersonAffiliation: community
+
+dn: uid=jlangenberg269,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Langenberg
+givenName: Jennifer
+cn: Jennifer Langenberg
+uid: jlangenberg269
+mail: jlangenberg269@example.edu
+businessCategory:Physical Education
+userPassword: password
+eduPersonAffiliation: member
+
+dn: uid=mdoe270,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Doe
+givenName: Michael
+cn: Michael Doe
+uid: mdoe270
+mail: mdoe270@example.edu
+businessCategory:Business
+userPassword: password
+eduPersonAffiliation: staff
+eduPersonAffiliation: member
+
+dn: uid=mbrown271,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Brown
+givenName: Mark
+cn: Mark Brown
+uid: mbrown271
+mail: mbrown271@example.edu
+businessCategory:Engineering
+userPassword: password
+eduPersonAffiliation: staff
+
+dn: uid=jvales272,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Vales
+givenName: John
+cn: John Vales
+uid: jvales272
+mail: jvales272@example.edu
+businessCategory:Advising
+userPassword: password
+eduPersonAffiliation: faculty
+eduPersonAffiliation: staff
+
+dn: uid=tdavis,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Davis
+givenName: Thomas
+cn: Thomas Davis
+uid: tdavis
+mail: tdavis@example.edu
+businessCategory:Account Payable
+userPassword: password
+eduPersonAffiliation: student
+eduPersonAffiliation: member
+
+dn: uid=ejohnson,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Johnson
+givenName: Eric
+cn: Eric Johnson
+uid: ejohnson
+mail: ejohnson@example.edu
+businessCategory:Account Payable
+userPassword: password
+eduPersonAffiliation: member
+
+dn: uid=jpeterson275,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Peterson
+givenName: John
+cn: John Peterson
+uid: jpeterson275
+mail: jpeterson275@example.edu
+businessCategory:Accounting
+userPassword: password
+eduPersonAffiliation: alum
+eduPersonAffiliation: student
+
+dn: uid=gsmith,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Smith
+givenName: Greg
+cn: Greg Smith
+uid: gsmith
+mail: gsmith@example.edu
+businessCategory:Engineering
+userPassword: password
+eduPersonAffiliation: student
+eduPersonAffiliation: staff
+
+dn: uid=klopez278,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Lopez
+givenName: Kim
+cn: Kim Lopez
+uid: klopez278
+mail: klopez278@example.edu
+businessCategory:Business
+userPassword: password
+eduPersonAffiliation: member
+eduPersonAffiliation: staff
+
+dn: uid=sclark279,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Clark
+givenName: Sarah
+cn: Sarah Clark
+uid: sclark279
+mail: sclark279@example.edu
+businessCategory:Physical Education
+userPassword: password
+eduPersonAffiliation: community
+eduPersonAffiliation: alum
+
+dn: uid=abrown,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Brown
+givenName: Ann
+cn: Ann Brown
+uid: abrown
+mail: abrown@example.edu
+businessCategory:Information Technology
+userPassword: password
+eduPersonAffiliation: community
+
+dn: uid=jwhite281,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: White
+givenName: Jim
+cn: Jim White
+uid: jwhite281
+mail: jwhite281@example.edu
+businessCategory:Advising
+userPassword: password
+eduPersonAffiliation: student
+
+dn: uid=hgrady,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Grady
+givenName: Heather
+cn: Heather Grady
+uid: hgrady
+mail: hgrady@example.edu
+businessCategory:Advising
+userPassword: password
+eduPersonAffiliation: member
+eduPersonAffiliation: community
+
+dn: uid=kwhite283,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: White
+givenName: Kim
+cn: Kim White
+uid: kwhite283
+mail: kwhite283@example.edu
+businessCategory:Accounting
+userPassword: password
+eduPersonAffiliation: staff
+eduPersonAffiliation: faculty
+
+dn: uid=bsmith,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Smith
+givenName: Betty
+cn: Betty Smith
+uid: bsmith
+mail: bsmith@example.edu
+businessCategory:Information Technology
+userPassword: password
+eduPersonAffiliation: alum
+eduPersonAffiliation: faculty
+
+dn: uid=elopez,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Lopez
+givenName: Eric
+cn: Eric Lopez
+uid: elopez
+mail: elopez@example.edu
+businessCategory:Computer Science
+userPassword: password
+eduPersonAffiliation: alum
+eduPersonAffiliation: member
+
+dn: uid=pclark,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Clark
+givenName: Paul
+cn: Paul Clark
+uid: pclark
+mail: pclark@example.edu
+businessCategory:Business
+userPassword: password
+eduPersonAffiliation: student
+
+dn: uid=glee287,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Lee
+givenName: Greg
+cn: Greg Lee
+uid: glee287
+mail: glee287@example.edu
+businessCategory:Account Payable
+userPassword: password
+eduPersonAffiliation: student
+
+dn: uid=jwhite288,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: White
+givenName: Jennifer
+cn: Jennifer White
+uid: jwhite288
+mail: jwhite288@example.edu
+businessCategory:Business
+userPassword: password
+eduPersonAffiliation: member
+eduPersonAffiliation: faculty
+
+dn: uid=rdavis289,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Davis
+givenName: Robert
+cn: Robert Davis
+uid: rdavis289
+mail: rdavis289@example.edu
+businessCategory:Advising
+userPassword: password
+eduPersonAffiliation: faculty
+eduPersonAffiliation: student
+
+dn: uid=jgasper290,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Gasper
+givenName: James
+cn: James Gasper
+uid: jgasper290
+mail: jgasper290@example.edu
+businessCategory:Financial Aid
+userPassword: password
+eduPersonAffiliation: alum
+
+dn: uid=nwhite,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: White
+givenName: Nancy
+cn: Nancy White
+uid: nwhite
+mail: nwhite@example.edu
+businessCategory:Computer Science
+userPassword: password
+eduPersonAffiliation: faculty
+eduPersonAffiliation: staff
+
+dn: uid=kpeterson292,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Peterson
+givenName: Kiersten
+cn: Kiersten Peterson
+uid: kpeterson292
+mail: kpeterson292@example.edu
+businessCategory:Purchasing
+userPassword: password
+eduPersonAffiliation: member
+
+dn: uid=klewis293,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Lewis
+givenName: Kiersten
+cn: Kiersten Lewis
+uid: klewis293
+mail: klewis293@example.edu
+businessCategory:Language Arts
+userPassword: password
+eduPersonAffiliation: student
+eduPersonAffiliation: community
+
+dn: uid=jvales294,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Vales
+givenName: John
+cn: John Vales
+uid: jvales294
+mail: jvales294@example.edu
+businessCategory:Purchasing
+userPassword: password
+eduPersonAffiliation: member
+eduPersonAffiliation: student
+
+dn: uid=rdoe,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Doe
+givenName: Robert
+cn: Robert Doe
+uid: rdoe
+mail: rdoe@example.edu
+businessCategory:Business
+userPassword: password
+eduPersonAffiliation: community
+eduPersonAffiliation: alum
+
+dn: uid=bbrown,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Brown
+givenName: Blake
+cn: Blake Brown
+uid: bbrown
+mail: bbrown@example.edu
+businessCategory:Account Payable
+userPassword: password
+eduPersonAffiliation: member
+
+dn: uid=mlangenberg297,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Langenberg
+givenName: Mark
+cn: Mark Langenberg
+uid: mlangenberg297
+mail: mlangenberg297@example.edu
+businessCategory:Information Technology
+userPassword: password
+eduPersonAffiliation: staff
+eduPersonAffiliation: community
+
+dn: uid=broberts298,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Roberts
+givenName: Bill
+cn: Bill Roberts
+uid: broberts298
+mail: broberts298@example.edu
+businessCategory:Accounting
+userPassword: password
+eduPersonAffiliation: faculty
+eduPersonAffiliation: staff
+
+dn: uid=ldoe299,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Doe
+givenName: Lori
+cn: Lori Doe
+uid: ldoe299
+mail: ldoe299@example.edu
+businessCategory:Account Payable
+userPassword: password
+eduPersonAffiliation: faculty
+eduPersonAffiliation: student
+
+dn: uid=ggasper300,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Gasper
+givenName: Greg
+cn: Greg Gasper
+uid: ggasper300
+mail: ggasper300@example.edu
+businessCategory:Engineering
+userPassword: password
+eduPersonAffiliation: student
+
+dn: uid=lroberts,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Roberts
+givenName: Lori
+cn: Lori Roberts
+uid: lroberts
+mail: lroberts@example.edu
+businessCategory:Engineering
+userPassword: password
+eduPersonAffiliation: staff
+
+dn: uid=kwhite302,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: White
+givenName: Kiersten
+cn: Kiersten White
+uid: kwhite302
+mail: kwhite302@example.edu
+businessCategory:Purchasing
+userPassword: password
+eduPersonAffiliation: member
+
+dn: uid=dwilliams303,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Williams
+givenName: David
+cn: David Williams
+uid: dwilliams303
+mail: dwilliams303@example.edu
+businessCategory:Engineering
+userPassword: password
+eduPersonAffiliation: member
+eduPersonAffiliation: student
+
+dn: uid=bpeterson304,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Peterson
+givenName: Bill
+cn: Bill Peterson
+uid: bpeterson304
+mail: bpeterson304@example.edu
+businessCategory:Accounting
+userPassword: password
+eduPersonAffiliation: member
+
+dn: uid=swalters,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Walters
+givenName: Sarah
+cn: Sarah Walters
+uid: swalters
+mail: swalters@example.edu
+businessCategory:Purchasing
+userPassword: password
+eduPersonAffiliation: staff
+
+dn: uid=edavis,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Davis
+givenName: Eric
+cn: Eric Davis
+uid: edavis
+mail: edavis@example.edu
+businessCategory:Physical Education
+userPassword: password
+eduPersonAffiliation: faculty
+
+dn: uid=bthompson,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Thompson
+givenName: Blake
+cn: Blake Thompson
+uid: bthompson
+mail: bthompson@example.edu
+businessCategory:Computer Science
+userPassword: password
+eduPersonAffiliation: faculty
+eduPersonAffiliation: staff
+
+dn: uid=slangenberg,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Langenberg
+givenName: Sarah
+cn: Sarah Langenberg
+uid: slangenberg
+mail: slangenberg@example.edu
+businessCategory:Information Technology
+userPassword: password
+eduPersonAffiliation: faculty
+eduPersonAffiliation: community
+
+dn: uid=dwilliams309,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Williams
+givenName: Donna
+cn: Donna Williams
+uid: dwilliams309
+mail: dwilliams309@example.edu
+businessCategory:Computer Science
+userPassword: password
+eduPersonAffiliation: staff
+eduPersonAffiliation: community
+
+dn: uid=cpeterson,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Peterson
+givenName: Colin
+cn: Colin Peterson
+uid: cpeterson
+mail: cpeterson@example.edu
+businessCategory:Law
+userPassword: password
+eduPersonAffiliation: community
+eduPersonAffiliation: member
+
+dn: uid=mlee311,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Lee
+givenName: Mary
+cn: Mary Lee
+uid: mlee311
+mail: mlee311@example.edu
+businessCategory:Account Payable
+userPassword: password
+eduPersonAffiliation: alum
+
+dn: uid=elopez312,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Lopez
+givenName: Eric
+cn: Eric Lopez
+uid: elopez312
+mail: elopez312@example.edu
+businessCategory:Business
+userPassword: password
+eduPersonAffiliation: faculty
+eduPersonAffiliation: alum
+
+dn: uid=pmartinez313,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Martinez
+givenName: Paul
+cn: Paul Martinez
+uid: pmartinez313
+mail: pmartinez313@example.edu
+businessCategory:Purchasing
+userPassword: password
+eduPersonAffiliation: member
+eduPersonAffiliation: alum
+
+dn: uid=lwilliams314,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Williams
+givenName: Lisa
+cn: Lisa Williams
+uid: lwilliams314
+mail: lwilliams314@example.edu
+businessCategory:Financial Aid
+userPassword: password
+eduPersonAffiliation: member
+eduPersonAffiliation: staff
+
+dn: uid=kpeterson315,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Peterson
+givenName: Kiersten
+cn: Kiersten Peterson
+uid: kpeterson315
+mail: kpeterson315@example.edu
+businessCategory:Advising
+userPassword: password
+eduPersonAffiliation: member
+eduPersonAffiliation: community
+
+dn: uid=kvales316,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Vales
+givenName: Kiersten
+cn: Kiersten Vales
+uid: kvales316
+mail: kvales316@example.edu
+businessCategory:Law
+userPassword: password
+eduPersonAffiliation: student
+
+dn: uid=hbutler317,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Butler
+givenName: Heather
+cn: Heather Butler
+uid: hbutler317
+mail: hbutler317@example.edu
+businessCategory:Account Payable
+userPassword: password
+eduPersonAffiliation: student
+eduPersonAffiliation: staff
+
+dn: uid=jwalters318,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Walters
+givenName: John
+cn: John Walters
+uid: jwalters318
+mail: jwalters318@example.edu
+businessCategory:Information Technology
+userPassword: password
+eduPersonAffiliation: community
+eduPersonAffiliation: staff
+
+dn: uid=kthompson319,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Thompson
+givenName: Kiersten
+cn: Kiersten Thompson
+uid: kthompson319
+mail: kthompson319@example.edu
+businessCategory:Business
+userPassword: password
+eduPersonAffiliation: student
+
+dn: uid=mscott320,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Scott
+givenName: Mary
+cn: Mary Scott
+uid: mscott320
+mail: mscott320@example.edu
+businessCategory:Accounting
+userPassword: password
+eduPersonAffiliation: community
+
+dn: uid=rbutler,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Butler
+givenName: Robert
+cn: Robert Butler
+uid: rbutler
+mail: rbutler@example.edu
+businessCategory:Financial Aid
+userPassword: password
+eduPersonAffiliation: community
+eduPersonAffiliation: staff
+
+dn: uid=mclark322,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Clark
+givenName: Mark
+cn: Mark Clark
+uid: mclark322
+mail: mclark322@example.edu
+businessCategory:Language Arts
+userPassword: password
+eduPersonAffiliation: student
+eduPersonAffiliation: alum
+
+dn: uid=hhenderson,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Henderson
+givenName: Heather
+cn: Heather Henderson
+uid: hhenderson
+mail: hhenderson@example.edu
+businessCategory:Law
+userPassword: password
+eduPersonAffiliation: faculty
+eduPersonAffiliation: member
+
+dn: uid=hdoe324,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Doe
+givenName: Heather
+cn: Heather Doe
+uid: hdoe324
+mail: hdoe324@example.edu
+businessCategory:Purchasing
+userPassword: password
+eduPersonAffiliation: staff
+
+dn: uid=mdoe325,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Doe
+givenName: Mark
+cn: Mark Doe
+uid: mdoe325
+mail: mdoe325@example.edu
+businessCategory:Law
+userPassword: password
+eduPersonAffiliation: staff
+
+dn: uid=klopez326,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Lopez
+givenName: Kiersten
+cn: Kiersten Lopez
+uid: klopez326
+mail: klopez326@example.edu
+businessCategory:Business
+userPassword: password
+eduPersonAffiliation: alum
+
+dn: uid=dlewis327,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Lewis
+givenName: David
+cn: David Lewis
+uid: dlewis327
+mail: dlewis327@example.edu
+businessCategory:Purchasing
+userPassword: password
+eduPersonAffiliation: member
+eduPersonAffiliation: faculty
+
+dn: uid=wlee328,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Lee
+givenName: William
+cn: William Lee
+uid: wlee328
+mail: wlee328@example.edu
+businessCategory:Physical Education
+userPassword: password
+eduPersonAffiliation: community
+
+dn: uid=mthompson329,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Thompson
+givenName: Mary
+cn: Mary Thompson
+uid: mthompson329
+mail: mthompson329@example.edu
+businessCategory:Law
+userPassword: password
+eduPersonAffiliation: alum
+
+dn: uid=gbrown,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Brown
+givenName: Greg
+cn: Greg Brown
+uid: gbrown
+mail: gbrown@example.edu
+businessCategory:Accounting
+userPassword: password
+eduPersonAffiliation: alum
+
+dn: uid=rmartinez331,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Martinez
+givenName: Robert
+cn: Robert Martinez
+uid: rmartinez331
+mail: rmartinez331@example.edu
+businessCategory:Law
+userPassword: password
+eduPersonAffiliation: member
+
+dn: uid=klee,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Lee
+givenName: Karl
+cn: Karl Lee
+uid: klee
+mail: klee@example.edu
+businessCategory:Advising
+userPassword: password
+eduPersonAffiliation: community
+
+dn: uid=mjohnson,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Johnson
+givenName: Marie
+cn: Marie Johnson
+uid: mjohnson
+mail: mjohnson@example.edu
+businessCategory:Financial Aid
+userPassword: password
+eduPersonAffiliation: faculty
+
+dn: uid=lwilliams334,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Williams
+givenName: Lisa
+cn: Lisa Williams
+uid: lwilliams334
+mail: lwilliams334@example.edu
+businessCategory:Law
+userPassword: password
+eduPersonAffiliation: staff
+
+dn: uid=tbrown,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Brown
+givenName: Thomas
+cn: Thomas Brown
+uid: tbrown
+mail: tbrown@example.edu
+businessCategory:Advising
+userPassword: password
+eduPersonAffiliation: staff
+eduPersonAffiliation: alum
+
+dn: uid=jwalters336,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Walters
+givenName: James
+cn: James Walters
+uid: jwalters336
+mail: jwalters336@example.edu
+businessCategory:Information Technology
+userPassword: password
+eduPersonAffiliation: alum
+
+dn: uid=lbutler,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Butler
+givenName: Lisa
+cn: Lisa Butler
+uid: lbutler
+mail: lbutler@example.edu
+businessCategory:Financial Aid
+userPassword: password
+eduPersonAffiliation: student
+
+dn: uid=kbrown,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Brown
+givenName: Kiersten
+cn: Kiersten Brown
+uid: kbrown
+mail: kbrown@example.edu
+businessCategory:Language Arts
+userPassword: password
+eduPersonAffiliation: student
+eduPersonAffiliation: faculty
+
+dn: uid=pjohnson,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Johnson
+givenName: Paul
+cn: Paul Johnson
+uid: pjohnson
+mail: pjohnson@example.edu
+businessCategory:Physical Education
+userPassword: password
+eduPersonAffiliation: alum
+
+dn: uid=jprice340,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Price
+givenName: John
+cn: John Price
+uid: jprice340
+mail: jprice340@example.edu
+businessCategory:Engineering
+userPassword: password
+eduPersonAffiliation: student
+eduPersonAffiliation: community
+
+dn: uid=jprice341,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Price
+givenName: Jim
+cn: Jim Price
+uid: jprice341
+mail: jprice341@example.edu
+businessCategory:Advising
+userPassword: password
+eduPersonAffiliation: student
+eduPersonAffiliation: community
+
+dn: uid=lhenderson342,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Henderson
+givenName: Lisa
+cn: Lisa Henderson
+uid: lhenderson342
+mail: lhenderson342@example.edu
+businessCategory:Account Payable
+userPassword: password
+eduPersonAffiliation: staff
+eduPersonAffiliation: member
+
+dn: uid=kwhite343,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: White
+givenName: Kim
+cn: Kim White
+uid: kwhite343
+mail: kwhite343@example.edu
+businessCategory:Language Arts
+userPassword: password
+eduPersonAffiliation: student
+
+dn: uid=klopez344,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Lopez
+givenName: Karl
+cn: Karl Lopez
+uid: klopez344
+mail: klopez344@example.edu
+businessCategory:Business
+userPassword: password
+eduPersonAffiliation: faculty
+
+dn: uid=bgonazles345,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Gonazles
+givenName: Bill
+cn: Bill Gonazles
+uid: bgonazles345
+mail: bgonazles345@example.edu
+businessCategory:Accounting
+userPassword: password
+eduPersonAffiliation: staff
+eduPersonAffiliation: student
+
+dn: uid=apeterson,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Peterson
+givenName: Ann
+cn: Ann Peterson
+uid: apeterson
+mail: apeterson@example.edu
+businessCategory:Business
+userPassword: password
+eduPersonAffiliation: member
+
+dn: uid=dbutler347,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Butler
+givenName: David
+cn: David Butler
+uid: dbutler347
+mail: dbutler347@example.edu
+businessCategory:Information Technology
+userPassword: password
+eduPersonAffiliation: faculty
+
+dn: uid=speterson,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Peterson
+givenName: Sarah
+cn: Sarah Peterson
+uid: speterson
+mail: speterson@example.edu
+businessCategory:Purchasing
+userPassword: password
+eduPersonAffiliation: staff
+eduPersonAffiliation: faculty
+
+dn: uid=jpeterson349,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Peterson
+givenName: James
+cn: James Peterson
+uid: jpeterson349
+mail: jpeterson349@example.edu
+businessCategory:Physical Education
+userPassword: password
+eduPersonAffiliation: student
+
+dn: uid=gjohnson350,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Johnson
+givenName: Greg
+cn: Greg Johnson
+uid: gjohnson350
+mail: gjohnson350@example.edu
+businessCategory:Physical Education
+userPassword: password
+eduPersonAffiliation: alum
+
+dn: uid=lthompson,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Thompson
+givenName: Lisa
+cn: Lisa Thompson
+uid: lthompson
+mail: lthompson@example.edu
+businessCategory:Accounting
+userPassword: password
+eduPersonAffiliation: staff
+
+dn: uid=nclark,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Clark
+givenName: Nancy
+cn: Nancy Clark
+uid: nclark
+mail: nclark@example.edu
+businessCategory:Account Payable
+userPassword: password
+eduPersonAffiliation: member
+
+dn: uid=swilliams,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Williams
+givenName: Sarah
+cn: Sarah Williams
+uid: swilliams
+mail: swilliams@example.edu
+businessCategory:Purchasing
+userPassword: password
+eduPersonAffiliation: alum
+eduPersonAffiliation: student
+
+dn: uid=jprice354,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Price
+givenName: Jennifer
+cn: Jennifer Price
+uid: jprice354
+mail: jprice354@example.edu
+businessCategory:Purchasing
+userPassword: password
+eduPersonAffiliation: faculty
+
+dn: uid=lclark,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Clark
+givenName: Lori
+cn: Lori Clark
+uid: lclark
+mail: lclark@example.edu
+businessCategory:Language Arts
+userPassword: password
+eduPersonAffiliation: faculty
+
+dn: uid=ghenderson,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Henderson
+givenName: Greg
+cn: Greg Henderson
+uid: ghenderson
+mail: ghenderson@example.edu
+businessCategory:Physical Education
+userPassword: password
+eduPersonAffiliation: student
+
+dn: uid=egonazles357,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Gonazles
+givenName: Eric
+cn: Eric Gonazles
+uid: egonazles357
+mail: egonazles357@example.edu
+businessCategory:Engineering
+userPassword: password
+eduPersonAffiliation: student
+
+dn: uid=dlangenberg358,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Langenberg
+givenName: Donna
+cn: Donna Langenberg
+uid: dlangenberg358
+mail: dlangenberg358@example.edu
+businessCategory:Account Payable
+userPassword: password
+eduPersonAffiliation: alum
+eduPersonAffiliation: staff
+
+dn: uid=cbrown,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Brown
+givenName: Colin
+cn: Colin Brown
+uid: cbrown
+mail: cbrown@example.edu
+businessCategory:Accounting
+userPassword: password
+eduPersonAffiliation: student
+
+dn: uid=twalters,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Walters
+givenName: Thomas
+cn: Thomas Walters
+uid: twalters
+mail: twalters@example.edu
+businessCategory:Business
+userPassword: password
+eduPersonAffiliation: alum
+
+dn: uid=swhite,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: White
+givenName: Sarah
+cn: Sarah White
+uid: swhite
+mail: swhite@example.edu
+businessCategory:Language Arts
+userPassword: password
+eduPersonAffiliation: community
+
+dn: uid=rwalters,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Walters
+givenName: Robert
+cn: Robert Walters
+uid: rwalters
+mail: rwalters@example.edu
+businessCategory:Account Payable
+userPassword: password
+eduPersonAffiliation: community
+
+dn: uid=eroberts,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Roberts
+givenName: Erik
+cn: Erik Roberts
+uid: eroberts
+mail: eroberts@example.edu
+businessCategory:Purchasing
+userPassword: password
+eduPersonAffiliation: faculty
+
+dn: uid=bvales,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Vales
+givenName: Blake
+cn: Blake Vales
+uid: bvales
+mail: bvales@example.edu
+businessCategory:Financial Aid
+userPassword: password
+eduPersonAffiliation: member
+
+dn: uid=bdoe365,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Doe
+givenName: Betty
+cn: Betty Doe
+uid: bdoe365
+mail: bdoe365@example.edu
+businessCategory:Account Payable
+userPassword: password
+eduPersonAffiliation: student
+eduPersonAffiliation: faculty
+
+dn: uid=nlee366,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Lee
+givenName: Nancy
+cn: Nancy Lee
+uid: nlee366
+mail: nlee366@example.edu
+businessCategory:Language Arts
+userPassword: password
+eduPersonAffiliation: staff
+
+dn: uid=tmorrison367,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Morrison
+givenName: Thomas
+cn: Thomas Morrison
+uid: tmorrison367
+mail: tmorrison367@example.edu
+businessCategory:Purchasing
+userPassword: password
+eduPersonAffiliation: student
+
+dn: uid=kbutler368,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Butler
+givenName: Kiersten
+cn: Kiersten Butler
+uid: kbutler368
+mail: kbutler368@example.edu
+businessCategory:Physical Education
+userPassword: password
+eduPersonAffiliation: staff
+eduPersonAffiliation: faculty
+
+dn: uid=bdavis369,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Davis
+givenName: Bill
+cn: Bill Davis
+uid: bdavis369
+mail: bdavis369@example.edu
+businessCategory:Accounting
+userPassword: password
+eduPersonAffiliation: faculty
+
+dn: uid=kdavis370,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Davis
+givenName: Kiersten
+cn: Kiersten Davis
+uid: kdavis370
+mail: kdavis370@example.edu
+businessCategory:Business
+userPassword: password
+eduPersonAffiliation: member
+eduPersonAffiliation: community
+
+dn: uid=llewis,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Lewis
+givenName: Lori
+cn: Lori Lewis
+uid: llewis
+mail: llewis@example.edu
+businessCategory:Language Arts
+userPassword: password
+eduPersonAffiliation: community
+
+dn: uid=djohnson,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Johnson
+givenName: Donna
+cn: Donna Johnson
+uid: djohnson
+mail: djohnson@example.edu
+businessCategory:Information Technology
+userPassword: password
+eduPersonAffiliation: student
+eduPersonAffiliation: alum
+
+dn: uid=jlangenberg373,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Langenberg
+givenName: James
+cn: James Langenberg
+uid: jlangenberg373
+mail: jlangenberg373@example.edu
+businessCategory:Information Technology
+userPassword: password
+eduPersonAffiliation: student
+eduPersonAffiliation: member
+
+dn: uid=klangenberg,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Langenberg
+givenName: Karoline
+cn: Karoline Langenberg
+uid: klangenberg
+mail: klangenberg@example.edu
+businessCategory:Advising
+userPassword: password
+eduPersonAffiliation: staff
+
+dn: uid=jthompson375,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Thompson
+givenName: John
+cn: John Thompson
+uid: jthompson375
+mail: jthompson375@example.edu
+businessCategory:Financial Aid
+userPassword: password
+eduPersonAffiliation: community
+eduPersonAffiliation: alum
+
+dn: uid=jgonazles,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Gonazles
+givenName: Jennifer
+cn: Jennifer Gonazles
+uid: jgonazles
+mail: jgonazles@example.edu
+businessCategory:Business
+userPassword: password
+eduPersonAffiliation: member
+eduPersonAffiliation: community
+
+dn: uid=mscott377,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Scott
+givenName: Mark
+cn: Mark Scott
+uid: mscott377
+mail: mscott377@example.edu
+businessCategory:Business
+userPassword: password
+eduPersonAffiliation: alum
+eduPersonAffiliation: community
+
+dn: uid=jsmith378,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Smith
+givenName: Jennifer
+cn: Jennifer Smith
+uid: jsmith378
+mail: jsmith378@example.edu
+businessCategory:Computer Science
+userPassword: password
+eduPersonAffiliation: community
+
+dn: uid=mroberts379,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Roberts
+givenName: Marie
+cn: Marie Roberts
+uid: mroberts379
+mail: mroberts379@example.edu
+businessCategory:Financial Aid
+userPassword: password
+eduPersonAffiliation: student
+eduPersonAffiliation: member
+
+dn: uid=kprice,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Price
+givenName: Kiersten
+cn: Kiersten Price
+uid: kprice
+mail: kprice@example.edu
+businessCategory:Law
+userPassword: password
+eduPersonAffiliation: faculty
+eduPersonAffiliation: alum
+
+dn: uid=tclark,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Clark
+givenName: Thomas
+cn: Thomas Clark
+uid: tclark
+mail: tclark@example.edu
+businessCategory:Account Payable
+userPassword: password
+eduPersonAffiliation: alum
+eduPersonAffiliation: community
+
+dn: uid=egasper,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Gasper
+givenName: Erik
+cn: Erik Gasper
+uid: egasper
+mail: egasper@example.edu
+businessCategory:Financial Aid
+userPassword: password
+eduPersonAffiliation: member
+eduPersonAffiliation: student
+
+dn: uid=jjohnson383,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Johnson
+givenName: James
+cn: James Johnson
+uid: jjohnson383
+mail: jjohnson383@example.edu
+businessCategory:Physical Education
+userPassword: password
+eduPersonAffiliation: faculty
+
+dn: uid=cdavis,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Davis
+givenName: Colin
+cn: Colin Davis
+uid: cdavis
+mail: cdavis@example.edu
+businessCategory:Business
+userPassword: password
+eduPersonAffiliation: staff
+eduPersonAffiliation: member
+
+dn: uid=escott,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Scott
+givenName: Eric
+cn: Eric Scott
+uid: escott
+mail: escott@example.edu
+businessCategory:Computer Science
+userPassword: password
+eduPersonAffiliation: student
+eduPersonAffiliation: staff
+
+dn: uid=kmartinez386,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Martinez
+givenName: Karoline
+cn: Karoline Martinez
+uid: kmartinez386
+mail: kmartinez386@example.edu
+businessCategory:Account Payable
+userPassword: password
+eduPersonAffiliation: member
+
+dn: uid=lgrady,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Grady
+givenName: Lori
+cn: Lori Grady
+uid: lgrady
+mail: lgrady@example.edu
+businessCategory:Account Payable
+userPassword: password
+eduPersonAffiliation: student
+
+dn: uid=jmartinez388,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Martinez
+givenName: Jo
+cn: Jo Martinez
+uid: jmartinez388
+mail: jmartinez388@example.edu
+businessCategory:Account Payable
+userPassword: password
+eduPersonAffiliation: faculty
+
+dn: uid=alangenberg,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Langenberg
+givenName: Ann
+cn: Ann Langenberg
+uid: alangenberg
+mail: alangenberg@example.edu
+businessCategory:Information Technology
+userPassword: password
+eduPersonAffiliation: staff
+
+dn: uid=blewis390,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Lewis
+givenName: Betty
+cn: Betty Lewis
+uid: blewis390
+mail: blewis390@example.edu
+businessCategory:Financial Aid
+userPassword: password
+eduPersonAffiliation: member
+
+dn: uid=pjohnson391,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Johnson
+givenName: Paul
+cn: Paul Johnson
+uid: pjohnson391
+mail: pjohnson391@example.edu
+businessCategory:Advising
+userPassword: password
+eduPersonAffiliation: member
+
+dn: uid=llee392,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Lee
+givenName: Lori
+cn: Lori Lee
+uid: llee392
+mail: llee392@example.edu
+businessCategory:Engineering
+userPassword: password
+eduPersonAffiliation: community
+eduPersonAffiliation: staff
+
+dn: uid=slewis,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Lewis
+givenName: Sarah
+cn: Sarah Lewis
+uid: slewis
+mail: slewis@example.edu
+businessCategory:Business
+userPassword: password
+eduPersonAffiliation: faculty
+eduPersonAffiliation: student
+
+dn: uid=nwalters,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Walters
+givenName: Nancy
+cn: Nancy Walters
+uid: nwalters
+mail: nwalters@example.edu
+businessCategory:Accounting
+userPassword: password
+eduPersonAffiliation: member
+
+dn: uid=hscott395,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Scott
+givenName: Heather
+cn: Heather Scott
+uid: hscott395
+mail: hscott395@example.edu
+businessCategory:Physical Education
+userPassword: password
+eduPersonAffiliation: staff
+eduPersonAffiliation: community
+
+dn: uid=edavis396,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Davis
+givenName: Erik
+cn: Erik Davis
+uid: edavis396
+mail: edavis396@example.edu
+businessCategory:Business
+userPassword: password
+eduPersonAffiliation: community
+eduPersonAffiliation: faculty
+
+dn: uid=dlangenberg397,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Langenberg
+givenName: Donna
+cn: Donna Langenberg
+uid: dlangenberg397
+mail: dlangenberg397@example.edu
+businessCategory:Physical Education
+userPassword: password
+eduPersonAffiliation: faculty
+eduPersonAffiliation: community
+
+dn: uid=plangenberg398,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Langenberg
+givenName: Paul
+cn: Paul Langenberg
+uid: plangenberg398
+mail: plangenberg398@example.edu
+businessCategory:Engineering
+userPassword: password
+eduPersonAffiliation: student
+eduPersonAffiliation: member
+
+dn: uid=mscott399,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Scott
+givenName: Michael
+cn: Michael Scott
+uid: mscott399
+mail: mscott399@example.edu
+businessCategory:Language Arts
+userPassword: password
+eduPersonAffiliation: faculty
+eduPersonAffiliation: member
+
+dn: uid=jgasper400,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Gasper
+givenName: Jo
+cn: Jo Gasper
+uid: jgasper400
+mail: jgasper400@example.edu
+businessCategory:Engineering
+userPassword: password
+eduPersonAffiliation: community
+eduPersonAffiliation: staff
+
+dn: uid=kmartinez401,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Martinez
+givenName: Karoline
+cn: Karoline Martinez
+uid: kmartinez401
+mail: kmartinez401@example.edu
+businessCategory:Advising
+userPassword: password
+eduPersonAffiliation: faculty
+eduPersonAffiliation: community
+
+dn: uid=cwalters,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Walters
+givenName: Colin
+cn: Colin Walters
+uid: cwalters
+mail: cwalters@example.edu
+businessCategory:Financial Aid
+userPassword: password
+eduPersonAffiliation: student
+eduPersonAffiliation: community
+
+dn: uid=cgasper,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Gasper
+givenName: Colin
+cn: Colin Gasper
+uid: cgasper
+mail: cgasper@example.edu
+businessCategory:Physical Education
+userPassword: password
+eduPersonAffiliation: faculty
+eduPersonAffiliation: community
+
+dn: uid=jwilliams404,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Williams
+givenName: James
+cn: James Williams
+uid: jwilliams404
+mail: jwilliams404@example.edu
+businessCategory:Accounting
+userPassword: password
+eduPersonAffiliation: alum
+eduPersonAffiliation: faculty
+
+dn: uid=rwalters405,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Walters
+givenName: Robert
+cn: Robert Walters
+uid: rwalters405
+mail: rwalters405@example.edu
+businessCategory:Physical Education
+userPassword: password
+eduPersonAffiliation: student
+eduPersonAffiliation: alum
+
+dn: uid=kvales406,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Vales
+givenName: Karl
+cn: Karl Vales
+uid: kvales406
+mail: kvales406@example.edu
+businessCategory:Physical Education
+userPassword: password
+eduPersonAffiliation: member
+
+dn: uid=bscott,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Scott
+givenName: Bill
+cn: Bill Scott
+uid: bscott
+mail: bscott@example.edu
+businessCategory:Computer Science
+userPassword: password
+eduPersonAffiliation: community
+eduPersonAffiliation: alum
+
+dn: uid=hmorrison408,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Morrison
+givenName: Heather
+cn: Heather Morrison
+uid: hmorrison408
+mail: hmorrison408@example.edu
+businessCategory:Advising
+userPassword: password
+eduPersonAffiliation: student
+
+dn: uid=eanderson,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Anderson
+givenName: Eric
+cn: Eric Anderson
+uid: eanderson
+mail: eanderson@example.edu
+businessCategory:Engineering
+userPassword: password
+eduPersonAffiliation: student
+eduPersonAffiliation: faculty
+
+dn: uid=mlangenberg410,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Langenberg
+givenName: Mark
+cn: Mark Langenberg
+uid: mlangenberg410
+mail: mlangenberg410@example.edu
+businessCategory:Financial Aid
+userPassword: password
+eduPersonAffiliation: member
+
+dn: uid=msmith411,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Smith
+givenName: Mark
+cn: Mark Smith
+uid: msmith411
+mail: msmith411@example.edu
+businessCategory:Account Payable
+userPassword: password
+eduPersonAffiliation: staff
+eduPersonAffiliation: alum
+
+dn: uid=wpeterson,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Peterson
+givenName: William
+cn: William Peterson
+uid: wpeterson
+mail: wpeterson@example.edu
+businessCategory:Language Arts
+userPassword: password
+eduPersonAffiliation: faculty
+eduPersonAffiliation: student
+
+dn: uid=mgasper413,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Gasper
+givenName: Marie
+cn: Marie Gasper
+uid: mgasper413
+mail: mgasper413@example.edu
+businessCategory:Computer Science
+userPassword: password
+eduPersonAffiliation: faculty
+
+dn: uid=bvales414,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Vales
+givenName: Blake
+cn: Blake Vales
+uid: bvales414
+mail: bvales414@example.edu
+businessCategory:Law
+userPassword: password
+eduPersonAffiliation: student
+eduPersonAffiliation: member
+
+dn: uid=bgrady415,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Grady
+givenName: Blake
+cn: Blake Grady
+uid: bgrady415
+mail: bgrady415@example.edu
+businessCategory:Law
+userPassword: password
+eduPersonAffiliation: staff
+eduPersonAffiliation: student
+
+dn: uid=plee,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Lee
+givenName: Paul
+cn: Paul Lee
+uid: plee
+mail: plee@example.edu
+businessCategory:Advising
+userPassword: password
+eduPersonAffiliation: community
+
+dn: uid=kwilliams,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Williams
+givenName: Kim
+cn: Kim Williams
+uid: kwilliams
+mail: kwilliams@example.edu
+businessCategory:Language Arts
+userPassword: password
+eduPersonAffiliation: student
+
+dn: uid=wwilliams418,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Williams
+givenName: William
+cn: William Williams
+uid: wwilliams418
+mail: wwilliams418@example.edu
+businessCategory:Purchasing
+userPassword: password
+eduPersonAffiliation: community
+
+dn: uid=jbutler419,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Butler
+givenName: Jennifer
+cn: Jennifer Butler
+uid: jbutler419
+mail: jbutler419@example.edu
+businessCategory:Accounting
+userPassword: password
+eduPersonAffiliation: staff
+
+dn: uid=hvales420,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Vales
+givenName: Heather
+cn: Heather Vales
+uid: hvales420
+mail: hvales420@example.edu
+businessCategory:Accounting
+userPassword: password
+eduPersonAffiliation: alum
+eduPersonAffiliation: faculty
+
+dn: uid=kroberts421,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Roberts
+givenName: Karl
+cn: Karl Roberts
+uid: kroberts421
+mail: kroberts421@example.edu
+businessCategory:Purchasing
+userPassword: password
+eduPersonAffiliation: student
+
+dn: uid=bdoe422,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Doe
+givenName: Betty
+cn: Betty Doe
+uid: bdoe422
+mail: bdoe422@example.edu
+businessCategory:Engineering
+userPassword: password
+eduPersonAffiliation: faculty
+eduPersonAffiliation: alum
+
+dn: uid=dclark,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Clark
+givenName: David
+cn: David Clark
+uid: dclark
+mail: dclark@example.edu
+businessCategory:Computer Science
+userPassword: password
+eduPersonAffiliation: member
+
+dn: uid=mhenderson,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Henderson
+givenName: Michael
+cn: Michael Henderson
+uid: mhenderson
+mail: mhenderson@example.edu
+businessCategory:Purchasing
+userPassword: password
+eduPersonAffiliation: student
+eduPersonAffiliation: faculty
+
+dn: uid=dhenderson425,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Henderson
+givenName: David
+cn: David Henderson
+uid: dhenderson425
+mail: dhenderson425@example.edu
+businessCategory:Computer Science
+userPassword: password
+eduPersonAffiliation: staff
+eduPersonAffiliation: member
+
+dn: uid=dgonazles,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Gonazles
+givenName: David
+cn: David Gonazles
+uid: dgonazles
+mail: dgonazles@example.edu
+businessCategory:Financial Aid
+userPassword: password
+eduPersonAffiliation: staff
+eduPersonAffiliation: member
+
+dn: uid=dgrady427,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Grady
+givenName: David
+cn: David Grady
+uid: dgrady427
+mail: dgrady427@example.edu
+businessCategory:Computer Science
+userPassword: password
+eduPersonAffiliation: community
+
+dn: uid=jjohnson428,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Johnson
+givenName: Jennifer
+cn: Jennifer Johnson
+uid: jjohnson428
+mail: jjohnson428@example.edu
+businessCategory:Engineering
+userPassword: password
+eduPersonAffiliation: student
+eduPersonAffiliation: staff
+
+dn: uid=jlewis429,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Lewis
+givenName: Jennifer
+cn: Jennifer Lewis
+uid: jlewis429
+mail: jlewis429@example.edu
+businessCategory:Purchasing
+userPassword: password
+eduPersonAffiliation: staff
+eduPersonAffiliation: community
+
+dn: uid=klangenberg430,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Langenberg
+givenName: Kim
+cn: Kim Langenberg
+uid: klangenberg430
+mail: klangenberg430@example.edu
+businessCategory:Language Arts
+userPassword: password
+eduPersonAffiliation: staff
+
+dn: uid=ddoe431,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Doe
+givenName: David
+cn: David Doe
+uid: ddoe431
+mail: ddoe431@example.edu
+businessCategory:Language Arts
+userPassword: password
+eduPersonAffiliation: member
+
+dn: uid=escott432,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Scott
+givenName: Eric
+cn: Eric Scott
+uid: escott432
+mail: escott432@example.edu
+businessCategory:Accounting
+userPassword: password
+eduPersonAffiliation: alum
+eduPersonAffiliation: student
+
+dn: uid=lwalters,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Walters
+givenName: Lisa
+cn: Lisa Walters
+uid: lwalters
+mail: lwalters@example.edu
+businessCategory:Accounting
+userPassword: password
+eduPersonAffiliation: member
+
+dn: uid=gsmith434,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Smith
+givenName: Greg
+cn: Greg Smith
+uid: gsmith434
+mail: gsmith434@example.edu
+businessCategory:Business
+userPassword: password
+eduPersonAffiliation: staff
+eduPersonAffiliation: faculty
+
+dn: uid=kwalters,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Walters
+givenName: Karl
+cn: Karl Walters
+uid: kwalters
+mail: kwalters@example.edu
+businessCategory:Advising
+userPassword: password
+eduPersonAffiliation: alum
+eduPersonAffiliation: community
+
+dn: uid=tmorrison436,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Morrison
+givenName: Thomas
+cn: Thomas Morrison
+uid: tmorrison436
+mail: tmorrison436@example.edu
+businessCategory:Account Payable
+userPassword: password
+eduPersonAffiliation: alum
+eduPersonAffiliation: faculty
+
+dn: uid=bbutler437,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Butler
+givenName: Bill
+cn: Bill Butler
+uid: bbutler437
+mail: bbutler437@example.edu
+businessCategory:Financial Aid
+userPassword: password
+eduPersonAffiliation: staff
+eduPersonAffiliation: alum
+
+dn: uid=mgonazles438,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Gonazles
+givenName: Mark
+cn: Mark Gonazles
+uid: mgonazles438
+mail: mgonazles438@example.edu
+businessCategory:Account Payable
+userPassword: password
+eduPersonAffiliation: community
+eduPersonAffiliation: faculty
+
+dn: uid=rwalters439,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Walters
+givenName: Robert
+cn: Robert Walters
+uid: rwalters439
+mail: rwalters439@example.edu
+businessCategory:Purchasing
+userPassword: password
+eduPersonAffiliation: alum
+
+dn: uid=kclark440,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Clark
+givenName: Karl
+cn: Karl Clark
+uid: kclark440
+mail: kclark440@example.edu
+businessCategory:Engineering
+userPassword: password
+eduPersonAffiliation: staff
+
+dn: uid=nvales,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Vales
+givenName: Nancy
+cn: Nancy Vales
+uid: nvales
+mail: nvales@example.edu
+businessCategory:Account Payable
+userPassword: password
+eduPersonAffiliation: student
+eduPersonAffiliation: community
+
+dn: uid=jwalters442,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Walters
+givenName: James
+cn: James Walters
+uid: jwalters442
+mail: jwalters442@example.edu
+businessCategory:Accounting
+userPassword: password
+eduPersonAffiliation: community
+
+dn: uid=bwilliams,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Williams
+givenName: Bill
+cn: Bill Williams
+uid: bwilliams
+mail: bwilliams@example.edu
+businessCategory:Information Technology
+userPassword: password
+eduPersonAffiliation: student
+
+dn: uid=jgrady444,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Grady
+givenName: Jim
+cn: Jim Grady
+uid: jgrady444
+mail: jgrady444@example.edu
+businessCategory:Computer Science
+userPassword: password
+eduPersonAffiliation: faculty
+eduPersonAffiliation: student
+
+dn: uid=escott445,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Scott
+givenName: Erik
+cn: Erik Scott
+uid: escott445
+mail: escott445@example.edu
+businessCategory:Purchasing
+userPassword: password
+eduPersonAffiliation: student
+eduPersonAffiliation: member
+
+dn: uid=bclark446,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Clark
+givenName: Bill
+cn: Bill Clark
+uid: bclark446
+mail: bclark446@example.edu
+businessCategory:Language Arts
+userPassword: password
+eduPersonAffiliation: student
+eduPersonAffiliation: staff
+
+dn: uid=klopez447,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Lopez
+givenName: Kiersten
+cn: Kiersten Lopez
+uid: klopez447
+mail: klopez447@example.edu
+businessCategory:Engineering
+userPassword: password
+eduPersonAffiliation: faculty
+
+dn: uid=slee,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Lee
+givenName: Sarah
+cn: Sarah Lee
+uid: slee
+mail: slee@example.edu
+businessCategory:Financial Aid
+userPassword: password
+eduPersonAffiliation: community
+eduPersonAffiliation: student
+
+dn: uid=dwilliams449,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Williams
+givenName: Donna
+cn: Donna Williams
+uid: dwilliams449
+mail: dwilliams449@example.edu
+businessCategory:Language Arts
+userPassword: password
+eduPersonAffiliation: faculty
+eduPersonAffiliation: staff
+
+dn: uid=klewis450,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Lewis
+givenName: Kim
+cn: Kim Lewis
+uid: klewis450
+mail: klewis450@example.edu
+businessCategory:Physical Education
+userPassword: password
+eduPersonAffiliation: alum
+eduPersonAffiliation: faculty
+
+dn: uid=elangenberg,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Langenberg
+givenName: Eric
+cn: Eric Langenberg
+uid: elangenberg
+mail: elangenberg@example.edu
+businessCategory:Computer Science
+userPassword: password
+eduPersonAffiliation: staff
+
+dn: uid=rvales,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Vales
+givenName: Robert
+cn: Robert Vales
+uid: rvales
+mail: rvales@example.edu
+businessCategory:Accounting
+userPassword: password
+eduPersonAffiliation: member
+eduPersonAffiliation: alum
+
+dn: uid=jgasper453,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Gasper
+givenName: Jo
+cn: Jo Gasper
+uid: jgasper453
+mail: jgasper453@example.edu
+businessCategory:Computer Science
+userPassword: password
+eduPersonAffiliation: student
+eduPersonAffiliation: faculty
+
+dn: uid=mgasper454,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Gasper
+givenName: Mark
+cn: Mark Gasper
+uid: mgasper454
+mail: mgasper454@example.edu
+businessCategory:Computer Science
+userPassword: password
+eduPersonAffiliation: staff
+eduPersonAffiliation: alum
+
+dn: uid=jclark455,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Clark
+givenName: James
+cn: James Clark
+uid: jclark455
+mail: jclark455@example.edu
+businessCategory:Law
+userPassword: password
+eduPersonAffiliation: student
+
+dn: uid=bgasper456,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Gasper
+givenName: Betty
+cn: Betty Gasper
+uid: bgasper456
+mail: bgasper456@example.edu
+businessCategory:Advising
+userPassword: password
+eduPersonAffiliation: student
+eduPersonAffiliation: community
+
+dn: uid=bwilliams457,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Williams
+givenName: Blake
+cn: Blake Williams
+uid: bwilliams457
+mail: bwilliams457@example.edu
+businessCategory:Purchasing
+userPassword: password
+eduPersonAffiliation: alum
+eduPersonAffiliation: student
+
+dn: uid=kprice458,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Price
+givenName: Karl
+cn: Karl Price
+uid: kprice458
+mail: kprice458@example.edu
+businessCategory:Language Arts
+userPassword: password
+eduPersonAffiliation: faculty
+eduPersonAffiliation: student
+
+dn: uid=ksmith,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Smith
+givenName: Kiersten
+cn: Kiersten Smith
+uid: ksmith
+mail: ksmith@example.edu
+businessCategory:Language Arts
+userPassword: password
+eduPersonAffiliation: community
+
+dn: uid=lbutler460,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Butler
+givenName: Lori
+cn: Lori Butler
+uid: lbutler460
+mail: lbutler460@example.edu
+businessCategory:Advising
+userPassword: password
+eduPersonAffiliation: student
+
+dn: uid=mlewis461,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Lewis
+givenName: Mark
+cn: Mark Lewis
+uid: mlewis461
+mail: mlewis461@example.edu
+businessCategory:Computer Science
+userPassword: password
+eduPersonAffiliation: member
+
+dn: uid=jmorrison462,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Morrison
+givenName: Jo
+cn: Jo Morrison
+uid: jmorrison462
+mail: jmorrison462@example.edu
+businessCategory:Advising
+userPassword: password
+eduPersonAffiliation: alum
+eduPersonAffiliation: staff
+
+dn: uid=msmith463,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Smith
+givenName: Mary
+cn: Mary Smith
+uid: msmith463
+mail: msmith463@example.edu
+businessCategory:Law
+userPassword: password
+eduPersonAffiliation: staff
+eduPersonAffiliation: faculty
+
+dn: uid=blopez,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Lopez
+givenName: Blake
+cn: Blake Lopez
+uid: blopez
+mail: blopez@example.edu
+businessCategory:Computer Science
+userPassword: password
+eduPersonAffiliation: community
+
+dn: uid=hdavis,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Davis
+givenName: Heather
+cn: Heather Davis
+uid: hdavis
+mail: hdavis@example.edu
+businessCategory:Accounting
+userPassword: password
+eduPersonAffiliation: community
+eduPersonAffiliation: student
+
+dn: uid=bwilliams466,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Williams
+givenName: Betty
+cn: Betty Williams
+uid: bwilliams466
+mail: bwilliams466@example.edu
+businessCategory:Business
+userPassword: password
+eduPersonAffiliation: alum
+
+dn: uid=gdavis,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Davis
+givenName: Greg
+cn: Greg Davis
+uid: gdavis
+mail: gdavis@example.edu
+businessCategory:Accounting
+userPassword: password
+eduPersonAffiliation: faculty
+
+dn: uid=mgonazles468,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Gonazles
+givenName: Michael
+cn: Michael Gonazles
+uid: mgonazles468
+mail: mgonazles468@example.edu
+businessCategory:Advising
+userPassword: password
+eduPersonAffiliation: student
+
+dn: uid=mlopez469,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Lopez
+givenName: Mary
+cn: Mary Lopez
+uid: mlopez469
+mail: mlopez469@example.edu
+businessCategory:Accounting
+userPassword: password
+eduPersonAffiliation: member
+
+dn: uid=eroberts470,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Roberts
+givenName: Eric
+cn: Eric Roberts
+uid: eroberts470
+mail: eroberts470@example.edu
+businessCategory:Accounting
+userPassword: password
+eduPersonAffiliation: student
+eduPersonAffiliation: staff
+
+dn: uid=bsmith471,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Smith
+givenName: Blake
+cn: Blake Smith
+uid: bsmith471
+mail: bsmith471@example.edu
+businessCategory:Law
+userPassword: password
+eduPersonAffiliation: alum
+eduPersonAffiliation: faculty
+
+dn: uid=rwilliams472,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Williams
+givenName: Robert
+cn: Robert Williams
+uid: rwilliams472
+mail: rwilliams472@example.edu
+businessCategory:Advising
+userPassword: password
+eduPersonAffiliation: staff
+eduPersonAffiliation: alum
+
+dn: uid=jdavis,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Davis
+givenName: Jennifer
+cn: Jennifer Davis
+uid: jdavis
+mail: jdavis@example.edu
+businessCategory:Accounting
+userPassword: password
+eduPersonAffiliation: staff
+
+dn: uid=egrady,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Grady
+givenName: Erik
+cn: Erik Grady
+uid: egrady
+mail: egrady@example.edu
+businessCategory:Language Arts
+userPassword: password
+eduPersonAffiliation: student
+
+dn: uid=dpeterson475,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Peterson
+givenName: Donna
+cn: Donna Peterson
+uid: dpeterson475
+mail: dpeterson475@example.edu
+businessCategory:Accounting
+userPassword: password
+eduPersonAffiliation: staff
+
+dn: uid=lwilliams476,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Williams
+givenName: Lisa
+cn: Lisa Williams
+uid: lwilliams476
+mail: lwilliams476@example.edu
+businessCategory:Computer Science
+userPassword: password
+eduPersonAffiliation: student
+
+dn: uid=eroberts477,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Roberts
+givenName: Erik
+cn: Erik Roberts
+uid: eroberts477
+mail: eroberts477@example.edu
+businessCategory:Purchasing
+userPassword: password
+eduPersonAffiliation: alum
+eduPersonAffiliation: student
+
+dn: uid=pvales,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Vales
+givenName: Paul
+cn: Paul Vales
+uid: pvales
+mail: pvales@example.edu
+businessCategory:Account Payable
+userPassword: password
+eduPersonAffiliation: staff
+eduPersonAffiliation: student
+
+dn: uid=jscott479,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Scott
+givenName: Jim
+cn: Jim Scott
+uid: jscott479
+mail: jscott479@example.edu
+businessCategory:Purchasing
+userPassword: password
+eduPersonAffiliation: faculty
+eduPersonAffiliation: staff
+
+dn: uid=bdavis480,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Davis
+givenName: Betty
+cn: Betty Davis
+uid: bdavis480
+mail: bdavis480@example.edu
+businessCategory:Account Payable
+userPassword: password
+eduPersonAffiliation: alum
+
+dn: uid=jgrady481,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Grady
+givenName: Jim
+cn: Jim Grady
+uid: jgrady481
+mail: jgrady481@example.edu
+businessCategory:Computer Science
+userPassword: password
+eduPersonAffiliation: alum
+eduPersonAffiliation: member
+
+dn: uid=nbrown482,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Brown
+givenName: Nancy
+cn: Nancy Brown
+uid: nbrown482
+mail: nbrown482@example.edu
+businessCategory:Physical Education
+userPassword: password
+eduPersonAffiliation: community
+eduPersonAffiliation: faculty
+
+dn: uid=blee483,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Lee
+givenName: Betty
+cn: Betty Lee
+uid: blee483
+mail: blee483@example.edu
+businessCategory:Law
+userPassword: password
+eduPersonAffiliation: community
+
+dn: uid=jclark484,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Clark
+givenName: Jim
+cn: Jim Clark
+uid: jclark484
+mail: jclark484@example.edu
+businessCategory:Accounting
+userPassword: password
+eduPersonAffiliation: community
+
+dn: uid=dbrown,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Brown
+givenName: David
+cn: David Brown
+uid: dbrown
+mail: dbrown@example.edu
+businessCategory:Law
+userPassword: password
+eduPersonAffiliation: community
+
+dn: uid=pgonazles,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Gonazles
+givenName: Paul
+cn: Paul Gonazles
+uid: pgonazles
+mail: pgonazles@example.edu
+businessCategory:Account Payable
+userPassword: password
+eduPersonAffiliation: alum
+
+dn: uid=mwhite487,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: White
+givenName: Mark
+cn: Mark White
+uid: mwhite487
+mail: mwhite487@example.edu
+businessCategory:Engineering
+userPassword: password
+eduPersonAffiliation: alum
+
+dn: uid=svales488,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Vales
+givenName: Sarah
+cn: Sarah Vales
+uid: svales488
+mail: svales488@example.edu
+businessCategory:Accounting
+userPassword: password
+eduPersonAffiliation: community
+
+dn: uid=egasper489,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Gasper
+givenName: Eric
+cn: Eric Gasper
+uid: egasper489
+mail: egasper489@example.edu
+businessCategory:Language Arts
+userPassword: password
+eduPersonAffiliation: community
+eduPersonAffiliation: staff
+
+dn: uid=kdoe490,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Doe
+givenName: Kim
+cn: Kim Doe
+uid: kdoe490
+mail: kdoe490@example.edu
+businessCategory:Financial Aid
+userPassword: password
+eduPersonAffiliation: community
+
+dn: uid=bmorrison491,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Morrison
+givenName: Bill
+cn: Bill Morrison
+uid: bmorrison491
+mail: bmorrison491@example.edu
+businessCategory:Advising
+userPassword: password
+eduPersonAffiliation: member
+
+dn: uid=lvales,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Vales
+givenName: Lori
+cn: Lori Vales
+uid: lvales
+mail: lvales@example.edu
+businessCategory:Physical Education
+userPassword: password
+eduPersonAffiliation: alum
+eduPersonAffiliation: community
+
+dn: uid=hdavis493,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Davis
+givenName: Heather
+cn: Heather Davis
+uid: hdavis493
+mail: hdavis493@example.edu
+businessCategory:Language Arts
+userPassword: password
+eduPersonAffiliation: student
+
+dn: uid=jthompson494,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Thompson
+givenName: James
+cn: James Thompson
+uid: jthompson494
+mail: jthompson494@example.edu
+businessCategory:Information Technology
+userPassword: password
+eduPersonAffiliation: alum
+
+dn: uid=kdoe495,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Doe
+givenName: Karl
+cn: Karl Doe
+uid: kdoe495
+mail: kdoe495@example.edu
+businessCategory:Physical Education
+userPassword: password
+eduPersonAffiliation: faculty
+
+dn: uid=kwilliams496,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Williams
+givenName: Kim
+cn: Kim Williams
+uid: kwilliams496
+mail: kwilliams496@example.edu
+businessCategory:Advising
+userPassword: password
+eduPersonAffiliation: alum
+
+dn: uid=egasper497,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Gasper
+givenName: Erik
+cn: Erik Gasper
+uid: egasper497
+mail: egasper497@example.edu
+businessCategory:Computer Science
+userPassword: password
+eduPersonAffiliation: staff
+eduPersonAffiliation: member
+
+dn: uid=pvales498,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Vales
+givenName: Paul
+cn: Paul Vales
+uid: pvales498
+mail: pvales498@example.edu
+businessCategory:Purchasing
+userPassword: password
+eduPersonAffiliation: staff
+eduPersonAffiliation: faculty
+
+dn: uid=sscott,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Scott
+givenName: Sarah
+cn: Sarah Scott
+uid: sscott
+mail: sscott@example.edu
+businessCategory:Financial Aid
+userPassword: password
+eduPersonAffiliation: member
+
+dn: uid=tmartinez,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Martinez
+givenName: Thomas
+cn: Thomas Martinez
+uid: tmartinez
+mail: tmartinez@example.edu
+businessCategory:Information Technology
+userPassword: password
+eduPersonAffiliation: community
+
+dn: uid=mvales501,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Vales
+givenName: Marie
+cn: Marie Vales
+uid: mvales501
+mail: mvales501@example.edu
+businessCategory:Information Technology
+userPassword: password
+eduPersonAffiliation: student
+eduPersonAffiliation: staff
+
+dn: uid=mhenderson502,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Henderson
+givenName: Mark
+cn: Mark Henderson
+uid: mhenderson502
+mail: mhenderson502@example.edu
+businessCategory:Account Payable
+userPassword: password
+eduPersonAffiliation: member
+eduPersonAffiliation: community
+
+dn: uid=mdavis503,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Davis
+givenName: Mark
+cn: Mark Davis
+uid: mdavis503
+mail: mdavis503@example.edu
+businessCategory:Law
+userPassword: password
+eduPersonAffiliation: staff
+eduPersonAffiliation: member
+
+dn: uid=mdoe504,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Doe
+givenName: Mary
+cn: Mary Doe
+uid: mdoe504
+mail: mdoe504@example.edu
+businessCategory:Account Payable
+userPassword: password
+eduPersonAffiliation: community
+eduPersonAffiliation: staff
+
+dn: uid=bgrady505,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Grady
+givenName: Betty
+cn: Betty Grady
+uid: bgrady505
+mail: bgrady505@example.edu
+businessCategory:Information Technology
+userPassword: password
+eduPersonAffiliation: alum
+
+dn: uid=mmartinez506,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Martinez
+givenName: Michael
+cn: Michael Martinez
+uid: mmartinez506
+mail: mmartinez506@example.edu
+businessCategory:Account Payable
+userPassword: password
+eduPersonAffiliation: student
+eduPersonAffiliation: community
+
+dn: uid=bwalters,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Walters
+givenName: Betty
+cn: Betty Walters
+uid: bwalters
+mail: bwalters@example.edu
+businessCategory:Physical Education
+userPassword: password
+eduPersonAffiliation: community
+eduPersonAffiliation: student
+
+dn: uid=avales508,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Vales
+givenName: Ann
+cn: Ann Vales
+uid: avales508
+mail: avales508@example.edu
+businessCategory:Engineering
+userPassword: password
+eduPersonAffiliation: alum
+
+dn: uid=dlangenberg509,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Langenberg
+givenName: David
+cn: David Langenberg
+uid: dlangenberg509
+mail: dlangenberg509@example.edu
+businessCategory:Account Payable
+userPassword: password
+eduPersonAffiliation: member
+
+dn: uid=tlopez,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Lopez
+givenName: Thomas
+cn: Thomas Lopez
+uid: tlopez
+mail: tlopez@example.edu
+businessCategory:Information Technology
+userPassword: password
+eduPersonAffiliation: staff
+eduPersonAffiliation: faculty
+
+dn: uid=lclark511,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Clark
+givenName: Lisa
+cn: Lisa Clark
+uid: lclark511
+mail: lclark511@example.edu
+businessCategory:Financial Aid
+userPassword: password
+eduPersonAffiliation: member
+
+dn: uid=panderson,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Anderson
+givenName: Paul
+cn: Paul Anderson
+uid: panderson
+mail: panderson@example.edu
+businessCategory:Financial Aid
+userPassword: password
+eduPersonAffiliation: alum
+
+dn: uid=bjohnson513,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Johnson
+givenName: Bill
+cn: Bill Johnson
+uid: bjohnson513
+mail: bjohnson513@example.edu
+businessCategory:Purchasing
+userPassword: password
+eduPersonAffiliation: community
+eduPersonAffiliation: member
+
+dn: uid=wlopez,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Lopez
+givenName: William
+cn: William Lopez
+uid: wlopez
+mail: wlopez@example.edu
+businessCategory:Engineering
+userPassword: password
+eduPersonAffiliation: faculty
+
+dn: uid=tmartinez515,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Martinez
+givenName: Thomas
+cn: Thomas Martinez
+uid: tmartinez515
+mail: tmartinez515@example.edu
+businessCategory:Account Payable
+userPassword: password
+eduPersonAffiliation: member
+eduPersonAffiliation: alum
+
+dn: uid=wclark,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Clark
+givenName: William
+cn: William Clark
+uid: wclark
+mail: wclark@example.edu
+businessCategory:Purchasing
+userPassword: password
+eduPersonAffiliation: community
+
+dn: uid=jwilliams517,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Williams
+givenName: Jim
+cn: Jim Williams
+uid: jwilliams517
+mail: jwilliams517@example.edu
+businessCategory:Information Technology
+userPassword: password
+eduPersonAffiliation: member
+eduPersonAffiliation: staff
+
+dn: uid=hwilliams,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Williams
+givenName: Heather
+cn: Heather Williams
+uid: hwilliams
+mail: hwilliams@example.edu
+businessCategory:Advising
+userPassword: password
+eduPersonAffiliation: student
+eduPersonAffiliation: member
+
+dn: uid=llopez519,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Lopez
+givenName: Lori
+cn: Lori Lopez
+uid: llopez519
+mail: llopez519@example.edu
+businessCategory:Financial Aid
+userPassword: password
+eduPersonAffiliation: alum
+eduPersonAffiliation: student
+
+dn: uid=klopez520,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Lopez
+givenName: Karoline
+cn: Karoline Lopez
+uid: klopez520
+mail: klopez520@example.edu
+businessCategory:Business
+userPassword: password
+eduPersonAffiliation: student
+
+dn: uid=tlee,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Lee
+givenName: Thomas
+cn: Thomas Lee
+uid: tlee
+mail: tlee@example.edu
+businessCategory:Financial Aid
+userPassword: password
+eduPersonAffiliation: student
+
+dn: uid=mscott522,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Scott
+givenName: Mary
+cn: Mary Scott
+uid: mscott522
+mail: mscott522@example.edu
+businessCategory:Financial Aid
+userPassword: password
+eduPersonAffiliation: member
+
+dn: uid=danderson523,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Anderson
+givenName: David
+cn: David Anderson
+uid: danderson523
+mail: danderson523@example.edu
+businessCategory:Advising
+userPassword: password
+eduPersonAffiliation: faculty
+
+dn: uid=jgonazles524,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Gonazles
+givenName: Jim
+cn: Jim Gonazles
+uid: jgonazles524
+mail: jgonazles524@example.edu
+businessCategory:Purchasing
+userPassword: password
+eduPersonAffiliation: community
+
+dn: uid=hgasper,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Gasper
+givenName: Heather
+cn: Heather Gasper
+uid: hgasper
+mail: hgasper@example.edu
+businessCategory:Purchasing
+userPassword: password
+eduPersonAffiliation: alum
+eduPersonAffiliation: member
+
+dn: uid=ehenderson,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Henderson
+givenName: Eric
+cn: Eric Henderson
+uid: ehenderson
+mail: ehenderson@example.edu
+businessCategory:Accounting
+userPassword: password
+eduPersonAffiliation: community
+eduPersonAffiliation: member
+
+dn: uid=bscott527,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Scott
+givenName: Bill
+cn: Bill Scott
+uid: bscott527
+mail: bscott527@example.edu
+businessCategory:Business
+userPassword: password
+eduPersonAffiliation: member
+eduPersonAffiliation: alum
+
+dn: uid=ewhite,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: White
+givenName: Eric
+cn: Eric White
+uid: ewhite
+mail: ewhite@example.edu
+businessCategory:Purchasing
+userPassword: password
+eduPersonAffiliation: staff
+
+dn: uid=sroberts,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Roberts
+givenName: Sarah
+cn: Sarah Roberts
+uid: sroberts
+mail: sroberts@example.edu
+businessCategory:Language Arts
+userPassword: password
+eduPersonAffiliation: community
+
+dn: uid=pbutler,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Butler
+givenName: Paul
+cn: Paul Butler
+uid: pbutler
+mail: pbutler@example.edu
+businessCategory:Computer Science
+userPassword: password
+eduPersonAffiliation: alum
+
+dn: uid=gdavis531,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Davis
+givenName: Greg
+cn: Greg Davis
+uid: gdavis531
+mail: gdavis531@example.edu
+businessCategory:Information Technology
+userPassword: password
+eduPersonAffiliation: community
+eduPersonAffiliation: student
+
+dn: uid=wjohnson532,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Johnson
+givenName: William
+cn: William Johnson
+uid: wjohnson532
+mail: wjohnson532@example.edu
+businessCategory:Purchasing
+userPassword: password
+eduPersonAffiliation: community
+eduPersonAffiliation: student
+
+dn: uid=escott533,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Scott
+givenName: Eric
+cn: Eric Scott
+uid: escott533
+mail: escott533@example.edu
+businessCategory:Business
+userPassword: password
+eduPersonAffiliation: staff
+eduPersonAffiliation: alum
+
+dn: uid=kmartinez534,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Martinez
+givenName: Karl
+cn: Karl Martinez
+uid: kmartinez534
+mail: kmartinez534@example.edu
+businessCategory:Engineering
+userPassword: password
+eduPersonAffiliation: staff
+
+dn: uid=kbrown535,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Brown
+givenName: Kiersten
+cn: Kiersten Brown
+uid: kbrown535
+mail: kbrown535@example.edu
+businessCategory:Accounting
+userPassword: password
+eduPersonAffiliation: alum
+eduPersonAffiliation: faculty
+
+dn: uid=jlangenberg536,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Langenberg
+givenName: John
+cn: John Langenberg
+uid: jlangenberg536
+mail: jlangenberg536@example.edu
+businessCategory:Computer Science
+userPassword: password
+eduPersonAffiliation: alum
+
+dn: uid=gdavis537,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Davis
+givenName: Greg
+cn: Greg Davis
+uid: gdavis537
+mail: gdavis537@example.edu
+businessCategory:Engineering
+userPassword: password
+eduPersonAffiliation: member
+
+dn: uid=wdoe,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Doe
+givenName: William
+cn: William Doe
+uid: wdoe
+mail: wdoe@example.edu
+businessCategory:Business
+userPassword: password
+eduPersonAffiliation: staff
+eduPersonAffiliation: faculty
+
+dn: uid=kthompson539,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Thompson
+givenName: Kiersten
+cn: Kiersten Thompson
+uid: kthompson539
+mail: kthompson539@example.edu
+businessCategory:Computer Science
+userPassword: password
+eduPersonAffiliation: faculty
+eduPersonAffiliation: staff
+
+dn: uid=ldavis540,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Davis
+givenName: Lisa
+cn: Lisa Davis
+uid: ldavis540
+mail: ldavis540@example.edu
+businessCategory:Computer Science
+userPassword: password
+eduPersonAffiliation: alum
+eduPersonAffiliation: member
+
+dn: uid=bmartinez,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Martinez
+givenName: Blake
+cn: Blake Martinez
+uid: bmartinez
+mail: bmartinez@example.edu
+businessCategory:Business
+userPassword: password
+eduPersonAffiliation: student
+eduPersonAffiliation: community
+
+dn: uid=lroberts542,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Roberts
+givenName: Lisa
+cn: Lisa Roberts
+uid: lroberts542
+mail: lroberts542@example.edu
+businessCategory:Language Arts
+userPassword: password
+eduPersonAffiliation: student
+eduPersonAffiliation: staff
+
+dn: uid=ksmith543,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Smith
+givenName: Karl
+cn: Karl Smith
+uid: ksmith543
+mail: ksmith543@example.edu
+businessCategory:Advising
+userPassword: password
+eduPersonAffiliation: member
+eduPersonAffiliation: staff
+
+dn: uid=jclark544,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Clark
+givenName: John
+cn: John Clark
+uid: jclark544
+mail: jclark544@example.edu
+businessCategory:Information Technology
+userPassword: password
+eduPersonAffiliation: member
+
+dn: uid=jbutler545,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Butler
+givenName: Jennifer
+cn: Jennifer Butler
+uid: jbutler545
+mail: jbutler545@example.edu
+businessCategory:Law
+userPassword: password
+eduPersonAffiliation: faculty
+eduPersonAffiliation: alum
+
+dn: uid=jgrady546,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Grady
+givenName: John
+cn: John Grady
+uid: jgrady546
+mail: jgrady546@example.edu
+businessCategory:Engineering
+userPassword: password
+eduPersonAffiliation: community
+eduPersonAffiliation: student
+
+dn: uid=jlee547,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Lee
+givenName: Jennifer
+cn: Jennifer Lee
+uid: jlee547
+mail: jlee547@example.edu
+businessCategory:Information Technology
+userPassword: password
+eduPersonAffiliation: alum
+
+dn: uid=csmith,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Smith
+givenName: Colin
+cn: Colin Smith
+uid: csmith
+mail: csmith@example.edu
+businessCategory:Accounting
+userPassword: password
+eduPersonAffiliation: staff
+
+dn: uid=tpeterson,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Peterson
+givenName: Thomas
+cn: Thomas Peterson
+uid: tpeterson
+mail: tpeterson@example.edu
+businessCategory:Financial Aid
+userPassword: password
+eduPersonAffiliation: community
+
+dn: uid=mgonazles550,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Gonazles
+givenName: Marie
+cn: Marie Gonazles
+uid: mgonazles550
+mail: mgonazles550@example.edu
+businessCategory:Law
+userPassword: password
+eduPersonAffiliation: community
+
+dn: uid=bwhite551,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: White
+givenName: Bill
+cn: Bill White
+uid: bwhite551
+mail: bwhite551@example.edu
+businessCategory:Accounting
+userPassword: password
+eduPersonAffiliation: member
+
+dn: uid=nhenderson552,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Henderson
+givenName: Nancy
+cn: Nancy Henderson
+uid: nhenderson552
+mail: nhenderson552@example.edu
+businessCategory:Business
+userPassword: password
+eduPersonAffiliation: faculty
+eduPersonAffiliation: alum
+
+dn: uid=blewis553,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Lewis
+givenName: Bill
+cn: Bill Lewis
+uid: blewis553
+mail: blewis553@example.edu
+businessCategory:Physical Education
+userPassword: password
+eduPersonAffiliation: student
+
+dn: uid=mjohnson554,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Johnson
+givenName: Michael
+cn: Michael Johnson
+uid: mjohnson554
+mail: mjohnson554@example.edu
+businessCategory:Engineering
+userPassword: password
+eduPersonAffiliation: member
+
+dn: uid=ganderson555,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Anderson
+givenName: Greg
+cn: Greg Anderson
+uid: ganderson555
+mail: ganderson555@example.edu
+businessCategory:Information Technology
+userPassword: password
+eduPersonAffiliation: community
+eduPersonAffiliation: alum
+
+dn: uid=slewis556,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Lewis
+givenName: Sarah
+cn: Sarah Lewis
+uid: slewis556
+mail: slewis556@example.edu
+businessCategory:Purchasing
+userPassword: password
+eduPersonAffiliation: student
+eduPersonAffiliation: faculty
+
+dn: uid=dvales557,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Vales
+givenName: Donna
+cn: Donna Vales
+uid: dvales557
+mail: dvales557@example.edu
+businessCategory:Physical Education
+userPassword: password
+eduPersonAffiliation: alum
+
+dn: uid=jlopez558,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Lopez
+givenName: John
+cn: John Lopez
+uid: jlopez558
+mail: jlopez558@example.edu
+businessCategory:Computer Science
+userPassword: password
+eduPersonAffiliation: student
+
+dn: uid=kmartinez559,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Martinez
+givenName: Karl
+cn: Karl Martinez
+uid: kmartinez559
+mail: kmartinez559@example.edu
+businessCategory:Language Arts
+userPassword: password
+eduPersonAffiliation: staff
+
+dn: uid=kthompson560,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Thompson
+givenName: Karl
+cn: Karl Thompson
+uid: kthompson560
+mail: kthompson560@example.edu
+businessCategory:Information Technology
+userPassword: password
+eduPersonAffiliation: faculty
+
+dn: uid=kroberts561,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Roberts
+givenName: Karoline
+cn: Karoline Roberts
+uid: kroberts561
+mail: kroberts561@example.edu
+businessCategory:Accounting
+userPassword: password
+eduPersonAffiliation: faculty
+eduPersonAffiliation: member
+
+dn: uid=mbrown562,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Brown
+givenName: Mary
+cn: Mary Brown
+uid: mbrown562
+mail: mbrown562@example.edu
+businessCategory:Business
+userPassword: password
+eduPersonAffiliation: alum
+
+dn: uid=blopez563,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Lopez
+givenName: Betty
+cn: Betty Lopez
+uid: blopez563
+mail: blopez563@example.edu
+businessCategory:Advising
+userPassword: password
+eduPersonAffiliation: student
+eduPersonAffiliation: faculty
+
+dn: uid=jroberts564,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Roberts
+givenName: Jo
+cn: Jo Roberts
+uid: jroberts564
+mail: jroberts564@example.edu
+businessCategory:Information Technology
+userPassword: password
+eduPersonAffiliation: staff
+eduPersonAffiliation: member
+
+dn: uid=jlopez565,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Lopez
+givenName: Jennifer
+cn: Jennifer Lopez
+uid: jlopez565
+mail: jlopez565@example.edu
+businessCategory:Advising
+userPassword: password
+eduPersonAffiliation: student
+eduPersonAffiliation: faculty
+
+dn: uid=bwalters566,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Walters
+givenName: Blake
+cn: Blake Walters
+uid: bwalters566
+mail: bwalters566@example.edu
+businessCategory:Account Payable
+userPassword: password
+eduPersonAffiliation: community
+
+dn: uid=kvales567,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Vales
+givenName: Karoline
+cn: Karoline Vales
+uid: kvales567
+mail: kvales567@example.edu
+businessCategory:Engineering
+userPassword: password
+eduPersonAffiliation: member
+eduPersonAffiliation: alum
+
+dn: uid=mlopez568,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Lopez
+givenName: Michael
+cn: Michael Lopez
+uid: mlopez568
+mail: mlopez568@example.edu
+businessCategory:Computer Science
+userPassword: password
+eduPersonAffiliation: alum
+eduPersonAffiliation: community
+
+dn: uid=tmorrison569,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Morrison
+givenName: Thomas
+cn: Thomas Morrison
+uid: tmorrison569
+mail: tmorrison569@example.edu
+businessCategory:Advising
+userPassword: password
+eduPersonAffiliation: staff
+eduPersonAffiliation: faculty
+
+dn: uid=bdavis570,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Davis
+givenName: Blake
+cn: Blake Davis
+uid: bdavis570
+mail: bdavis570@example.edu
+businessCategory:Law
+userPassword: password
+eduPersonAffiliation: student
+
+dn: uid=sdavis,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Davis
+givenName: Sarah
+cn: Sarah Davis
+uid: sdavis
+mail: sdavis@example.edu
+businessCategory:Language Arts
+userPassword: password
+eduPersonAffiliation: staff
+eduPersonAffiliation: faculty
+
+dn: uid=banderson572,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Anderson
+givenName: Blake
+cn: Blake Anderson
+uid: banderson572
+mail: banderson572@example.edu
+businessCategory:Business
+userPassword: password
+eduPersonAffiliation: community
+eduPersonAffiliation: alum
+
+dn: uid=wanderson,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Anderson
+givenName: William
+cn: William Anderson
+uid: wanderson
+mail: wanderson@example.edu
+businessCategory:Computer Science
+userPassword: password
+eduPersonAffiliation: community
+eduPersonAffiliation: member
+
+dn: uid=bprice574,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Price
+givenName: Bill
+cn: Bill Price
+uid: bprice574
+mail: bprice574@example.edu
+businessCategory:Advising
+userPassword: password
+eduPersonAffiliation: staff
+
+dn: uid=jbutler575,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Butler
+givenName: Jennifer
+cn: Jennifer Butler
+uid: jbutler575
+mail: jbutler575@example.edu
+businessCategory:Account Payable
+userPassword: password
+eduPersonAffiliation: community
+eduPersonAffiliation: student
+
+dn: uid=jscott576,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Scott
+givenName: Jennifer
+cn: Jennifer Scott
+uid: jscott576
+mail: jscott576@example.edu
+businessCategory:Purchasing
+userPassword: password
+eduPersonAffiliation: staff
+
+dn: uid=ddoe577,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Doe
+givenName: David
+cn: David Doe
+uid: ddoe577
+mail: ddoe577@example.edu
+businessCategory:Financial Aid
+userPassword: password
+eduPersonAffiliation: community
+eduPersonAffiliation: member
+
+dn: uid=tdavis578,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Davis
+givenName: Thomas
+cn: Thomas Davis
+uid: tdavis578
+mail: tdavis578@example.edu
+businessCategory:Language Arts
+userPassword: password
+eduPersonAffiliation: alum
+eduPersonAffiliation: community
+
+dn: uid=slangenberg579,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Langenberg
+givenName: Sarah
+cn: Sarah Langenberg
+uid: slangenberg579
+mail: slangenberg579@example.edu
+businessCategory:Advising
+userPassword: password
+eduPersonAffiliation: faculty
+eduPersonAffiliation: community
+
+dn: uid=bvales580,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Vales
+givenName: Betty
+cn: Betty Vales
+uid: bvales580
+mail: bvales580@example.edu
+businessCategory:Engineering
+userPassword: password
+eduPersonAffiliation: staff
+
+dn: uid=lpeterson581,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Peterson
+givenName: Lori
+cn: Lori Peterson
+uid: lpeterson581
+mail: lpeterson581@example.edu
+businessCategory:Information Technology
+userPassword: password
+eduPersonAffiliation: alum
+
+dn: uid=bmartinez582,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Martinez
+givenName: Blake
+cn: Blake Martinez
+uid: bmartinez582
+mail: bmartinez582@example.edu
+businessCategory:Business
+userPassword: password
+eduPersonAffiliation: faculty
+eduPersonAffiliation: alum
+
+dn: uid=asmith583,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Smith
+givenName: Ann
+cn: Ann Smith
+uid: asmith583
+mail: asmith583@example.edu
+businessCategory:Accounting
+userPassword: password
+eduPersonAffiliation: faculty
+
+dn: uid=aprice,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Price
+givenName: Ann
+cn: Ann Price
+uid: aprice
+mail: aprice@example.edu
+businessCategory:Computer Science
+userPassword: password
+eduPersonAffiliation: staff
+eduPersonAffiliation: alum
+
+dn: uid=ehenderson585,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Henderson
+givenName: Eric
+cn: Eric Henderson
+uid: ehenderson585
+mail: ehenderson585@example.edu
+businessCategory:Business
+userPassword: password
+eduPersonAffiliation: member
+eduPersonAffiliation: student
+
+dn: uid=lmorrison586,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Morrison
+givenName: Lisa
+cn: Lisa Morrison
+uid: lmorrison586
+mail: lmorrison586@example.edu
+businessCategory:Purchasing
+userPassword: password
+eduPersonAffiliation: alum
+
+dn: uid=chenderson,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Henderson
+givenName: Colin
+cn: Colin Henderson
+uid: chenderson
+mail: chenderson@example.edu
+businessCategory:Accounting
+userPassword: password
+eduPersonAffiliation: student
+eduPersonAffiliation: staff
+
+dn: uid=lbrown,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Brown
+givenName: Lori
+cn: Lori Brown
+uid: lbrown
+mail: lbrown@example.edu
+businessCategory:Language Arts
+userPassword: password
+eduPersonAffiliation: staff
+
+dn: uid=psmith,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Smith
+givenName: Paul
+cn: Paul Smith
+uid: psmith
+mail: psmith@example.edu
+businessCategory:Advising
+userPassword: password
+eduPersonAffiliation: member
+eduPersonAffiliation: community
+
+dn: uid=klee590,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Lee
+givenName: Karl
+cn: Karl Lee
+uid: klee590
+mail: klee590@example.edu
+businessCategory:Language Arts
+userPassword: password
+eduPersonAffiliation: member
+eduPersonAffiliation: faculty
+
+dn: uid=kdoe591,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Doe
+givenName: Karl
+cn: Karl Doe
+uid: kdoe591
+mail: kdoe591@example.edu
+businessCategory:Law
+userPassword: password
+eduPersonAffiliation: community
+eduPersonAffiliation: student
+
+dn: uid=ldoe592,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Doe
+givenName: Lisa
+cn: Lisa Doe
+uid: ldoe592
+mail: ldoe592@example.edu
+businessCategory:Information Technology
+userPassword: password
+eduPersonAffiliation: alum
+eduPersonAffiliation: member
+
+dn: uid=mvales593,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Vales
+givenName: Marie
+cn: Marie Vales
+uid: mvales593
+mail: mvales593@example.edu
+businessCategory:Physical Education
+userPassword: password
+eduPersonAffiliation: student
+
+dn: uid=ahenderson594,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Henderson
+givenName: Ann
+cn: Ann Henderson
+uid: ahenderson594
+mail: ahenderson594@example.edu
+businessCategory:Physical Education
+userPassword: password
+eduPersonAffiliation: faculty
+eduPersonAffiliation: alum
+
+dn: uid=aroberts,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Roberts
+givenName: Ann
+cn: Ann Roberts
+uid: aroberts
+mail: aroberts@example.edu
+businessCategory:Business
+userPassword: password
+eduPersonAffiliation: community
+
+dn: uid=dthompson,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Thompson
+givenName: David
+cn: David Thompson
+uid: dthompson
+mail: dthompson@example.edu
+businessCategory:Language Arts
+userPassword: password
+eduPersonAffiliation: student
+
+dn: uid=dbrown597,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Brown
+givenName: Donna
+cn: Donna Brown
+uid: dbrown597
+mail: dbrown597@example.edu
+businessCategory:Account Payable
+userPassword: password
+eduPersonAffiliation: faculty
+
+dn: uid=tmartinez598,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Martinez
+givenName: Thomas
+cn: Thomas Martinez
+uid: tmartinez598
+mail: tmartinez598@example.edu
+businessCategory:Purchasing
+userPassword: password
+eduPersonAffiliation: student
+
+dn: uid=kbrown599,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Brown
+givenName: Karl
+cn: Karl Brown
+uid: kbrown599
+mail: kbrown599@example.edu
+businessCategory:Account Payable
+userPassword: password
+eduPersonAffiliation: member
+
+dn: uid=pclark600,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Clark
+givenName: Paul
+cn: Paul Clark
+uid: pclark600
+mail: pclark600@example.edu
+businessCategory:Computer Science
+userPassword: password
+eduPersonAffiliation: member
+eduPersonAffiliation: student
+
+dn: uid=mprice601,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Price
+givenName: Michael
+cn: Michael Price
+uid: mprice601
+mail: mprice601@example.edu
+businessCategory:Language Arts
+userPassword: password
+eduPersonAffiliation: community
+eduPersonAffiliation: staff
+
+dn: uid=lbutler602,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Butler
+givenName: Lisa
+cn: Lisa Butler
+uid: lbutler602
+mail: lbutler602@example.edu
+businessCategory:Financial Aid
+userPassword: password
+eduPersonAffiliation: staff
+
+dn: uid=jhenderson603,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Henderson
+givenName: Jennifer
+cn: Jennifer Henderson
+uid: jhenderson603
+mail: jhenderson603@example.edu
+businessCategory:Financial Aid
+userPassword: password
+eduPersonAffiliation: faculty
+
+dn: uid=kscott604,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Scott
+givenName: Karoline
+cn: Karoline Scott
+uid: kscott604
+mail: kscott604@example.edu
+businessCategory:Language Arts
+userPassword: password
+eduPersonAffiliation: student
+
+dn: uid=ddoe605,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Doe
+givenName: David
+cn: David Doe
+uid: ddoe605
+mail: ddoe605@example.edu
+businessCategory:Purchasing
+userPassword: password
+eduPersonAffiliation: faculty
+eduPersonAffiliation: alum
+
+dn: uid=djohnson606,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Johnson
+givenName: David
+cn: David Johnson
+uid: djohnson606
+mail: djohnson606@example.edu
+businessCategory:Accounting
+userPassword: password
+eduPersonAffiliation: community
+eduPersonAffiliation: faculty
+
+dn: uid=pbutler607,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Butler
+givenName: Paul
+cn: Paul Butler
+uid: pbutler607
+mail: pbutler607@example.edu
+businessCategory:Account Payable
+userPassword: password
+eduPersonAffiliation: member
+
+dn: uid=jbutler608,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Butler
+givenName: Jennifer
+cn: Jennifer Butler
+uid: jbutler608
+mail: jbutler608@example.edu
+businessCategory:Physical Education
+userPassword: password
+eduPersonAffiliation: community
+eduPersonAffiliation: student
+
+dn: uid=ksmith609,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Smith
+givenName: Kim
+cn: Kim Smith
+uid: ksmith609
+mail: ksmith609@example.edu
+businessCategory:Information Technology
+userPassword: password
+eduPersonAffiliation: member
+
+dn: uid=jpeterson610,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Peterson
+givenName: James
+cn: James Peterson
+uid: jpeterson610
+mail: jpeterson610@example.edu
+businessCategory:Account Payable
+userPassword: password
+eduPersonAffiliation: community
+eduPersonAffiliation: faculty
+
+dn: uid=kbutler611,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Butler
+givenName: Karl
+cn: Karl Butler
+uid: kbutler611
+mail: kbutler611@example.edu
+businessCategory:Advising
+userPassword: password
+eduPersonAffiliation: member
+eduPersonAffiliation: student
+
+dn: uid=wwhite,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: White
+givenName: William
+cn: William White
+uid: wwhite
+mail: wwhite@example.edu
+businessCategory:Account Payable
+userPassword: password
+eduPersonAffiliation: staff
+
+dn: uid=dpeterson613,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Peterson
+givenName: David
+cn: David Peterson
+uid: dpeterson613
+mail: dpeterson613@example.edu
+businessCategory:Advising
+userPassword: password
+eduPersonAffiliation: faculty
+eduPersonAffiliation: alum
+
+dn: uid=klopez614,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Lopez
+givenName: Karl
+cn: Karl Lopez
+uid: klopez614
+mail: klopez614@example.edu
+businessCategory:Information Technology
+userPassword: password
+eduPersonAffiliation: member
+
+dn: uid=tjohnson,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Johnson
+givenName: Thomas
+cn: Thomas Johnson
+uid: tjohnson
+mail: tjohnson@example.edu
+businessCategory:Information Technology
+userPassword: password
+eduPersonAffiliation: faculty
+
+dn: uid=mlee616,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Lee
+givenName: Mark
+cn: Mark Lee
+uid: mlee616
+mail: mlee616@example.edu
+businessCategory:Account Payable
+userPassword: password
+eduPersonAffiliation: community
+
+dn: uid=jprice617,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Price
+givenName: Jennifer
+cn: Jennifer Price
+uid: jprice617
+mail: jprice617@example.edu
+businessCategory:Business
+userPassword: password
+eduPersonAffiliation: member
+eduPersonAffiliation: student
+
+dn: uid=ghenderson618,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Henderson
+givenName: Greg
+cn: Greg Henderson
+uid: ghenderson618
+mail: ghenderson618@example.edu
+businessCategory:Physical Education
+userPassword: password
+eduPersonAffiliation: alum
+
+dn: uid=rwalters619,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Walters
+givenName: Robert
+cn: Robert Walters
+uid: rwalters619
+mail: rwalters619@example.edu
+businessCategory:Account Payable
+userPassword: password
+eduPersonAffiliation: community
+
+dn: uid=bmorrison620,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Morrison
+givenName: Betty
+cn: Betty Morrison
+uid: bmorrison620
+mail: bmorrison620@example.edu
+businessCategory:Computer Science
+userPassword: password
+eduPersonAffiliation: member
+
+dn: uid=landerson,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Anderson
+givenName: Lisa
+cn: Lisa Anderson
+uid: landerson
+mail: landerson@example.edu
+businessCategory:Engineering
+userPassword: password
+eduPersonAffiliation: alum
+eduPersonAffiliation: member
+
+dn: uid=landerson622,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Anderson
+givenName: Lori
+cn: Lori Anderson
+uid: landerson622
+mail: landerson622@example.edu
+businessCategory:Business
+userPassword: password
+eduPersonAffiliation: community
+
+dn: uid=pprice,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Price
+givenName: Paul
+cn: Paul Price
+uid: pprice
+mail: pprice@example.edu
+businessCategory:Accounting
+userPassword: password
+eduPersonAffiliation: student
+
+dn: uid=nsmith,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Smith
+givenName: Nancy
+cn: Nancy Smith
+uid: nsmith
+mail: nsmith@example.edu
+businessCategory:Advising
+userPassword: password
+eduPersonAffiliation: student
+eduPersonAffiliation: alum
+
+dn: uid=jpeterson625,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Peterson
+givenName: James
+cn: James Peterson
+uid: jpeterson625
+mail: jpeterson625@example.edu
+businessCategory:Computer Science
+userPassword: password
+eduPersonAffiliation: community
+eduPersonAffiliation: faculty
+
+dn: uid=mlopez626,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Lopez
+givenName: Mary
+cn: Mary Lopez
+uid: mlopez626
+mail: mlopez626@example.edu
+businessCategory:Purchasing
+userPassword: password
+eduPersonAffiliation: community
+eduPersonAffiliation: alum
+
+dn: uid=dvales627,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Vales
+givenName: Donna
+cn: Donna Vales
+uid: dvales627
+mail: dvales627@example.edu
+businessCategory:Computer Science
+userPassword: password
+eduPersonAffiliation: community
+
+dn: uid=ethompson628,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Thompson
+givenName: Erik
+cn: Erik Thompson
+uid: ethompson628
+mail: ethompson628@example.edu
+businessCategory:Business
+userPassword: password
+eduPersonAffiliation: member
+eduPersonAffiliation: alum
+
+dn: uid=rdoe629,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Doe
+givenName: Robert
+cn: Robert Doe
+uid: rdoe629
+mail: rdoe629@example.edu
+businessCategory:Law
+userPassword: password
+eduPersonAffiliation: student
+eduPersonAffiliation: faculty
+
+dn: uid=cjohnson,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Johnson
+givenName: Colin
+cn: Colin Johnson
+uid: cjohnson
+mail: cjohnson@example.edu
+businessCategory:Purchasing
+userPassword: password
+eduPersonAffiliation: community
+
+dn: uid=mwilliams631,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Williams
+givenName: Michael
+cn: Michael Williams
+uid: mwilliams631
+mail: mwilliams631@example.edu
+businessCategory:Business
+userPassword: password
+eduPersonAffiliation: student
+
+dn: uid=jpeterson632,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Peterson
+givenName: John
+cn: John Peterson
+uid: jpeterson632
+mail: jpeterson632@example.edu
+businessCategory:Purchasing
+userPassword: password
+eduPersonAffiliation: member
+
+dn: uid=bgonazles633,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Gonazles
+givenName: Bill
+cn: Bill Gonazles
+uid: bgonazles633
+mail: bgonazles633@example.edu
+businessCategory:Account Payable
+userPassword: password
+eduPersonAffiliation: faculty
+
+dn: uid=danderson634,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Anderson
+givenName: David
+cn: David Anderson
+uid: danderson634
+mail: danderson634@example.edu
+businessCategory:Engineering
+userPassword: password
+eduPersonAffiliation: alum
+eduPersonAffiliation: community
+
+dn: uid=kwalters635,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Walters
+givenName: Kim
+cn: Kim Walters
+uid: kwalters635
+mail: kwalters635@example.edu
+businessCategory:Language Arts
+userPassword: password
+eduPersonAffiliation: faculty
+
+dn: uid=adoe,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Doe
+givenName: Ann
+cn: Ann Doe
+uid: adoe
+mail: adoe@example.edu
+businessCategory:Law
+userPassword: password
+eduPersonAffiliation: member
+
+dn: uid=cdoe,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Doe
+givenName: Colin
+cn: Colin Doe
+uid: cdoe
+mail: cdoe@example.edu
+businessCategory:Purchasing
+userPassword: password
+eduPersonAffiliation: faculty
+eduPersonAffiliation: community
+
+dn: uid=ddoe638,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Doe
+givenName: David
+cn: David Doe
+uid: ddoe638
+mail: ddoe638@example.edu
+businessCategory:Financial Aid
+userPassword: password
+eduPersonAffiliation: faculty
+
+dn: uid=edavis639,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Davis
+givenName: Erik
+cn: Erik Davis
+uid: edavis639
+mail: edavis639@example.edu
+businessCategory:Advising
+userPassword: password
+eduPersonAffiliation: student
+eduPersonAffiliation: alum
+
+dn: uid=hwhite640,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: White
+givenName: Heather
+cn: Heather White
+uid: hwhite640
+mail: hwhite640@example.edu
+businessCategory:Advising
+userPassword: password
+eduPersonAffiliation: faculty
+
+dn: uid=dprice641,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Price
+givenName: David
+cn: David Price
+uid: dprice641
+mail: dprice641@example.edu
+businessCategory:Financial Aid
+userPassword: password
+eduPersonAffiliation: student
+
+dn: uid=klopez642,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Lopez
+givenName: Kim
+cn: Kim Lopez
+uid: klopez642
+mail: klopez642@example.edu
+businessCategory:Engineering
+userPassword: password
+eduPersonAffiliation: alum
+
+dn: uid=abrown643,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Brown
+givenName: Ann
+cn: Ann Brown
+uid: abrown643
+mail: abrown643@example.edu
+businessCategory:Engineering
+userPassword: password
+eduPersonAffiliation: member
+
+dn: uid=mwhite644,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: White
+givenName: Mary
+cn: Mary White
+uid: mwhite644
+mail: mwhite644@example.edu
+businessCategory:Information Technology
+userPassword: password
+eduPersonAffiliation: alum
+eduPersonAffiliation: student
+
+dn: uid=kwhite645,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: White
+givenName: Kiersten
+cn: Kiersten White
+uid: kwhite645
+mail: kwhite645@example.edu
+businessCategory:Advising
+userPassword: password
+eduPersonAffiliation: faculty
+eduPersonAffiliation: student
+
+dn: uid=edoe,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Doe
+givenName: Erik
+cn: Erik Doe
+uid: edoe
+mail: edoe@example.edu
+businessCategory:Advising
+userPassword: password
+eduPersonAffiliation: staff
+
+dn: uid=mgonazles647,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Gonazles
+givenName: Mark
+cn: Mark Gonazles
+uid: mgonazles647
+mail: mgonazles647@example.edu
+businessCategory:Account Payable
+userPassword: password
+eduPersonAffiliation: faculty
+eduPersonAffiliation: member
+
+dn: uid=jhenderson648,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Henderson
+givenName: James
+cn: James Henderson
+uid: jhenderson648
+mail: jhenderson648@example.edu
+businessCategory:Language Arts
+userPassword: password
+eduPersonAffiliation: faculty
+eduPersonAffiliation: community
+
+dn: uid=bsmith649,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Smith
+givenName: Bill
+cn: Bill Smith
+uid: bsmith649
+mail: bsmith649@example.edu
+businessCategory:Language Arts
+userPassword: password
+eduPersonAffiliation: member
+
+dn: uid=lmorrison650,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Morrison
+givenName: Lisa
+cn: Lisa Morrison
+uid: lmorrison650
+mail: lmorrison650@example.edu
+businessCategory:Information Technology
+userPassword: password
+eduPersonAffiliation: staff
+eduPersonAffiliation: faculty
+
+dn: uid=llangenberg651,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Langenberg
+givenName: Lori
+cn: Lori Langenberg
+uid: llangenberg651
+mail: llangenberg651@example.edu
+businessCategory:Language Arts
+userPassword: password
+eduPersonAffiliation: faculty
+eduPersonAffiliation: student
+
+dn: uid=jwalters652,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Walters
+givenName: Jim
+cn: Jim Walters
+uid: jwalters652
+mail: jwalters652@example.edu
+businessCategory:Physical Education
+userPassword: password
+eduPersonAffiliation: member
+
+dn: uid=tjohnson653,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Johnson
+givenName: Thomas
+cn: Thomas Johnson
+uid: tjohnson653
+mail: tjohnson653@example.edu
+businessCategory:Physical Education
+userPassword: password
+eduPersonAffiliation: community
+eduPersonAffiliation: alum
+
+dn: uid=jwalters654,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Walters
+givenName: Jo
+cn: Jo Walters
+uid: jwalters654
+mail: jwalters654@example.edu
+businessCategory:Computer Science
+userPassword: password
+eduPersonAffiliation: faculty
+eduPersonAffiliation: staff
+
+dn: uid=bmorrison655,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Morrison
+givenName: Betty
+cn: Betty Morrison
+uid: bmorrison655
+mail: bmorrison655@example.edu
+businessCategory:Language Arts
+userPassword: password
+eduPersonAffiliation: student
+eduPersonAffiliation: member
+
+dn: uid=mclark656,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Clark
+givenName: Michael
+cn: Michael Clark
+uid: mclark656
+mail: mclark656@example.edu
+businessCategory:Information Technology
+userPassword: password
+eduPersonAffiliation: member
+eduPersonAffiliation: community
+
+dn: uid=ewilliams657,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Williams
+givenName: Erik
+cn: Erik Williams
+uid: ewilliams657
+mail: ewilliams657@example.edu
+businessCategory:Language Arts
+userPassword: password
+eduPersonAffiliation: member
+
+dn: uid=jlewis658,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Lewis
+givenName: John
+cn: John Lewis
+uid: jlewis658
+mail: jlewis658@example.edu
+businessCategory:Account Payable
+userPassword: password
+eduPersonAffiliation: member
+eduPersonAffiliation: community
+
+dn: uid=kgrady659,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Grady
+givenName: Kiersten
+cn: Kiersten Grady
+uid: kgrady659
+mail: kgrady659@example.edu
+businessCategory:Account Payable
+userPassword: password
+eduPersonAffiliation: student
+
+dn: uid=wmartinez,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Martinez
+givenName: William
+cn: William Martinez
+uid: wmartinez
+mail: wmartinez@example.edu
+businessCategory:Language Arts
+userPassword: password
+eduPersonAffiliation: community
+
+dn: uid=pwilliams,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Williams
+givenName: Paul
+cn: Paul Williams
+uid: pwilliams
+mail: pwilliams@example.edu
+businessCategory:Advising
+userPassword: password
+eduPersonAffiliation: community
+eduPersonAffiliation: student
+
+dn: uid=kjohnson662,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Johnson
+givenName: Kim
+cn: Kim Johnson
+uid: kjohnson662
+mail: kjohnson662@example.edu
+businessCategory:Accounting
+userPassword: password
+eduPersonAffiliation: member
+eduPersonAffiliation: community
+
+dn: uid=smartinez663,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Martinez
+givenName: Sarah
+cn: Sarah Martinez
+uid: smartinez663
+mail: smartinez663@example.edu
+businessCategory:Business
+userPassword: password
+eduPersonAffiliation: staff
+eduPersonAffiliation: alum
+
+dn: uid=mvales664,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Vales
+givenName: Marie
+cn: Marie Vales
+uid: mvales664
+mail: mvales664@example.edu
+businessCategory:Account Payable
+userPassword: password
+eduPersonAffiliation: staff
+
+dn: uid=klangenberg665,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Langenberg
+givenName: Karl
+cn: Karl Langenberg
+uid: klangenberg665
+mail: klangenberg665@example.edu
+businessCategory:Purchasing
+userPassword: password
+eduPersonAffiliation: staff
+eduPersonAffiliation: member
+
+dn: uid=msmith666,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Smith
+givenName: Marie
+cn: Marie Smith
+uid: msmith666
+mail: msmith666@example.edu
+businessCategory:Advising
+userPassword: password
+eduPersonAffiliation: student
+eduPersonAffiliation: alum
+
+dn: uid=mvales667,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Vales
+givenName: Mark
+cn: Mark Vales
+uid: mvales667
+mail: mvales667@example.edu
+businessCategory:Law
+userPassword: password
+eduPersonAffiliation: alum
+eduPersonAffiliation: community
+
+dn: uid=jwalters668,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Walters
+givenName: James
+cn: James Walters
+uid: jwalters668
+mail: jwalters668@example.edu
+businessCategory:Engineering
+userPassword: password
+eduPersonAffiliation: member
+
+dn: uid=pgonazles669,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Gonazles
+givenName: Paul
+cn: Paul Gonazles
+uid: pgonazles669
+mail: pgonazles669@example.edu
+businessCategory:Physical Education
+userPassword: password
+eduPersonAffiliation: member
+eduPersonAffiliation: alum
+
+dn: uid=dvales670,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Vales
+givenName: Donna
+cn: Donna Vales
+uid: dvales670
+mail: dvales670@example.edu
+businessCategory:Advising
+userPassword: password
+eduPersonAffiliation: student
+
+dn: uid=dclark671,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Clark
+givenName: David
+cn: David Clark
+uid: dclark671
+mail: dclark671@example.edu
+businessCategory:Purchasing
+userPassword: password
+eduPersonAffiliation: staff
+eduPersonAffiliation: alum
+
+dn: uid=bdoe672,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Doe
+givenName: Betty
+cn: Betty Doe
+uid: bdoe672
+mail: bdoe672@example.edu
+businessCategory:Language Arts
+userPassword: password
+eduPersonAffiliation: member
+eduPersonAffiliation: student
+
+dn: uid=mbrown673,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Brown
+givenName: Mark
+cn: Mark Brown
+uid: mbrown673
+mail: mbrown673@example.edu
+businessCategory:Financial Aid
+userPassword: password
+eduPersonAffiliation: staff
+
+dn: uid=kdoe674,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Doe
+givenName: Karoline
+cn: Karoline Doe
+uid: kdoe674
+mail: kdoe674@example.edu
+businessCategory:Account Payable
+userPassword: password
+eduPersonAffiliation: alum
+
+dn: uid=wthompson675,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Thompson
+givenName: William
+cn: William Thompson
+uid: wthompson675
+mail: wthompson675@example.edu
+businessCategory:Engineering
+userPassword: password
+eduPersonAffiliation: faculty
+eduPersonAffiliation: alum
+
+dn: uid=dmorrison676,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Morrison
+givenName: David
+cn: David Morrison
+uid: dmorrison676
+mail: dmorrison676@example.edu
+businessCategory:Engineering
+userPassword: password
+eduPersonAffiliation: student
+eduPersonAffiliation: faculty
+
+dn: uid=edoe677,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Doe
+givenName: Erik
+cn: Erik Doe
+uid: edoe677
+mail: edoe677@example.edu
+businessCategory:Advising
+userPassword: password
+eduPersonAffiliation: community
+
+dn: uid=nlangenberg,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Langenberg
+givenName: Nancy
+cn: Nancy Langenberg
+uid: nlangenberg
+mail: nlangenberg@example.edu
+businessCategory:Computer Science
+userPassword: password
+eduPersonAffiliation: staff
+eduPersonAffiliation: member
+
+dn: uid=kpeterson679,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Peterson
+givenName: Karl
+cn: Karl Peterson
+uid: kpeterson679
+mail: kpeterson679@example.edu
+businessCategory:Accounting
+userPassword: password
+eduPersonAffiliation: alum
+eduPersonAffiliation: student
+
+dn: uid=hgonazles,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Gonazles
+givenName: Heather
+cn: Heather Gonazles
+uid: hgonazles
+mail: hgonazles@example.edu
+businessCategory:Accounting
+userPassword: password
+eduPersonAffiliation: staff
+eduPersonAffiliation: member
+
+dn: uid=droberts,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Roberts
+givenName: Donna
+cn: Donna Roberts
+uid: droberts
+mail: droberts@example.edu
+businessCategory:Law
+userPassword: password
+eduPersonAffiliation: staff
+
+dn: uid=dgonazles682,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Gonazles
+givenName: David
+cn: David Gonazles
+uid: dgonazles682
+mail: dgonazles682@example.edu
+businessCategory:Information Technology
+userPassword: password
+eduPersonAffiliation: staff
+eduPersonAffiliation: faculty
+
+dn: uid=mmorrison,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Morrison
+givenName: Mark
+cn: Mark Morrison
+uid: mmorrison
+mail: mmorrison@example.edu
+businessCategory:Physical Education
+userPassword: password
+eduPersonAffiliation: staff
+
+dn: uid=cmorrison684,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Morrison
+givenName: Colin
+cn: Colin Morrison
+uid: cmorrison684
+mail: cmorrison684@example.edu
+businessCategory:Accounting
+userPassword: password
+eduPersonAffiliation: faculty
+
+dn: uid=jlewis685,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Lewis
+givenName: Jim
+cn: Jim Lewis
+uid: jlewis685
+mail: jlewis685@example.edu
+businessCategory:Business
+userPassword: password
+eduPersonAffiliation: staff
+eduPersonAffiliation: member
+
+dn: uid=jjohnson686,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Johnson
+givenName: Jennifer
+cn: Jennifer Johnson
+uid: jjohnson686
+mail: jjohnson686@example.edu
+businessCategory:Law
+userPassword: password
+eduPersonAffiliation: student
+
+dn: uid=elee,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Lee
+givenName: Erik
+cn: Erik Lee
+uid: elee
+mail: elee@example.edu
+businessCategory:Information Technology
+userPassword: password
+eduPersonAffiliation: student
+eduPersonAffiliation: member
+
+dn: uid=ddoe688,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Doe
+givenName: Donna
+cn: Donna Doe
+uid: ddoe688
+mail: ddoe688@example.edu
+businessCategory:Information Technology
+userPassword: password
+eduPersonAffiliation: student
+
+dn: uid=droberts689,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Roberts
+givenName: Donna
+cn: Donna Roberts
+uid: droberts689
+mail: droberts689@example.edu
+businessCategory:Financial Aid
+userPassword: password
+eduPersonAffiliation: community
+
+dn: uid=mgonazles690,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Gonazles
+givenName: Mary
+cn: Mary Gonazles
+uid: mgonazles690
+mail: mgonazles690@example.edu
+businessCategory:Purchasing
+userPassword: password
+eduPersonAffiliation: member
+eduPersonAffiliation: student
+
+dn: uid=awilliams,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Williams
+givenName: Ann
+cn: Ann Williams
+uid: awilliams
+mail: awilliams@example.edu
+businessCategory:Information Technology
+userPassword: password
+eduPersonAffiliation: staff
+
+dn: uid=gwalters,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Walters
+givenName: Greg
+cn: Greg Walters
+uid: gwalters
+mail: gwalters@example.edu
+businessCategory:Purchasing
+userPassword: password
+eduPersonAffiliation: faculty
+eduPersonAffiliation: alum
+
+dn: uid=wgonazles,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Gonazles
+givenName: William
+cn: William Gonazles
+uid: wgonazles
+mail: wgonazles@example.edu
+businessCategory:Information Technology
+userPassword: password
+eduPersonAffiliation: student
+eduPersonAffiliation: community
+
+dn: uid=mlewis694,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Lewis
+givenName: Michael
+cn: Michael Lewis
+uid: mlewis694
+mail: mlewis694@example.edu
+businessCategory:Account Payable
+userPassword: password
+eduPersonAffiliation: alum
+
+dn: uid=avales695,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Vales
+givenName: Ann
+cn: Ann Vales
+uid: avales695
+mail: avales695@example.edu
+businessCategory:Account Payable
+userPassword: password
+eduPersonAffiliation: faculty
+
+dn: uid=mjohnson696,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Johnson
+givenName: Michael
+cn: Michael Johnson
+uid: mjohnson696
+mail: mjohnson696@example.edu
+businessCategory:Business
+userPassword: password
+eduPersonAffiliation: staff
+
+dn: uid=kanderson,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Anderson
+givenName: Kim
+cn: Kim Anderson
+uid: kanderson
+mail: kanderson@example.edu
+businessCategory:Computer Science
+userPassword: password
+eduPersonAffiliation: community
+eduPersonAffiliation: staff
+
+dn: uid=troberts,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Roberts
+givenName: Thomas
+cn: Thomas Roberts
+uid: troberts
+mail: troberts@example.edu
+businessCategory:Computer Science
+userPassword: password
+eduPersonAffiliation: student
+
+dn: uid=dlewis699,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Lewis
+givenName: David
+cn: David Lewis
+uid: dlewis699
+mail: dlewis699@example.edu
+businessCategory:Account Payable
+userPassword: password
+eduPersonAffiliation: student
+eduPersonAffiliation: staff
+
+dn: uid=dwalters700,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Walters
+givenName: Donna
+cn: Donna Walters
+uid: dwalters700
+mail: dwalters700@example.edu
+businessCategory:Information Technology
+userPassword: password
+eduPersonAffiliation: student
+eduPersonAffiliation: member
+
+dn: uid=kbrown701,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Brown
+givenName: Kim
+cn: Kim Brown
+uid: kbrown701
+mail: kbrown701@example.edu
+businessCategory:Law
+userPassword: password
+eduPersonAffiliation: student
+
+dn: uid=ewhite702,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: White
+givenName: Erik
+cn: Erik White
+uid: ewhite702
+mail: ewhite702@example.edu
+businessCategory:Language Arts
+userPassword: password
+eduPersonAffiliation: staff
+
+dn: uid=lwalters703,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Walters
+givenName: Lori
+cn: Lori Walters
+uid: lwalters703
+mail: lwalters703@example.edu
+businessCategory:Business
+userPassword: password
+eduPersonAffiliation: community
+
+dn: uid=alangenberg704,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Langenberg
+givenName: Ann
+cn: Ann Langenberg
+uid: alangenberg704
+mail: alangenberg704@example.edu
+businessCategory:Financial Aid
+userPassword: password
+eduPersonAffiliation: alum
+eduPersonAffiliation: staff
+
+dn: uid=bbrown705,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Brown
+givenName: Bill
+cn: Bill Brown
+uid: bbrown705
+mail: bbrown705@example.edu
+businessCategory:Information Technology
+userPassword: password
+eduPersonAffiliation: community
+
+dn: uid=blangenberg,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Langenberg
+givenName: Blake
+cn: Blake Langenberg
+uid: blangenberg
+mail: blangenberg@example.edu
+businessCategory:Information Technology
+userPassword: password
+eduPersonAffiliation: staff
+
+dn: uid=mlewis707,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Lewis
+givenName: Michael
+cn: Michael Lewis
+uid: mlewis707
+mail: mlewis707@example.edu
+businessCategory:Accounting
+userPassword: password
+eduPersonAffiliation: student
+
+dn: uid=ksmith708,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Smith
+givenName: Karl
+cn: Karl Smith
+uid: ksmith708
+mail: ksmith708@example.edu
+businessCategory:Computer Science
+userPassword: password
+eduPersonAffiliation: student
+eduPersonAffiliation: alum
+
+dn: uid=clopez,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Lopez
+givenName: Colin
+cn: Colin Lopez
+uid: clopez
+mail: clopez@example.edu
+businessCategory:Language Arts
+userPassword: password
+eduPersonAffiliation: alum
+eduPersonAffiliation: member
+
+dn: uid=mclark710,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Clark
+givenName: Mark
+cn: Mark Clark
+uid: mclark710
+mail: mclark710@example.edu
+businessCategory:Purchasing
+userPassword: password
+eduPersonAffiliation: student
+eduPersonAffiliation: faculty
+
+dn: uid=tprice,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Price
+givenName: Thomas
+cn: Thomas Price
+uid: tprice
+mail: tprice@example.edu
+businessCategory:Computer Science
+userPassword: password
+eduPersonAffiliation: staff
+
+dn: uid=klewis712,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Lewis
+givenName: Karl
+cn: Karl Lewis
+uid: klewis712
+mail: klewis712@example.edu
+businessCategory:Financial Aid
+userPassword: password
+eduPersonAffiliation: alum
+
+dn: uid=mbutler713,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Butler
+givenName: Marie
+cn: Marie Butler
+uid: mbutler713
+mail: mbutler713@example.edu
+businessCategory:Physical Education
+userPassword: password
+eduPersonAffiliation: member
+
+dn: uid=mmorrison714,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Morrison
+givenName: Mark
+cn: Mark Morrison
+uid: mmorrison714
+mail: mmorrison714@example.edu
+businessCategory:Purchasing
+userPassword: password
+eduPersonAffiliation: community
+
+dn: uid=gsmith715,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Smith
+givenName: Greg
+cn: Greg Smith
+uid: gsmith715
+mail: gsmith715@example.edu
+businessCategory:Account Payable
+userPassword: password
+eduPersonAffiliation: alum
+
+dn: uid=randerson,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Anderson
+givenName: Robert
+cn: Robert Anderson
+uid: randerson
+mail: randerson@example.edu
+businessCategory:Accounting
+userPassword: password
+eduPersonAffiliation: member
+
+dn: uid=klangenberg717,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Langenberg
+givenName: Kiersten
+cn: Kiersten Langenberg
+uid: klangenberg717
+mail: klangenberg717@example.edu
+businessCategory:Information Technology
+userPassword: password
+eduPersonAffiliation: community
+
+dn: uid=mlangenberg718,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Langenberg
+givenName: Mary
+cn: Mary Langenberg
+uid: mlangenberg718
+mail: mlangenberg718@example.edu
+businessCategory:Financial Aid
+userPassword: password
+eduPersonAffiliation: alum
+
+dn: uid=plee719,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Lee
+givenName: Paul
+cn: Paul Lee
+uid: plee719
+mail: plee719@example.edu
+businessCategory:Information Technology
+userPassword: password
+eduPersonAffiliation: community
+
+dn: uid=dclark720,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Clark
+givenName: Donna
+cn: Donna Clark
+uid: dclark720
+mail: dclark720@example.edu
+businessCategory:Advising
+userPassword: password
+eduPersonAffiliation: student
+
+dn: uid=bbrown721,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Brown
+givenName: Blake
+cn: Blake Brown
+uid: bbrown721
+mail: bbrown721@example.edu
+businessCategory:Physical Education
+userPassword: password
+eduPersonAffiliation: student
+eduPersonAffiliation: faculty
+
+dn: uid=bvales722,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Vales
+givenName: Blake
+cn: Blake Vales
+uid: bvales722
+mail: bvales722@example.edu
+businessCategory:Computer Science
+userPassword: password
+eduPersonAffiliation: alum
+eduPersonAffiliation: member
+
+dn: uid=emartinez,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Martinez
+givenName: Erik
+cn: Erik Martinez
+uid: emartinez
+mail: emartinez@example.edu
+businessCategory:Accounting
+userPassword: password
+eduPersonAffiliation: faculty
+
+dn: uid=kgonazles,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Gonazles
+givenName: Karl
+cn: Karl Gonazles
+uid: kgonazles
+mail: kgonazles@example.edu
+businessCategory:Financial Aid
+userPassword: password
+eduPersonAffiliation: community
+
+dn: uid=lvales725,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Vales
+givenName: Lisa
+cn: Lisa Vales
+uid: lvales725
+mail: lvales725@example.edu
+businessCategory:Law
+userPassword: password
+eduPersonAffiliation: student
+
+dn: uid=kgrady726,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Grady
+givenName: Karl
+cn: Karl Grady
+uid: kgrady726
+mail: kgrady726@example.edu
+businessCategory:Account Payable
+userPassword: password
+eduPersonAffiliation: community
+
+dn: uid=aanderson727,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Anderson
+givenName: Ann
+cn: Ann Anderson
+uid: aanderson727
+mail: aanderson727@example.edu
+businessCategory:Language Arts
+userPassword: password
+eduPersonAffiliation: staff
+
+dn: uid=awhite728,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: White
+givenName: Ann
+cn: Ann White
+uid: awhite728
+mail: awhite728@example.edu
+businessCategory:Advising
+userPassword: password
+eduPersonAffiliation: member
+eduPersonAffiliation: student
+
+dn: uid=lwilliams729,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Williams
+givenName: Lori
+cn: Lori Williams
+uid: lwilliams729
+mail: lwilliams729@example.edu
+businessCategory:Law
+userPassword: password
+eduPersonAffiliation: community
+eduPersonAffiliation: member
+
+dn: uid=bclark730,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Clark
+givenName: Bill
+cn: Bill Clark
+uid: bclark730
+mail: bclark730@example.edu
+businessCategory:Advising
+userPassword: password
+eduPersonAffiliation: alum
+
+dn: uid=dwilliams731,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Williams
+givenName: David
+cn: David Williams
+uid: dwilliams731
+mail: dwilliams731@example.edu
+businessCategory:Business
+userPassword: password
+eduPersonAffiliation: student
+
+dn: uid=dwilliams732,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Williams
+givenName: David
+cn: David Williams
+uid: dwilliams732
+mail: dwilliams732@example.edu
+businessCategory:Information Technology
+userPassword: password
+eduPersonAffiliation: faculty
+
+dn: uid=dlewis733,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Lewis
+givenName: David
+cn: David Lewis
+uid: dlewis733
+mail: dlewis733@example.edu
+businessCategory:Account Payable
+userPassword: password
+eduPersonAffiliation: student
+
+dn: uid=ndoe,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Doe
+givenName: Nancy
+cn: Nancy Doe
+uid: ndoe
+mail: ndoe@example.edu
+businessCategory:Purchasing
+userPassword: password
+eduPersonAffiliation: student
+eduPersonAffiliation: alum
+
+dn: uid=jjohnson735,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Johnson
+givenName: Jennifer
+cn: Jennifer Johnson
+uid: jjohnson735
+mail: jjohnson735@example.edu
+businessCategory:Language Arts
+userPassword: password
+eduPersonAffiliation: member
+
+dn: uid=jgonazles736,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Gonazles
+givenName: Jennifer
+cn: Jennifer Gonazles
+uid: jgonazles736
+mail: jgonazles736@example.edu
+businessCategory:Computer Science
+userPassword: password
+eduPersonAffiliation: community
+eduPersonAffiliation: alum
+
+dn: uid=lprice,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Price
+givenName: Lisa
+cn: Lisa Price
+uid: lprice
+mail: lprice@example.edu
+businessCategory:Advising
+userPassword: password
+eduPersonAffiliation: community
+
+dn: uid=rdoe738,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Doe
+givenName: Robert
+cn: Robert Doe
+uid: rdoe738
+mail: rdoe738@example.edu
+businessCategory:Advising
+userPassword: password
+eduPersonAffiliation: faculty
+
+dn: uid=dbrown739,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Brown
+givenName: David
+cn: David Brown
+uid: dbrown739
+mail: dbrown739@example.edu
+businessCategory:Computer Science
+userPassword: password
+eduPersonAffiliation: staff
+eduPersonAffiliation: member
+
+dn: uid=handerson740,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Anderson
+givenName: Heather
+cn: Heather Anderson
+uid: handerson740
+mail: handerson740@example.edu
+businessCategory:Law
+userPassword: password
+eduPersonAffiliation: student
+eduPersonAffiliation: faculty
+
+dn: uid=jmartinez741,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Martinez
+givenName: Jo
+cn: Jo Martinez
+uid: jmartinez741
+mail: jmartinez741@example.edu
+businessCategory:Account Payable
+userPassword: password
+eduPersonAffiliation: community
+
+dn: uid=agonazles,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Gonazles
+givenName: Ann
+cn: Ann Gonazles
+uid: agonazles
+mail: agonazles@example.edu
+businessCategory:Account Payable
+userPassword: password
+eduPersonAffiliation: alum
+eduPersonAffiliation: faculty
+
+dn: uid=edavis743,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Davis
+givenName: Erik
+cn: Erik Davis
+uid: edavis743
+mail: edavis743@example.edu
+businessCategory:Purchasing
+userPassword: password
+eduPersonAffiliation: student
+
+dn: uid=jpeterson744,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Peterson
+givenName: James
+cn: James Peterson
+uid: jpeterson744
+mail: jpeterson744@example.edu
+businessCategory:Purchasing
+userPassword: password
+eduPersonAffiliation: community
+
+dn: uid=bprice745,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Price
+givenName: Betty
+cn: Betty Price
+uid: bprice745
+mail: bprice745@example.edu
+businessCategory:Account Payable
+userPassword: password
+eduPersonAffiliation: community
+
+dn: uid=jwilliams746,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Williams
+givenName: Jim
+cn: Jim Williams
+uid: jwilliams746
+mail: jwilliams746@example.edu
+businessCategory:Language Arts
+userPassword: password
+eduPersonAffiliation: member
+eduPersonAffiliation: community
+
+dn: uid=rroberts,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Roberts
+givenName: Robert
+cn: Robert Roberts
+uid: rroberts
+mail: rroberts@example.edu
+businessCategory:Financial Aid
+userPassword: password
+eduPersonAffiliation: member
+
+dn: uid=kroberts748,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Roberts
+givenName: Karl
+cn: Karl Roberts
+uid: kroberts748
+mail: kroberts748@example.edu
+businessCategory:Account Payable
+userPassword: password
+eduPersonAffiliation: student
+eduPersonAffiliation: community
+
+dn: uid=janderson749,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Anderson
+givenName: Jim
+cn: Jim Anderson
+uid: janderson749
+mail: janderson749@example.edu
+businessCategory:Law
+userPassword: password
+eduPersonAffiliation: student
+
+dn: uid=broberts750,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Roberts
+givenName: Bill
+cn: Bill Roberts
+uid: broberts750
+mail: broberts750@example.edu
+businessCategory:Business
+userPassword: password
+eduPersonAffiliation: member
+
+dn: uid=elopez751,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Lopez
+givenName: Erik
+cn: Erik Lopez
+uid: elopez751
+mail: elopez751@example.edu
+businessCategory:Physical Education
+userPassword: password
+eduPersonAffiliation: community
+
+dn: uid=manderson752,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Anderson
+givenName: Michael
+cn: Michael Anderson
+uid: manderson752
+mail: manderson752@example.edu
+businessCategory:Account Payable
+userPassword: password
+eduPersonAffiliation: community
+
+dn: uid=kbutler753,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Butler
+givenName: Karoline
+cn: Karoline Butler
+uid: kbutler753
+mail: kbutler753@example.edu
+businessCategory:Purchasing
+userPassword: password
+eduPersonAffiliation: alum
+
+dn: uid=gclark,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Clark
+givenName: Greg
+cn: Greg Clark
+uid: gclark
+mail: gclark@example.edu
+businessCategory:Engineering
+userPassword: password
+eduPersonAffiliation: student
+
+dn: uid=jwilliams755,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Williams
+givenName: Jo
+cn: Jo Williams
+uid: jwilliams755
+mail: jwilliams755@example.edu
+businessCategory:Language Arts
+userPassword: password
+eduPersonAffiliation: alum
+eduPersonAffiliation: student
+
+dn: uid=llopez756,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Lopez
+givenName: Lori
+cn: Lori Lopez
+uid: llopez756
+mail: llopez756@example.edu
+businessCategory:Law
+userPassword: password
+eduPersonAffiliation: staff
+
+dn: uid=khenderson757,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Henderson
+givenName: Kim
+cn: Kim Henderson
+uid: khenderson757
+mail: khenderson757@example.edu
+businessCategory:Purchasing
+userPassword: password
+eduPersonAffiliation: staff
+
+dn: uid=cjohnson758,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Johnson
+givenName: Colin
+cn: Colin Johnson
+uid: cjohnson758
+mail: cjohnson758@example.edu
+businessCategory:Engineering
+userPassword: password
+eduPersonAffiliation: staff
+eduPersonAffiliation: faculty
+
+dn: uid=kgasper759,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Gasper
+givenName: Kim
+cn: Kim Gasper
+uid: kgasper759
+mail: kgasper759@example.edu
+businessCategory:Account Payable
+userPassword: password
+eduPersonAffiliation: community
+
+dn: uid=jlewis760,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Lewis
+givenName: James
+cn: James Lewis
+uid: jlewis760
+mail: jlewis760@example.edu
+businessCategory:Engineering
+userPassword: password
+eduPersonAffiliation: staff
+
+dn: uid=llee761,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Lee
+givenName: Lori
+cn: Lori Lee
+uid: llee761
+mail: llee761@example.edu
+businessCategory:Computer Science
+userPassword: password
+eduPersonAffiliation: alum
+eduPersonAffiliation: member
+
+dn: uid=rvales762,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Vales
+givenName: Robert
+cn: Robert Vales
+uid: rvales762
+mail: rvales762@example.edu
+businessCategory:Physical Education
+userPassword: password
+eduPersonAffiliation: faculty
+eduPersonAffiliation: community
+
+dn: uid=jgasper763,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Gasper
+givenName: John
+cn: John Gasper
+uid: jgasper763
+mail: jgasper763@example.edu
+businessCategory:Financial Aid
+userPassword: password
+eduPersonAffiliation: member
+eduPersonAffiliation: student
+
+dn: uid=mprice764,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Price
+givenName: Marie
+cn: Marie Price
+uid: mprice764
+mail: mprice764@example.edu
+businessCategory:Accounting
+userPassword: password
+eduPersonAffiliation: member
+
+dn: uid=asmith765,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Smith
+givenName: Ann
+cn: Ann Smith
+uid: asmith765
+mail: asmith765@example.edu
+businessCategory:Law
+userPassword: password
+eduPersonAffiliation: student
+
+dn: uid=kanderson766,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Anderson
+givenName: Kiersten
+cn: Kiersten Anderson
+uid: kanderson766
+mail: kanderson766@example.edu
+businessCategory:Account Payable
+userPassword: password
+eduPersonAffiliation: alum
+
+dn: uid=tbrown767,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Brown
+givenName: Thomas
+cn: Thomas Brown
+uid: tbrown767
+mail: tbrown767@example.edu
+businessCategory:Account Payable
+userPassword: password
+eduPersonAffiliation: student
+eduPersonAffiliation: staff
+
+dn: uid=kvales768,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Vales
+givenName: Karoline
+cn: Karoline Vales
+uid: kvales768
+mail: kvales768@example.edu
+businessCategory:Law
+userPassword: password
+eduPersonAffiliation: staff
+
+dn: uid=jhenderson769,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Henderson
+givenName: Jo
+cn: Jo Henderson
+uid: jhenderson769
+mail: jhenderson769@example.edu
+businessCategory:Law
+userPassword: password
+eduPersonAffiliation: staff
+
+dn: uid=jjohnson770,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Johnson
+givenName: James
+cn: James Johnson
+uid: jjohnson770
+mail: jjohnson770@example.edu
+businessCategory:Language Arts
+userPassword: password
+eduPersonAffiliation: student
+
+dn: uid=wroberts,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Roberts
+givenName: William
+cn: William Roberts
+uid: wroberts
+mail: wroberts@example.edu
+businessCategory:Law
+userPassword: password
+eduPersonAffiliation: student
+
+dn: uid=cpeterson772,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Peterson
+givenName: Colin
+cn: Colin Peterson
+uid: cpeterson772
+mail: cpeterson772@example.edu
+businessCategory:Purchasing
+userPassword: password
+eduPersonAffiliation: staff
+eduPersonAffiliation: faculty
+
+dn: uid=tdoe,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Doe
+givenName: Thomas
+cn: Thomas Doe
+uid: tdoe
+mail: tdoe@example.edu
+businessCategory:Business
+userPassword: password
+eduPersonAffiliation: community
+eduPersonAffiliation: student
+
+dn: uid=hroberts,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Roberts
+givenName: Heather
+cn: Heather Roberts
+uid: hroberts
+mail: hroberts@example.edu
+businessCategory:Account Payable
+userPassword: password
+eduPersonAffiliation: community
+eduPersonAffiliation: staff
+
+dn: uid=mprice775,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Price
+givenName: Michael
+cn: Michael Price
+uid: mprice775
+mail: mprice775@example.edu
+businessCategory:Physical Education
+userPassword: password
+eduPersonAffiliation: member
+eduPersonAffiliation: student
+
+dn: uid=lroberts776,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Roberts
+givenName: Lori
+cn: Lori Roberts
+uid: lroberts776
+mail: lroberts776@example.edu
+businessCategory:Purchasing
+userPassword: password
+eduPersonAffiliation: faculty
+
+dn: uid=mdavis777,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Davis
+givenName: Marie
+cn: Marie Davis
+uid: mdavis777
+mail: mdavis777@example.edu
+businessCategory:Financial Aid
+userPassword: password
+eduPersonAffiliation: member
+eduPersonAffiliation: community
+
+dn: uid=kgonazles778,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Gonazles
+givenName: Karoline
+cn: Karoline Gonazles
+uid: kgonazles778
+mail: kgonazles778@example.edu
+businessCategory:Physical Education
+userPassword: password
+eduPersonAffiliation: student
+eduPersonAffiliation: community
+
+dn: uid=mvales779,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Vales
+givenName: Mary
+cn: Mary Vales
+uid: mvales779
+mail: mvales779@example.edu
+businessCategory:Accounting
+userPassword: password
+eduPersonAffiliation: student
+eduPersonAffiliation: alum
+
+dn: uid=jdoe780,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Doe
+givenName: Jo
+cn: Jo Doe
+uid: jdoe780
+mail: jdoe780@example.edu
+businessCategory:Business
+userPassword: password
+eduPersonAffiliation: community
+eduPersonAffiliation: student
+
+dn: uid=dmartinez,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Martinez
+givenName: David
+cn: David Martinez
+uid: dmartinez
+mail: dmartinez@example.edu
+businessCategory:Business
+userPassword: password
+eduPersonAffiliation: member
+
+dn: uid=dvales782,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Vales
+givenName: David
+cn: David Vales
+uid: dvales782
+mail: dvales782@example.edu
+businessCategory:Financial Aid
+userPassword: password
+eduPersonAffiliation: staff
+
+dn: uid=tprice783,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Price
+givenName: Thomas
+cn: Thomas Price
+uid: tprice783
+mail: tprice783@example.edu
+businessCategory:Engineering
+userPassword: password
+eduPersonAffiliation: faculty
+
+dn: uid=dmorrison784,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Morrison
+givenName: Donna
+cn: Donna Morrison
+uid: dmorrison784
+mail: dmorrison784@example.edu
+businessCategory:Physical Education
+userPassword: password
+eduPersonAffiliation: alum
+eduPersonAffiliation: faculty
+
+dn: uid=dgonazles785,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Gonazles
+givenName: David
+cn: David Gonazles
+uid: dgonazles785
+mail: dgonazles785@example.edu
+businessCategory:Computer Science
+userPassword: password
+eduPersonAffiliation: faculty
+
+dn: uid=swalters786,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Walters
+givenName: Sarah
+cn: Sarah Walters
+uid: swalters786
+mail: swalters786@example.edu
+businessCategory:Computer Science
+userPassword: password
+eduPersonAffiliation: alum
+
+dn: uid=hpeterson,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Peterson
+givenName: Heather
+cn: Heather Peterson
+uid: hpeterson
+mail: hpeterson@example.edu
+businessCategory:Accounting
+userPassword: password
+eduPersonAffiliation: staff
+eduPersonAffiliation: student
+
+dn: uid=jlee788,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Lee
+givenName: Jennifer
+cn: Jennifer Lee
+uid: jlee788
+mail: jlee788@example.edu
+businessCategory:Law
+userPassword: password
+eduPersonAffiliation: student
+eduPersonAffiliation: community
+
+dn: uid=nlopez,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Lopez
+givenName: Nancy
+cn: Nancy Lopez
+uid: nlopez
+mail: nlopez@example.edu
+businessCategory:Engineering
+userPassword: password
+eduPersonAffiliation: community
+eduPersonAffiliation: faculty
+
+dn: uid=kwhite790,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: White
+givenName: Kim
+cn: Kim White
+uid: kwhite790
+mail: kwhite790@example.edu
+businessCategory:Engineering
+userPassword: password
+eduPersonAffiliation: student
+
+dn: uid=nbutler,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Butler
+givenName: Nancy
+cn: Nancy Butler
+uid: nbutler
+mail: nbutler@example.edu
+businessCategory:Account Payable
+userPassword: password
+eduPersonAffiliation: staff
+eduPersonAffiliation: member
+
+dn: uid=jroberts792,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Roberts
+givenName: Jo
+cn: Jo Roberts
+uid: jroberts792
+mail: jroberts792@example.edu
+businessCategory:Advising
+userPassword: password
+eduPersonAffiliation: member
+eduPersonAffiliation: community
+
+dn: uid=hclark,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Clark
+givenName: Heather
+cn: Heather Clark
+uid: hclark
+mail: hclark@example.edu
+businessCategory:Language Arts
+userPassword: password
+eduPersonAffiliation: student
+
+dn: uid=nclark794,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Clark
+givenName: Nancy
+cn: Nancy Clark
+uid: nclark794
+mail: nclark794@example.edu
+businessCategory:Engineering
+userPassword: password
+eduPersonAffiliation: alum
+
+dn: uid=dpeterson795,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Peterson
+givenName: David
+cn: David Peterson
+uid: dpeterson795
+mail: dpeterson795@example.edu
+businessCategory:Advising
+userPassword: password
+eduPersonAffiliation: staff
+eduPersonAffiliation: student
+
+dn: uid=hbrown796,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Brown
+givenName: Heather
+cn: Heather Brown
+uid: hbrown796
+mail: hbrown796@example.edu
+businessCategory:Account Payable
+userPassword: password
+eduPersonAffiliation: student
+eduPersonAffiliation: faculty
+
+dn: uid=hlewis797,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Lewis
+givenName: Heather
+cn: Heather Lewis
+uid: hlewis797
+mail: hlewis797@example.edu
+businessCategory:Law
+userPassword: password
+eduPersonAffiliation: community
+eduPersonAffiliation: member
+
+dn: uid=blewis798,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Lewis
+givenName: Betty
+cn: Betty Lewis
+uid: blewis798
+mail: blewis798@example.edu
+businessCategory:Computer Science
+userPassword: password
+eduPersonAffiliation: member
+eduPersonAffiliation: alum
+
+dn: uid=sroberts799,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Roberts
+givenName: Sarah
+cn: Sarah Roberts
+uid: sroberts799
+mail: sroberts799@example.edu
+businessCategory:Purchasing
+userPassword: password
+eduPersonAffiliation: student
+eduPersonAffiliation: alum
+
+dn: uid=clewis800,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Lewis
+givenName: Colin
+cn: Colin Lewis
+uid: clewis800
+mail: clewis800@example.edu
+businessCategory:Physical Education
+userPassword: password
+eduPersonAffiliation: alum
+
+dn: uid=jclark801,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Clark
+givenName: Jim
+cn: Jim Clark
+uid: jclark801
+mail: jclark801@example.edu
+businessCategory:Accounting
+userPassword: password
+eduPersonAffiliation: staff
+eduPersonAffiliation: student
+
+dn: uid=jvales802,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Vales
+givenName: Jim
+cn: Jim Vales
+uid: jvales802
+mail: jvales802@example.edu
+businessCategory:Engineering
+userPassword: password
+eduPersonAffiliation: student
+
+dn: uid=jlewis803,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Lewis
+givenName: John
+cn: John Lewis
+uid: jlewis803
+mail: jlewis803@example.edu
+businessCategory:Computer Science
+userPassword: password
+eduPersonAffiliation: student
+eduPersonAffiliation: faculty
+
+dn: uid=jgasper804,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Gasper
+givenName: John
+cn: John Gasper
+uid: jgasper804
+mail: jgasper804@example.edu
+businessCategory:Purchasing
+userPassword: password
+eduPersonAffiliation: student
+eduPersonAffiliation: member
+
+dn: uid=rdavis805,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Davis
+givenName: Robert
+cn: Robert Davis
+uid: rdavis805
+mail: rdavis805@example.edu
+businessCategory:Information Technology
+userPassword: password
+eduPersonAffiliation: community
+eduPersonAffiliation: faculty
+
+dn: uid=dwilliams806,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Williams
+givenName: David
+cn: David Williams
+uid: dwilliams806
+mail: dwilliams806@example.edu
+businessCategory:Computer Science
+userPassword: password
+eduPersonAffiliation: member
+
+dn: uid=jscott807,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Scott
+givenName: Jennifer
+cn: Jennifer Scott
+uid: jscott807
+mail: jscott807@example.edu
+businessCategory:Financial Aid
+userPassword: password
+eduPersonAffiliation: community
+
+dn: uid=wwilliams808,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Williams
+givenName: William
+cn: William Williams
+uid: wwilliams808
+mail: wwilliams808@example.edu
+businessCategory:Information Technology
+userPassword: password
+eduPersonAffiliation: member
+eduPersonAffiliation: faculty
+
+dn: uid=edavis809,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Davis
+givenName: Eric
+cn: Eric Davis
+uid: edavis809
+mail: edavis809@example.edu
+businessCategory:Engineering
+userPassword: password
+eduPersonAffiliation: alum
+
+dn: uid=mprice810,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Price
+givenName: Marie
+cn: Marie Price
+uid: mprice810
+mail: mprice810@example.edu
+businessCategory:Information Technology
+userPassword: password
+eduPersonAffiliation: community
+
+dn: uid=bhenderson,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Henderson
+givenName: Betty
+cn: Betty Henderson
+uid: bhenderson
+mail: bhenderson@example.edu
+businessCategory:Computer Science
+userPassword: password
+eduPersonAffiliation: faculty
+eduPersonAffiliation: alum
+
+dn: uid=hhenderson812,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Henderson
+givenName: Heather
+cn: Heather Henderson
+uid: hhenderson812
+mail: hhenderson812@example.edu
+businessCategory:Engineering
+userPassword: password
+eduPersonAffiliation: member
+eduPersonAffiliation: student
+
+dn: uid=kscott813,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Scott
+givenName: Karl
+cn: Karl Scott
+uid: kscott813
+mail: kscott813@example.edu
+businessCategory:Physical Education
+userPassword: password
+eduPersonAffiliation: faculty
+eduPersonAffiliation: community
+
+dn: uid=ddoe814,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Doe
+givenName: David
+cn: David Doe
+uid: ddoe814
+mail: ddoe814@example.edu
+businessCategory:Law
+userPassword: password
+eduPersonAffiliation: student
+
+dn: uid=ewilliams815,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Williams
+givenName: Erik
+cn: Erik Williams
+uid: ewilliams815
+mail: ewilliams815@example.edu
+businessCategory:Account Payable
+userPassword: password
+eduPersonAffiliation: student
+
+dn: uid=jsmith816,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Smith
+givenName: Jo
+cn: Jo Smith
+uid: jsmith816
+mail: jsmith816@example.edu
+businessCategory:Information Technology
+userPassword: password
+eduPersonAffiliation: community
+eduPersonAffiliation: faculty
+
+dn: uid=lvales817,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Vales
+givenName: Lisa
+cn: Lisa Vales
+uid: lvales817
+mail: lvales817@example.edu
+businessCategory:Information Technology
+userPassword: password
+eduPersonAffiliation: student
+
+dn: uid=lpeterson818,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Peterson
+givenName: Lori
+cn: Lori Peterson
+uid: lpeterson818
+mail: lpeterson818@example.edu
+businessCategory:Engineering
+userPassword: password
+eduPersonAffiliation: member
+
+dn: uid=dgasper,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Gasper
+givenName: David
+cn: David Gasper
+uid: dgasper
+mail: dgasper@example.edu
+businessCategory:Purchasing
+userPassword: password
+eduPersonAffiliation: member
+
+dn: uid=nlangenberg820,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Langenberg
+givenName: Nancy
+cn: Nancy Langenberg
+uid: nlangenberg820
+mail: nlangenberg820@example.edu
+businessCategory:Financial Aid
+userPassword: password
+eduPersonAffiliation: faculty
+eduPersonAffiliation: staff
+
+dn: uid=jhenderson821,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Henderson
+givenName: Jo
+cn: Jo Henderson
+uid: jhenderson821
+mail: jhenderson821@example.edu
+businessCategory:Account Payable
+userPassword: password
+eduPersonAffiliation: faculty
+eduPersonAffiliation: community
+
+dn: uid=ddavis822,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Davis
+givenName: David
+cn: David Davis
+uid: ddavis822
+mail: ddavis822@example.edu
+businessCategory:Purchasing
+userPassword: password
+eduPersonAffiliation: student
+
+dn: uid=kgasper823,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Gasper
+givenName: Karl
+cn: Karl Gasper
+uid: kgasper823
+mail: kgasper823@example.edu
+businessCategory:Business
+userPassword: password
+eduPersonAffiliation: faculty
+eduPersonAffiliation: member
+
+dn: uid=jprice824,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Price
+givenName: John
+cn: John Price
+uid: jprice824
+mail: jprice824@example.edu
+businessCategory:Language Arts
+userPassword: password
+eduPersonAffiliation: alum
+
+dn: uid=aclark,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Clark
+givenName: Ann
+cn: Ann Clark
+uid: aclark
+mail: aclark@example.edu
+businessCategory:Law
+userPassword: password
+eduPersonAffiliation: staff
+eduPersonAffiliation: member
+
+dn: uid=jclark826,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Clark
+givenName: Jennifer
+cn: Jennifer Clark
+uid: jclark826
+mail: jclark826@example.edu
+businessCategory:Business
+userPassword: password
+eduPersonAffiliation: faculty
+eduPersonAffiliation: student
+
+dn: uid=lmartinez,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Martinez
+givenName: Lori
+cn: Lori Martinez
+uid: lmartinez
+mail: lmartinez@example.edu
+businessCategory:Language Arts
+userPassword: password
+eduPersonAffiliation: alum
+
+dn: uid=jpeterson828,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Peterson
+givenName: Jim
+cn: Jim Peterson
+uid: jpeterson828
+mail: jpeterson828@example.edu
+businessCategory:Computer Science
+userPassword: password
+eduPersonAffiliation: alum
+
+dn: uid=jdoe829,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Doe
+givenName: Jennifer
+cn: Jennifer Doe
+uid: jdoe829
+mail: jdoe829@example.edu
+businessCategory:Physical Education
+userPassword: password
+eduPersonAffiliation: student
+eduPersonAffiliation: community
+
+dn: uid=nmorrison,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Morrison
+givenName: Nancy
+cn: Nancy Morrison
+uid: nmorrison
+mail: nmorrison@example.edu
+businessCategory:Information Technology
+userPassword: password
+eduPersonAffiliation: member
+eduPersonAffiliation: student
+
+dn: uid=ehenderson831,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Henderson
+givenName: Eric
+cn: Eric Henderson
+uid: ehenderson831
+mail: ehenderson831@example.edu
+businessCategory:Law
+userPassword: password
+eduPersonAffiliation: staff
+eduPersonAffiliation: faculty
+
+dn: uid=kwhite832,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: White
+givenName: Kiersten
+cn: Kiersten White
+uid: kwhite832
+mail: kwhite832@example.edu
+businessCategory:Accounting
+userPassword: password
+eduPersonAffiliation: member
+eduPersonAffiliation: alum
+
+dn: uid=dhenderson833,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Henderson
+givenName: Donna
+cn: Donna Henderson
+uid: dhenderson833
+mail: dhenderson833@example.edu
+businessCategory:Physical Education
+userPassword: password
+eduPersonAffiliation: community
+
+dn: uid=dbrown834,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Brown
+givenName: Donna
+cn: Donna Brown
+uid: dbrown834
+mail: dbrown834@example.edu
+businessCategory:Accounting
+userPassword: password
+eduPersonAffiliation: community
+eduPersonAffiliation: staff
+
+dn: uid=manderson835,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Anderson
+givenName: Marie
+cn: Marie Anderson
+uid: manderson835
+mail: manderson835@example.edu
+businessCategory:Computer Science
+userPassword: password
+eduPersonAffiliation: community
+eduPersonAffiliation: member
+
+dn: uid=ggasper836,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Gasper
+givenName: Greg
+cn: Greg Gasper
+uid: ggasper836
+mail: ggasper836@example.edu
+businessCategory:Engineering
+userPassword: password
+eduPersonAffiliation: community
+eduPersonAffiliation: student
+
+dn: uid=mlewis837,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Lewis
+givenName: Marie
+cn: Marie Lewis
+uid: mlewis837
+mail: mlewis837@example.edu
+businessCategory:Accounting
+userPassword: password
+eduPersonAffiliation: community
+eduPersonAffiliation: alum
+
+dn: uid=kclark838,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Clark
+givenName: Karl
+cn: Karl Clark
+uid: kclark838
+mail: kclark838@example.edu
+businessCategory:Physical Education
+userPassword: password
+eduPersonAffiliation: faculty
+
+dn: uid=dclark839,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Clark
+givenName: David
+cn: David Clark
+uid: dclark839
+mail: dclark839@example.edu
+businessCategory:Account Payable
+userPassword: password
+eduPersonAffiliation: staff
+
+dn: uid=blewis840,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Lewis
+givenName: Blake
+cn: Blake Lewis
+uid: blewis840
+mail: blewis840@example.edu
+businessCategory:Physical Education
+userPassword: password
+eduPersonAffiliation: alum
+eduPersonAffiliation: member
+
+dn: uid=wlewis,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Lewis
+givenName: William
+cn: William Lewis
+uid: wlewis
+mail: wlewis@example.edu
+businessCategory:Account Payable
+userPassword: password
+eduPersonAffiliation: community
+eduPersonAffiliation: student
+
+dn: uid=jbutler842,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Butler
+givenName: John
+cn: John Butler
+uid: jbutler842
+mail: jbutler842@example.edu
+businessCategory:Language Arts
+userPassword: password
+eduPersonAffiliation: community
+
+dn: uid=bbutler843,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Butler
+givenName: Betty
+cn: Betty Butler
+uid: bbutler843
+mail: bbutler843@example.edu
+businessCategory:Law
+userPassword: password
+eduPersonAffiliation: student
+
+dn: uid=gthompson,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Thompson
+givenName: Greg
+cn: Greg Thompson
+uid: gthompson
+mail: gthompson@example.edu
+businessCategory:Purchasing
+userPassword: password
+eduPersonAffiliation: student
+eduPersonAffiliation: staff
+
+dn: uid=glangenberg,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Langenberg
+givenName: Greg
+cn: Greg Langenberg
+uid: glangenberg
+mail: glangenberg@example.edu
+businessCategory:Physical Education
+userPassword: password
+eduPersonAffiliation: community
+
+dn: uid=ajohnson,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Johnson
+givenName: Ann
+cn: Ann Johnson
+uid: ajohnson
+mail: ajohnson@example.edu
+businessCategory:Business
+userPassword: password
+eduPersonAffiliation: student
+
+dn: uid=awhite847,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: White
+givenName: Ann
+cn: Ann White
+uid: awhite847
+mail: awhite847@example.edu
+businessCategory:Account Payable
+userPassword: password
+eduPersonAffiliation: faculty
+
+dn: uid=dhenderson848,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Henderson
+givenName: David
+cn: David Henderson
+uid: dhenderson848
+mail: dhenderson848@example.edu
+businessCategory:Language Arts
+userPassword: password
+eduPersonAffiliation: faculty
+
+dn: uid=mwilliams849,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Williams
+givenName: Mark
+cn: Mark Williams
+uid: mwilliams849
+mail: mwilliams849@example.edu
+businessCategory:Business
+userPassword: password
+eduPersonAffiliation: staff
+
+dn: uid=nprice,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Price
+givenName: Nancy
+cn: Nancy Price
+uid: nprice
+mail: nprice@example.edu
+businessCategory:Business
+userPassword: password
+eduPersonAffiliation: member
+eduPersonAffiliation: community
+
+dn: uid=dthompson851,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Thompson
+givenName: Donna
+cn: Donna Thompson
+uid: dthompson851
+mail: dthompson851@example.edu
+businessCategory:Advising
+userPassword: password
+eduPersonAffiliation: member
+
+dn: uid=ebutler852,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Butler
+givenName: Erik
+cn: Erik Butler
+uid: ebutler852
+mail: ebutler852@example.edu
+businessCategory:Information Technology
+userPassword: password
+eduPersonAffiliation: student
+eduPersonAffiliation: alum
+
+dn: uid=kdavis853,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Davis
+givenName: Kim
+cn: Kim Davis
+uid: kdavis853
+mail: kdavis853@example.edu
+businessCategory:Information Technology
+userPassword: password
+eduPersonAffiliation: student
+eduPersonAffiliation: community
+
+dn: uid=tgasper854,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Gasper
+givenName: Thomas
+cn: Thomas Gasper
+uid: tgasper854
+mail: tgasper854@example.edu
+businessCategory:Computer Science
+userPassword: password
+eduPersonAffiliation: staff
+eduPersonAffiliation: student
+
+dn: uid=alangenberg855,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Langenberg
+givenName: Ann
+cn: Ann Langenberg
+uid: alangenberg855
+mail: alangenberg855@example.edu
+businessCategory:Law
+userPassword: password
+eduPersonAffiliation: community
+
+dn: uid=kclark856,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Clark
+givenName: Kim
+cn: Kim Clark
+uid: kclark856
+mail: kclark856@example.edu
+businessCategory:Physical Education
+userPassword: password
+eduPersonAffiliation: staff
+eduPersonAffiliation: community
+
+dn: uid=wdavis,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Davis
+givenName: William
+cn: William Davis
+uid: wdavis
+mail: wdavis@example.edu
+businessCategory:Engineering
+userPassword: password
+eduPersonAffiliation: student
+eduPersonAffiliation: member
+
+dn: uid=kwalters858,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Walters
+givenName: Karoline
+cn: Karoline Walters
+uid: kwalters858
+mail: kwalters858@example.edu
+businessCategory:Business
+userPassword: password
+eduPersonAffiliation: alum
+eduPersonAffiliation: student
+
+dn: uid=eprice859,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Price
+givenName: Erik
+cn: Erik Price
+uid: eprice859
+mail: eprice859@example.edu
+businessCategory:Engineering
+userPassword: password
+eduPersonAffiliation: student
+
+dn: uid=slee860,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Lee
+givenName: Sarah
+cn: Sarah Lee
+uid: slee860
+mail: slee860@example.edu
+businessCategory:Account Payable
+userPassword: password
+eduPersonAffiliation: faculty
+
+dn: uid=jwalters861,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Walters
+givenName: James
+cn: James Walters
+uid: jwalters861
+mail: jwalters861@example.edu
+businessCategory:Advising
+userPassword: password
+eduPersonAffiliation: staff
+eduPersonAffiliation: community
+
+dn: uid=rprice862,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Price
+givenName: Robert
+cn: Robert Price
+uid: rprice862
+mail: rprice862@example.edu
+businessCategory:Computer Science
+userPassword: password
+eduPersonAffiliation: staff
+
+dn: uid=tmartinez863,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Martinez
+givenName: Thomas
+cn: Thomas Martinez
+uid: tmartinez863
+mail: tmartinez863@example.edu
+businessCategory:Physical Education
+userPassword: password
+eduPersonAffiliation: staff
+eduPersonAffiliation: faculty
+
+dn: uid=mclark864,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Clark
+givenName: Mary
+cn: Mary Clark
+uid: mclark864
+mail: mclark864@example.edu
+businessCategory:Information Technology
+userPassword: password
+eduPersonAffiliation: community
+
+dn: uid=lwalters865,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Walters
+givenName: Lisa
+cn: Lisa Walters
+uid: lwalters865
+mail: lwalters865@example.edu
+businessCategory:Account Payable
+userPassword: password
+eduPersonAffiliation: alum
+
+dn: uid=handerson866,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Anderson
+givenName: Heather
+cn: Heather Anderson
+uid: handerson866
+mail: handerson866@example.edu
+businessCategory:Language Arts
+userPassword: password
+eduPersonAffiliation: staff
+
+dn: uid=dhenderson867,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Henderson
+givenName: David
+cn: David Henderson
+uid: dhenderson867
+mail: dhenderson867@example.edu
+businessCategory:Purchasing
+userPassword: password
+eduPersonAffiliation: staff
+eduPersonAffiliation: alum
+
+dn: uid=ldoe868,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Doe
+givenName: Lisa
+cn: Lisa Doe
+uid: ldoe868
+mail: ldoe868@example.edu
+businessCategory:Language Arts
+userPassword: password
+eduPersonAffiliation: member
+eduPersonAffiliation: community
+
+dn: uid=ggonazles869,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Gonazles
+givenName: Greg
+cn: Greg Gonazles
+uid: ggonazles869
+mail: ggonazles869@example.edu
+businessCategory:Account Payable
+userPassword: password
+eduPersonAffiliation: faculty
+eduPersonAffiliation: student
+
+dn: uid=kanderson870,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Anderson
+givenName: Karoline
+cn: Karoline Anderson
+uid: kanderson870
+mail: kanderson870@example.edu
+businessCategory:Advising
+userPassword: password
+eduPersonAffiliation: staff
+eduPersonAffiliation: student
+
+dn: uid=ajohnson871,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Johnson
+givenName: Ann
+cn: Ann Johnson
+uid: ajohnson871
+mail: ajohnson871@example.edu
+businessCategory:Advising
+userPassword: password
+eduPersonAffiliation: student
+eduPersonAffiliation: alum
+
+dn: uid=bgasper872,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Gasper
+givenName: Betty
+cn: Betty Gasper
+uid: bgasper872
+mail: bgasper872@example.edu
+businessCategory:Information Technology
+userPassword: password
+eduPersonAffiliation: member
+eduPersonAffiliation: student
+
+dn: uid=jlee873,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Lee
+givenName: John
+cn: John Lee
+uid: jlee873
+mail: jlee873@example.edu
+businessCategory:Engineering
+userPassword: password
+eduPersonAffiliation: member
+eduPersonAffiliation: community
+
+dn: uid=khenderson874,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Henderson
+givenName: Karoline
+cn: Karoline Henderson
+uid: khenderson874
+mail: khenderson874@example.edu
+businessCategory:Physical Education
+userPassword: password
+eduPersonAffiliation: staff
+
+dn: uid=jwilliams875,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Williams
+givenName: John
+cn: John Williams
+uid: jwilliams875
+mail: jwilliams875@example.edu
+businessCategory:Language Arts
+userPassword: password
+eduPersonAffiliation: member
+eduPersonAffiliation: community
+
+dn: uid=nwilliams,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Williams
+givenName: Nancy
+cn: Nancy Williams
+uid: nwilliams
+mail: nwilliams@example.edu
+businessCategory:Law
+userPassword: password
+eduPersonAffiliation: faculty
+
+dn: uid=kbrown877,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Brown
+givenName: Karoline
+cn: Karoline Brown
+uid: kbrown877
+mail: kbrown877@example.edu
+businessCategory:Information Technology
+userPassword: password
+eduPersonAffiliation: member
+eduPersonAffiliation: student
+
+dn: uid=bthompson878,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Thompson
+givenName: Blake
+cn: Blake Thompson
+uid: bthompson878
+mail: bthompson878@example.edu
+businessCategory:Account Payable
+userPassword: password
+eduPersonAffiliation: student
+eduPersonAffiliation: faculty
+
+dn: uid=rdavis879,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Davis
+givenName: Robert
+cn: Robert Davis
+uid: rdavis879
+mail: rdavis879@example.edu
+businessCategory:Language Arts
+userPassword: password
+eduPersonAffiliation: alum
+eduPersonAffiliation: staff
+
+dn: uid=gthompson880,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Thompson
+givenName: Greg
+cn: Greg Thompson
+uid: gthompson880
+mail: gthompson880@example.edu
+businessCategory:Purchasing
+userPassword: password
+eduPersonAffiliation: community
+
+dn: uid=bpeterson881,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Peterson
+givenName: Blake
+cn: Blake Peterson
+uid: bpeterson881
+mail: bpeterson881@example.edu
+businessCategory:Engineering
+userPassword: password
+eduPersonAffiliation: community
+eduPersonAffiliation: faculty
+
+dn: uid=mbrown882,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Brown
+givenName: Marie
+cn: Marie Brown
+uid: mbrown882
+mail: mbrown882@example.edu
+businessCategory:Accounting
+userPassword: password
+eduPersonAffiliation: faculty
+eduPersonAffiliation: staff
+
+dn: uid=jmartinez883,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Martinez
+givenName: James
+cn: James Martinez
+uid: jmartinez883
+mail: jmartinez883@example.edu
+businessCategory:Purchasing
+userPassword: password
+eduPersonAffiliation: alum
+
+dn: uid=hwhite884,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: White
+givenName: Heather
+cn: Heather White
+uid: hwhite884
+mail: hwhite884@example.edu
+businessCategory:Purchasing
+userPassword: password
+eduPersonAffiliation: member
+
+dn: uid=lhenderson885,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Henderson
+givenName: Lisa
+cn: Lisa Henderson
+uid: lhenderson885
+mail: lhenderson885@example.edu
+businessCategory:Financial Aid
+userPassword: password
+eduPersonAffiliation: alum
+
+dn: uid=thenderson,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Henderson
+givenName: Thomas
+cn: Thomas Henderson
+uid: thenderson
+mail: thenderson@example.edu
+businessCategory:Financial Aid
+userPassword: password
+eduPersonAffiliation: staff
+eduPersonAffiliation: student
+
+dn: uid=sdavis887,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Davis
+givenName: Sarah
+cn: Sarah Davis
+uid: sdavis887
+mail: sdavis887@example.edu
+businessCategory:Business
+userPassword: password
+eduPersonAffiliation: staff
+eduPersonAffiliation: community
+
+dn: uid=dclark888,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Clark
+givenName: David
+cn: David Clark
+uid: dclark888
+mail: dclark888@example.edu
+businessCategory:Advising
+userPassword: password
+eduPersonAffiliation: student
+eduPersonAffiliation: staff
+
+dn: uid=dpeterson889,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Peterson
+givenName: David
+cn: David Peterson
+uid: dpeterson889
+mail: dpeterson889@example.edu
+businessCategory:Computer Science
+userPassword: password
+eduPersonAffiliation: staff
+eduPersonAffiliation: community
+
+dn: uid=jbutler890,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Butler
+givenName: James
+cn: James Butler
+uid: jbutler890
+mail: jbutler890@example.edu
+businessCategory:Account Payable
+userPassword: password
+eduPersonAffiliation: student
+eduPersonAffiliation: alum
+
+dn: uid=ksmith891,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Smith
+givenName: Kiersten
+cn: Kiersten Smith
+uid: ksmith891
+mail: ksmith891@example.edu
+businessCategory:Advising
+userPassword: password
+eduPersonAffiliation: student
+eduPersonAffiliation: alum
+
+dn: uid=rlopez892,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Lopez
+givenName: Robert
+cn: Robert Lopez
+uid: rlopez892
+mail: rlopez892@example.edu
+businessCategory:Computer Science
+userPassword: password
+eduPersonAffiliation: community
+
+dn: uid=ksmith893,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Smith
+givenName: Kiersten
+cn: Kiersten Smith
+uid: ksmith893
+mail: ksmith893@example.edu
+businessCategory:Law
+userPassword: password
+eduPersonAffiliation: student
+eduPersonAffiliation: faculty
+
+dn: uid=jdavis894,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Davis
+givenName: John
+cn: John Davis
+uid: jdavis894
+mail: jdavis894@example.edu
+businessCategory:Accounting
+userPassword: password
+eduPersonAffiliation: alum
+
+dn: uid=ddoe895,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Doe
+givenName: Donna
+cn: Donna Doe
+uid: ddoe895
+mail: ddoe895@example.edu
+businessCategory:Advising
+userPassword: password
+eduPersonAffiliation: faculty
+eduPersonAffiliation: staff
+
+dn: uid=msmith896,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Smith
+givenName: Michael
+cn: Michael Smith
+uid: msmith896
+mail: msmith896@example.edu
+businessCategory:Information Technology
+userPassword: password
+eduPersonAffiliation: staff
+
+dn: uid=mdavis897,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Davis
+givenName: Michael
+cn: Michael Davis
+uid: mdavis897
+mail: mdavis897@example.edu
+businessCategory:Purchasing
+userPassword: password
+eduPersonAffiliation: community
+
+dn: uid=mmartinez898,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Martinez
+givenName: Marie
+cn: Marie Martinez
+uid: mmartinez898
+mail: mmartinez898@example.edu
+businessCategory:Accounting
+userPassword: password
+eduPersonAffiliation: student
+eduPersonAffiliation: faculty
+
+dn: uid=jlangenberg899,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Langenberg
+givenName: Jennifer
+cn: Jennifer Langenberg
+uid: jlangenberg899
+mail: jlangenberg899@example.edu
+businessCategory:Engineering
+userPassword: password
+eduPersonAffiliation: member
+eduPersonAffiliation: student
+
+dn: uid=cdavis900,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Davis
+givenName: Colin
+cn: Colin Davis
+uid: cdavis900
+mail: cdavis900@example.edu
+businessCategory:Advising
+userPassword: password
+eduPersonAffiliation: member
+eduPersonAffiliation: alum
+
+dn: uid=jmartinez901,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Martinez
+givenName: John
+cn: John Martinez
+uid: jmartinez901
+mail: jmartinez901@example.edu
+businessCategory:Language Arts
+userPassword: password
+eduPersonAffiliation: faculty
+
+dn: uid=tmartinez902,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Martinez
+givenName: Thomas
+cn: Thomas Martinez
+uid: tmartinez902
+mail: tmartinez902@example.edu
+businessCategory:Engineering
+userPassword: password
+eduPersonAffiliation: community
+eduPersonAffiliation: staff
+
+dn: uid=bprice903,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Price
+givenName: Bill
+cn: Bill Price
+uid: bprice903
+mail: bprice903@example.edu
+businessCategory:Law
+userPassword: password
+eduPersonAffiliation: member
+eduPersonAffiliation: community
+
+dn: uid=jdavis904,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Davis
+givenName: Jo
+cn: Jo Davis
+uid: jdavis904
+mail: jdavis904@example.edu
+businessCategory:Language Arts
+userPassword: password
+eduPersonAffiliation: student
+
+dn: uid=jmartinez905,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Martinez
+givenName: Jo
+cn: Jo Martinez
+uid: jmartinez905
+mail: jmartinez905@example.edu
+businessCategory:Information Technology
+userPassword: password
+eduPersonAffiliation: member
+
+dn: uid=landerson906,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Anderson
+givenName: Lori
+cn: Lori Anderson
+uid: landerson906
+mail: landerson906@example.edu
+businessCategory:Advising
+userPassword: password
+eduPersonAffiliation: alum
+eduPersonAffiliation: faculty
+
+dn: uid=rlee,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Lee
+givenName: Robert
+cn: Robert Lee
+uid: rlee
+mail: rlee@example.edu
+businessCategory:Account Payable
+userPassword: password
+eduPersonAffiliation: member
+eduPersonAffiliation: community
+
+dn: uid=dlewis908,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Lewis
+givenName: David
+cn: David Lewis
+uid: dlewis908
+mail: dlewis908@example.edu
+businessCategory:Engineering
+userPassword: password
+eduPersonAffiliation: faculty
+eduPersonAffiliation: staff
+
+dn: uid=jlopez909,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Lopez
+givenName: Jo
+cn: Jo Lopez
+uid: jlopez909
+mail: jlopez909@example.edu
+businessCategory:Physical Education
+userPassword: password
+eduPersonAffiliation: faculty
+
+dn: uid=kgasper910,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Gasper
+givenName: Karoline
+cn: Karoline Gasper
+uid: kgasper910
+mail: kgasper910@example.edu
+businessCategory:Purchasing
+userPassword: password
+eduPersonAffiliation: faculty
+eduPersonAffiliation: student
+
+dn: uid=mscott911,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Scott
+givenName: Michael
+cn: Michael Scott
+uid: mscott911
+mail: mscott911@example.edu
+businessCategory:Engineering
+userPassword: password
+eduPersonAffiliation: student
+eduPersonAffiliation: faculty
+
+dn: uid=smorrison,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Morrison
+givenName: Sarah
+cn: Sarah Morrison
+uid: smorrison
+mail: smorrison@example.edu
+businessCategory:Accounting
+userPassword: password
+eduPersonAffiliation: community
+
+dn: uid=kjohnson913,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Johnson
+givenName: Karl
+cn: Karl Johnson
+uid: kjohnson913
+mail: kjohnson913@example.edu
+businessCategory:Computer Science
+userPassword: password
+eduPersonAffiliation: community
+
+dn: uid=bwhite914,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: White
+givenName: Bill
+cn: Bill White
+uid: bwhite914
+mail: bwhite914@example.edu
+businessCategory:Law
+userPassword: password
+eduPersonAffiliation: alum
+eduPersonAffiliation: community
+
+dn: uid=kgonazles915,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Gonazles
+givenName: Kim
+cn: Kim Gonazles
+uid: kgonazles915
+mail: kgonazles915@example.edu
+businessCategory:Financial Aid
+userPassword: password
+eduPersonAffiliation: member
+eduPersonAffiliation: community
+
+dn: uid=jgasper916,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Gasper
+givenName: Jennifer
+cn: Jennifer Gasper
+uid: jgasper916
+mail: jgasper916@example.edu
+businessCategory:Engineering
+userPassword: password
+eduPersonAffiliation: member
+eduPersonAffiliation: community
+
+dn: uid=jlewis917,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Lewis
+givenName: James
+cn: James Lewis
+uid: jlewis917
+mail: jlewis917@example.edu
+businessCategory:Advising
+userPassword: password
+eduPersonAffiliation: student
+eduPersonAffiliation: member
+
+dn: uid=mjohnson918,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Johnson
+givenName: Mark
+cn: Mark Johnson
+uid: mjohnson918
+mail: mjohnson918@example.edu
+businessCategory:Account Payable
+userPassword: password
+eduPersonAffiliation: member
+
+dn: uid=ddavis919,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Davis
+givenName: David
+cn: David Davis
+uid: ddavis919
+mail: ddavis919@example.edu
+businessCategory:Account Payable
+userPassword: password
+eduPersonAffiliation: student
+
+dn: uid=dvales920,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Vales
+givenName: Donna
+cn: Donna Vales
+uid: dvales920
+mail: dvales920@example.edu
+businessCategory:Business
+userPassword: password
+eduPersonAffiliation: student
+eduPersonAffiliation: member
+
+dn: uid=mlangenberg921,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Langenberg
+givenName: Mary
+cn: Mary Langenberg
+uid: mlangenberg921
+mail: mlangenberg921@example.edu
+businessCategory:Physical Education
+userPassword: password
+eduPersonAffiliation: staff
+eduPersonAffiliation: member
+
+dn: uid=jvales922,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Vales
+givenName: Jim
+cn: Jim Vales
+uid: jvales922
+mail: jvales922@example.edu
+businessCategory:Law
+userPassword: password
+eduPersonAffiliation: staff
+eduPersonAffiliation: community
+
+dn: uid=mgrady923,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Grady
+givenName: Mary
+cn: Mary Grady
+uid: mgrady923
+mail: mgrady923@example.edu
+businessCategory:Information Technology
+userPassword: password
+eduPersonAffiliation: faculty
+eduPersonAffiliation: community
+
+dn: uid=hsmith924,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Smith
+givenName: Heather
+cn: Heather Smith
+uid: hsmith924
+mail: hsmith924@example.edu
+businessCategory:Advising
+userPassword: password
+eduPersonAffiliation: alum
+
+dn: uid=lgrady925,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Grady
+givenName: Lori
+cn: Lori Grady
+uid: lgrady925
+mail: lgrady925@example.edu
+businessCategory:Accounting
+userPassword: password
+eduPersonAffiliation: community
+eduPersonAffiliation: member
+
+dn: uid=gbutler926,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Butler
+givenName: Greg
+cn: Greg Butler
+uid: gbutler926
+mail: gbutler926@example.edu
+businessCategory:Advising
+userPassword: password
+eduPersonAffiliation: member
+
+dn: uid=jwhite927,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: White
+givenName: Jennifer
+cn: Jennifer White
+uid: jwhite927
+mail: jwhite927@example.edu
+businessCategory:Business
+userPassword: password
+eduPersonAffiliation: community
+
+dn: uid=bpeterson928,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Peterson
+givenName: Betty
+cn: Betty Peterson
+uid: bpeterson928
+mail: bpeterson928@example.edu
+businessCategory:Language Arts
+userPassword: password
+eduPersonAffiliation: student
+eduPersonAffiliation: community
+
+dn: uid=nlewis,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Lewis
+givenName: Nancy
+cn: Nancy Lewis
+uid: nlewis
+mail: nlewis@example.edu
+businessCategory:Financial Aid
+userPassword: password
+eduPersonAffiliation: staff
+
+dn: uid=jroberts930,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Roberts
+givenName: Jennifer
+cn: Jennifer Roberts
+uid: jroberts930
+mail: jroberts930@example.edu
+businessCategory:Purchasing
+userPassword: password
+eduPersonAffiliation: member
+
+dn: uid=kpeterson931,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Peterson
+givenName: Kiersten
+cn: Kiersten Peterson
+uid: kpeterson931
+mail: kpeterson931@example.edu
+businessCategory:Law
+userPassword: password
+eduPersonAffiliation: member
+eduPersonAffiliation: alum
+
+dn: uid=lhenderson932,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Henderson
+givenName: Lori
+cn: Lori Henderson
+uid: lhenderson932
+mail: lhenderson932@example.edu
+businessCategory:Engineering
+userPassword: password
+eduPersonAffiliation: alum
+
+dn: uid=jlewis933,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Lewis
+givenName: James
+cn: James Lewis
+uid: jlewis933
+mail: jlewis933@example.edu
+businessCategory:Language Arts
+userPassword: password
+eduPersonAffiliation: student
+eduPersonAffiliation: staff
+
+dn: uid=dlangenberg934,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Langenberg
+givenName: David
+cn: David Langenberg
+uid: dlangenberg934
+mail: dlangenberg934@example.edu
+businessCategory:Computer Science
+userPassword: password
+eduPersonAffiliation: community
+
+dn: uid=kbutler935,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Butler
+givenName: Kim
+cn: Kim Butler
+uid: kbutler935
+mail: kbutler935@example.edu
+businessCategory:Engineering
+userPassword: password
+eduPersonAffiliation: student
+eduPersonAffiliation: faculty
+
+dn: uid=rjohnson,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Johnson
+givenName: Robert
+cn: Robert Johnson
+uid: rjohnson
+mail: rjohnson@example.edu
+businessCategory:Computer Science
+userPassword: password
+eduPersonAffiliation: faculty
+
+dn: uid=jwalters937,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Walters
+givenName: Jennifer
+cn: Jennifer Walters
+uid: jwalters937
+mail: jwalters937@example.edu
+businessCategory:Information Technology
+userPassword: password
+eduPersonAffiliation: alum
+eduPersonAffiliation: community
+
+dn: uid=kgonazles938,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Gonazles
+givenName: Kiersten
+cn: Kiersten Gonazles
+uid: kgonazles938
+mail: kgonazles938@example.edu
+businessCategory:Purchasing
+userPassword: password
+eduPersonAffiliation: community
+
+dn: uid=mgasper939,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Gasper
+givenName: Marie
+cn: Marie Gasper
+uid: mgasper939
+mail: mgasper939@example.edu
+businessCategory:Advising
+userPassword: password
+eduPersonAffiliation: staff
+eduPersonAffiliation: student
+
+dn: uid=klopez940,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Lopez
+givenName: Kim
+cn: Kim Lopez
+uid: klopez940
+mail: klopez940@example.edu
+businessCategory:Language Arts
+userPassword: password
+eduPersonAffiliation: faculty
+eduPersonAffiliation: staff
+
+dn: uid=jwhite941,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: White
+givenName: Jennifer
+cn: Jennifer White
+uid: jwhite941
+mail: jwhite941@example.edu
+businessCategory:Financial Aid
+userPassword: password
+eduPersonAffiliation: alum
+eduPersonAffiliation: faculty
+
+dn: uid=jgonazles942,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Gonazles
+givenName: James
+cn: James Gonazles
+uid: jgonazles942
+mail: jgonazles942@example.edu
+businessCategory:Information Technology
+userPassword: password
+eduPersonAffiliation: alum
+eduPersonAffiliation: member
+
+dn: uid=khenderson943,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Henderson
+givenName: Kim
+cn: Kim Henderson
+uid: khenderson943
+mail: khenderson943@example.edu
+businessCategory:Law
+userPassword: password
+eduPersonAffiliation: student
+eduPersonAffiliation: member
+
+dn: uid=mhenderson944,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Henderson
+givenName: Mark
+cn: Mark Henderson
+uid: mhenderson944
+mail: mhenderson944@example.edu
+businessCategory:Information Technology
+userPassword: password
+eduPersonAffiliation: faculty
+
+dn: uid=cprice,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Price
+givenName: Colin
+cn: Colin Price
+uid: cprice
+mail: cprice@example.edu
+businessCategory:Advising
+userPassword: password
+eduPersonAffiliation: community
+eduPersonAffiliation: faculty
+
+dn: uid=janderson946,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Anderson
+givenName: Jim
+cn: Jim Anderson
+uid: janderson946
+mail: janderson946@example.edu
+businessCategory:Accounting
+userPassword: password
+eduPersonAffiliation: faculty
+
+dn: uid=ejohnson947,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Johnson
+givenName: Erik
+cn: Erik Johnson
+uid: ejohnson947
+mail: ejohnson947@example.edu
+businessCategory:Account Payable
+userPassword: password
+eduPersonAffiliation: student
+
+dn: uid=janderson948,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Anderson
+givenName: John
+cn: John Anderson
+uid: janderson948
+mail: janderson948@example.edu
+businessCategory:Accounting
+userPassword: password
+eduPersonAffiliation: faculty
+
+dn: uid=lhenderson949,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Henderson
+givenName: Lisa
+cn: Lisa Henderson
+uid: lhenderson949
+mail: lhenderson949@example.edu
+businessCategory:Account Payable
+userPassword: password
+eduPersonAffiliation: staff
+
+dn: uid=mlee950,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Lee
+givenName: Mary
+cn: Mary Lee
+uid: mlee950
+mail: mlee950@example.edu
+businessCategory:Computer Science
+userPassword: password
+eduPersonAffiliation: staff
+eduPersonAffiliation: community
+
+dn: uid=ewilliams951,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Williams
+givenName: Eric
+cn: Eric Williams
+uid: ewilliams951
+mail: ewilliams951@example.edu
+businessCategory:Physical Education
+userPassword: password
+eduPersonAffiliation: member
+eduPersonAffiliation: staff
+
+dn: uid=plewis,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Lewis
+givenName: Paul
+cn: Paul Lewis
+uid: plewis
+mail: plewis@example.edu
+businessCategory:Financial Aid
+userPassword: password
+eduPersonAffiliation: member
+eduPersonAffiliation: student
+
+dn: uid=mclark953,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Clark
+givenName: Marie
+cn: Marie Clark
+uid: mclark953
+mail: mclark953@example.edu
+businessCategory:Physical Education
+userPassword: password
+eduPersonAffiliation: member
+eduPersonAffiliation: community
+
+dn: uid=dwilliams954,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Williams
+givenName: David
+cn: David Williams
+uid: dwilliams954
+mail: dwilliams954@example.edu
+businessCategory:Account Payable
+userPassword: password
+eduPersonAffiliation: alum
+eduPersonAffiliation: student
+
+dn: uid=rroberts955,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Roberts
+givenName: Robert
+cn: Robert Roberts
+uid: rroberts955
+mail: rroberts955@example.edu
+businessCategory:Engineering
+userPassword: password
+eduPersonAffiliation: faculty
+eduPersonAffiliation: community
+
+dn: uid=jsmith956,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Smith
+givenName: Jo
+cn: Jo Smith
+uid: jsmith956
+mail: jsmith956@example.edu
+businessCategory:Accounting
+userPassword: password
+eduPersonAffiliation: faculty
+eduPersonAffiliation: student
+
+dn: uid=jwhite957,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: White
+givenName: Jennifer
+cn: Jennifer White
+uid: jwhite957
+mail: jwhite957@example.edu
+businessCategory:Financial Aid
+userPassword: password
+eduPersonAffiliation: faculty
+
+dn: uid=bwalters958,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Walters
+givenName: Bill
+cn: Bill Walters
+uid: bwalters958
+mail: bwalters958@example.edu
+businessCategory:Law
+userPassword: password
+eduPersonAffiliation: community
+
+dn: uid=mhenderson959,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Henderson
+givenName: Mark
+cn: Mark Henderson
+uid: mhenderson959
+mail: mhenderson959@example.edu
+businessCategory:Accounting
+userPassword: password
+eduPersonAffiliation: student
+eduPersonAffiliation: staff
+
+dn: uid=mgasper960,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Gasper
+givenName: Mark
+cn: Mark Gasper
+uid: mgasper960
+mail: mgasper960@example.edu
+businessCategory:Information Technology
+userPassword: password
+eduPersonAffiliation: alum
+
+dn: uid=ppeterson,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Peterson
+givenName: Paul
+cn: Paul Peterson
+uid: ppeterson
+mail: ppeterson@example.edu
+businessCategory:Law
+userPassword: password
+eduPersonAffiliation: staff
+eduPersonAffiliation: alum
+
+dn: uid=jscott962,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Scott
+givenName: John
+cn: John Scott
+uid: jscott962
+mail: jscott962@example.edu
+businessCategory:Language Arts
+userPassword: password
+eduPersonAffiliation: staff
+
+dn: uid=hdavis963,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Davis
+givenName: Heather
+cn: Heather Davis
+uid: hdavis963
+mail: hdavis963@example.edu
+businessCategory:Physical Education
+userPassword: password
+eduPersonAffiliation: staff
+
+dn: uid=pwhite,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: White
+givenName: Paul
+cn: Paul White
+uid: pwhite
+mail: pwhite@example.edu
+businessCategory:Information Technology
+userPassword: password
+eduPersonAffiliation: faculty
+
+dn: uid=dwalters965,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Walters
+givenName: David
+cn: David Walters
+uid: dwalters965
+mail: dwalters965@example.edu
+businessCategory:Advising
+userPassword: password
+eduPersonAffiliation: student
+
+dn: uid=blopez966,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Lopez
+givenName: Blake
+cn: Blake Lopez
+uid: blopez966
+mail: blopez966@example.edu
+businessCategory:Information Technology
+userPassword: password
+eduPersonAffiliation: community
+
+dn: uid=bgrady967,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Grady
+givenName: Blake
+cn: Blake Grady
+uid: bgrady967
+mail: bgrady967@example.edu
+businessCategory:Information Technology
+userPassword: password
+eduPersonAffiliation: alum
+eduPersonAffiliation: faculty
+
+dn: uid=bclark968,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Clark
+givenName: Bill
+cn: Bill Clark
+uid: bclark968
+mail: bclark968@example.edu
+businessCategory:Account Payable
+userPassword: password
+eduPersonAffiliation: community
+eduPersonAffiliation: member
+
+dn: uid=lprice969,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Price
+givenName: Lisa
+cn: Lisa Price
+uid: lprice969
+mail: lprice969@example.edu
+businessCategory:Financial Aid
+userPassword: password
+eduPersonAffiliation: alum
+eduPersonAffiliation: member
+
+dn: uid=wpeterson970,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Peterson
+givenName: William
+cn: William Peterson
+uid: wpeterson970
+mail: wpeterson970@example.edu
+businessCategory:Law
+userPassword: password
+eduPersonAffiliation: student
+
+dn: uid=banderson971,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Anderson
+givenName: Betty
+cn: Betty Anderson
+uid: banderson971
+mail: banderson971@example.edu
+businessCategory:Account Payable
+userPassword: password
+eduPersonAffiliation: staff
+eduPersonAffiliation: alum
+
+dn: uid=hprice972,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Price
+givenName: Heather
+cn: Heather Price
+uid: hprice972
+mail: hprice972@example.edu
+businessCategory:Physical Education
+userPassword: password
+eduPersonAffiliation: alum
+eduPersonAffiliation: community
+
+dn: uid=mpeterson973,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Peterson
+givenName: Marie
+cn: Marie Peterson
+uid: mpeterson973
+mail: mpeterson973@example.edu
+businessCategory:Computer Science
+userPassword: password
+eduPersonAffiliation: alum
+
+dn: uid=ngonazles,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Gonazles
+givenName: Nancy
+cn: Nancy Gonazles
+uid: ngonazles
+mail: ngonazles@example.edu
+businessCategory:Account Payable
+userPassword: password
+eduPersonAffiliation: alum
+eduPersonAffiliation: faculty
+
+dn: uid=jvales975,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Vales
+givenName: James
+cn: James Vales
+uid: jvales975
+mail: jvales975@example.edu
+businessCategory:Language Arts
+userPassword: password
+eduPersonAffiliation: staff
+eduPersonAffiliation: community
+
+dn: uid=jpeterson976,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Peterson
+givenName: Jennifer
+cn: Jennifer Peterson
+uid: jpeterson976
+mail: jpeterson976@example.edu
+businessCategory:Advising
+userPassword: password
+eduPersonAffiliation: staff
+
+dn: uid=kmartinez977,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Martinez
+givenName: Kim
+cn: Kim Martinez
+uid: kmartinez977
+mail: kmartinez977@example.edu
+businessCategory:Account Payable
+userPassword: password
+eduPersonAffiliation: staff
+
+dn: uid=pbrown978,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Brown
+givenName: Paul
+cn: Paul Brown
+uid: pbrown978
+mail: pbrown978@example.edu
+businessCategory:Accounting
+userPassword: password
+eduPersonAffiliation: student
+eduPersonAffiliation: member
+
+dn: uid=dbutler979,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Butler
+givenName: Donna
+cn: Donna Butler
+uid: dbutler979
+mail: dbutler979@example.edu
+businessCategory:Engineering
+userPassword: password
+eduPersonAffiliation: member
+
+dn: uid=hmorrison980,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Morrison
+givenName: Heather
+cn: Heather Morrison
+uid: hmorrison980
+mail: hmorrison980@example.edu
+businessCategory:Business
+userPassword: password
+eduPersonAffiliation: member
+
+dn: uid=cdoe981,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Doe
+givenName: Colin
+cn: Colin Doe
+uid: cdoe981
+mail: cdoe981@example.edu
+businessCategory:Financial Aid
+userPassword: password
+eduPersonAffiliation: staff
+
+dn: uid=alee,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Lee
+givenName: Ann
+cn: Ann Lee
+uid: alee
+mail: alee@example.edu
+businessCategory:Account Payable
+userPassword: password
+eduPersonAffiliation: alum
+
+dn: uid=jlee983,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Lee
+givenName: Jo
+cn: Jo Lee
+uid: jlee983
+mail: jlee983@example.edu
+businessCategory:Computer Science
+userPassword: password
+eduPersonAffiliation: community
+eduPersonAffiliation: faculty
+
+dn: uid=mprice984,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Price
+givenName: Marie
+cn: Marie Price
+uid: mprice984
+mail: mprice984@example.edu
+businessCategory:Physical Education
+userPassword: password
+eduPersonAffiliation: faculty
+eduPersonAffiliation: community
+
+dn: uid=jbutler985,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Butler
+givenName: Jo
+cn: Jo Butler
+uid: jbutler985
+mail: jbutler985@example.edu
+businessCategory:Purchasing
+userPassword: password
+eduPersonAffiliation: student
+eduPersonAffiliation: staff
+
+dn: uid=mmartinez986,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Martinez
+givenName: Mary
+cn: Mary Martinez
+uid: mmartinez986
+mail: mmartinez986@example.edu
+businessCategory:Engineering
+userPassword: password
+eduPersonAffiliation: faculty
+
+dn: uid=hmartinez,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Martinez
+givenName: Heather
+cn: Heather Martinez
+uid: hmartinez
+mail: hmartinez@example.edu
+businessCategory:Physical Education
+userPassword: password
+eduPersonAffiliation: alum
+
+dn: uid=twalters988,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Walters
+givenName: Thomas
+cn: Thomas Walters
+uid: twalters988
+mail: twalters988@example.edu
+businessCategory:Physical Education
+userPassword: password
+eduPersonAffiliation: faculty
+eduPersonAffiliation: community
+
+dn: uid=kwilliams989,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Williams
+givenName: Karl
+cn: Karl Williams
+uid: kwilliams989
+mail: kwilliams989@example.edu
+businessCategory:Financial Aid
+userPassword: password
+eduPersonAffiliation: community
+
+dn: uid=emartinez990,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Martinez
+givenName: Eric
+cn: Eric Martinez
+uid: emartinez990
+mail: emartinez990@example.edu
+businessCategory:Information Technology
+userPassword: password
+eduPersonAffiliation: faculty
+eduPersonAffiliation: community
+
+dn: uid=klee991,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Lee
+givenName: Karoline
+cn: Karoline Lee
+uid: klee991
+mail: klee991@example.edu
+businessCategory:Language Arts
+userPassword: password
+eduPersonAffiliation: faculty
+
+dn: uid=bjohnson992,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Johnson
+givenName: Bill
+cn: Bill Johnson
+uid: bjohnson992
+mail: bjohnson992@example.edu
+businessCategory:Purchasing
+userPassword: password
+eduPersonAffiliation: faculty
+eduPersonAffiliation: student
+
+dn: uid=wdavis993,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Davis
+givenName: William
+cn: William Davis
+uid: wdavis993
+mail: wdavis993@example.edu
+businessCategory:Financial Aid
+userPassword: password
+eduPersonAffiliation: staff
+eduPersonAffiliation: faculty
+
+dn: uid=bgonazles994,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Gonazles
+givenName: Blake
+cn: Blake Gonazles
+uid: bgonazles994
+mail: bgonazles994@example.edu
+businessCategory:Account Payable
+userPassword: password
+eduPersonAffiliation: student
+eduPersonAffiliation: community
+
+dn: uid=jvales995,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Vales
+givenName: Jennifer
+cn: Jennifer Vales
+uid: jvales995
+mail: jvales995@example.edu
+businessCategory:Accounting
+userPassword: password
+eduPersonAffiliation: member
+eduPersonAffiliation: student
+
+dn: uid=kjohnson996,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Johnson
+givenName: Kiersten
+cn: Kiersten Johnson
+uid: kjohnson996
+mail: kjohnson996@example.edu
+businessCategory:Computer Science
+userPassword: password
+eduPersonAffiliation: faculty
+
+dn: uid=ggrady,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Grady
+givenName: Greg
+cn: Greg Grady
+uid: ggrady
+mail: ggrady@example.edu
+businessCategory:Purchasing
+userPassword: password
+eduPersonAffiliation: student
+eduPersonAffiliation: faculty
+
+dn: uid=lbutler998,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Butler
+givenName: Lori
+cn: Lori Butler
+uid: lbutler998
+mail: lbutler998@example.edu
+businessCategory:Information Technology
+userPassword: password
+eduPersonAffiliation: member
+
+dn: uid=tgasper999,ou=People,dc=internet2,dc=edu
+objectClass: organizationalPerson
+objectClass: person
+objectClass: top
+objectClass: inetOrgPerson
+objectClass: eduPerson
+surname: Gasper
+givenName: Thomas
+cn: Thomas Gasper
+uid: tgasper999
+mail: tgasper999@example.edu
+businessCategory:Business
+userPassword: password
+eduPersonAffiliation: member
diff --git a/test-compose/docker-compose.yml b/test-compose/docker-compose.yml
new file mode 100644
index 00000000..b4547273
--- /dev/null
+++ b/test-compose/docker-compose.yml
@@ -0,0 +1,263 @@
+version: "3.3"
+
+services:
+  daemon:
+    build: ./daemon/
+    command: bash -c "while ! curl -s data:3306 > /dev/null; do echo waiting for mysql to start; sleep 3; done; exec daemon"
+    depends_on:
+     - data
+    environment:
+     - ENV=dev
+     - GROUPER_CLIENT_WEBSERVICE_PASSWORD_FILE=password
+     - GROUPER_DATABASE_PASSWORD_FILE=/run/secrets/database_password.txt
+     - RABBITMQ_PASSWORD_FILE=/run/secrets/rabbitmq_password.txt
+     - SUBJECT_SOURCE_LDAP_PASSWORD=password
+     - USERTOKEN=build-2
+    logging:
+      options:
+        tag: "grouper daemon"
+    networks:
+     - back
+    secrets:
+     - database_password.txt
+     - rabbitmq_password.txt
+     - source: grouper.hibernate.properties
+       target: grouper_grouper.hibernate.properties
+     - source: grouper-loader.properties
+       target: grouper_grouper-loader.properties
+     - source: subject.properties
+       target: grouper_subject.properties
+    volumes:
+     - type: bind
+       source: ./configs-and-secrets/grouper/grouper.properties
+       target: /opt/grouper/conf/grouper.properties
+     - type: bind
+       source: ./configs-and-secrets/grouper/grouper.client.properties
+       target: /opt/grouper/conf/grouper.client.properties
+
+
+  ui:
+    build: ./ui/
+    command: bash -c "while ! curl -s data:3306 > /dev/null; do echo waiting for mysql to start; sleep 3; done; while ! curl -s ldap://data:389 > /dev/null; do echo waiting for ldap to start; sleep 3; done; exec ui"
+    depends_on:
+     - data
+    environment:
+     - ENV=dev
+     - GROUPER_DATABASE_PASSWORD_FILE=/run/secrets/database_password.txt
+     - SUBJECT_SOURCE_LDAP_PASSWORD=password
+     - USERTOKEN=build-2
+    logging:
+      options:
+         tag: "grouper ui"
+    networks:
+     - front
+     - back
+    ports:
+     - "80:80"
+     - "443:443"
+    secrets:
+     - database_password.txt
+     - source: grouper.hibernate.properties
+       target: grouper_grouper.hibernate.properties
+     - source: grouper-loader.properties
+       target: grouper_grouper-loader.properties
+     - source: subject.properties
+       target: grouper_subject.properties
+     - source: sp-key.pem
+       target: shib_sp-key.pem
+     - source: host-key.pem
+    volumes:
+     - type: bind
+       source: ./configs-and-secrets/grouper/grouper.properties
+       target: /opt/grouper/conf/grouper.properties
+     - type: bind
+       source: ./configs-and-secrets/grouper/grouper.client.properties
+       target: /opt/grouper/conf/grouper.client.properties
+     - type: bind
+       source: ./configs-and-secrets/shibboleth/sp-cert.pem
+       target: /etc/shibboleth/sp-cert.pem
+     - type: bind
+       source: ./configs-and-secrets/shibboleth/shibboleth2.xml
+       target: /etc/shibboleth/shibboleth2.xml
+     - type: bind
+       source: ./configs-and-secrets/shibboleth/idp-metadata.xml
+       target: /etc/shibboleth/idp-metadata.xml
+     - type: bind
+       source: ./configs-and-secrets/httpd/host-cert.pem
+       target: /etc/pki/tls/certs/host-cert.pem
+     - type: bind
+       source: ./configs-and-secrets/httpd/host-cert.pem
+       target: /etc/pki/tls/certs/cachain.pem
+
+
+  ws:
+    build: ./ws/
+    command: bash -c "while ! curl -s data:3306 > /dev/null; do echo waiting for mysql to start; sleep 3; done; while ! curl -s ldap://data:389 > /dev/null; do echo waiting for ldap to start; sleep 3; done; exec ws"
+    depends_on:
+     - data
+    environment:
+     - ENV=dev
+     - GROUPER_DATABASE_PASSWORD_FILE=/run/secrets/database_password.txt
+     - SUBJECT_SOURCE_LDAP_PASSWORD=password
+     - USERTOKEN=build-2
+    logging:
+      options:
+        tag: "grouoer ws"
+    networks:
+     - front
+     - back
+    ports:
+     - "8443:443"
+    secrets:
+     - database_password.txt
+     - source: grouper.hibernate.properties
+       target: grouper_grouper.hibernate.properties
+     - source: grouper-loader.properties
+       target: grouper_grouper-loader.properties
+     - source: subject.properties
+       target: grouper_subject.properties
+     - source: sp-key.pem
+       target: shib_sp-key.pem
+     - source: host-key.pem
+    volumes:
+     - type: bind
+       source: ./configs-and-secrets/grouper/grouper.properties
+       target: /opt/grouper/conf/grouper.properties
+     - type: bind
+       source: ./configs-and-secrets/grouper/grouper.client.properties
+       target: /opt/grouper/conf/grouper.client.properties
+     - type: bind
+       source: ./configs-and-secrets/httpd/host-cert.pem
+       target: /etc/pki/tls/certs/host-cert.pem
+     - type: bind
+       source: ./configs-and-secrets/httpd/host-cert.pem
+       target: /etc/pki/tls/certs/cachain.pem
+
+
+#  scim:
+#    build: ./scim/
+#    command: bash -c "while ! curl -s data:3306 > /dev/null; do echo waiting for mysql to start; sleep 3; done; while ! curl -s ldap://data:389 > /dev/null; do echo waiting for ldap to start; sleep 3; done; exec scim"
+#    depends_on:
+#     - data
+#    networks:
+#     - front
+#     - back
+#    ports:
+#     - "9443:443"
+#    secrets:
+#     - source: grouper.hibernate.properties
+#       target: grouper_grouper.hibernate.properties
+#     - source: grouper-loader.properties
+#       target: grouper_grouper-loader.properties
+#     - source: ldap.properties
+#       target: grouper_ldap.properties
+#     - source: subject.properties
+#       target: grouper_subject.properties
+#     - source: host-key.pem
+#    volumes:
+#     - type: bind
+#       source: ./configs-and-secrets/grouper/grouper.properties
+#       target: /opt/grouper/conf/grouper.properties
+#     - type: bind
+#       source: ./configs-and-secrets/grouper/grouper.client.properties
+#       target: /opt/grouper/conf/grouper.client.properties
+#     - type: bind
+#       source: ./configs-and-secrets/httpd/host-cert.pem
+#       target: /etc/pki/tls/certs/host-cert.pem
+#     - type: bind
+#       source: ./configs-and-secrets/httpd/host-cert.pem
+#       target: /etc/pki/tls/certs/cachain.pem
+
+
+  gsh:
+    build: ./gsh/
+    depends_on:
+     - data
+    environment:
+     - ENV=dev
+     - GROUPER_DATABASE_PASSWORD_FILE=/run/secrets/database_password.txt
+     - SUBJECT_SOURCE_LDAP_PASSWORD=password
+     - USERTOKEN=build-2
+    logging:
+      options:
+         tag: "grouper gsh"
+    networks:
+     - back
+    secrets:
+     - database_password.txt
+     - source: grouper.hibernate.properties
+       target: grouper_grouper.hibernate.properties
+     - source: grouper-loader.properties
+       target: grouper_grouper-loader.properties
+     - source: subject.properties
+       target: grouper_subject.properties
+    volumes:
+     - type: bind
+       source: ./configs-and-secrets/grouper/grouper.properties
+       target: /opt/grouper/conf/grouper.properties
+     - type: bind
+       source: ./configs-and-secrets/grouper/grouper.client.properties
+       target: /opt/grouper/conf/grouper.client.properties
+
+
+  data:
+    build: ./data/
+    expose:
+     - "389"
+     - "3306"
+    networks:
+     - back
+    ports:
+     - "389:389"
+     - "3306:3306"
+
+
+  idp:
+    build: ./idp/
+    depends_on: 
+     - data
+    environment:
+     - JETTY_MAX_HEAP=64m
+     - JETTY_BROWSER_SSL_KEYSTORE_PASSWORD=password
+     - JETTY_BACKCHANNEL_SSL_KEYSTORE_PASSWORD=password
+    networks:
+     - front
+     - back
+    ports:
+     - "4443:4443"
+
+
+  rabbitmq:
+    image: rabbitmq:management
+    environment:
+     - RABBITMQ_NODENAME=docker-rabbit
+    hostname: rabbitmq
+    networks:
+     - front
+     - back
+    ports:
+     - "15672:15672"
+
+
+networks:
+  front:
+    driver: bridge
+  back:    
+    driver: bridge
+
+
+secrets:
+  database_password.txt:
+    file: ./configs-and-secrets/grouper/database_password.txt
+  grouper.hibernate.properties:
+    file: ./configs-and-secrets/grouper/grouper.hibernate.properties
+  grouper-loader.properties:
+    file: ./configs-and-secrets/grouper/grouper-loader.properties
+  host-key.pem:
+    file: ./configs-and-secrets/httpd/host-key.pem
+  rabbitmq_password.txt:
+    file: ./configs-and-secrets/grouper/rabbitmq_password.txt
+  subject.properties:
+    file: ./configs-and-secrets/grouper/subject.properties
+  sp-key.pem:
+    file: ./configs-and-secrets/shibboleth/sp-key.pem
diff --git a/test-compose/gsh/Dockerfile b/test-compose/gsh/Dockerfile
new file mode 100644
index 00000000..33023280
--- /dev/null
+++ b/test-compose/gsh/Dockerfile
@@ -0,0 +1,5 @@
+FROM tier/grouper:latest
+
+MAINTAINER tier-packaging@internet2.edu <tier-packaging@internet2.edu>
+
+CMD ["gsh"]
diff --git a/test-compose/idp/Dockerfile b/test-compose/idp/Dockerfile
new file mode 100644
index 00000000..7d0b512d
--- /dev/null
+++ b/test-compose/idp/Dockerfile
@@ -0,0 +1,5 @@
+FROM unicon/shibboleth-idp:latest
+
+LABEL author="tier-packaging@internet2.edu <tier-packaging@internet2.edu>"
+
+COPY shibboleth-idp/ /opt/shibboleth-idp/
diff --git a/test-compose/idp/shibboleth-idp/conf/attribute-filter.xml b/test-compose/idp/shibboleth-idp/conf/attribute-filter.xml
new file mode 100644
index 00000000..62000f10
--- /dev/null
+++ b/test-compose/idp/shibboleth-idp/conf/attribute-filter.xml
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+    This file is an EXAMPLE policy file.  While the policy presented in this 
+    example file is illustrative of some simple cases, it relies on the names of
+    non-existent example services and the example attributes demonstrated in the
+    default attribute-resolver.xml file.
+    
+    Deployers should refer to the documentation for a complete list of components
+    and their options.
+-->
+<afp:AttributeFilterPolicyGroup id="ShibbolethFilterPolicy"
+        xmlns:afp="urn:mace:shibboleth:2.0:afp"
+        xmlns:basic="urn:mace:shibboleth:2.0:afp:mf:basic"
+        xmlns:saml="urn:mace:shibboleth:2.0:afp:mf:saml"
+        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+        xsi:schemaLocation="urn:mace:shibboleth:2.0:afp http://shibboleth.net/schema/idp/shibboleth-afp.xsd
+                            urn:mace:shibboleth:2.0:afp:mf:basic http://shibboleth.net/schema/idp/shibboleth-afp-mf-basic.xsd
+                            urn:mace:shibboleth:2.0:afp:mf:saml http://shibboleth.net/schema/idp/shibboleth-afp-mf-saml.xsd">
+
+    <!-- Release some attributes to an SP. -->
+    <afp:AttributeFilterPolicy id="example1">
+        <afp:PolicyRequirementRule xsi:type="basic:AttributeRequesterString" value="https://grouperdemo/shibboleth" />
+
+        <afp:AttributeRule attributeID="eduPersonPrincipalName">
+            <afp:PermitValueRule xsi:type="basic:ANY" />
+        </afp:AttributeRule>
+
+        <afp:AttributeRule attributeID="uid">
+            <afp:PermitValueRule xsi:type="basic:ANY" />
+        </afp:AttributeRule>
+
+        <afp:AttributeRule attributeID="mail">
+            <afp:PermitValueRule xsi:type="basic:ANY" />
+        </afp:AttributeRule>
+
+    </afp:AttributeFilterPolicy>
+</afp:AttributeFilterPolicyGroup>
diff --git a/test-compose/idp/shibboleth-idp/conf/attribute-resolver.xml b/test-compose/idp/shibboleth-idp/conf/attribute-resolver.xml
new file mode 100644
index 00000000..a907b19e
--- /dev/null
+++ b/test-compose/idp/shibboleth-idp/conf/attribute-resolver.xml
@@ -0,0 +1,293 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+    This file is an EXAMPLE configuration file containing lots of commented
+    example attributes, encoders, and a couple of example data connectors.
+    
+    Not all attribute definitions or data connectors are demonstrated, but
+    a variety of LDAP attributes, some common to Shibboleth deployments and
+    many not, are included.
+    
+    Deployers should refer to the Shibboleth 2 documentation for a complete
+    list of components  and their options.
+-->
+<resolver:AttributeResolver
+        xmlns:resolver="urn:mace:shibboleth:2.0:resolver"
+        xmlns:pc="urn:mace:shibboleth:2.0:resolver:pc"
+        xmlns:ad="urn:mace:shibboleth:2.0:resolver:ad"
+        xmlns:dc="urn:mace:shibboleth:2.0:resolver:dc"
+        xmlns:enc="urn:mace:shibboleth:2.0:attribute:encoder"
+        xmlns:sec="urn:mace:shibboleth:2.0:security"
+        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+        xsi:schemaLocation="urn:mace:shibboleth:2.0:resolver http://shibboleth.net/schema/idp/shibboleth-attribute-resolver.xsd
+                            urn:mace:shibboleth:2.0:resolver:pc http://shibboleth.net/schema/idp/shibboleth-attribute-resolver-pc.xsd
+                            urn:mace:shibboleth:2.0:resolver:ad http://shibboleth.net/schema/idp/shibboleth-attribute-resolver-ad.xsd
+                            urn:mace:shibboleth:2.0:resolver:dc http://shibboleth.net/schema/idp/shibboleth-attribute-resolver-dc.xsd
+                            urn:mace:shibboleth:2.0:attribute:encoder http://shibboleth.net/schema/idp/shibboleth-attribute-encoder.xsd
+                            urn:mace:shibboleth:2.0:security http://shibboleth.net/schema/idp/shibboleth-security.xsd">
+
+    <!-- ========================================== -->
+    <!--      Attribute Definitions                 -->
+    <!-- ========================================== -->
+
+    <!-- Schema: Core schema attributes-->
+    <resolver:AttributeDefinition xsi:type="ad:Simple" id="uid" sourceAttributeID="uid">
+        <resolver:Dependency ref="myLDAP" />
+        <resolver:AttributeEncoder xsi:type="enc:SAML1String" name="urn:mace:dir:attribute-def:uid" encodeType="false" />
+        <resolver:AttributeEncoder xsi:type="enc:SAML2String" name="urn:oid:0.9.2342.19200300.100.1.1" friendlyName="uid" encodeType="false" />
+    </resolver:AttributeDefinition>
+
+    <resolver:AttributeDefinition xsi:type="ad:Simple" id="mail" sourceAttributeID="mail">
+        <resolver:Dependency ref="myLDAP" />
+        <resolver:AttributeEncoder xsi:type="enc:SAML1String" name="urn:mace:dir:attribute-def:mail" encodeType="false" />
+        <resolver:AttributeEncoder xsi:type="enc:SAML2String" name="urn:oid:0.9.2342.19200300.100.1.3" friendlyName="mail" encodeType="false" />
+    </resolver:AttributeDefinition>
+<!--
+    <resolver:AttributeDefinition xsi:type="ad:Simple" id="homePhone" sourceAttributeID="homePhone">
+        <resolver:Dependency ref="myLDAP" />
+        <resolver:AttributeEncoder xsi:type="enc:SAML1String" name="urn:mace:dir:attribute-def:homePhone" encodeType="false" />
+        <resolver:AttributeEncoder xsi:type="enc:SAML2String" name="urn:oid:0.9.2342.19200300.100.1.20" friendlyName="homePhone" encodeType="false" />
+    </resolver:AttributeDefinition>
+
+    <resolver:AttributeDefinition xsi:type="ad:Simple" id="homePostalAddress" sourceAttributeID="homePostalAddress">
+        <resolver:Dependency ref="myLDAP" />
+        <resolver:AttributeEncoder xsi:type="enc:SAML1String" name="urn:mace:dir:attribute-def:homePostalAddress" encodeType="false" />
+        <resolver:AttributeEncoder xsi:type="enc:SAML2String" name="urn:oid:0.9.2342.19200300.100.1.39" friendlyName="homePostalAddress" encodeType="false" />
+    </resolver:AttributeDefinition>
+
+    <resolver:AttributeDefinition xsi:type="ad:Simple" id="mobileNumber" sourceAttributeID="mobile">
+        <resolver:Dependency ref="myLDAP" />
+        <resolver:AttributeEncoder xsi:type="enc:SAML1String" name="urn:mace:dir:attribute-def:mobile" encodeType="false" />
+        <resolver:AttributeEncoder xsi:type="enc:SAML2String" name="urn:oid:0.9.2342.19200300.100.1.41" friendlyName="mobile" encodeType="false" />
+    </resolver:AttributeDefinition>
+
+    <resolver:AttributeDefinition xsi:type="ad:Simple" id="pagerNumber" sourceAttributeID="pager">
+        <resolver:Dependency ref="myLDAP" />
+        <resolver:AttributeEncoder xsi:type="enc:SAML1String" name="urn:mace:dir:attribute-def:pager" encodeType="false" />
+        <resolver:AttributeEncoder xsi:type="enc:SAML2String" name="urn:oid:0.9.2342.19200300.100.1.42" friendlyName="pager" encodeType="false" />
+    </resolver:AttributeDefinition>
+-->
+    <resolver:AttributeDefinition xsi:type="ad:Simple" id="surname" sourceAttributeID="sn">
+        <resolver:Dependency ref="myLDAP" />
+        <resolver:AttributeEncoder xsi:type="enc:SAML1String" name="urn:mace:dir:attribute-def:sn" encodeType="false" />
+        <resolver:AttributeEncoder xsi:type="enc:SAML2String" name="urn:oid:2.5.4.4" friendlyName="sn" encodeType="false" />
+    </resolver:AttributeDefinition>
+<!--
+    <resolver:AttributeDefinition xsi:type="ad:Simple" id="locality" sourceAttributeID="l">
+        <resolver:Dependency ref="myLDAP" />
+        <resolver:AttributeEncoder xsi:type="enc:SAML1String" name="urn:mace:dir:attribute-def:l" encodeType="false" />
+        <resolver:AttributeEncoder xsi:type="enc:SAML2String" name="urn:oid:2.5.4.7" friendlyName="l" encodeType="false" />
+    </resolver:AttributeDefinition>
+
+    <resolver:AttributeDefinition xsi:type="ad:Simple" id="stateProvince" sourceAttributeID="st">
+        <resolver:Dependency ref="myLDAP" />
+        <resolver:AttributeEncoder xsi:type="enc:SAML1String" name="urn:mace:dir:attribute-def:st" encodeType="false" />
+        <resolver:AttributeEncoder xsi:type="enc:SAML2String" name="urn:oid:2.5.4.8" friendlyName="st" encodeType="false" />
+    </resolver:AttributeDefinition>
+
+    <resolver:AttributeDefinition xsi:type="ad:Simple" id="street" sourceAttributeID="street">
+        <resolver:Dependency ref="myLDAP" />
+        <resolver:AttributeEncoder xsi:type="enc:SAML1String" name="urn:mace:dir:attribute-def:street" encodeType="false" />
+        <resolver:AttributeEncoder xsi:type="enc:SAML2String" name="urn:oid:2.5.4.9" friendlyName="street" encodeType="false" />
+    </resolver:AttributeDefinition>
+
+    <resolver:AttributeDefinition xsi:type="ad:Simple" id="organizationName" sourceAttributeID="o">
+        <resolver:Dependency ref="myLDAP" />
+        <resolver:AttributeEncoder xsi:type="enc:SAML1String" name="urn:mace:dir:attribute-def:o" encodeType="false" />
+        <resolver:AttributeEncoder xsi:type="enc:SAML2String" name="urn:oid:2.5.4.10" friendlyName="o" encodeType="false" />
+    </resolver:AttributeDefinition>
+
+    <resolver:AttributeDefinition xsi:type="ad:Simple" id="organizationalUnit" sourceAttributeID="ou">
+        <resolver:Dependency ref="myLDAP" />
+        <resolver:AttributeEncoder xsi:type="enc:SAML1String" name="urn:mace:dir:attribute-def:ou" encodeType="false" />
+        <resolver:AttributeEncoder xsi:type="enc:SAML2String" name="urn:oid:2.5.4.11" friendlyName="ou" encodeType="false" />
+    </resolver:AttributeDefinition>
+
+    <resolver:AttributeDefinition xsi:type="ad:Simple" id="title" sourceAttributeID="title">
+        <resolver:Dependency ref="myLDAP" />
+        <resolver:AttributeEncoder xsi:type="enc:SAML1String" name="urn:mace:dir:attribute-def:title" encodeType="false" />
+        <resolver:AttributeEncoder xsi:type="enc:SAML2String" name="urn:oid:2.5.4.12" friendlyName="title" encodeType="false" />
+    </resolver:AttributeDefinition>
+
+    <resolver:AttributeDefinition xsi:type="ad:Simple" id="postalAddress" sourceAttributeID="postalAddress">
+        <resolver:Dependency ref="myLDAP" />
+        <resolver:AttributeEncoder xsi:type="enc:SAML1String" name="urn:mace:dir:attribute-def:postalAddress" encodeType="false" />
+        <resolver:AttributeEncoder xsi:type="enc:SAML2String" name="urn:oid:2.5.4.16" friendlyName="postalAddress" encodeType="false" />
+    </resolver:AttributeDefinition>
+
+    <resolver:AttributeDefinition xsi:type="ad:Simple" id="postalCode" sourceAttributeID="postalCode">
+        <resolver:Dependency ref="myLDAP" />
+        <resolver:AttributeEncoder xsi:type="enc:SAML1String" name="urn:mace:dir:attribute-def:postalCode" encodeType="false" />
+        <resolver:AttributeEncoder xsi:type="enc:SAML2String" name="urn:oid:2.5.4.17" friendlyName="postalCode" encodeType="false" />
+    </resolver:AttributeDefinition>
+
+    <resolver:AttributeDefinition xsi:type="ad:Simple" id="postOfficeBox" sourceAttributeID="postOfficeBox">
+        <resolver:Dependency ref="myLDAP" />
+        <resolver:AttributeEncoder xsi:type="enc:SAML1String" name="urn:mace:dir:attribute-def:postOfficeBox" encodeType="false" />
+        <resolver:AttributeEncoder xsi:type="enc:SAML2String" name="urn:oid:2.5.4.18" friendlyName="postOfficeBox" encodeType="false" />
+    </resolver:AttributeDefinition>
+
+    <resolver:AttributeDefinition xsi:type="ad:Simple" id="telephoneNumber" sourceAttributeID="telephoneNumber">
+        <resolver:Dependency ref="myLDAP" />
+        <resolver:AttributeEncoder xsi:type="enc:SAML1String" name="urn:mace:dir:attribute-def:telephoneNumber" encodeType="false" />
+        <resolver:AttributeEncoder xsi:type="enc:SAML2String" name="urn:oid:2.5.4.20" friendlyName="telephoneNumber" encodeType="false" />
+    </resolver:AttributeDefinition>
+-->
+    <resolver:AttributeDefinition xsi:type="ad:Simple" id="givenName" sourceAttributeID="givenName">
+        <resolver:Dependency ref="myLDAP" />
+        <resolver:AttributeEncoder xsi:type="enc:SAML1String" name="urn:mace:dir:attribute-def:givenName" encodeType="false" />
+        <resolver:AttributeEncoder xsi:type="enc:SAML2String" name="urn:oid:2.5.4.42" friendlyName="givenName" encodeType="false" />
+    </resolver:AttributeDefinition>
+<!--
+    <resolver:AttributeDefinition xsi:type="ad:Simple" id="initials" sourceAttributeID="initials">
+        <resolver:Dependency ref="myLDAP" />
+        <resolver:AttributeEncoder xsi:type="enc:SAML1String" name="urn:mace:dir:attribute-def:initials" encodeType="false" />
+        <resolver:AttributeEncoder xsi:type="enc:SAML2String" name="urn:oid:2.5.4.43" friendlyName="initials" encodeType="false" />
+    </resolver:AttributeDefinition>
+     -->
+
+    <!-- Schema: inetOrgPerson attributes-->
+    <!--
+    <resolver:AttributeDefinition xsi:type="ad:Simple" id="departmentNumber" sourceAttributeID="departmentNumber">
+        <resolver:Dependency ref="myLDAP" />
+        <resolver:AttributeEncoder xsi:type="enc:SAML1String" name="urn:mace:dir:attribute-def:departmentNumber" encodeType="false" />
+        <resolver:AttributeEncoder xsi:type="enc:SAML2String" name="urn:oid:2.16.840.1.113730.3.1.2" friendlyName="departmentNumber" encodeType="false" />
+    </resolver:AttributeDefinition>
+    
+    <resolver:AttributeDefinition xsi:type="ad:Simple" id="displayName" sourceAttributeID="displayName">
+        <resolver:Dependency ref="myLDAP" />
+        <resolver:AttributeEncoder xsi:type="enc:SAML1String" name="urn:mace:dir:attribute-def:displayName" encodeType="false" />
+        <resolver:AttributeEncoder xsi:type="enc:SAML2String" name="urn:oid:2.16.840.1.113730.3.1.241" friendlyName="displayName" encodeType="false" />
+    </resolver:AttributeDefinition> 
+
+    <resolver:AttributeDefinition xsi:type="ad:Simple" id="employeeNumber" sourceAttributeID="employeeNumber">
+        <resolver:Dependency ref="myLDAP" />
+        <resolver:AttributeEncoder xsi:type="enc:SAML1String" name="urn:mace:dir:attribute-def:employeeNumber" encodeType="false" />
+        <resolver:AttributeEncoder xsi:type="enc:SAML2String" name="urn:oid:2.16.840.1.113730.3.1.3" friendlyName="employeeNumber" encodeType="false" />
+    </resolver:AttributeDefinition>
+
+    <resolver:AttributeDefinition xsi:type="ad:Simple" id="employeeType" sourceAttributeID="employeeType">
+        <resolver:Dependency ref="myLDAP" />
+        <resolver:AttributeEncoder xsi:type="enc:SAML1String" name="urn:mace:dir:attribute-def:employeeType" encodeType="false" />
+        <resolver:AttributeEncoder xsi:type="enc:SAML2String" name="urn:oid:2.16.840.1.113730.3.1.4" friendlyName="employeeType" encodeType="false" />
+    </resolver:AttributeDefinition>
+
+    <resolver:AttributeDefinition xsi:type="ad:Simple" id="jpegPhoto" sourceAttributeID="jpegPhoto">
+        <resolver:Dependency ref="myLDAP" />
+        <resolver:AttributeEncoder xsi:type="enc:SAML1String" name="urn:mace:dir:attribute-def:jpegPhoto" encodeType="false" />
+        <resolver:AttributeEncoder xsi:type="enc:SAML2String" name="urn:oid:0.9.2342.19200300.100.1.60" friendlyName="jpegPhoto" encodeType="false" />
+    </resolver:AttributeDefinition>
+
+    <resolver:AttributeDefinition xsi:type="ad:Simple" id="preferredLanguage" sourceAttributeID="preferredLanguage">
+        <resolver:Dependency ref="myLDAP" />
+        <resolver:AttributeEncoder xsi:type="enc:SAML1String" name="urn:mace:dir:attribute-def:preferredLanguage" encodeType="false" />
+        <resolver:AttributeEncoder xsi:type="enc:SAML2String" name="urn:oid:2.16.840.1.113730.3.1.39" friendlyName="preferredLanguage" encodeType="false" />
+    </resolver:AttributeDefinition>
+    -->
+
+    <!-- Schema: eduPerson attributes -->
+    
+    <resolver:AttributeDefinition xsi:type="ad:Simple" id="eduPersonAffiliation" sourceAttributeID="cn">
+        <resolver:Dependency ref="myLDAP" />
+        <resolver:AttributeEncoder xsi:type="enc:SAML1String" name="urn:mace:dir:attribute-def:eduPersonAffiliation" encodeType="false" />
+        <resolver:AttributeEncoder xsi:type="enc:SAML2String" name="urn:oid:1.3.6.1.4.1.5923.1.1.1.1" friendlyName="eduPersonAffiliation" encodeType="false" />
+    </resolver:AttributeDefinition>
+<!--
+    <resolver:AttributeDefinition xsi:type="ad:Simple" id="eduPersonEntitlement" sourceAttributeID="eduPersonEntitlement">
+        <resolver:Dependency ref="myLDAP" />
+        <resolver:AttributeEncoder xsi:type="enc:SAML1String" name="urn:mace:dir:attribute-def:eduPersonEntitlement" encodeType="false" />
+        <resolver:AttributeEncoder xsi:type="enc:SAML2String" name="urn:oid:1.3.6.1.4.1.5923.1.1.1.7" friendlyName="eduPersonEntitlement" encodeType="false" />
+    </resolver:AttributeDefinition>
+
+    <resolver:AttributeDefinition xsi:type="ad:Simple" id="eduPersonNickname" sourceAttributeID="eduPersonNickname">
+        <resolver:Dependency ref="myLDAP" />
+        <resolver:AttributeEncoder xsi:type="enc:SAML1String" name="urn:mace:dir:attribute-def:eduPersonNickname" encodeType="false" />
+        <resolver:AttributeEncoder xsi:type="enc:SAML2String" name="urn:oid:1.3.6.1.4.1.5923.1.1.1.2" friendlyName="eduPersonNickname" encodeType="false" />
+    </resolver:AttributeDefinition>
+
+    <resolver:AttributeDefinition xsi:type="ad:Simple" id="eduPersonPrimaryAffiliation" sourceAttributeID="eduPersonPrimaryAffiliation">
+        <resolver:Dependency ref="myLDAP" />
+        <resolver:AttributeEncoder xsi:type="enc:SAML1String" name="urn:mace:dir:attribute-def:eduPersonPrimaryAffiliation" encodeType="false" />
+        <resolver:AttributeEncoder xsi:type="enc:SAML2String" name="urn:oid:1.3.6.1.4.1.5923.1.1.1.5" friendlyName="eduPersonPrimaryAffiliation" encodeType="false" />
+    </resolver:AttributeDefinition>
+
+    <resolver:AttributeDefinition xsi:type="ad:Scoped" id="eduPersonUniqueId" scope="%{idp.scope}" sourceAttributeID="localUniqueId">
+        <resolver:Dependency ref="myLDAP" />
+        <resolver:AttributeEncoder xsi:type="enc:SAML1ScopedString" name="urn:oid:1.3.6.1.4.1.5923.1.1.1.13" encodeType="false" />
+        <resolver:AttributeEncoder xsi:type="enc:SAML2ScopedString" name="urn:oid:1.3.6.1.4.1.5923.1.1.1.13" friendlyName="eduPersonUniqueId" encodeType="false" />
+    </resolver:AttributeDefinition>
+-->
+    <resolver:AttributeDefinition xsi:type="ad:Scoped" id="eduPersonPrincipalName" scope="%{idp.scope}" sourceAttributeID="eduPersonPrincipalName">
+        <resolver:Dependency ref="myLDAP" />
+        <resolver:AttributeEncoder xsi:type="enc:SAML1ScopedString" name="urn:mace:dir:attribute-def:eduPersonPrincipalName" encodeType="false" />
+        <resolver:AttributeEncoder xsi:type="enc:SAML2ScopedString" name="urn:oid:1.3.6.1.4.1.5923.1.1.1.6" friendlyName="eduPersonPrincipalName" encodeType="false" />
+    </resolver:AttributeDefinition>
+<!--
+    <resolver:AttributeDefinition xsi:type="ad:Prescoped" id="eduPersonPrincipalNamePrior" sourceAttributeID="eduPersonPrincipalNamePrior">
+        <resolver:Dependency ref="myLDAP" />
+        <resolver:AttributeEncoder xsi:type="enc:SAML1ScopedString" name="urn:oid:1.3.6.1.4.1.5923.1.1.1.12" encodeType="false" />
+        <resolver:AttributeEncoder xsi:type="enc:SAML2ScopedString" name="urn:oid:1.3.6.1.4.1.5923.1.1.1.12" friendlyName="eduPersonPrincipalNamePrior" encodeType="false" />
+    </resolver:AttributeDefinition>
+
+    <resolver:AttributeDefinition xsi:type="ad:Scoped" id="eduPersonScopedAffiliation" scope="%{idp.scope}" sourceAttributeID="eduPersonAffiliation">
+        <resolver:Dependency ref="myLDAP" />
+        <resolver:AttributeEncoder xsi:type="enc:SAML1ScopedString" name="urn:mace:dir:attribute-def:eduPersonScopedAffiliation" encodeType="false" />
+        <resolver:AttributeEncoder xsi:type="enc:SAML2ScopedString" name="urn:oid:1.3.6.1.4.1.5923.1.1.1.9" friendlyName="eduPersonScopedAffiliation" encodeType="false" />
+    </resolver:AttributeDefinition>
+    
+    <resolver:AttributeDefinition xsi:type="ad:Simple" id="eduPersonAssurance" sourceAttributeID="eduPersonAssurance">
+        <resolver:Dependency ref="myLDAP" />
+        <resolver:AttributeEncoder xsi:type="enc:SAML1String" name="urn:mace:dir:attribute-def:eduPersonAssurance" encodeType="false" />
+        <resolver:AttributeEncoder xsi:type="enc:SAML2String" name="urn:oid:1.3.6.1.4.1.5923.1.1.1.11" friendlyName="eduPersonAssurance" encodeType="false" />
+    </resolver:AttributeDefinition>
+    -->
+
+    <!-- ========================================== -->
+    <!--      Data Connectors                       -->
+    <!-- ========================================== -->
+
+    <!-- Example Static Connector -->
+    <!--
+    <resolver:DataConnector id="staticAttributes" xsi:type="dc:Static">
+        <dc:Attribute id="eduPersonAffiliation">
+            <dc:Value>member</dc:Value>
+        </dc:Attribute>
+    </resolver:DataConnector>
+    -->
+
+    <!-- Example Relational Database Connector -->
+    <!--
+    <resolver:DataConnector id="mySIS" xsi:type="dc:RelationalDatabase">
+        <dc:ApplicationManagedConnection jdbcDriver="oracle.jdbc.driver.OracleDriver"
+                                         jdbcURL="jdbc:oracle:thin:@db.example.org:1521:SomeDB" 
+                                         jdbcUserName="myid" 
+                                         jdbcPassword="mypassword" />
+        <dc:QueryTemplate>
+            <![CDATA[
+                SELECT * FROM student WHERE gzbtpid = '$requestContext.principalName'
+            ]]>
+        </dc:QueryTemplate>
+
+        <dc:Column columnName="gzbtpid" attributeID="uid" />
+        <dc:Column columnName="fqlft" attributeID="gpa" />
+    </resolver:DataConnector>
+     -->
+
+    <resolver:DataConnector id="myLDAP" xsi:type="dc:LDAPDirectory"
+        ldapURL="%{idp.attribute.resolver.LDAP.ldapURL}"
+        baseDN="%{idp.attribute.resolver.LDAP.baseDN}" 
+        principal="%{idp.attribute.resolver.LDAP.bindDN}"
+        principalCredential="%{idp.attribute.resolver.LDAP.bindDNCredential}"
+        useStartTLS="%{idp.attribute.resolver.LDAP.useStartTLS:true}">
+        <dc:FilterTemplate>
+            <![CDATA[
+                %{idp.attribute.resolver.LDAP.searchFilter}
+            ]]>
+        </dc:FilterTemplate>
+        <!--
+        <dc:StartTLSTrustCredential id="LDAPtoIdPCredential" xsi:type="sec:X509ResourceBacked">
+            <sec:Certificate>%{idp.attribute.resolver.LDAP.trustCertificates}</sec:Certificate>
+        </dc:StartTLSTrustCredential>
+    -->
+    </resolver:DataConnector>
+
+</resolver:AttributeResolver>
\ No newline at end of file
diff --git a/test-compose/idp/shibboleth-idp/conf/idp.properties b/test-compose/idp/shibboleth-idp/conf/idp.properties
new file mode 100644
index 00000000..4396f49d
--- /dev/null
+++ b/test-compose/idp/shibboleth-idp/conf/idp.properties
@@ -0,0 +1,195 @@
+# Load any additional property resources from a comma-delimited list
+idp.additionalProperties= /conf/ldap.properties, /conf/saml-nameid.properties, /conf/services.properties
+
+# Set the entityID of the IdP
+idp.entityID= https://idptestbed/idp/shibboleth
+
+# Set the scope used in the attribute resolver for scoped attributes
+idp.scope= example.org
+
+# General cookie properties (maxAge only applies to persistent cookies)
+#idp.cookie.secure = false
+#idp.cookie.httpOnly = true
+#idp.cookie.domain =
+#idp.cookie.path =
+#idp.cookie.maxAge = 31536000
+
+# Set the location of user-supplied web flow definitions
+#idp.webflows = %{idp.home}/flows
+
+# Set the location of Velocity view templates
+#idp.views = %{idp.home}/views
+
+# Settings for internal AES encryption key
+#idp.sealer.storeType = JCEKS
+#idp.sealer.updateInterval = PT15M
+#idp.sealer.aliasBase = secret
+idp.sealer.storeResource= %{idp.home}/credentials/sealer.jks
+idp.sealer.versionResource= %{idp.home}/credentials/sealer.kver
+idp.sealer.storePassword= password
+idp.sealer.keyPassword= password
+
+# Settings for public/private signing and encryption key(s)
+# During decryption key rollover, point the ".2" properties at a second
+# keypair, uncomment in credentials.xml, then publish it in your metadata.
+idp.signing.key= %{idp.home}/credentials/idp-signing.key
+idp.signing.cert= %{idp.home}/credentials/idp-signing.crt
+idp.encryption.key= %{idp.home}/credentials/idp-encryption.key
+idp.encryption.cert= %{idp.home}/credentials/idp-encryption.crt
+#idp.encryption.key.2 = %{idp.home}/credentials/idp-encryption-old.key
+#idp.encryption.cert.2 = %{idp.home}/credentials/idp-encryption-old.crt
+
+# Sets the bean ID to use as a default security configuration set
+#idp.security.config = shibboleth.DefaultSecurityConfiguration
+
+# To default to SHA-1, set to shibboleth.SigningConfiguration.SHA1
+#idp.signing.config = shibboleth.SigningConfiguration.SHA256
+
+# Configures trust evaluation of keys used by services at runtime
+# Defaults to supporting both explicit key and PKIX using SAML metadata.
+#idp.trust.signatures = shibboleth.ChainingSignatureTrustEngine
+# To pick only one set to one of:
+#   shibboleth.ExplicitKeySignatureTrustEngine, shibboleth.PKIXSignatureTrustEngine
+#idp.trust.certificates = shibboleth.ChainingX509TrustEngine
+# To pick only one set to one of:
+#   shibboleth.ExplicitKeyX509TrustEngine, shibboleth.PKIXX509TrustEngine
+
+# If true, encryption will happen whenever a key to use can be located, but
+# failure to encrypt won't result in request failure.
+#idp.encryption.optional = false
+
+# Configuration of client- and server-side storage plugins
+#idp.storage.cleanupInterval = PT10M
+#idp.storage.htmlLocalStorage = false
+
+# Set to true to expose more detailed errors in responses to SPs
+#idp.errors.detailed = false
+# Set to false to skip signing of SAML response messages that signal errors
+#idp.errors.signed = true
+# Name of bean containing a list of Java exception classes to ignore
+#idp.errors.excludedExceptions = ExceptionClassListBean
+# Name of bean containing a property set mapping exception names to views
+#idp.errors.exceptionMappings = ExceptionToViewPropertyBean
+# Set if a different default view name for events and exceptions is needed
+#idp.errors.defaultView = error
+
+# Set to false to disable the IdP session layer
+#idp.session.enabled = true
+
+# Set to "shibboleth.StorageService" for server-side storage of user sessions
+#idp.session.StorageService = shibboleth.ClientSessionStorageService
+idp.session.StorageService = shibboleth.StorageService
+
+# Size of session IDs
+#idp.session.idSize = 32
+# Bind sessions to IP addresses
+#idp.session.consistentAddress = true
+# Inactivity timeout
+#idp.session.timeout = PT60M
+# Extra time to store sessions for logout
+#idp.session.slop = PT0S
+# Tolerate storage-related errors
+#idp.session.maskStorageFailure = false
+# Track information about SPs logged into
+#idp.session.trackSPSessions = false
+# Support lookup by SP for SAML logout
+#idp.session.secondaryServiceIndex = false
+# Length of time to track SP sessions
+#idp.session.defaultSPlifetime = PT2H
+
+# Regular expression matching login flows to enable, e.g. IPAddress|Password
+idp.authn.flows= Password
+
+# Regular expression of forced "initial" methods when no session exists,
+# usually in conjunction with the idp.authn.resolveAttribute property below.
+#idp.authn.flows.initial = Password
+
+# Set to an attribute ID to resolve prior to selecting authentication flows;
+# its values are used to filter the flows to allow.
+#idp.authn.resolveAttribute = eduPersonAssurance
+
+# Default lifetime and timeout of various authentication methods
+#idp.authn.defaultLifetime = PT60M
+#idp.authn.defaultTimeout = PT30M
+
+# Whether to prioritize "active" results when an SP requests more than
+# one possible matching login method (V2 behavior was to favor them)
+#idp.authn.favorSSO = true
+
+# Whether to fail requests when a user identity after authentication
+# doesn't match the identity in a pre-existing session.
+#idp.authn.identitySwitchIsError = false
+
+# Set to "shibboleth.StorageService" or custom bean for alternate storage of consent
+#idp.consent.StorageService = shibboleth.ClientPersistentStorageService
+
+# Set to "shibboleth.consent.AttributeConsentStorageKey" to use an attribute
+# to key user consent storage records (and set the attribute name)
+#idp.consent.userStorageKey = shibboleth.consent.PrincipalConsentStorageKey
+#idp.consent.userStorageKeyAttribute = uid
+
+# Flags controlling how built-in attribute consent feature operates
+#idp.consent.allowDoNotRemember = true
+#idp.consent.allowGlobal = true
+#idp.consent.allowPerAttribute = false
+
+# Whether attribute values and terms of use text are compared
+#idp.consent.compareValues = false
+# Maximum number of consent records for space-limited storage (e.g. cookies)
+#idp.consent.maxStoredRecords = 10
+# Maximum number of consent records for larger/server-side storage (0 = no limit)
+#idp.consent.expandedMaxStoredRecords = 0
+
+# Time in milliseconds to expire consent storage records.
+#idp.consent.storageRecordLifetime = P1Y
+
+# Whether to lookup metadata, etc. for every SP involved in a logout
+# for use by user interface logic; adds overhead so off by default.
+#idp.logout.elaboration = false
+
+# Whether to require logout requests be signed/authenticated.
+#idp.logout.authenticated = true
+
+# Message freshness and replay cache tuning
+#idp.policy.messageLifetime = PT3M
+#idp.policy.clockSkew = PT3M
+
+# Set to custom bean for alternate storage of replay cache
+#idp.replayCache.StorageService = shibboleth.StorageService
+
+# Toggles whether to allow outbound messages via SAML artifact
+#idp.artifact.enabled = true
+# Suppresses typical signing/encryption when artifact binding used
+#idp.artifact.secureChannel = true
+# May differ to direct SAML 2 artifact lookups to specific server nodes
+#idp.artifact.endpointIndex = 2
+# Set to custom bean for alternate storage of artifact map state
+#idp.artifact.StorageService = shibboleth.StorageService
+
+# Name of access control policy for various admin flows
+idp.status.accessPolicy= AccessByIPAddress
+idp.resolvertest.accessPolicy= AccessByIPAddress
+idp.reload.accessPolicy= AccessByIPAddress
+
+# Comma-delimited languages to use if not match can be found with the
+# browser-supported languages, defaults to an empty list.
+idp.ui.fallbackLanguages= en,fr,de
+
+# Storage service used by CAS protocol
+# Defaults to shibboleth.StorageService (in-memory)
+# MUST be server-side storage (e.g. in-memory, memcached, database)
+# NOTE that idp.session.StorageService requires server-side storage
+# when CAS protocol is enabled
+idp.cas.StorageService=shibboleth.StorageService
+
+# CAS service registry implementation class
+#idp.cas.serviceRegistryClass=net.shibboleth.idp.cas.service.PatternServiceRegistry
+
+# Profile flows in which the ProfileRequestContext should be exposed
+# in servlet request under the key "opensamlProfileRequestContext"
+#idp.profile.exposeProfileRequestContextInServletRequest = SAML2/POST/SSO,SAML2/Redirect/SSO
+
+# F-TICKS auditing - set salt to include hashed username
+#idp.fticks.federation=MyFederation
+#idp.fticks.algorithm=SHA-256
+#idp.fticks.salt=somethingsecret
diff --git a/test-compose/idp/shibboleth-idp/conf/ldap.properties b/test-compose/idp/shibboleth-idp/conf/ldap.properties
new file mode 100644
index 00000000..5c816240
--- /dev/null
+++ b/test-compose/idp/shibboleth-idp/conf/ldap.properties
@@ -0,0 +1,58 @@
+# LDAP authentication configuration, see authn/ldap-authn-config.xml
+
+## Authenticator strategy, either anonSearchAuthenticator, bindSearchAuthenticator, directAuthenticator, adAuthenticator
+#idp.authn.LDAP.authenticator                   = anonSearchAuthenticator
+
+## Connection properties ##
+idp.authn.LDAP.ldapURL                          = ldap://data:389
+idp.authn.LDAP.useStartTLS                     = false
+idp.authn.LDAP.useSSL                          = false
+#idp.authn.LDAP.connectTimeout                  = 3000
+
+## SSL configuration, either jvmTrust, certificateTrust, or keyStoreTrust
+#idp.authn.LDAP.sslConfig                       = certificateTrust
+## If using certificateTrust above, set to the trusted certificate's path
+idp.authn.LDAP.trustCertificates                = %{idp.home}/credentials/ldap-server.crt
+## If using keyStoreTrust above, set to the truststore path
+idp.authn.LDAP.trustStore                       = %{idp.home}/credentials/ldap-server.truststore
+
+## Return attributes during authentication
+## NOTE: this is not used during attribute resolution; configure that directly in the
+## attribute-resolver.xml configuration via a DataConnector's <dc:ReturnAttributes> element
+idp.authn.LDAP.returnAttributes                 = cn,businessCategory,mail
+
+## DN resolution properties ##
+
+# Search DN resolution, used by anonSearchAuthenticator, bindSearchAuthenticator
+# for AD: CN=Users,DC=example,DC=org
+idp.authn.LDAP.baseDN                           = ou=people,dc=internet2,dc=edu
+#idp.authn.LDAP.subtreeSearch                   = false
+idp.authn.LDAP.userFilter                       = (uid={user})
+# bind search configuration
+# for AD: idp.authn.LDAP.bindDN=adminuser@domain.com
+idp.authn.LDAP.bindDN                           = cn=admin,dc=internet2,dc=edu
+idp.authn.LDAP.bindDNCredential                 = password
+
+# Format DN resolution, used by directAuthenticator, adAuthenticator
+# for AD use idp.authn.LDAP.dnFormat=%s@domain.com
+idp.authn.LDAP.dnFormat                         = uid=%s,ou=people,dc=internet2,dc=edu
+
+# LDAP attribute configuration, see attribute-resolver.xml
+idp.attribute.resolver.LDAP.ldapURL             = %{idp.authn.LDAP.ldapURL}
+idp.attribute.resolver.LDAP.baseDN              = %{idp.authn.LDAP.baseDN}
+idp.attribute.resolver.LDAP.bindDN              = %{idp.authn.LDAP.bindDN}
+idp.attribute.resolver.LDAP.bindDNCredential    = %{idp.authn.LDAP.bindDNCredential}
+idp.attribute.resolver.LDAP.useStartTLS         = %{idp.authn.LDAP.useStartTLS:true}
+idp.attribute.resolver.LDAP.trustCertificates   = %{idp.authn.LDAP.trustCertificates}
+idp.attribute.resolver.LDAP.searchFilter        = (uid=$requestContext.principalName)
+
+# LDAP pool configuration, used for both authn and DN resolution
+#idp.pool.LDAP.minSize                          = 3
+#idp.pool.LDAP.maxSize                          = 10
+#idp.pool.LDAP.validateOnCheckout               = false
+#idp.pool.LDAP.validatePeriodically             = true
+#idp.pool.LDAP.validatePeriod                   = 300
+#idp.pool.LDAP.prunePeriod                      = 300
+#idp.pool.LDAP.idleTime                         = 600
+#idp.pool.LDAP.blockWaitTime                    = 3000
+#idp.pool.LDAP.failFastInitialize               = false
diff --git a/test-compose/idp/shibboleth-idp/conf/metadata-providers.xml b/test-compose/idp/shibboleth-idp/conf/metadata-providers.xml
new file mode 100644
index 00000000..9fc5b772
--- /dev/null
+++ b/test-compose/idp/shibboleth-idp/conf/metadata-providers.xml
@@ -0,0 +1,80 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- This file is an EXAMPLE metadata configuration file. -->
+<MetadataProvider id="ShibbolethMetadata" xsi:type="ChainingMetadataProvider"
+    xmlns="urn:mace:shibboleth:2.0:metadata"
+    xmlns:resource="urn:mace:shibboleth:2.0:resource"
+    xmlns:security="urn:mace:shibboleth:2.0:security"
+    xmlns:md="urn:oasis:names:tc:SAML:2.0:metadata"
+    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:schemaLocation="urn:mace:shibboleth:2.0:metadata http://shibboleth.net/schema/idp/shibboleth-metadata.xsd
+                        urn:mace:shibboleth:2.0:resource http://shibboleth.net/schema/idp/shibboleth-resource.xsd 
+                        urn:mace:shibboleth:2.0:security http://shibboleth.net/schema/idp/shibboleth-security.xsd
+                        urn:oasis:names:tc:SAML:2.0:metadata http://docs.oasis-open.org/security/saml/v2.0/saml-schema-metadata-2.0.xsd">
+                        
+    <!-- ========================================================================================== -->
+    <!--                             Metadata Configuration                                         -->
+    <!--                                                                                            -->
+    <!--  Below you place the mechanisms which define how to load the metadata for the SP you will  -->
+    <!--  provide a service to.                                                                     -->
+    <!--                                                                                            -->
+    <!--  Two examples are provided.  The Shibboleth Documentation at                               -->
+    <!--  https://wiki.shibboleth.net/confluence/display/IDP30/MetadataConfiguration                -->
+    <!--  provides more details.                                                                    --> 
+    <!--                                                                                            -->
+    <!--  NOTE.  This file SHOULD NOT contain the metadata for this IdP.                            -->
+    <!--                                                                                            -->
+    <!-- ========================================================================================== -->
+
+    <MetadataProvider id="GrouperSP"  xsi:type="FilesystemMetadataProvider" metadataFile="%{idp.home}/metadata/grouper-sp.xml"/>
+
+    <!-- Example HTTP metadata provider.  Use this if you want to download
+         the metadata from a remote service.
+         
+         You *MUST*  provider the SignatureValidationFilter in order to function securely.
+         Get the PubLic key, and validate it via some out of band mechanism, from the
+         party publishing the metadata
+         
+         The EntityRoleWhiteList saves memory by only loading metadata from entity types
+         that you will interoperate with. 
+    
+    <MetadataProvider id="HTTPMetadata"
+                      xsi:type="FileBackedHTTPMetadataProvider"
+                      backingFile="%{idp.home}/metadata/localCopyFromXYZHTTP.xml"
+                      metadataURL="http://WHATEVER"> 
+        
+        <MetadataFilter xsi:type="SignatureValidation"
+            requireSignedMetadata="false">
+            <PublicKey>
+                THIS IS AN EXAMPLE
+            
+                MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxg0TyQAP/tIvOH89EtaX
+                uRRn8SYzTj7W1TbNY4VvBmobjkRmSkki4hH9x4sQpi635wn6WtXTN/FNNmkTK3N/
+                LspmBWxfZS+n+cc7I82E5yvCAPX67QsZgqgglp2W5dvK/FsMMCS6X6SVqzBLMP88
+                NenXKxY+HMxMs0sT0UKYh1cAEqadrHRBO65aDBcm5a0sBVYt9K6pgaOHrp/zSIbh
+                nR5tFFLjBbtFktDpHL3AdGBH3OYidNGKBO3tJ3Ms7LeKXsM0+0Y4P+9fHZINL2X3
+                E2N6GVnKs5PZTg9sP0FtIpAbYm/+zCx7Yj1ET/Er8mDd6tNVGSQsn9s5xUBwGqn1
+                4wIDAQAB
+            </PublicKey>
+        </MetadataFilter>
+        <MetadataFilter xsi:type="EntityRoleWhiteList">
+            <RetainedRole>md:SPSSODescriptor</RetainedRole>
+        </MetadataFilter>
+        
+    </MetadataProvider>
+    
+    -->   
+
+    <!-- Example file metadata provider.  Use this if you want to load metadata
+         from a local file.  You might use this if you have some local SPs
+         which are not "federated" but you wish to offer a service to.
+         
+         If you do not provide a SignatureValidation filter then you *have*
+         to know that the file is valid.
+         
+
+    <MetadataProvider id="LocalMetadata"  xsi:type="FilesystemMetadataProvider" metadataFile="PATH_TO_YOUR_METADATA"/>
+
+     -->
+          
+    
+</MetadataProvider>
diff --git a/test-compose/idp/shibboleth-idp/credentials/idp-backchannel.crt b/test-compose/idp/shibboleth-idp/credentials/idp-backchannel.crt
new file mode 100644
index 00000000..c1f8fab1
--- /dev/null
+++ b/test-compose/idp/shibboleth-idp/credentials/idp-backchannel.crt
@@ -0,0 +1,19 @@
+-----BEGIN CERTIFICATE-----
+MIIDEzCCAfugAwIBAgIUS9SuTXwsFVVG+LjOEAbLqqT/el0wDQYJKoZIhvcNAQEL
+BQAwFTETMBEGA1UEAwwKaWRwdGVzdGJlZDAeFw0xNTEyMTEwMjIwMjZaFw0zNTEy
+MTEwMjIwMjZaMBUxEzARBgNVBAMMCmlkcHRlc3RiZWQwggEiMA0GCSqGSIb3DQEB
+AQUAA4IBDwAwggEKAoIBAQCMAoDHx8xCIfv/6QKqt9mcHYmEJ8y2dKprUbpdcOjH
+YvNPIl/lHPsUyrb+Nc+q2CDeiWjVk1mWYq0UpIwpBMuw1H6+oOqr4VQRi65pin0M
+SfE0MWIaFo5FPvpvoptkHD4gvREbm4swyXGMczcMRfqgalFXhUD2wz8W3XAM5Cq2
+03XeJbj6TwjvKatG5XPdeUe2FBGuOO2q54L1hcIGnLMCQrg7D31lR13PJbjnJ0No
+5C3k8TPuny6vJsBC03GNLNKfmrKVTdzr3VKp1uay1G3DL9314fgmbl8HA5iRQmy+
+XInUU6/8NXZSF59p3ITAOvZQeZsbJjg5gGDip5OZo9YlAgMBAAGjWzBZMB0GA1Ud
+DgQWBBRPlM4VkKZ0U4ec9GrIhFQl0hNbLDA4BgNVHREEMTAvggppZHB0ZXN0YmVk
+hiFodHRwczovL2lkcHRlc3RiZWQvaWRwL3NoaWJib2xldGgwDQYJKoZIhvcNAQEL
+BQADggEBAIZ0a1ov3my3ljJG588I/PHx+TxAWONWmpKbO9c/qI3Drxk4oRIffiac
+ANxdvtabgIzrlk5gMMisD7oyqHJiWgKv5Bgctd8w3IS3lLl7wHX65mTKQRXniG98
+NIjkvfrhe2eeJxecOqnDI8GOhIGCIqZUn8ShdM/yHjhQ2Mh0Hj3U0LlKvnmfGSQl
+j0viGwbFCaNaIP3zc5UmCrdE5h8sWL3Fu7ILKM9RyFa2ILHrJScV9t623IcHffHP
+IeaY/WtuapsrqRFxuQL9QFWN0FsRIdLmjTq+00+B/XnnKRKFBuWfjhHLF/uu8f+E
+t6Lf23Kb8yD6ZR7dihMZAGHnYQ/hlhM=
+-----END CERTIFICATE-----
diff --git a/test-compose/idp/shibboleth-idp/credentials/idp-backchannel.p12 b/test-compose/idp/shibboleth-idp/credentials/idp-backchannel.p12
new file mode 100644
index 0000000000000000000000000000000000000000..112540ac0718da62464ec2f31d7916a923e3c531
GIT binary patch
literal 2500
zcmY+EcQ_k}8^<F;MT{dj>q@CpG?EY_)M{|{s#&Y{$Z3_Dts;c<>{_WRK~+^7Vz1O_
zkveMArfSooW~{1l?s<N{yXXFR-}iYw-|zeW_kIyLa66ER8G!>wvVvt33=;M^na(kh
za9}J52lhF`9ta#u;D00*HxQ1+`3yUpl?^N8e_I^vOh6J2bcn!#_7Im?+5eBvjthhM
zf`i2O1kg{;Aui6V`ccN;VM=bu0f8U@2nV9+>W~WD-|yXF--O>tM;YF#+BBLz46_ze
zy|dqjcQHP$n_@P7dCSC2b2pZzXh~`GkGy7yOQc>8l{dP`*uAl6jlGNx+NXwJ^&t~R
zJn9~hxq6OdR2k0WZcscb=}Tx<hM82xYVJ`DhvC=g<4~&SoAyR)j=(~mA1|T^!xCx(
z0&AXF#WddvK|wkAG`sUL4EF11Q^SodU(HW{F3gs)*X%9YxR|Or>)?x5_bO*r!dS4%
z`@6K|Dc<0lgwcYD3A9q)1XfMp7jCg!hRJ&G$S0Fn>*m2HC#wtX(nZwHM#({i{-Ps*
zM7p%O#Z~dW;C1Vwo!0!@=xBZvBp{dKpQk*gR<{9{jR-IjhE|W7;$a)s4)^23TU&6(
zDgyAG-?~Jkv9038q)SC0T5f8FAmGQn3}v0-LHFT5V5KWCGP}n_M@vKRJ%<mka}Og_
z5(+$DVDdvS#nHZ3uKoU^QkhS)Yj@UcCTnfDZ<$kbZ$U$}G<H6Yz=#09&*iq`9F%xs
zQW&~X6?kfXyI=w^nF)SaL>rKV1cZ~0>dVPW4m%Pp!}^pz#&|O5Pm%jZr#Rc=q!1^r
z<WV~VC3ds;bL!EVMb??RjN@1ZD@WFibLXF$l}WrJ1898io3jB#B;Pqnw5W@UeCPMO
zi2M|BrA|H^rD6GK9I2S2Kj+|UZ)?jP-D$eoQ*&Bub)`t?&18Ir7ui^Z5|CILbV4!G
z#Lc-XjHB?wK>ogM)kaQD^{oPFPbI$=OU93sR!jJ9jabsdP9<JPVM~T+`h%$@O*fQ>
z#f+1ifg_Zb6N~F`<w^>(eCL#k@yqq?LnAdp3sr11r`TkmFy4f4nD=uXc8DEcTYVi+
ztvEYTr1{HC+kOPZjk7jZD!xC&Ap0Tyx@`}Dbh>jPr+P$ZXg_y(7V7lL8>#5J^c>*g
zu|XE0My)RG%OALQ`eNv4@}J!A60A+xbh>p=4`f@%goVHw^4E&hR-M0^c1kC9pVWBF
zLJ#X5+zWQ!Xqb!ADAKT4V%271wJ(MnFMYnLZ%AmDDx;V~O1^SRn6vRAcnHaD*VOWC
zPG252y?^LY7K$+B&PUZ=ZQ`%P%Y&+a4ilTTR5Q|EU>+R1+r9>K^X9R?*E}Y&MtlRL
zwMzOSrN2kSyo&TJ$CF<z8JQOOJk^o-`gm7&wI!{*(8lyKkENHN@OsBfM@H+Y-I0G4
zlYfP7RAS-pwMSNI+9nYum3EmsDH*zHpJfG!meB;Wo~eoH?dSB!mB(<F@739tS=xdN
zo%0P3-U?IE&oIa~>h`yjrk0X#QGuTi+C<)om50=4j0bD~q<1>hZxS?I@L7JO=#jU^
zJYCtx-ft|G`YV`U;A6+nX=zglW^!c-Sz13emhi6k7H@sn9m>F*x?BtLd6}i=EhqB)
zWp+bWdN-Eb@|rNoS5g+&B=z|Yqidj!B|I2ObRLCBwMKAKdy2Dtd*+oQJw#dXBHsyR
zcF;uwm(f5UIvisrL6sTV@>}TfiGKR+CQu8Djfgx#Yq@8~)GQ569{Dg)>!Bs|zG_<8
zUP8`f9Vgr)9QEd6f?u0DSwznWGd^i5Jj2lrCk0ax=sp{?U`-pff?<atnU^%F5|IW7
z$$yd(%!d>>&j;`Wcme_ecK}|1;Ir<2Ha!s+{x$I<`9QqZegR(MNE8aKia?+glvNN&
z1de(2AJaKj5{`ND41EAH0nWzIzY5cTf|m8~pyf%eZJLI@9oufWYtqcAIm#`(Quue!
z#^9KV$2zAh?|irpx1`EZud%TE5A67p0dC`Z<mD^wBhDG#`3vC3te+T3w@Pd{239mS
zVTCV#SyYk#cu-yg4{5NaI#x@R|C+kxE_2CF8RFfYzDyG7xftV=wFES{)Rq$$sk6{4
zMbGVudM~^ysq~?nN7GH;CG!0<!}N|SZ4+E>u!o+rSrtJ~H>F^SHZtJ2F>=Wwh+Y(%
z7f-5yD=o0vFxE@VF*mHa^KfwZssUU*P0C@-v1oCV`byV+8sxH@p>Gn(0|}=bjMRor
zX*NWmi72(o(o6;>ZUI<uy(kE>-#R-eSEjVw6BjB$PMzns3ViC)nd7blo4LN0tj5-x
zpA}4i^=+lS-H}g!BxHDD-HNX2b)grSKcvuKL(ptOg<>x&Qz8wCuI<0w&m4eou;=|I
zmPRW<ULYLv2rU-+-yrB8wJzaBdkjDCo6tAM;(F-Ms8qLcdk)Uj4;%f}&m5l?OjTeF
zJud2IK4iZ=UwI3ghiOb2<{_~ScC-K`em49V7Q#CeFjg-!cS#|~tY0P5fy)qhUUqM+
z*(O~SJWgp*;EY$aP3)b`lvFPKRu@4#C@Gke8z4r<|32-cJIy~z&x?CaQZm%lx_Wom
ze;YrWOx%f_ik;@)c%7-qW6QxQ4X8#tf(tDS6z0@hD?j$LvGtT+QTXGIme74>cF82=
zAKC~EAnn7x>^x(#)2wuZnCoapt!>g?FACxkX9IDHe}zs=L9OMw)VNgIP!_jswitl1
z7~$j!!8Sz&ym9^c(FTffbYCyD;>F2orJ9rWt-R)na4$>xFsr@)ja24sWJbh8u?NXr
z3n}dPmr-_I9X8VNzFHBIc8!;atV1ItJA6<~x|#Xn$W6=y=aN25_9yHkQ~*j`&qk%L
z@Hob6Nku!wF5%;p@9mW*=?Ax`fC+4Fj$Bn@79?AaB!x*1h=A9606#|o^uTO;li2-2
ztN6Mp>){~rwN?4Zq3joP=iq0D<bM2@)YQp20Gld3sM!8{OtE_KEG+rY42YjArG4h)
z&?<q5JjJZbBmz`Pp}c|9)@g*H42yu4*a73OitO$31#c8!gCYKv8iHLb&Vv3Ta4+sn
zhm-xgMpjLE1ato8x7P0?EGX0Du;)94SERHmZthm<M-@XIJfj|oFGg@0XZnTkuRLDr
z{w2vn1>!uO#8wPd?883R{H{2mcXYm)1NDrrWf;ts7PrPLbcoPETtI+XS>(8wfx;{R
z5Fblv<ZRWq1=;*hI?}lvhG1(~vp5i6N@*`_I+*S1j3-1rv*sR661_qA`?dc9SJ{+}

literal 0
HcmV?d00001

diff --git a/test-compose/idp/shibboleth-idp/credentials/idp-browser.p12 b/test-compose/idp/shibboleth-idp/credentials/idp-browser.p12
new file mode 100644
index 0000000000000000000000000000000000000000..032be0b09ee697d1fcd3cddc62748fa0ad5d68d2
GIT binary patch
literal 2470
zcmY+Ec{CJ?8o+0m!5I58G02*=aR--XY@xA5w#Zt>5Mk^lI~isyDd8d)McEl)?7L*&
zxt3(FY!yO^46l36d+)yY$9KMSe!p|R|9&5m2zfyVq(>4Vcm{|p*?|0=703w8BSLP2
zh!ERf*a}Ic-}y%|<PqtYf1!7DK)|o{*FOe`6kuTf_XQRp1CkZQR5ijIHO<~<Ne2Wz
zAkvp`kq#O6^MeHwoV9}?)zT?dE*X>wZd|zCj73f_=3(9MqnC;LCXd=Gww>y`E(SIv
zhYega;J7k_>#)<2l+6T!mEmL0GOf#)J@aJ|0-p9b!-0Nm94#F9P0*i7!f8D0X_F+~
zN^N(o-BNXgL}IL5aZgijy3dzBcXSVpI_;8D<UIxMKA{;NKXDmB{p5po+--cTr_JOm
zTEpwgFei~9`h79&i-tFY;)(NjaE#UO>vP;S^J0Aah&7!nfkhW#$wSr_G@49QkM7-3
zwdca~kJ`Dc^SymMZQO*9Kx;=SlariIaxMPlg&A&@PUww;szxtx{2rAY**3+fhB_6s
zm&{UQ?QUuFBKSP^7Twe@om1A(wJ&uGJBt^n0%B#K<axrfMv{N50P5op);soo7Ogu9
zl5#WJ`0#vB6-~sbW~}LNFvEK6Ka7|o6>JCYZEse_TPypWH-%n85YV>`b9h&aeyZWV
z^D``1s%MD)p$Iz|Rq1GwW}4@%n$t@LqN{};$DypcOs)NShEz0*5iw@2$k970h*zZQ
zJ;8*pe}R-yvo<svTc^578zAS^^1Z4ts|n~CSHJjuSc)-=E#mh_Z@qH&9dVE|WmP2z
zODAqAW$vEHG1+j2p1CJJmsTOyC$oFF)__i4-t`aG03Ymic00;0Xux${G%~4A-#m{Z
zKS7>1*P*-{?6_?2FRpz4`7s;Iv%>i7m@OnG<Ruo^!$PmWzoln@yWC{;5{~xK#3}{c
zT0jQ6RjE#*@a*}biim87$o9NyKiwZK$C}lZf9MhCQHLRCsR%?|dE8AGkr^kw&|1`i
zljdteNmk~lmz5+~J?ra^Mc4%)SvApI>gJ9X``U6`Ut8?%9n<0a1ZlCBUa4fW4H};_
zq0}=!?%masJU2|a!{+9&Se2c_HshP&ldZcYh-7Kmh={cf`77h<-GPv^sG&zA^Bv7%
zi3vViR1S$}1<1rS@5tz(676t)P~@$Q;d2VVyk}yC#ae=KpV3Rz44V=;8~fTGPDjmh
zv6_e}*=MUC6g!um=Qv!=Xt+1#S(q)KmzHg?-|7|JjpCVdVAjHm>Mxh7GTR$}o4~Cu
zYxp*I_3eyN8D|NhLoKY_Sifio$wL1|+#Pl0IQM}=k4*Gd!6Zc42<0Bvl47@b5#@>e
z#&*at@y%1>$%;<1ZT@WBT(npEyT^4wmKEn-bJ^VlO$=pi*o9X&2A7+o!hJH6{-|Nw
z7)b;>{!iC=M6el%2>u%z{2B}c^gop|1L^XJpf5-wXzTytr~f;CU{iUHVs)F+ulPYk
zP(PnlM(;Jb_oph$Soflp{P;s5<b8v#D<trRkXiX0ESo0?hqiac+GJy<c639!F9{4R
z8%6;JKN;P+JP6z;85PMZ4f-R4{;+SkoSQF(S9O|{qZryT4Dj+hjy{oD&EI>Gke98N
zde&JHbw`cCEodvMRx-hWTWl|4Tu0l8K<4NjalraA1u$Pxa1}5JAqX^D#XM%u>rAOA
zxo+#r9`h}EaBDxLT@~<QF<$Rh30_~Q!Wm!Cg|l5AXKNg$s@*5ZjlpJInA7X^>Ym>v
z_+J!k!#BW#`B6%@rnEvSa<^Q^CisG@4MT;;O`2#HItQysMzgQKjF>BYe92kd?Q;ol
zRWZipa|CwYF=oY--B6I*(#>*(OanN_iqYE5qtZ(;Ql8&sxJIqm%ebaZg~}=I;T=o+
zeUqj3yv0vH`#P%D*RGrb1E)*iT62`mK?$=%y7#w_E5z?!nj(4l4BvL((a64Rp#4_7
zz~sR!i$lL9jN3o!ok+mT*2Y)l3XEE?nsEM1X(epybKrqg16K}%_EbCdzIx{oyQ5^+
zW<2~!7yH>^+z8As5-f{NjlKM8yiG50U{@wsJ$PGo9DysME#&&(&&ShmCRKw6PoZuq
zIdUl^bEwq|fsZRncxw-7qRF@Y@eQhjsqxxzQP$%M3y(223Wsa4PNOf$oK{rj2&Z@@
zeI0MA?Kmm)Z9G?(77V$@LK9b+M9KKg1VQsS7H_Dl69ykB-H2jVR)6odDqcwzs??W>
zUivQJkt7eRnfQ(0YB(w@=z=)zN8>|;rB^NRqR=Qgas)XqDL<B|r%4DfB=@IL#C8KB
zpi<=%0uife&Cc-oE4AFb&t7eC0#w{XcdA3a)ED`luh1tKs;pw~<UMHkYx6+W6f=__
zfpVGZ?feq}Q<Ze3L#YhCEU6a>GdLnvbLE~<*WdCi2j`lPDJidl3_eeD>6Xs5C%iYa
zPF;a1#CzeP`Mnf1C`FL>p|#P6Q;<jo^U>gO!iQYJ!jE(mzKjAtafqs6s%fgZ-s+7{
z!Ryv()w_j4QnyPRv|?+L0y3O7G&rFhA76vfp38yc-Btjm^+VVvxSv8<P*GDI)9pB%
zHBiH~k)E0FRqxccByuC+1-Ea`4yl~)hw-QS#dEZ`NZYB)`bby2sio!6=2z&|&jJpo
z7#}I$;6C!?SGNo?P8Mg)_W{WUEjez9N%Rp^CBN77Lm#ykK)n5<tzIpg_@3E#ks_hl
z0KM{x1rThpVPy2WmZqG{I$ej5cz>uQ<)Q2l4<Yr?r!@2$)w-F@S)wAbHk>`8%#Z2B
zOnDvidVT>jTF`z^pOm1r&Jqo;yP65no$q1J)Ab!UC)3#!v~I+g1w9-h-LS%Nx!m)J
zFcEJeWOY<ZoyIYSOI;7eKU4pcACqLa#Mpc7Y!~(_HXA~jjxiWY6?uQ!x`<A)cF^ZS
z$-kzVlp(8(8iiZTkJchTSS%CO(AbijCBhe)S30+E9zcan<os)z7-KKF$48#~9m_^e
zV^w9$_G+#=qy@ZrM}TOCN?CXs`cQxK(%Aa^w8lKN{*7@^>{oIz6zT@<GwO5R5<^!_
zZOEhd&BA!E!%6tzuITab-GC%RPS?2}YaO5h1}XI4=Lq3Z;JC;J@B)MYv;la4JHQDL
zfE52n^D4kVJncGIm$f_5nSCy5H>w|LllsVKqDTZ%6bWGf%dyeZ!NC9!&xDF1i?<>|
bRz*ME-<H*V-D4VV0%Dq6NMRfaBw+sqT<LmJ

literal 0
HcmV?d00001

diff --git a/test-compose/idp/shibboleth-idp/credentials/idp-encryption.crt b/test-compose/idp/shibboleth-idp/credentials/idp-encryption.crt
new file mode 100644
index 00000000..15d764f2
--- /dev/null
+++ b/test-compose/idp/shibboleth-idp/credentials/idp-encryption.crt
@@ -0,0 +1,19 @@
+-----BEGIN CERTIFICATE-----
+MIIDEzCCAfugAwIBAgIUG6Nn1rlERS1vsi88tcdzSYX0oqAwDQYJKoZIhvcNAQEL
+BQAwFTETMBEGA1UEAwwKaWRwdGVzdGJlZDAeFw0xNTEyMTEwMjIwMTRaFw0zNTEy
+MTEwMjIwMTRaMBUxEzARBgNVBAMMCmlkcHRlc3RiZWQwggEiMA0GCSqGSIb3DQEB
+AQUAA4IBDwAwggEKAoIBAQCBXv0o3fmT8iluyLjJ4lBAVCW+ZRVyEXPYQuRi7vfD
+cO4a6d1kxiJLsaK0W88VNxjFQRr8PgDkWr28vwoH1rgk4pLsszLD48DBzD942peJ
+l/S6FnsIJjmaHcBh4pbNhU4yowu63iKkvttrcZAEbpEro6Z8CziWEx8sywoaYEQG
+ifPkr9ORV6Cn3txq+9gMBePG41GrtZrUGIu+xrndL0Shh4Pq0eq/9MAsVlIIXEa8
+9WfH8J2kFcTOfoWtIc70b7TLZQsx4YnNcnrGLSUEcstFyPLX+Xtv5SNZF89OOIxX
+VNjNvgE5DbJb9hMM4UAFqI+1bo9QqtxwThjc/sOvIxzNAgMBAAGjWzBZMB0GA1Ud
+DgQWBBStTyogRPuAVG6q7yPyav1uvE+7pTA4BgNVHREEMTAvggppZHB0ZXN0YmVk
+hiFodHRwczovL2lkcHRlc3RiZWQvaWRwL3NoaWJib2xldGgwDQYJKoZIhvcNAQEL
+BQADggEBAFMfoOv+oISGjvamq7+Y4G7ep5vxlAPeK3RATYPYvAmyH946qZXh98ni
+QXyuqZW5P5eEt86toY45IwDU5r09SKwHughEe99iiEkxh0mb2qo84qX9/qcg+kyN
+jeLd/OSyolpUCEFNwOFcog7pj7Eer+6AHbwTn1Mjb5TBsKwtDMJsaxPvdj0u7M5r
+xL/wHkFhn1rCo2QiojzjSlV3yLTh49iTyhE3cG+RxaNKDCxhp0jSSLX1BW/ZoPA8
++PMJEA+Q0QbyRD8aJOHN5O8jGxCa/ZzcOnYVL6AsEXoDiY3vAUYh1FUonOWw0m9H
+p+tGUbGS2l873J5PrsbpeKEVR/IIoKo=
+-----END CERTIFICATE-----
diff --git a/test-compose/idp/shibboleth-idp/credentials/idp-encryption.key b/test-compose/idp/shibboleth-idp/credentials/idp-encryption.key
new file mode 100644
index 00000000..8bb5cc6b
--- /dev/null
+++ b/test-compose/idp/shibboleth-idp/credentials/idp-encryption.key
@@ -0,0 +1,27 @@
+-----BEGIN RSA PRIVATE KEY-----
+MIIEpAIBAAKCAQEAgV79KN35k/Ipbsi4yeJQQFQlvmUVchFz2ELkYu73w3DuGund
+ZMYiS7GitFvPFTcYxUEa/D4A5Fq9vL8KB9a4JOKS7LMyw+PAwcw/eNqXiZf0uhZ7
+CCY5mh3AYeKWzYVOMqMLut4ipL7ba3GQBG6RK6OmfAs4lhMfLMsKGmBEBonz5K/T
+kVegp97cavvYDAXjxuNRq7Wa1BiLvsa53S9EoYeD6tHqv/TALFZSCFxGvPVnx/Cd
+pBXEzn6FrSHO9G+0y2ULMeGJzXJ6xi0lBHLLRcjy1/l7b+UjWRfPTjiMV1TYzb4B
+OQ2yW/YTDOFABaiPtW6PUKrccE4Y3P7DryMczQIDAQABAoIBAF/IflMllcUtw/Nb
+9USzpIscQh2nJaugtE5nqER/fT1cfU273Mjh0T6NtFMorjec5WAWBe6/0VVAwb3f
+C4QmO4xDnFhXjLxwAaT6nfvSi+O5d93XCxxLgNZUNL3ET7a2feELyoF+OdQT4sy3
+9dLyMdVHgtnQTQMAAVLeuQoyP+s+Zax4Gca6ln8QxIIvDoD7NITnpl8887Hghhzl
+CvKtRiPRtoI2JTXWgWuLI6xXfVsDvFT+Up+ki9TMLWLACcmMU1d+lUBOKIqhhQHG
++np9iKxVausJwYaLwwT3h8SItNon7ltbV6kcqyZxMAA+uN8CVgIb5UaUrlW7Nvze
+1iUNudkCgYEAxpnBg8YxdEHFSMTqjEOYapn18cs3n32EBPtvPaUcvw3mGC1+ZVx1
+9WqnVsgykBOWI0qSBVF7Kke8yOqgqWtYQUFqLiMgCC9e/QcXnrm/bzAmKDgLVcCR
+KzgqU2ECQDkNSS0qeODjLGX4SEabDbLhN59WykHKM0i/RcrbhuvT1BcCgYEApsMD
+TFQBaiaEmLVm252piZf8b5g3DrUHeqGktHkHXTW4Iyyn8zEknoiCosk/Tej73zga
+cTT3zQgEh63DMC9Ag8IbIJiDpYLMkt1QvZYtq95E/94GVEfRRok6/pyagGYB351R
+PXcykrDyy26FSofmtaXU37Wxaj3ow+WROaPgULsCgYEArFoFScG3a2gkuRlDX8TN
+wj2o5lTxCbWY2+YEzR+8icWbGQJqPbb3G6uaW8LTtpt44Vm2zWzAEZo+KLMOCNmC
+tub5Kd8Lzm6l5brA8dvLWcgUZTT2CU5b7YEJomB+3pNkh0vuHwczv3Ui+j5kE4hY
+0bezT0W3H7iTXhNFXprMs7MCgYEAlIZn75l6URLRUjluzPdVQoktei72CpFNgflp
++ps45dmskRd61mzUkqY+w8G+MiPqANu1IVLtyZz0e+tVRxsuuKsvAg8UYVtn3P5k
+pRaWwtaKWeFjfbkhOVOMSa0tJmK0FHfHHZmGX4ReGrXq3YDBCNQUDtOCmn9dSuyy
+NcYxSXUCgYB+yo6dg8nyHDSqKDdrQQiAKv7jNsbecQ/rYrt8l0n9FBiwn5R7v6kp
+afsimCVou5i06L2Cr5Xs+XSf11KVkDh+qM70ZFubWEsHCDrS1KrxUzfFbrQczKof
+qX7ZsBuOT72RwVEa8fpT6IZ6IpOOEPmUid/f2VM2aAcXgaF//vMjxA==
+-----END RSA PRIVATE KEY-----
diff --git a/test-compose/idp/shibboleth-idp/credentials/idp-signing.crt b/test-compose/idp/shibboleth-idp/credentials/idp-signing.crt
new file mode 100644
index 00000000..6a032c17
--- /dev/null
+++ b/test-compose/idp/shibboleth-idp/credentials/idp-signing.crt
@@ -0,0 +1,19 @@
+-----BEGIN CERTIFICATE-----
+MIIDFDCCAfygAwIBAgIVAN3vv+b7KN5Se9m1RZsCllp/B/hdMA0GCSqGSIb3DQEB
+CwUAMBUxEzARBgNVBAMMCmlkcHRlc3RiZWQwHhcNMTUxMjExMDIyMDE0WhcNMzUx
+MjExMDIyMDE0WjAVMRMwEQYDVQQDDAppZHB0ZXN0YmVkMIIBIjANBgkqhkiG9w0B
+AQEFAAOCAQ8AMIIBCgKCAQEAh91caeY0Q85uhaUyqFwP2bMjwMFxMzRlAoqBHd7g
+u6eo4duaeLz1BaoR2XTBpNNvFR5oHH+TkKahVDGeH5+kcnIpxI8JPdsZml1srvf2
+Z6dzJsulJZUdpqnngycTkGtZgEoC1vmYVky2BSAIIifmdh6s0epbHnMGLsHzMKfJ
+Cb/Q6dYzRWTCPtzE2VMuQqqWgeyMr7u14x/Vqr9RPEFsgY8GIu5jzB6AyUIwrLg+
+MNkv6aIdcHwxYTGL7ijfy6rSWrgBflQoYRYNEnseK0ZHgJahz4ovCag6wZAoPpBs
+uYlY7lEr89Ucb6NHx3uqGMsXlDFdE4QwfDLLhCYHPvJ0uwIDAQABo1swWTAdBgNV
+HQ4EFgQUAkOgED3iYdmvQEOMm6u/JmD/UTQwOAYDVR0RBDEwL4IKaWRwdGVzdGJl
+ZIYhaHR0cHM6Ly9pZHB0ZXN0YmVkL2lkcC9zaGliYm9sZXRoMA0GCSqGSIb3DQEB
+CwUAA4IBAQBIdd4YWlnvJjql8+zKKgmWgIY7U8DA8e6QcbAf8f8cdE33RSnjI63X
+sv/y9GfmbAVAD6RIAXPFFeRYJ08GOxGI9axfNaKdlsklJ9bk4ducHqgCSWYVer3s
+RQBjxyOfSTvk9YCJvdJVQRJLcCvxwKakFCsOSnV3t9OvN86Ak+fKPVB5j2fM/0fZ
+Kqjn3iqgdNPTLXPsuJLJO5lITRiBa4onmVelAiCstI9PQiaEck+oAHnMTnC9JE/B
+DHv3e4rwq3LznlqPw0GSd7xqNTdMDwNOWjkuOr3sGpWS8ms/ZHHXV1Vd22uPe70i
+s00xrv14zLifcc8oj5DYzOhYRifRXgHX
+-----END CERTIFICATE-----
diff --git a/test-compose/idp/shibboleth-idp/credentials/idp-signing.key b/test-compose/idp/shibboleth-idp/credentials/idp-signing.key
new file mode 100644
index 00000000..011c27ca
--- /dev/null
+++ b/test-compose/idp/shibboleth-idp/credentials/idp-signing.key
@@ -0,0 +1,27 @@
+-----BEGIN RSA PRIVATE KEY-----
+MIIEowIBAAKCAQEAh91caeY0Q85uhaUyqFwP2bMjwMFxMzRlAoqBHd7gu6eo4dua
+eLz1BaoR2XTBpNNvFR5oHH+TkKahVDGeH5+kcnIpxI8JPdsZml1srvf2Z6dzJsul
+JZUdpqnngycTkGtZgEoC1vmYVky2BSAIIifmdh6s0epbHnMGLsHzMKfJCb/Q6dYz
+RWTCPtzE2VMuQqqWgeyMr7u14x/Vqr9RPEFsgY8GIu5jzB6AyUIwrLg+MNkv6aId
+cHwxYTGL7ijfy6rSWrgBflQoYRYNEnseK0ZHgJahz4ovCag6wZAoPpBsuYlY7lEr
+89Ucb6NHx3uqGMsXlDFdE4QwfDLLhCYHPvJ0uwIDAQABAoIBAGpInLarQ0+X+ZXK
++aoC+tNO9DUiHq/z2OD4ALGhXSTvr4mgBWNWTkc0F+qJD8MlM8zNkJxaoNGTyLjY
+Z95NQJPXAx2k15HwCENdulvV1oiX0dkTjgmscRmj6FwNAZ0EnWtien45mxZHxEyW
+FkbB9+OHc6JzNvzG9ps1Vk1FtFtO8w4exXuJVATJeArQmMvAUHMJYPb7Qs+/NX9R
+RlDvFfXDzQv5eAzudT1SyFSa5W+Bsw6BtEoeiqdp+xQh4yc733nwN7KG2Z/TpGse
+jVe6akbULuCXOe9uPa7kv8hnQEUH38QVlIw8pK1SsgNq7S0U44WU5uF8gbDBYle/
+OoPBvSECgYEAvCwVEa8ryLzee5FaX4PBxk10lEl/Yp9jC88wPUQ+ZpfniIIQIfwl
+csRE9D3/dJOVAxw/Ac32F72SLVDzLabAhlBRINYLB0ZkVuJi1CIoDHIf9nfh/pOx
+b96VMUe/mpAL4hZnZkmBKjesX5URPEKtBD0aSeCw9aFqhORjRrxCJg0CgYEAuNaD
+LOuTPKsC6nxRtiL9r0CA5gCCdpALxwJA7wHAeh03i5xmy61i4iOMaunxKZhG+nzz
+PhcI8Uhwwk+l3tbYAf1rrtmMKNcyjy+UqWXGt4ZkWFlIyIungyLiH9L32IMhXNF0
+fBgOZNtFTmQBU18a78uIir9xASUbtaakzOtJ2+cCgYAgfawVpZ11x8bSp0Jng6SN
+zQn4IMiyCrtbaqb1rTbpGAmOdIa8l4EP0/vkAGB/jIwKQXJPqXR4nO8EjBmxJD3R
+80RO2yaEVw80QVq3Lj6kB4ClWgXXo0DcBB7Wp4DZ+01R+HRaIQ8AbySATIjxUsH1
+HWfQoc9sWja+Q4Ew0YjKcQKBgGLoPsdBw8b6B5RsM9lPvgoSbScmbKl/CR5TwWVj
+vZhanAd0CLnCrSAvP4tSZf8JAio1xH+cGefrCJOhxTOKKYpfDklBFjQge2iNYHKJ
+CJ3aJ0XzePP/bwLIHtJCtOdBvA+L8VYaFVG418xLzT3MrYBVnFoKeTDQp5Q7eQJC
+gYJPAoGBAKHcuXWzvXoHKnOg8Ljg2xZ6/SfjwNDIIrpXVTAQifmK3q4+Ua2Q+Cjq
+97tPMxF2bVRcbnCSNKpTMOTrsWs8Z3GpMyCh6XgYMSlclXusDVUkRkPpWj8hVTR4
+opm/rxS83hCrTsIX3Il3T8Fpb97kdF+unCiWEaxrPEurjW8lB506
+-----END RSA PRIVATE KEY-----
diff --git a/test-compose/idp/shibboleth-idp/credentials/sealer.jks b/test-compose/idp/shibboleth-idp/credentials/sealer.jks
new file mode 100644
index 0000000000000000000000000000000000000000..89957e074990068b4b79367e06d205ec453494aa
GIT binary patch
literal 500
zcmX?i?%X*B1_mY|W&~np2KM6A<f7CPLm)q}@7izIHE$VMi;EbHlk;=+ic9nKl8Y(}
zO7iszit@`cQ&Nlcf>RT7Qd9hsvQm>v-13XOQ!4|C@=Ji6{Gzkrry`#l><$JRUQxs#
znUz?USOL?Itj*5McG=<WAq7kfEYS?Ssd>ryDXA#|iA9OI#U%_((N56}0zg5Ky{ReA
z`FSO&c_oDmbqq{C44egERgO97B@9A7APe+!67$magG-7s^U|$-K)y-L0ZN0^GglOp
z7J<xL^I7}{8%M|kkh=<ip5`~;W#KR^dB*dq@<bvNqev-8H7ihJg1SWQtF7PXaIOAS
zc8~LhY_~;`w9^syb6e*dGc0VCJ-y=Z+)(Cu`o=*wHaofHdNqa{bNFi+9Jk@HvHWvk
zsf=65p4*PSEJ4>~nExqXSGq6qaT3RRODoIzr5dghn(HMT`3qXw-&ZnR=U{rWeaBa0
zj@Rc?n{AELzUY0^+HBA@e{IKY>ABk{>|UEPm*v!h|8}L0B@AK#POjmZB^kahrjB_j
kAw`)5IjJtL!8j!vrkMFnww+t>abHZ&wUZ^vTC!nU0KJL18UO$Q

literal 0
HcmV?d00001

diff --git a/test-compose/idp/shibboleth-idp/credentials/sealer.kver b/test-compose/idp/shibboleth-idp/credentials/sealer.kver
new file mode 100644
index 00000000..d64b0e48
--- /dev/null
+++ b/test-compose/idp/shibboleth-idp/credentials/sealer.kver
@@ -0,0 +1,2 @@
+#Fri Dec 11 02:20:32 UTC 2015
+CurrentVersion=1
diff --git a/test-compose/idp/shibboleth-idp/metadata/grouper-sp.xml b/test-compose/idp/shibboleth-idp/metadata/grouper-sp.xml
new file mode 100644
index 00000000..4d7f2290
--- /dev/null
+++ b/test-compose/idp/shibboleth-idp/metadata/grouper-sp.xml
@@ -0,0 +1,78 @@
+<!--
+This is example metadata only. Do *NOT* supply it as is without review,
+and do *NOT* provide it in real time to your partners.
+ -->
+<md:EntityDescriptor xmlns:md="urn:oasis:names:tc:SAML:2.0:metadata" ID="_57114916ca68943103854cb57a3a3b1c7c38bb81" entityID="https://grouperdemo/shibboleth">
+
+  <md:Extensions xmlns:alg="urn:oasis:names:tc:SAML:metadata:algsupport">
+    <alg:DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha512"/>
+    <alg:DigestMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#sha384"/>
+    <alg:DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"/>
+    <alg:DigestMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#sha224"/>
+    <alg:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>
+    <alg:SigningMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#ecdsa-sha512"/>
+    <alg:SigningMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#ecdsa-sha384"/>
+    <alg:SigningMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#ecdsa-sha256"/>
+    <alg:SigningMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#ecdsa-sha224"/>
+    <alg:SigningMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#rsa-sha512"/>
+    <alg:SigningMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#rsa-sha384"/>
+    <alg:SigningMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#rsa-sha256"/>
+    <alg:SigningMethod Algorithm="http://www.w3.org/2009/xmldsig11#dsa-sha256"/>
+    <alg:SigningMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#ecdsa-sha1"/>
+    <alg:SigningMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1"/>
+    <alg:SigningMethod Algorithm="http://www.w3.org/2000/09/xmldsig#dsa-sha1"/>
+  </md:Extensions>
+
+  <md:SPSSODescriptor protocolSupportEnumeration="urn:oasis:names:tc:SAML:2.0:protocol">
+    <md:Extensions>
+      <init:RequestInitiator xmlns:init="urn:oasis:names:tc:SAML:profiles:SSO:request-init" Binding="urn:oasis:names:tc:SAML:profiles:SSO:request-init" Location="https://localhost/Shibboleth.sso/Login"/>
+      <idpdisc:DiscoveryResponse xmlns:idpdisc="urn:oasis:names:tc:SAML:profiles:SSO:idp-discovery-protocol" Binding="urn:oasis:names:tc:SAML:profiles:SSO:idp-discovery-protocol" Location="https://localhost/Shibboleth.sso/Login" index="1"/>
+    </md:Extensions>
+    <md:KeyDescriptor>
+      <ds:KeyInfo xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
+        <ds:KeyName>sp.example.org</ds:KeyName>
+        <ds:X509Data>
+          <ds:X509SubjectName>CN=sp.example.org,O=Internet2/TIER,L=Ann Arbor,ST=MI,C=US</ds:X509SubjectName>
+          <ds:X509Certificate>MIIDPDCCAiQCCQDNZe8r0hVtuTANBgkqhkiG9w0BAQUFADBgMQswCQYDVQQGEwJV
+UzELMAkGA1UECAwCTUkxEjAQBgNVBAcMCUFubiBBcmJvcjEXMBUGA1UECgwOSW50
+ZXJuZXQyL1RJRVIxFzAVBgNVBAMMDnNwLmV4YW1wbGUub3JnMB4XDTE3MDkyMjE5
+NTAzNVoXDTI3MDkyMDE5NTAzNVowYDELMAkGA1UEBhMCVVMxCzAJBgNVBAgMAk1J
+MRIwEAYDVQQHDAlBbm4gQXJib3IxFzAVBgNVBAoMDkludGVybmV0Mi9USUVSMRcw
+FQYDVQQDDA5zcC5leGFtcGxlLm9yZzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC
+AQoCggEBAMTNJmsNpTpR4NrDJwOgK/o3UYlNdi1c6xBflt+liLAsQc160QReV4dS
+SGK8LZvN58a/BTIsH8dLhQlUQ8qQUY2AfolVrNxb7Waumeh/POzYUTRylnoGpU3W
+bGMEPxE/AdgP5U/adYvyu4XI5epv7wjZJOTqcVag15SalY+aso+ZC/5l+UzRxmWB
+ZxKTsSL1y7PFehY4/Zl3Y3oGVsVl/zspt5lteoZQeeVxUX29S3Af11yHY4xpEp+7
+rvAzY/nlsTiHAsUoCFK/NFQ2evvSRx52B9Fk1cWP1MDVDm2QjQqD9xBGYSnX6bhQ
+ejVx7JUJHlblu2Q5p5XdW0BihgFluoECAwEAATANBgkqhkiG9w0BAQUFAAOCAQEA
+n/qhYnIviPs4tglCdrw+M7gbqKNWadDC3F9HDYzlJMFeS/ae2turhEUgQPbYPDQQ
+eO3oOILtvCXNFUPM58jf8V5YFRrOqrTgx44kexQDaHO5YYNft5tF5TdvBYE2gOVr
+GdYrH2iSP8WX+Yy7JH5uqkfwWzEntWHJdey39rCWKAUCCB35+/2b4N53Qmlv2+ug
+CpNJYFtXInd4YMmM5HjXLyoWXtjnKiwDqYUCeYPSwAajnCqRqRXUX0gYTFDRiwRP
+HbmO9We0nqoc/71nikmGGoSRMO/zWVMFjwmAx1fGiWdU61sjGX8sHifzmVyJVEBI
+Z75p+JrWYZJYrx/vpWxL8g==
+</ds:X509Certificate>
+        </ds:X509Data>
+      </ds:KeyInfo>
+      <md:EncryptionMethod Algorithm="http://www.w3.org/2009/xmlenc11#aes128-gcm"/>
+      <md:EncryptionMethod Algorithm="http://www.w3.org/2009/xmlenc11#aes192-gcm"/>
+      <md:EncryptionMethod Algorithm="http://www.w3.org/2009/xmlenc11#aes256-gcm"/>
+      <md:EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#aes128-cbc"/>
+      <md:EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#aes192-cbc"/>
+      <md:EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#aes256-cbc"/>
+      <md:EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#tripledes-cbc"/>
+      <md:EncryptionMethod Algorithm="http://www.w3.org/2009/xmlenc11#rsa-oaep"/>
+      <md:EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#rsa-oaep-mgf1p"/>
+    </md:KeyDescriptor>
+    <md:ArtifactResolutionService Binding="urn:oasis:names:tc:SAML:2.0:bindings:SOAP" Location="https://localhost/Shibboleth.sso/Artifact/SOAP" index="1"/>
+    <md:SingleLogoutService Binding="urn:oasis:names:tc:SAML:2.0:bindings:SOAP" Location="https://localhost/Shibboleth.sso/SLO/SOAP"/>
+    <md:SingleLogoutService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect" Location="https://localhost/Shibboleth.sso/SLO/Redirect"/>
+    <md:SingleLogoutService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST" Location="https://localhost/Shibboleth.sso/SLO/POST"/>
+    <md:SingleLogoutService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Artifact" Location="https://localhost/Shibboleth.sso/SLO/Artifact"/>
+    <md:AssertionConsumerService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST" Location="https://localhost/Shibboleth.sso/SAML2/POST" index="1"/>
+    <md:AssertionConsumerService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST-SimpleSign" Location="https://localhost/Shibboleth.sso/SAML2/POST-SimpleSign" index="2"/>
+    <md:AssertionConsumerService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Artifact" Location="https://localhost/Shibboleth.sso/SAML2/Artifact" index="3"/>
+    <md:AssertionConsumerService Binding="urn:oasis:names:tc:SAML:2.0:bindings:PAOS" Location="https://localhost/Shibboleth.sso/SAML2/ECP" index="4"/>
+  </md:SPSSODescriptor>
+
+</md:EntityDescriptor>
\ No newline at end of file
diff --git a/test-compose/idp/shibboleth-idp/metadata/idp-metadata.xml b/test-compose/idp/shibboleth-idp/metadata/idp-metadata.xml
new file mode 100644
index 00000000..5a708244
--- /dev/null
+++ b/test-compose/idp/shibboleth-idp/metadata/idp-metadata.xml
@@ -0,0 +1,219 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+     This is example metadata only. Do *NOT* supply it as is without review,
+     and do *NOT* provide it in real time to your partners.
+
+     This metadata is not dynamic - it will not change as your configuration changes.
+-->
+<EntityDescriptor  xmlns="urn:oasis:names:tc:SAML:2.0:metadata" xmlns:ds="http://www.w3.org/2000/09/xmldsig#" xmlns:shibmd="urn:mace:shibboleth:metadata:1.0" xmlns:xml="http://www.w3.org/XML/1998/namespace" xmlns:mdui="urn:oasis:names:tc:SAML:metadata:ui" entityID="https://idptestbed/idp/shibboleth">
+
+    <IDPSSODescriptor protocolSupportEnumeration="urn:oasis:names:tc:SAML:2.0:protocol urn:oasis:names:tc:SAML:1.1:protocol urn:mace:shibboleth:1.0">
+
+        <Extensions>
+            <shibmd:Scope regexp="false">example.org</shibmd:Scope>
+<!--
+    Fill in the details for your IdP here 
+
+            <mdui:UIInfo>
+                <mdui:DisplayName xml:lang="en">A Name for the IdP at idptestbed</mdui:DisplayName>
+                <mdui:Description xml:lang="en">Enter a description of your IdP at idptestbed</mdui:Description>
+                <mdui:Logo height="80" width="80">https://localhost/Path/To/Logo.png</mdui:Logo>
+            </mdui:UIInfo>
+-->
+        </Extensions>
+
+        <KeyDescriptor use="signing">
+            <ds:KeyInfo>
+                    <ds:X509Data>
+                        <ds:X509Certificate>
+MIIDEzCCAfugAwIBAgIUS9SuTXwsFVVG+LjOEAbLqqT/el0wDQYJKoZIhvcNAQEL
+BQAwFTETMBEGA1UEAwwKaWRwdGVzdGJlZDAeFw0xNTEyMTEwMjIwMjZaFw0zNTEy
+MTEwMjIwMjZaMBUxEzARBgNVBAMMCmlkcHRlc3RiZWQwggEiMA0GCSqGSIb3DQEB
+AQUAA4IBDwAwggEKAoIBAQCMAoDHx8xCIfv/6QKqt9mcHYmEJ8y2dKprUbpdcOjH
+YvNPIl/lHPsUyrb+Nc+q2CDeiWjVk1mWYq0UpIwpBMuw1H6+oOqr4VQRi65pin0M
+SfE0MWIaFo5FPvpvoptkHD4gvREbm4swyXGMczcMRfqgalFXhUD2wz8W3XAM5Cq2
+03XeJbj6TwjvKatG5XPdeUe2FBGuOO2q54L1hcIGnLMCQrg7D31lR13PJbjnJ0No
+5C3k8TPuny6vJsBC03GNLNKfmrKVTdzr3VKp1uay1G3DL9314fgmbl8HA5iRQmy+
+XInUU6/8NXZSF59p3ITAOvZQeZsbJjg5gGDip5OZo9YlAgMBAAGjWzBZMB0GA1Ud
+DgQWBBRPlM4VkKZ0U4ec9GrIhFQl0hNbLDA4BgNVHREEMTAvggppZHB0ZXN0YmVk
+hiFodHRwczovL2lkcHRlc3RiZWQvaWRwL3NoaWJib2xldGgwDQYJKoZIhvcNAQEL
+BQADggEBAIZ0a1ov3my3ljJG588I/PHx+TxAWONWmpKbO9c/qI3Drxk4oRIffiac
+ANxdvtabgIzrlk5gMMisD7oyqHJiWgKv5Bgctd8w3IS3lLl7wHX65mTKQRXniG98
+NIjkvfrhe2eeJxecOqnDI8GOhIGCIqZUn8ShdM/yHjhQ2Mh0Hj3U0LlKvnmfGSQl
+j0viGwbFCaNaIP3zc5UmCrdE5h8sWL3Fu7ILKM9RyFa2ILHrJScV9t623IcHffHP
+IeaY/WtuapsrqRFxuQL9QFWN0FsRIdLmjTq+00+B/XnnKRKFBuWfjhHLF/uu8f+E
+t6Lf23Kb8yD6ZR7dihMZAGHnYQ/hlhM=
+                        </ds:X509Certificate>
+                    </ds:X509Data>
+            </ds:KeyInfo>
+
+        </KeyDescriptor>
+        <KeyDescriptor use="signing">
+            <ds:KeyInfo>
+                    <ds:X509Data>
+                        <ds:X509Certificate>
+MIIDFDCCAfygAwIBAgIVAN3vv+b7KN5Se9m1RZsCllp/B/hdMA0GCSqGSIb3DQEB
+CwUAMBUxEzARBgNVBAMMCmlkcHRlc3RiZWQwHhcNMTUxMjExMDIyMDE0WhcNMzUx
+MjExMDIyMDE0WjAVMRMwEQYDVQQDDAppZHB0ZXN0YmVkMIIBIjANBgkqhkiG9w0B
+AQEFAAOCAQ8AMIIBCgKCAQEAh91caeY0Q85uhaUyqFwP2bMjwMFxMzRlAoqBHd7g
+u6eo4duaeLz1BaoR2XTBpNNvFR5oHH+TkKahVDGeH5+kcnIpxI8JPdsZml1srvf2
+Z6dzJsulJZUdpqnngycTkGtZgEoC1vmYVky2BSAIIifmdh6s0epbHnMGLsHzMKfJ
+Cb/Q6dYzRWTCPtzE2VMuQqqWgeyMr7u14x/Vqr9RPEFsgY8GIu5jzB6AyUIwrLg+
+MNkv6aIdcHwxYTGL7ijfy6rSWrgBflQoYRYNEnseK0ZHgJahz4ovCag6wZAoPpBs
+uYlY7lEr89Ucb6NHx3uqGMsXlDFdE4QwfDLLhCYHPvJ0uwIDAQABo1swWTAdBgNV
+HQ4EFgQUAkOgED3iYdmvQEOMm6u/JmD/UTQwOAYDVR0RBDEwL4IKaWRwdGVzdGJl
+ZIYhaHR0cHM6Ly9pZHB0ZXN0YmVkL2lkcC9zaGliYm9sZXRoMA0GCSqGSIb3DQEB
+CwUAA4IBAQBIdd4YWlnvJjql8+zKKgmWgIY7U8DA8e6QcbAf8f8cdE33RSnjI63X
+sv/y9GfmbAVAD6RIAXPFFeRYJ08GOxGI9axfNaKdlsklJ9bk4ducHqgCSWYVer3s
+RQBjxyOfSTvk9YCJvdJVQRJLcCvxwKakFCsOSnV3t9OvN86Ak+fKPVB5j2fM/0fZ
+Kqjn3iqgdNPTLXPsuJLJO5lITRiBa4onmVelAiCstI9PQiaEck+oAHnMTnC9JE/B
+DHv3e4rwq3LznlqPw0GSd7xqNTdMDwNOWjkuOr3sGpWS8ms/ZHHXV1Vd22uPe70i
+s00xrv14zLifcc8oj5DYzOhYRifRXgHX
+                        </ds:X509Certificate>
+                    </ds:X509Data>
+            </ds:KeyInfo>
+
+        </KeyDescriptor>
+        <KeyDescriptor use="encryption">
+            <ds:KeyInfo>
+                    <ds:X509Data>
+                        <ds:X509Certificate>
+MIIDEzCCAfugAwIBAgIUG6Nn1rlERS1vsi88tcdzSYX0oqAwDQYJKoZIhvcNAQEL
+BQAwFTETMBEGA1UEAwwKaWRwdGVzdGJlZDAeFw0xNTEyMTEwMjIwMTRaFw0zNTEy
+MTEwMjIwMTRaMBUxEzARBgNVBAMMCmlkcHRlc3RiZWQwggEiMA0GCSqGSIb3DQEB
+AQUAA4IBDwAwggEKAoIBAQCBXv0o3fmT8iluyLjJ4lBAVCW+ZRVyEXPYQuRi7vfD
+cO4a6d1kxiJLsaK0W88VNxjFQRr8PgDkWr28vwoH1rgk4pLsszLD48DBzD942peJ
+l/S6FnsIJjmaHcBh4pbNhU4yowu63iKkvttrcZAEbpEro6Z8CziWEx8sywoaYEQG
+ifPkr9ORV6Cn3txq+9gMBePG41GrtZrUGIu+xrndL0Shh4Pq0eq/9MAsVlIIXEa8
+9WfH8J2kFcTOfoWtIc70b7TLZQsx4YnNcnrGLSUEcstFyPLX+Xtv5SNZF89OOIxX
+VNjNvgE5DbJb9hMM4UAFqI+1bo9QqtxwThjc/sOvIxzNAgMBAAGjWzBZMB0GA1Ud
+DgQWBBStTyogRPuAVG6q7yPyav1uvE+7pTA4BgNVHREEMTAvggppZHB0ZXN0YmVk
+hiFodHRwczovL2lkcHRlc3RiZWQvaWRwL3NoaWJib2xldGgwDQYJKoZIhvcNAQEL
+BQADggEBAFMfoOv+oISGjvamq7+Y4G7ep5vxlAPeK3RATYPYvAmyH946qZXh98ni
+QXyuqZW5P5eEt86toY45IwDU5r09SKwHughEe99iiEkxh0mb2qo84qX9/qcg+kyN
+jeLd/OSyolpUCEFNwOFcog7pj7Eer+6AHbwTn1Mjb5TBsKwtDMJsaxPvdj0u7M5r
+xL/wHkFhn1rCo2QiojzjSlV3yLTh49iTyhE3cG+RxaNKDCxhp0jSSLX1BW/ZoPA8
++PMJEA+Q0QbyRD8aJOHN5O8jGxCa/ZzcOnYVL6AsEXoDiY3vAUYh1FUonOWw0m9H
+p+tGUbGS2l873J5PrsbpeKEVR/IIoKo=
+                        </ds:X509Certificate>
+                    </ds:X509Data>
+            </ds:KeyInfo>
+
+        </KeyDescriptor>
+
+        <!--
+        <ArtifactResolutionService Binding="urn:oasis:names:tc:SAML:1.0:bindings:SOAP-binding" Location="https://localhost:8443/idp/profile/SAML1/SOAP/ArtifactResolution" index="1"/>
+        <ArtifactResolutionService Binding="urn:oasis:names:tc:SAML:2.0:bindings:SOAP" Location="https://localhost:8443/idp/profile/SAML2/SOAP/ArtifactResolution" index="2"/>
+        -->
+
+        <!--
+        <SingleLogoutService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect" Location="https://localhost/idp/profile/SAML2/Redirect/SLO"/>
+        <SingleLogoutService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST" Location="https://localhost/idp/profile/SAML2/POST/SLO"/>
+        <SingleLogoutService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST-SimpleSign" Location="https://localhost/idp/profile/SAML2/POST-SimpleSign/SLO"/>
+        <SingleLogoutService Binding="urn:oasis:names:tc:SAML:2.0:bindings:SOAP" Location="https://localhost:8443/idp/profile/SAML2/SOAP/SLO"/>
+        -->
+
+        <NameIDFormat>urn:mace:shibboleth:1.0:nameIdentifier</NameIDFormat>
+        <NameIDFormat>urn:oasis:names:tc:SAML:2.0:nameid-format:transient</NameIDFormat>
+
+        <SingleSignOnService Binding="urn:mace:shibboleth:1.0:profiles:AuthnRequest" Location="https://localhost:4443/idp/profile/Shibboleth/SSO"/>
+        <SingleSignOnService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST" Location="https://localhost:4443/idp/profile/SAML2/POST/SSO"/>
+        <SingleSignOnService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST-SimpleSign" Location="https://localhost:4443/idp/profile/SAML2/POST-SimpleSign/SSO"/>
+        <SingleSignOnService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect" Location="https://localhost:4443/idp/profile/SAML2/Redirect/SSO"/>
+
+    </IDPSSODescriptor>
+
+
+    <AttributeAuthorityDescriptor protocolSupportEnumeration="urn:oasis:names:tc:SAML:1.1:protocol">
+
+        <Extensions>
+            <shibmd:Scope regexp="false">localhost</shibmd:Scope>
+        </Extensions>
+
+        <KeyDescriptor use="signing">
+            <ds:KeyInfo>
+                    <ds:X509Data>
+                        <ds:X509Certificate>
+MIIDEzCCAfugAwIBAgIUS9SuTXwsFVVG+LjOEAbLqqT/el0wDQYJKoZIhvcNAQEL
+BQAwFTETMBEGA1UEAwwKaWRwdGVzdGJlZDAeFw0xNTEyMTEwMjIwMjZaFw0zNTEy
+MTEwMjIwMjZaMBUxEzARBgNVBAMMCmlkcHRlc3RiZWQwggEiMA0GCSqGSIb3DQEB
+AQUAA4IBDwAwggEKAoIBAQCMAoDHx8xCIfv/6QKqt9mcHYmEJ8y2dKprUbpdcOjH
+YvNPIl/lHPsUyrb+Nc+q2CDeiWjVk1mWYq0UpIwpBMuw1H6+oOqr4VQRi65pin0M
+SfE0MWIaFo5FPvpvoptkHD4gvREbm4swyXGMczcMRfqgalFXhUD2wz8W3XAM5Cq2
+03XeJbj6TwjvKatG5XPdeUe2FBGuOO2q54L1hcIGnLMCQrg7D31lR13PJbjnJ0No
+5C3k8TPuny6vJsBC03GNLNKfmrKVTdzr3VKp1uay1G3DL9314fgmbl8HA5iRQmy+
+XInUU6/8NXZSF59p3ITAOvZQeZsbJjg5gGDip5OZo9YlAgMBAAGjWzBZMB0GA1Ud
+DgQWBBRPlM4VkKZ0U4ec9GrIhFQl0hNbLDA4BgNVHREEMTAvggppZHB0ZXN0YmVk
+hiFodHRwczovL2lkcHRlc3RiZWQvaWRwL3NoaWJib2xldGgwDQYJKoZIhvcNAQEL
+BQADggEBAIZ0a1ov3my3ljJG588I/PHx+TxAWONWmpKbO9c/qI3Drxk4oRIffiac
+ANxdvtabgIzrlk5gMMisD7oyqHJiWgKv5Bgctd8w3IS3lLl7wHX65mTKQRXniG98
+NIjkvfrhe2eeJxecOqnDI8GOhIGCIqZUn8ShdM/yHjhQ2Mh0Hj3U0LlKvnmfGSQl
+j0viGwbFCaNaIP3zc5UmCrdE5h8sWL3Fu7ILKM9RyFa2ILHrJScV9t623IcHffHP
+IeaY/WtuapsrqRFxuQL9QFWN0FsRIdLmjTq+00+B/XnnKRKFBuWfjhHLF/uu8f+E
+t6Lf23Kb8yD6ZR7dihMZAGHnYQ/hlhM=
+                        </ds:X509Certificate>
+                    </ds:X509Data>
+            </ds:KeyInfo>
+
+        </KeyDescriptor>
+        <KeyDescriptor use="signing">
+            <ds:KeyInfo>
+                    <ds:X509Data>
+                        <ds:X509Certificate>
+MIIDFDCCAfygAwIBAgIVAN3vv+b7KN5Se9m1RZsCllp/B/hdMA0GCSqGSIb3DQEB
+CwUAMBUxEzARBgNVBAMMCmlkcHRlc3RiZWQwHhcNMTUxMjExMDIyMDE0WhcNMzUx
+MjExMDIyMDE0WjAVMRMwEQYDVQQDDAppZHB0ZXN0YmVkMIIBIjANBgkqhkiG9w0B
+AQEFAAOCAQ8AMIIBCgKCAQEAh91caeY0Q85uhaUyqFwP2bMjwMFxMzRlAoqBHd7g
+u6eo4duaeLz1BaoR2XTBpNNvFR5oHH+TkKahVDGeH5+kcnIpxI8JPdsZml1srvf2
+Z6dzJsulJZUdpqnngycTkGtZgEoC1vmYVky2BSAIIifmdh6s0epbHnMGLsHzMKfJ
+Cb/Q6dYzRWTCPtzE2VMuQqqWgeyMr7u14x/Vqr9RPEFsgY8GIu5jzB6AyUIwrLg+
+MNkv6aIdcHwxYTGL7ijfy6rSWrgBflQoYRYNEnseK0ZHgJahz4ovCag6wZAoPpBs
+uYlY7lEr89Ucb6NHx3uqGMsXlDFdE4QwfDLLhCYHPvJ0uwIDAQABo1swWTAdBgNV
+HQ4EFgQUAkOgED3iYdmvQEOMm6u/JmD/UTQwOAYDVR0RBDEwL4IKaWRwdGVzdGJl
+ZIYhaHR0cHM6Ly9pZHB0ZXN0YmVkL2lkcC9zaGliYm9sZXRoMA0GCSqGSIb3DQEB
+CwUAA4IBAQBIdd4YWlnvJjql8+zKKgmWgIY7U8DA8e6QcbAf8f8cdE33RSnjI63X
+sv/y9GfmbAVAD6RIAXPFFeRYJ08GOxGI9axfNaKdlsklJ9bk4ducHqgCSWYVer3s
+RQBjxyOfSTvk9YCJvdJVQRJLcCvxwKakFCsOSnV3t9OvN86Ak+fKPVB5j2fM/0fZ
+Kqjn3iqgdNPTLXPsuJLJO5lITRiBa4onmVelAiCstI9PQiaEck+oAHnMTnC9JE/B
+DHv3e4rwq3LznlqPw0GSd7xqNTdMDwNOWjkuOr3sGpWS8ms/ZHHXV1Vd22uPe70i
+s00xrv14zLifcc8oj5DYzOhYRifRXgHX
+                        </ds:X509Certificate>
+                    </ds:X509Data>
+            </ds:KeyInfo>
+
+        </KeyDescriptor>
+        <KeyDescriptor use="encryption">
+            <ds:KeyInfo>
+                    <ds:X509Data>
+                        <ds:X509Certificate>
+MIIDEzCCAfugAwIBAgIUG6Nn1rlERS1vsi88tcdzSYX0oqAwDQYJKoZIhvcNAQEL
+BQAwFTETMBEGA1UEAwwKaWRwdGVzdGJlZDAeFw0xNTEyMTEwMjIwMTRaFw0zNTEy
+MTEwMjIwMTRaMBUxEzARBgNVBAMMCmlkcHRlc3RiZWQwggEiMA0GCSqGSIb3DQEB
+AQUAA4IBDwAwggEKAoIBAQCBXv0o3fmT8iluyLjJ4lBAVCW+ZRVyEXPYQuRi7vfD
+cO4a6d1kxiJLsaK0W88VNxjFQRr8PgDkWr28vwoH1rgk4pLsszLD48DBzD942peJ
+l/S6FnsIJjmaHcBh4pbNhU4yowu63iKkvttrcZAEbpEro6Z8CziWEx8sywoaYEQG
+ifPkr9ORV6Cn3txq+9gMBePG41GrtZrUGIu+xrndL0Shh4Pq0eq/9MAsVlIIXEa8
+9WfH8J2kFcTOfoWtIc70b7TLZQsx4YnNcnrGLSUEcstFyPLX+Xtv5SNZF89OOIxX
+VNjNvgE5DbJb9hMM4UAFqI+1bo9QqtxwThjc/sOvIxzNAgMBAAGjWzBZMB0GA1Ud
+DgQWBBStTyogRPuAVG6q7yPyav1uvE+7pTA4BgNVHREEMTAvggppZHB0ZXN0YmVk
+hiFodHRwczovL2lkcHRlc3RiZWQvaWRwL3NoaWJib2xldGgwDQYJKoZIhvcNAQEL
+BQADggEBAFMfoOv+oISGjvamq7+Y4G7ep5vxlAPeK3RATYPYvAmyH946qZXh98ni
+QXyuqZW5P5eEt86toY45IwDU5r09SKwHughEe99iiEkxh0mb2qo84qX9/qcg+kyN
+jeLd/OSyolpUCEFNwOFcog7pj7Eer+6AHbwTn1Mjb5TBsKwtDMJsaxPvdj0u7M5r
+xL/wHkFhn1rCo2QiojzjSlV3yLTh49iTyhE3cG+RxaNKDCxhp0jSSLX1BW/ZoPA8
++PMJEA+Q0QbyRD8aJOHN5O8jGxCa/ZzcOnYVL6AsEXoDiY3vAUYh1FUonOWw0m9H
+p+tGUbGS2l873J5PrsbpeKEVR/IIoKo=
+                        </ds:X509Certificate>
+                    </ds:X509Data>
+            </ds:KeyInfo>
+
+        </KeyDescriptor>
+
+        
+        <AttributeService Binding="urn:oasis:names:tc:SAML:1.0:bindings:SOAP-binding" Location="https://localhost:8443/idp/profile/SAML1/SOAP/AttributeQuery"/>
+        <AttributeService Binding="urn:oasis:names:tc:SAML:2.0:bindings:SOAP" Location="https://localhost:8443/idp/profile/SAML2/SOAP/AttributeQuery"/> 
+        <!-- If you uncomment the above you should add urn:oasis:names:tc:SAML:2.0:protocol to the protocolSupportEnumeration above -->
+
+    </AttributeAuthorityDescriptor>
+
+</EntityDescriptor>
diff --git a/test-compose/scim/Dockerfile b/test-compose/scim/Dockerfile
new file mode 100644
index 00000000..6b62e1fc
--- /dev/null
+++ b/test-compose/scim/Dockerfile
@@ -0,0 +1,8 @@
+FROM tier/grouper:latest
+
+LABEL author="tier-packaging@internet2.edu <tier-packaging@internet2.edu>"
+
+COPY container_files/web.xml /opt/grouper/grouper.scim/WEB-INF/
+COPY container_files/tomcat-users.xml /opt/tomee/conf/
+
+CMD ["scim"]
diff --git a/test-compose/scim/container_files/tomcat-users.xml b/test-compose/scim/container_files/tomcat-users.xml
new file mode 100644
index 00000000..be015e1e
--- /dev/null
+++ b/test-compose/scim/container_files/tomcat-users.xml
@@ -0,0 +1,51 @@
+<?xml version='1.0' encoding='utf-8'?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one or more
+  contributor license agreements.  See the NOTICE file distributed with
+  this work for additional information regarding copyright ownership.
+  The ASF licenses this file to You under the Apache License, Version 2.0
+  (the "License"); you may not use this file except in compliance with
+  the License.  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+-->
+<tomcat-users xmlns="http://tomcat.apache.org/xml"
+              xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+              xsi:schemaLocation="http://tomcat.apache.org/xml tomcat-users.xsd"
+              version="1.0">
+<role rolename="grouper_user"/>
+<user username="banderson" password="password" roles="grouper_user"/>
+<!--
+  NOTE:  By default, no user is included in the "manager-gui" role required
+  to operate the "/manager/html" web application.  If you wish to use this app,
+  you must define such a user - the username and password are arbitrary. It is
+  strongly recommended that you do NOT use one of the users in the commented out
+  section below since they are intended for use with the examples web
+  application.
+-->
+<!--
+  NOTE:  The sample user and role entries below are intended for use with the
+  examples web application. They are wrapped in a comment and thus are ignored
+  when reading this file. If you wish to configure these users for use with the
+  examples web application, do not forget to remove the <!.. ..> that surrounds
+  them. You will also need to set the passwords to something appropriate.
+-->
+<!--
+  <role rolename="tomcat"/>
+  <role rolename="role1"/>
+  <user username="tomcat" password="<must-be-changed>" roles="tomcat"/>
+  <user username="both" password="<must-be-changed>" roles="tomcat,role1"/>
+  <user username="role1" password="<must-be-changed>" roles="role1"/>
+-->
+  <!-- Activate those lines to get access to TomEE GUI -->
+  <!--
+  <role rolename="tomee-admin" />
+  <user username="tomee" password="tomee" roles="tomee-admin,manager-gui" />
+  -->
+</tomcat-users>
\ No newline at end of file
diff --git a/test-compose/scim/container_files/web.xml b/test-compose/scim/container_files/web.xml
new file mode 100644
index 00000000..c57461bd
--- /dev/null
+++ b/test-compose/scim/container_files/web.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee"
+	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
+
+<security-constraint>
+		<web-resource-collection>
+			<web-resource-name>Web services</web-resource-name>
+			<url-pattern>/*</url-pattern>
+		</web-resource-collection>
+		<auth-constraint>
+			<role-name>*</role-name>
+		</auth-constraint>
+	</security-constraint>
+
+	<!-- Define the Login Configuration for this Application -->
+	<login-config>
+		<auth-method>BASIC</auth-method>
+		<realm-name>Grouper Application</realm-name>
+	</login-config>
+
+	<!-- Security roles referenced by this web application -->
+	<security-role>
+		<description>
+			The role that is required to log in to web service
+		</description>
+		<role-name>*</role-name>
+	</security-role>
+  
+</web-app>
\ No newline at end of file
diff --git a/test-compose/ui/Dockerfile b/test-compose/ui/Dockerfile
new file mode 100644
index 00000000..8fec2ae0
--- /dev/null
+++ b/test-compose/ui/Dockerfile
@@ -0,0 +1,7 @@
+FROM tier/grouper:latest
+
+LABEL author="tier-packaging@internet2.edu <tier-packaging@internet2.edu>"
+
+#COPY in custom css, images, etc
+
+CMD ["ui"]
diff --git a/test-compose/ui/container_files/shibboleth/shibd.logger b/test-compose/ui/container_files/shibboleth/shibd.logger
new file mode 100644
index 00000000..2589b43b
--- /dev/null
+++ b/test-compose/ui/container_files/shibboleth/shibd.logger
@@ -0,0 +1,69 @@
+# set overall behavior
+log4j.rootCategory=DEBUG, shibd_log, warn_log
+
+# fairly verbose for DEBUG, so generally leave at DEBUG
+log4j.category.XMLTooling.XMLObject=DEBUG
+log4j.category.XMLTooling.KeyInfoResolver=DEBUG
+log4j.category.Shibboleth.IPRange=DEBUG
+log4j.category.Shibboleth.PropertySet=DEBUG
+
+# raise for low-level tracing of SOAP client HTTP/SSL behavior
+log4j.category.XMLTooling.libcurl=DEBUG
+
+# useful categories to tune independently:
+#
+# tracing of SAML messages and security policies
+#log4j.category.OpenSAML.MessageDecoder=DEBUG
+#log4j.category.OpenSAML.MessageEncoder=DEBUG
+#log4j.category.OpenSAML.SecurityPolicyRule=DEBUG
+#log4j.category.XMLTooling.SOAPClient=DEBUG
+# interprocess message remoting
+#log4j.category.Shibboleth.Listener=DEBUG
+# mapping of requests to applicationId
+#log4j.category.Shibboleth.RequestMapper=DEBUG
+# high level session cache operations
+#log4j.category.Shibboleth.SessionCache=DEBUG
+# persistent storage and caching
+#log4j.category.XMLTooling.StorageService=DEBUG
+
+# logs XML being signed or verified if set to DEBUG
+log4j.category.XMLTooling.Signature.Debugger=DEBUG, sig_log
+log4j.additivity.XMLTooling.Signature.Debugger=false
+
+# the tran log blocks the "default" appender(s) at runtime
+# Level should be left at DEBUG for this category
+log4j.category.Shibboleth-TRANSACTION=DEBUG, tran_log
+log4j.additivity.Shibboleth-TRANSACTION=false
+# uncomment to suppress particular event types
+#log4j.category.Shibboleth-TRANSACTION.AuthnRequest=WARN
+#log4j.category.Shibboleth-TRANSACTION.Login=WARN
+#log4j.category.Shibboleth-TRANSACTION.Logout=WARN
+
+# define the appenders
+
+log4j.appender.shibd_log=org.apache.log4j.RollingFileAppender
+log4j.appender.shibd_log.fileName=/var/log/shibboleth/shibd.log
+log4j.appender.shibd_log.maxFileSize=1000000
+log4j.appender.shibd_log.maxBackupIndex=10
+log4j.appender.shibd_log.layout=org.apache.log4j.PatternLayout
+log4j.appender.shibd_log.layout.ConversionPattern=%d{%Y-%m-%d %H:%M:%S} %p %c %x: %m%n
+
+log4j.appender.warn_log=org.apache.log4j.RollingFileAppender
+log4j.appender.warn_log.fileName=/var/log/shibboleth/shibd_warn.log
+log4j.appender.warn_log.maxFileSize=1000000
+log4j.appender.warn_log.maxBackupIndex=10
+log4j.appender.warn_log.layout=org.apache.log4j.PatternLayout
+log4j.appender.warn_log.layout.ConversionPattern=%d{%Y-%m-%d %H:%M:%S} %p %c %x: %m%n
+log4j.appender.warn_log.threshold=WARN
+
+log4j.appender.tran_log=org.apache.log4j.RollingFileAppender
+log4j.appender.tran_log.fileName=/var/log/shibboleth/transaction.log
+log4j.appender.tran_log.maxFileSize=1000000
+log4j.appender.tran_log.maxBackupIndex=20
+log4j.appender.tran_log.layout=org.apache.log4j.PatternLayout
+log4j.appender.tran_log.layout.ConversionPattern=%d{%Y-%m-%d %H:%M:%S} %p %c %x: %m%n
+
+log4j.appender.sig_log=org.apache.log4j.FileAppender
+log4j.appender.sig_log.fileName=/var/log/shibboleth/signature.log
+log4j.appender.sig_log.layout=org.apache.log4j.PatternLayout
+log4j.appender.sig_log.layout.ConversionPattern=%m
diff --git a/test-compose/ws/Dockerfile b/test-compose/ws/Dockerfile
new file mode 100644
index 00000000..f5c06b96
--- /dev/null
+++ b/test-compose/ws/Dockerfile
@@ -0,0 +1,9 @@
+FROM tier/grouper:latest
+
+LABEL author="tier-packaging@internet2.edu <tier-packaging@internet2.edu>"
+
+COPY container_files/web.xml /opt/grouper/grouper.ws/WEB-INF/
+COPY container_files/tomcat-users.xml /opt/tomcat/conf/
+COPY container_files/server.xml /opt/tomcat/conf/
+
+CMD ["ws"]
diff --git a/test-compose/ws/container_files/server.xml b/test-compose/ws/container_files/server.xml
new file mode 100644
index 00000000..3c29b315
--- /dev/null
+++ b/test-compose/ws/container_files/server.xml
@@ -0,0 +1,180 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one or more
+  contributor license agreements.  See the NOTICE file distributed with
+  this work for additional information regarding copyright ownership.
+  The ASF licenses this file to You under the Apache License, Version 2.0
+  (the "License"); you may not use this file except in compliance with
+  the License.  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+-->
+<!-- Note:  A "Server" is not itself a "Container", so you may not
+     define subcomponents such as "Valves" at this level.
+     Documentation at /docs/config/server.html
+ -->
+<Server port="8005" shutdown="SHUTDOWN">
+  <Listener className="org.apache.catalina.startup.VersionLoggerListener" />
+  <!-- Security listener. Documentation at /docs/config/listeners.html
+  <Listener className="org.apache.catalina.security.SecurityListener" />
+  -->
+  <!--APR library loader. Documentation at /docs/apr.html -->
+  <Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />
+  <!-- Prevent memory leaks due to use of particular java/javax APIs-->
+  <Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />
+  <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />
+  <Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" />
+
+  <!-- Global JNDI resources
+       Documentation at /docs/jndi-resources-howto.html
+  -->
+  <GlobalNamingResources>
+    <!-- Editable user database that can also be used by
+         UserDatabaseRealm to authenticate users
+    -->
+    <Resource name="UserDatabase" auth="Container"
+              type="org.apache.catalina.UserDatabase"
+              description="User database that can be updated and saved"
+              factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
+              pathname="conf/tomcat-users.xml" />
+  </GlobalNamingResources>
+
+  <!-- A "Service" is a collection of one or more "Connectors" that share
+       a single "Container" Note:  A "Service" is not itself a "Container",
+       so you may not define subcomponents such as "Valves" at this level.
+       Documentation at /docs/config/service.html
+   -->
+  <Service name="Catalina">
+
+    <!--The connectors can use a shared executor, you can define one or more named thread pools-->
+    <!--
+    <Executor name="tomcatThreadPool" namePrefix="catalina-exec-"
+        maxThreads="150" minSpareThreads="4"/>
+    -->
+
+
+    <!-- A "Connector" represents an endpoint by which requests are received
+         and responses are returned. Documentation at :
+         Java HTTP Connector: /docs/config/http.html
+         Java AJP  Connector: /docs/config/ajp.html
+         APR (HTTP/AJP) Connector: /docs/apr.html
+         Define a non-SSL/TLS HTTP/1.1 Connector on port 8080
+    -->
+    <Connector port="8080" protocol="HTTP/1.1" URIEncoding="UTF-8"
+               connectionTimeout="20000"
+               redirectPort="8443" />
+    <!-- A "Connector" using the shared thread pool-->
+    <!--
+    <Connector executor="tomcatThreadPool"
+               port="8080" protocol="HTTP/1.1"
+               connectionTimeout="20000"
+               redirectPort="8443" />
+    -->
+    <!-- Define a SSL/TLS HTTP/1.1 Connector on port 8443
+         This connector uses the NIO implementation. The default
+         SSLImplementation will depend on the presence of the APR/native
+         library and the useOpenSSL attribute of the
+         AprLifecycleListener.
+         Either JSSE or OpenSSL style configuration may be used regardless of
+         the SSLImplementation selected. JSSE style configuration is used below.
+    -->
+    <!--
+    <Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
+               maxThreads="150" SSLEnabled="true">
+        <SSLHostConfig>
+            <Certificate certificateKeystoreFile="conf/localhost-rsa.jks"
+                         type="RSA" />
+        </SSLHostConfig>
+    </Connector>
+    -->
+    <!-- Define a SSL/TLS HTTP/1.1 Connector on port 8443 with HTTP/2
+         This connector uses the APR/native implementation which always uses
+         OpenSSL for TLS.
+         Either JSSE or OpenSSL style configuration may be used. OpenSSL style
+         configuration is used below.
+    -->
+    <!--
+    <Connector port="8443" protocol="org.apache.coyote.http11.Http11AprProtocol"
+               maxThreads="150" SSLEnabled="true" >
+        <UpgradeProtocol className="org.apache.coyote.http2.Http2Protocol" />
+        <SSLHostConfig>
+            <Certificate certificateKeyFile="conf/localhost-rsa-key.pem"
+                         certificateFile="conf/localhost-rsa-cert.pem"
+                         certificateChainFile="conf/localhost-rsa-chain.pem"
+                         type="RSA" />
+        </SSLHostConfig>
+    </Connector>
+    -->
+
+    <!-- Define an AJP 1.3 Connector on port 8009 -->
+    <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" URIEncoding="UTF-8" />
+
+
+    <!-- An Engine represents the entry point (within Catalina) that processes
+         every request.  The Engine implementation for Tomcat stand alone
+         analyzes the HTTP headers included with the request, and passes them
+         on to the appropriate Host (virtual host).
+         Documentation at /docs/config/engine.html -->
+
+    <!-- You should set jvmRoute to support load-balancing via AJP ie :
+    <Engine name="Catalina" defaultHost="localhost" jvmRoute="jvm1">
+    -->
+    <Engine name="Catalina" defaultHost="localhost">
+
+      <!--For clustering, please take a look at documentation at:
+          /docs/cluster-howto.html  (simple how to)
+          /docs/config/cluster.html (reference documentation) -->
+      <!--
+      <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>
+      -->
+
+      <!-- Use the LockOutRealm to prevent attempts to guess user passwords
+           via a brute-force attack -->
+      <Realm className="org.apache.catalina.realm.LockOutRealm">
+        <!-- This Realm uses the UserDatabase configured in the global JNDI
+             resources under the key "UserDatabase".  Any edits
+             that are performed against this UserDatabase are immediately
+             available for use by the Realm.  -->
+        <Realm className="org.apache.catalina.realm.UserDatabaseRealm"
+               resourceName="UserDatabase"/> <!-- we can log in with tomcat-users.xml accounts -->
+
+        <Realm className="org.apache.catalina.realm.JNDIRealm"
+               connectionURL="ldap://data"
+               userBase="ou=people,dc=internet2,dc=edu"
+               userSearch="(uid={0})"
+               userSubtree="true"
+               connectionName="cn=admin,dc=internet2,dc=edu"
+               connectionPassword="password"
+               allRolesMode="authOnly"  /> <!-- Or we can log in with ldap accounts -->
+      </Realm>
+
+      <!-- Define the default virtual host
+           Note: XML Schema validation will not work with Xerces 2.2.
+       -->
+
+      <Host name="localhost"  appBase="webapps"
+            unpackWARs="true" autoDeploy="true">
+
+        <!-- SingleSignOn valve, share authentication between web applications
+             Documentation at: /docs/config/valve.html -->
+        <!--
+        <Valve className="org.apache.catalina.authenticator.SingleSignOn" />
+        -->
+
+        <!-- Access log processes all example.
+             Documentation at: /docs/config/valve.html
+             Note: The pattern used is equivalent to using pattern="common" -->
+        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
+               prefix="localhost_access_log" suffix=".txt"
+               pattern="%h %l %u %t &quot;%r&quot; %s %b" />
+
+      </Host>
+    </Engine>
+  </Service>
+</Server>
diff --git a/test-compose/ws/container_files/tomcat-users.xml b/test-compose/ws/container_files/tomcat-users.xml
new file mode 100644
index 00000000..f5d69452
--- /dev/null
+++ b/test-compose/ws/container_files/tomcat-users.xml
@@ -0,0 +1,46 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one or more
+  contributor license agreements.  See the NOTICE file distributed with
+  this work for additional information regarding copyright ownership.
+  The ASF licenses this file to You under the Apache License, Version 2.0
+  (the "License"); you may not use this file except in compliance with
+  the License.  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+-->
+<tomcat-users xmlns="http://tomcat.apache.org/xml"
+              xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+              xsi:schemaLocation="http://tomcat.apache.org/xml tomcat-users.xsd"
+              version="1.0">
+<role rolename="grouper_user"/>
+<user username="banderson" password="password1" roles="grouper_user"/>
+<!--
+  NOTE:  By default, no user is included in the "manager-gui" role required
+  to operate the "/manager/html" web application.  If you wish to use this app,
+  you must define such a user - the username and password are arbitrary. It is
+  strongly recommended that you do NOT use one of the users in the commented out
+  section below since they are intended for use with the examples web
+  application.
+-->
+<!--
+  NOTE:  The sample user and role entries below are intended for use with the
+  examples web application. They are wrapped in a comment and thus are ignored
+  when reading this file. If you wish to configure these users for use with the
+  examples web application, do not forget to remove the <!.. ..> that surrounds
+  them. You will also need to set the passwords to something appropriate.
+-->
+<!--
+  <role rolename="tomcat"/>
+  <role rolename="role1"/>
+  <user username="tomcat" password="<must-be-changed>" roles="tomcat"/>
+  <user username="both" password="<must-be-changed>" roles="tomcat,role1"/>
+  <user username="role1" password="<must-be-changed>" roles="role1"/>
+-->
+</tomcat-users>
\ No newline at end of file
diff --git a/test-compose/ws/container_files/web.xml b/test-compose/ws/container_files/web.xml
new file mode 100644
index 00000000..03d3deb1
--- /dev/null
+++ b/test-compose/ws/container_files/web.xml
@@ -0,0 +1,128 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+
+<!DOCTYPE web-app PUBLIC 
+          "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
+          "http://java.sun.com/dtd/web-app_2_3.dtd">
+
+<web-app>
+  <filter>
+    <!-- keeps the request and response in threadlocal so they dont have to be passed around -->
+    <filter-name>Grouper service filter</filter-name>
+    <filter-class>edu.internet2.middleware.grouper.ws.GrouperServiceJ2ee</filter-class>
+  </filter>
+
+  <filter>
+    <!-- logging filter -->
+    <filter-name>Grouper logging filter</filter-name>
+    <filter-class>edu.internet2.middleware.grouper.ws.j2ee.ServletFilterLogger</filter-class>
+  </filter>
+
+  <!-- filter-mapping>
+    <filter-name>Grouper logging filter</filter-name>
+    <url-pattern>/*</url-pattern>
+  </filter-mapping -->
+  <!-- Map the filter to a Servlet or URL -->
+  <filter-mapping>
+    <filter-name>Grouper service filter</filter-name>
+    <url-pattern>/services/*</url-pattern>
+  </filter-mapping>
+  <filter-mapping>
+    <filter-name>Grouper service filter</filter-name>
+    <url-pattern>/servicesRest/*</url-pattern>
+  </filter-mapping>
+	<servlet>
+		<servlet-name>AxisServlet</servlet-name>
+		<display-name>Apache-Axis Servlet</display-name>
+		<servlet-class>edu.internet2.middleware.grouper.ws.GrouperServiceAxisServlet</servlet-class>
+		<load-on-startup>1</load-on-startup>
+    <!-- hint that this is the wssec servlet -->
+    <!-- init-param>
+      <param-name>wssec</param-name>
+      <param-value>true</param-value>
+    </init-param --> 
+	</servlet>
+  <servlet>
+    <servlet-name>RestServlet</servlet-name>
+    <display-name>WS REST Servlet</display-name>
+    <servlet-class>edu.internet2.middleware.grouper.ws.rest.GrouperRestServlet</servlet-class>
+    <load-on-startup>1</load-on-startup>
+  </servlet>
+  <servlet>
+    <servlet-name>StatusServlet</servlet-name>
+    <display-name>Status Servlet</display-name>
+    <servlet-class>edu.internet2.middleware.grouper.j2ee.status.GrouperStatusServlet</servlet-class>
+    <load-on-startup>1</load-on-startup>
+  </servlet>
+  <servlet-mapping>
+    <servlet-name>StatusServlet</servlet-name>
+    <url-pattern>/status</url-pattern>
+  </servlet-mapping>
+  <servlet-mapping>
+    <servlet-name>AxisServlet</servlet-name>
+    <url-pattern>/services/*</url-pattern>
+  </servlet-mapping>
+  <servlet-mapping>
+    <servlet-name>RestServlet</servlet-name>
+    <url-pattern>/servicesRest/*</url-pattern>
+  </servlet-mapping>
+
+	<security-constraint>
+		<web-resource-collection>
+			<web-resource-name>Web services</web-resource-name>
+			<url-pattern>/services/*</url-pattern>
+		</web-resource-collection>
+		<auth-constraint>
+			<role-name>*</role-name>
+		</auth-constraint>
+	</security-constraint>
+
+  <security-constraint>
+    <web-resource-collection>
+      <web-resource-name>Web services</web-resource-name>
+      <url-pattern>/servicesRest/*</url-pattern>
+    </web-resource-collection>
+    <auth-constraint>
+      <!-- NOTE:  This role is not present in the default users file -->
+      <role-name>*</role-name>
+    </auth-constraint>
+  </security-constraint>
+
+	<!-- Define the Login Configuration for this Application -->
+	<login-config>
+		<auth-method>BASIC</auth-method>
+		<realm-name>Grouper Application</realm-name>
+	</login-config>
+
+	<!-- Security roles referenced by this web application -->
+	<security-role>
+		<description>
+			The role that is required to log in to web service
+		</description>
+		<role-name>*</role-name>
+	</security-role>
+  
+  <session-config>
+    <session-timeout>1</session-timeout> 
+  </session-config>
+  <!--  config to enable ESB listener servlet
+  <servlet>
+    <servlet-name>EsbServlet</servlet-name>
+    <display-name>Esb Servlet</display-name>
+    <servlet-class>edu.internet2.middleware.grouper.esb.EsbHttpHandler</servlet-class>
+    <load-on-startup>1</load-on-startup>
+  </servlet>
+  <servlet-mapping>
+    <servlet-name>EsbServlet</servlet-name>
+    <url-pattern>/servicesEsb/*</url-pattern>
+  </servlet-mapping>
+  <security-constraint>
+    <web-resource-collection>
+      <web-resource-name>Web services</web-resource-name>
+      <url-pattern>/servicesEsb/*</url-pattern>
+    </web-resource-collection>
+    <auth-constraint>
+      <role-name>grouper_user</role-name>
+    </auth-constraint>
+  </security-constraint> -->  
+</web-app>

From 631ce0783ff10261d84e44e92422fb06d0e9bd6e Mon Sep 17 00:00:00 2001
From: Chris Hubing <chubing@internet2.edu>
Date: Wed, 4 Apr 2018 02:10:33 +0000
Subject: [PATCH 002/186] Cleanup

---
 BINSCRIPTS.md               | 41 --------------------------
 bin/ci-run.sh               |  6 ----
 bin/ci-stop.sh              |  8 -----
 files/bin/sendtierbeacon.sh | 25 ----------------
 files/bin/setenv.sh         |  5 ----
 files/bin/startup.sh        | 22 --------------
 tests/image.bats            | 59 -------------------------------------
 7 files changed, 166 deletions(-)
 delete mode 100644 BINSCRIPTS.md
 delete mode 100755 bin/ci-run.sh
 delete mode 100755 bin/ci-stop.sh
 delete mode 100644 files/bin/sendtierbeacon.sh
 delete mode 100644 files/bin/setenv.sh
 delete mode 100644 files/bin/startup.sh
 delete mode 100644 tests/image.bats

diff --git a/BINSCRIPTS.md b/BINSCRIPTS.md
deleted file mode 100644
index 7818108d..00000000
--- a/BINSCRIPTS.md
+++ /dev/null
@@ -1,41 +0,0 @@
-# util
-
-This repository is intended to be downloaded into a container repository during development for convenience purposes.  Since the major mechanisms of developing to the Docker container construction lifecycle are identical across container images, this repository allows for consistency and additional ease of use across all container images.
-
-## Install
-
-If you are reading this file in BINSCRIPTS.md, your container project is likely to be util-enabled.
-
-To use these scripts yourself, issue this command:
-
-```
-curl "https://github.internet2.edu/raw/docker/util/master/bin/install.sh?token=AAAAE4VRBLPB8VExPHSR5nCe791IAYqaks5Xzug5wA%3D%3D" | bash
-```
-
-### common.bash
-
-The installation process will create a common.bash file.  This file should be the central, canonical authority for management of environment variables.  While a subprocess may override them, the files in common.bash should be treated as authoritative defaults.  Processes (e.g. `docker build`, `bats`, inside `Jenkinsfile`) can read this file and process the results therein.
-
-You should edit this file to change the image name, and add any other helpful environment variables.
-
-### Jenkinsfile
-
-This will also install a Jenkinsfile to your repository, if it doesn't have one.  This will ensure that your Jenkins pipeline can leverage these scripts in the way intended.  Ensuring the commands that you issue on your laptop match the commands issued by the build pipeline is critical to ensure predictable, reliable results.
-
-## Use
-
-
-### Building
-
-#### build.sh
-`bin/build.sh `
-#### destroy.sh
-#### rebuild.sh
-
-### Running
-### rerun.sh
-### run.sh
-
-
-### Testing
-#### test.sh
diff --git a/bin/ci-run.sh b/bin/ci-run.sh
deleted file mode 100755
index 70761f08..00000000
--- a/bin/ci-run.sh
+++ /dev/null
@@ -1,6 +0,0 @@
-#!/bin/bash
-
-# This file will run a container in the background
-source common.bash .
-
-docker run -d --name=$imagename -p 80:80 -p 443:443 $maintainer/$imagename
\ No newline at end of file
diff --git a/bin/ci-stop.sh b/bin/ci-stop.sh
deleted file mode 100755
index 54ab0196..00000000
--- a/bin/ci-stop.sh
+++ /dev/null
@@ -1,8 +0,0 @@
-#!/bin/bash
-
-# This file will run a container in the background
-source common.bash .
-
-echo "Cleaning up Docker image($maintainer/$imagename)"
-docker stop $imagename >> /dev/null
-docker rm $imagename
diff --git a/files/bin/sendtierbeacon.sh b/files/bin/sendtierbeacon.sh
deleted file mode 100644
index f9ba5c45..00000000
--- a/files/bin/sendtierbeacon.sh
+++ /dev/null
@@ -1,25 +0,0 @@
-#!/bin/bash
-LOGHOST="collector.testbed.tier.internet2.edu"
-LOGPORT="5001"
-if [ -s /opt/tier/env.bash ]; then
-  . /opt/tier/env.bash
-fi
-
-#below for syslog, F-TICKS style
-#LOGTEXT="TIERBEACON/TIER/1.0#IM=$IMAGENAME#PV=$VERSION#TR=$TIERVERSION#MT=$MAINTAINER#"
-
-#below for JSON/REST style
-LOGTEXT="{ \"msgType\" : \"TIERBEACON\", \"msgName\" : \"TIER\", \"msgVersion\" : \"1.0\", \"tbProduct\" : \"$IMAGENAME\", \"tbProductVersion\" : \"$VERSION\", \"tbTIERRelease\" : \"$TIERVERSION\", \"tbMaintainer\" : \"$MAINTAINER\" }"
-
-
-if [ -z "$TIER_BEACON_OPT_OUT" ]; then
-  #send JSON
-  echo $LOGTEXT > msgjson.txt
-  curl -s -XPOST "${LOGHOST}:${LOGPORT}/" -H 'Content-Type: application/json' -T msgjson.txt 1>/dev/null
-  rm -f msgjson.txt
-  
-  #below is for syslog, F-TICKS style
-  #`logger -n $LOGHOST -P $LOGPORT -t TIERBEACON $LOGTEXT`
-
-  echo `date`"; TIER beacon sent."
-fi
diff --git a/files/bin/setenv.sh b/files/bin/setenv.sh
deleted file mode 100644
index a43bc0bd..00000000
--- a/files/bin/setenv.sh
+++ /dev/null
@@ -1,5 +0,0 @@
-#!/bin/bash
-printenv | sed 's/^\(.*\)$/\1/g' | grep -E "^VERSION" > /opt/tier/env.bash
-printenv | sed 's/^\(.*\)$/\1/g' | grep -E "^TIERVERSION" >> /opt/tier/env.bash
-printenv | sed 's/^\(.*\)$/\1/g' | grep -E "^IMAGE" >> /opt/tier/env.bash
-printenv | sed 's/^\(.*\)$/\1/g' | grep -E "^MAINTAINER" >> /opt/tier/env.bash
diff --git a/files/bin/startup.sh b/files/bin/startup.sh
deleted file mode 100644
index c3bb95d5..00000000
--- a/files/bin/startup.sh
+++ /dev/null
@@ -1,22 +0,0 @@
-#!/bin/bash
-CRONFILE=/opt/tier/tier-cron
-
-#set env vars for cron job
-/opt/tier/setenv.sh
-
-#build crontab file with random start time between midnight and 3:59am
-echo "#send daily beacon to TIER Central" > ${CRONFILE}
-echo $(expr $RANDOM % 59) $(expr $RANDOM % 3) "* * * /usr/bin/sendtierbeacon.sh >> /var/log/cron.log 2>&1" >> ${CRONFILE}
-chmod 644 ${CRONFILE}
-
-#install crontab
-crontab ${CRONFILE}
-
-#create cron logfile
-touch /var/log/cron.log
-
-#start crond
-/usr/sbin/crond
-
-#from intermediate container's CMD directive
-/opt/bin/start.sh
diff --git a/tests/image.bats b/tests/image.bats
deleted file mode 100644
index 8c6fd9d4..00000000
--- a/tests/image.bats
+++ /dev/null
@@ -1,59 +0,0 @@
-#!/usr/bin/env bats
-
-load ../common
-
-@test "MariaDB repo provisioned" {
-  docker run -i $maintainer/$imagename find /etc/yum.repos.d/MariaDB.repo
-}
-
-@test "Grouper directory created" {
-  docker run -i $maintainer/$imagename find /opt/grouper/$version/grouper.installer.properties
-}
-
-@test "Grouper installer properties in correct position" {
-  docker run -i $maintainer/$imagename find /etc/yum.repos.d/MariaDB.repo
-}
-
-@test "Grouper hibernate properties template available" {
-  docker run -i $maintainer/$imagename find /opt/etc/grouper.hibernate.properties
-}
-
-@test "Grouper whitelist properties template available" {
-  docker run -i $maintainer/$imagename find /opt/etc/grouper.properties
-}
-
-@test "API binary directory created" {
-  docker run -i $maintainer/$imagename find /opt/grouper/$version/grouper.apiBinary-$version
-}
-
-@test "Client binary directory created" {
-  docker run -i $maintainer/$imagename find /opt/grouper/$version/grouper.clientBinary-$version
-}
-
-@test "UI directory created" {
-  docker run -i $maintainer/$imagename find /opt/grouper/$version/grouper.ui-$version
-}
-
-@test "WS directory created" {
-  docker run -i $maintainer/$imagename find /opt/grouper/$version/grouper.ws-$version
-}
-
-@test "Tarball patch directory created" {
-  docker run -i $maintainer/$imagename find /opt/grouper/$version/tarballs/patches
-}
-
-
-# Skipping: Unknown how much reconstruction we miss this way. [jvf]
-
-@test "Database subjects not created" {
-  skip
-  docker run -i $maintainer/$imagename find /opt/grouper/$version/subjects.sql
-}
-
-@test "Database does not add quickstart data" {
-  skip
-  docker run -i $maintainer/$imagename find /opt/grouper/$version/grouper.apiBinary-$version/ddlScripts
-}
-
-
-

From 90c8bc6ffcde31712c1c2779af317f6d419feef8 Mon Sep 17 00:00:00 2001
From: Christopher Hubing <chubing@internet2.edu>
Date: Tue, 3 Apr 2018 22:12:46 -0400
Subject: [PATCH 003/186] Update common.bash

---
 common.bash | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/common.bash b/common.bash
index 78a82611..22fbc6a9 100644
--- a/common.bash
+++ b/common.bash
@@ -1,2 +1,2 @@
 maintainer="tier"
-imagename="grouper-multi-purpose"
+imagename="grouper"

From 308b2939230801ec06b1dfed9f298fa3bf2ceb91 Mon Sep 17 00:00:00 2001
From: jgasper <jgasper@unicon.net>
Date: Tue, 3 Apr 2018 20:54:00 -0700
Subject: [PATCH 004/186] Updating links to the new repo

---
 README.md | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/README.md b/README.md
index a45e6bbc..c3562ae9 100644
--- a/README.md
+++ b/README.md
@@ -14,9 +14,10 @@
 # Quick reference
 
 -	**Where to get help**:  
-    [tier-packaging@internet2.edu](mailto:tier-packaging@internet2.edu?subject=Grouper%20Image%20Help)
+        [tier-packaging@internet2.edu](mailto:tier-packaging@internet2.edu?subject=Grouper%20Image%20Help)
+
 -	**Where to file issues**:  
-	[https://github.internet2.edu/docker/grouper_noVM/issues](https://github.internet2.edu/docker/grouper_noVM/issues)
+	[https://github.internet2.edu/docker/grouper/issues](https://github.internet2.edu/docker/grouper/issues)
 
 -	**Maintained by**:  
 	[TIER Packaging Working Group](https://spaces.internet2.edu/display/TPWG)

From 6661eb40e979548a1ee7ffdaf7225de876d4b387 Mon Sep 17 00:00:00 2001
From: John Gasper <jtgasper3@gmail.com>
Date: Thu, 12 Apr 2018 14:21:41 -0700
Subject: [PATCH 005/186] bumping grouper api patch to 103

---
 container_files/grouper.installer.properties | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/container_files/grouper.installer.properties b/container_files/grouper.installer.properties
index 2705ef0d..e611d249 100644
--- a/container_files/grouper.installer.properties
+++ b/container_files/grouper.installer.properties
@@ -16,7 +16,7 @@ grouperInstaller.default.installOrUpgrade = install
 
 grouperInstaller.autorun.installAllPatches = false
 grouperInstaller.autorun.installPatchesUpToACertainPatchLevel = true
-grouperInstaller.autorun.installPatchesUpToThesePatchLevels = grouper_v2_3_0_api_patch_99,grouper_v2_3_0_ui_patch_42,grouper_v2_3_0_ws_patch_11,grouper_v2_3_0_pspng_patch_16
+grouperInstaller.autorun.installPatchesUpToThesePatchLevels = grouper_v2_3_0_api_patch_103,grouper_v2_3_0_ui_patch_42,grouper_v2_3_0_ws_patch_11,grouper_v2_3_0_pspng_patch_16
 
 #### set this to true to try to use defaults for everything.  Only things without default values will need to be set
 grouperInstaller.autorun.useDefaultsAsMuchAsAvailable = true

From 70dd9f3fc8e6455ccbbf7bf6a72ead06e176c9e3 Mon Sep 17 00:00:00 2001
From: John Gasper <jgasper@unicon.net>
Date: Wed, 18 Apr 2018 10:37:50 -0700
Subject: [PATCH 006/186] making the lib and conf copies recursive

---
 container_files/usr-local-bin/library.sh | 16 ++++++++--------
 1 file changed, 8 insertions(+), 8 deletions(-)

diff --git a/container_files/usr-local-bin/library.sh b/container_files/usr-local-bin/library.sh
index ea7f4141..eb29be8b 100644
--- a/container_files/usr-local-bin/library.sh
+++ b/container_files/usr-local-bin/library.sh
@@ -50,10 +50,10 @@ prepDaemon() {
     linkGrouperSecrets $dest/conf
 
     if [ -d "/opt/grouper/conf" ]; then
-        cp /opt/grouper/conf/* $dest/conf/
+        cp -r /opt/grouper/conf/* $dest/conf/
     fi
     if [ -d "/opt/grouper/lib" ]; then
-        cp /opt/grouper/lib/* $dest/lib/
+        cp -r /opt/grouper/lib/* $dest/lib/
     fi      
 }
 
@@ -62,10 +62,10 @@ prepSCIM() {
     linkGrouperSecrets $dest/classes
 
     if [ -d "/opt/grouper/conf" ]; then
-        cp /opt/grouper/conf/* $dest/classes/
+        cp -r /opt/grouper/conf/* $dest/classes/
     fi
     if [ -d "/opt/grouper/lib" ]; then
-        cp /opt/grouper/lib/* $dest/lib/
+        cp -r /opt/grouper/lib/* $dest/lib/
     fi
 
     cp /opt/tier-support/grouper-ws-scim.xml /opt/tomee/conf/Catalina/localhost/
@@ -76,10 +76,10 @@ prepUI() {
     linkGrouperSecrets $dest/classes
 
     if [ -d "/opt/grouper/conf" ]; then
-        cp /opt/grouper/conf/* $dest/classes/
+        cp -r /opt/grouper/conf/* $dest/classes/
     fi
     if [ -d "/opt/grouper/lib" ]; then
-        cp /opt/grouper/lib/* $dest/lib/
+        cp -r /opt/grouper/lib/* $dest/lib/
     fi
 
     cp /opt/tier-support/grouper.xml /opt/tomcat/conf/Catalina/localhost/
@@ -90,10 +90,10 @@ prepWS() {
     linkGrouperSecrets $dest/classes
     
     if [ -d "/opt/grouper/conf" ]; then
-        cp /opt/grouper/conf/* $dest/classes/
+        cp -r /opt/grouper/conf/* $dest/classes/
     fi
     if [ -d "/opt/grouper/lib" ]; then
-        cp /opt/grouper/lib/* $dest/lib/
+        cp -r /opt/grouper/lib/* $dest/lib/
     fi
 
     cp /opt/tier-support/grouper-ws.xml /opt/tomcat/conf/Catalina/localhost/

From 25417ca9378d24cf4a956dada0d0f10e180e642a Mon Sep 17 00:00:00 2001
From: Christopher Hubing <chubing@internet2.edu>
Date: Wed, 18 Apr 2018 15:05:10 -0400
Subject: [PATCH 007/186] add --no-cache to docker build arguments

---
 Jenkinsfile | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/Jenkinsfile b/Jenkinsfile
index e9095c52..9715dedd 100644
--- a/Jenkinsfile
+++ b/Jenkinsfile
@@ -33,7 +33,7 @@ pipeline {
             steps {
                 script {
                    docker.withRegistry('https://registry.hub.docker.com/',   "dockerhub-$maintainer") {
-                      def baseImg = docker.build("$maintainer/$imagename")
+                      def baseImg = docker.build("$maintainer/$imagename", "--no-cache .")
                       baseImg.push("$tag")
                    }
                }
@@ -72,6 +72,6 @@ def handleError(String message){
   echo "${message}"
   currentBuild.setResult("FAILED")
   slackSend color: 'danger', message: "${message}"
-  //step([$class: 'Mailer', notifyEveryUnstableBuild: true, recipients: 'chris.bynum@levvel.io', sendToIndividuals: true])
+  //step([$class: 'Mailer', notifyEveryUnstableBuild: true, recipients: 'chubing@internet2.edu', sendToIndividuals: true])
   sh 'exit 1'
 }

From dc872c73d94f962dc6d4eacb71c41552f13e83c2 Mon Sep 17 00:00:00 2001
From: John Gasper <jtgasper3@gmail.com>
Date: Mon, 23 Apr 2018 17:10:40 -0700
Subject: [PATCH 008/186] removing the default encryption cert/key; adding
 information about generating SP key/cert as well as an other option for
 setting up the database.

---
 Dockerfile |  2 ++
 README.md  | 71 +++++++++++++++++++++++++++++++++++++++++++++++++++++-
 2 files changed, 72 insertions(+), 1 deletion(-)

diff --git a/Dockerfile b/Dockerfile
index f4c63ac8..6723853c 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -111,6 +111,8 @@ RUN groupadd -r tomcat \
     && chown -R tomcat:tomcat /opt/tomcat/logs/ /opt/tomcat/temp/ /opt/tomcat/work/ \
     && chown -R tomcat:tomcat /opt/tomee/logs/ /opt/tomee/temp/ /opt/tomee/work/
 
+RUN rm /etc/shibboleth/sp-key.pem /etc/shibboleth/sp-cert.pem
+
 COPY container_files/tier-support/ /opt/tier-support/
 COPY container_files/usr-local-bin/ /usr/local/bin/
 COPY container_files/httpd/* /etc/httpd/conf.d/
diff --git a/README.md b/README.md
index c3562ae9..623647ed 100644
--- a/README.md
+++ b/README.md
@@ -139,7 +139,9 @@ The Grouper UI also requires some basic Shibboleth SP configuration. The `/etc/s
 - set the SP's encryption keys
 - the identity attribute of the subject to be passed to Grouper
 
-If encryption keys are defined in the `shibboleth2.xml` file, then the key/cert files should be provided as well. The `attribute-map.xml` file has most of the common identity attributes pre-configured, but it (and other Shibboleth SP files) can be overlaid/replaced as necessary. 
+If encryption keys are defined in the `shibboleth2.xml` file, then the key/cert files should be provided as well. The `attribute-map.xml` file has most of the common identity attributes pre-configured, but it (and other Shibboleth SP files) can be overlaid/replaced as necessary.
+
+(See the section below.)
 
 ## General Configuration Mechanism
 
@@ -254,6 +256,73 @@ $ docker run -it --rm \
 
 Note: a less privileged database user maybe used when running the typical Grouper roles. This user needs SELECT, INSERT, UPDATE, and DELETE privileges on the schema objects.
 
+# Provisioning a Grouper Database
+
+Using standard methods, create a MariaDb Server and an empty Grouper database. Create a database user with privileges to create and populate schema objects. Set the appropriate database connection properties in `grouper.hibernate.properties`. Be sure to the user created with schema manipulation privileges as the db user.
+
+Next populate the database by using the following command.
+
+```console
+$ docker container run -it --rm \
+  --mount type=bind,src=$(pwd)/grouper.hibernate.properties,dst=/run/secrets/grouper_grouper.hibernate.properties \
+  tier/grouper gsh -registry -check -runscript -noprompt
+```
+
+Also, it is possible to just connect directly to the container, create the DDL, and copy it out:
+
+```console
+$ docker container run -it --name grouper \
+  --mount type=bind,src=$(pwd)/grouper.hibernate.properties,dst=/run/secrets/grouper_grouper.hibernate.properties \
+  tier/grouper
+
+  gsh -registry -check
+
+  exit
+
+$ docker container cp grouper:/opt/grouper/grouper.apiBinary/ddlScripts/ .
+$ docker container rm -f grouper
+``` 
+The generated DDL will be on the host in the `ddlScripts` directory.
+
+Note: a less privileged database user maybe used when running the typical Grouper roles. This user needs SELECT, INSERT, UPDATE, and DELETE privileges on the schema objects.
+
+# Configuring the SP 
+
+The Shibboleth SP needs to be configured to integrate with one or more SAML IdPs. Reference the Shibboleth SP documentation for specific instructions, but here is information on generating an encryption key/cert pair and mounting them (all of which are environment specific) and the shibboleth2.xml into the container.
+
+1. Start a temporary container and generate the key/cert pair:
+```
+$ docker container run -it --name grouper \
+  tier/grouper bash
+
+cd /etc/shibboleth
+./keygen.sh -f -h <public_hostname> 
+exit 
+```
+
+1. Copy the key, cert, and `shibboleth2.xml` files out of the container (and remove the container)
+```console
+$ docker container cp grouper:/etc/shibboleth/shibboleth2.xml .
+$ docker container cp grouper:/etc/shibboleth/sp-cert.pem .
+$ docker container cp grouper:/etc/shibboleth/sp-key.pem .
+
+$ docker container rm grouper
+```
+
+1. After updating the `shibboleth2.xml` file, save the key, cert, and shibboleth2.xml as secrets/config:
+```console
+$ docker secret create sp-key.pem sp-key.pem
+$ docker config create sp-cert.pem sp-cert.pem
+$ docker config create shibboleth2.xml shibboleth2.xml
+```
+
+1. Add the following to the service creation command to mount the environment specific settings:
+```
+  --secret source=sp-key.pem.pem,target=shib_sp-key.pem \
+  --config source=sp-cert.pem,target=/etc/shibboleth/sp-cert.pem \
+  --config source=shibboleth2.xml,target=/etc/shibboleth/shibboleth2.xml \
+```
+
 # Logging
 
 This image outputs logs in a manner that is consistent with Docker Logging. Each log entry is prefaced with the submodule name (e.g. shibd, httpd, tomcat, grouper), the logfile name (e.g. access_log, grouper_error.log, catalina.out) and user definable environment name and a user definable token. Content found after the preface will be specific to the application ands its logging configuration.

From 19bc47d173f3b6e92fa971c286a87d43fa7ca0b3 Mon Sep 17 00:00:00 2001
From: John Gasper <jgasper@unicon.net>
Date: Mon, 23 Apr 2018 17:17:07 -0700
Subject: [PATCH 009/186] fixing GH MD formatting

---
 README.md | 56 +++++++++++++++++++++++++++----------------------------
 1 file changed, 28 insertions(+), 28 deletions(-)

diff --git a/README.md b/README.md
index 623647ed..c25caeba 100644
--- a/README.md
+++ b/README.md
@@ -286,42 +286,42 @@ The generated DDL will be on the host in the `ddlScripts` directory.
 
 Note: a less privileged database user maybe used when running the typical Grouper roles. This user needs SELECT, INSERT, UPDATE, and DELETE privileges on the schema objects.
 
-# Configuring the SP 
+# Configuring the embedded Shibboleth SP 
 
 The Shibboleth SP needs to be configured to integrate with one or more SAML IdPs. Reference the Shibboleth SP documentation for specific instructions, but here is information on generating an encryption key/cert pair and mounting them (all of which are environment specific) and the shibboleth2.xml into the container.
 
 1. Start a temporary container and generate the key/cert pair:
-```
-$ docker container run -it --name grouper \
-  tier/grouper bash
+    ```
+    $ docker container run -it --name grouper \
+      tier/grouper bash
 
-cd /etc/shibboleth
-./keygen.sh -f -h <public_hostname> 
-exit 
-```
+    cd /etc/shibboleth
+    ./keygen.sh -f -h <public_hostname> 
+    exit 
+   ```
 
 1. Copy the key, cert, and `shibboleth2.xml` files out of the container (and remove the container)
-```console
-$ docker container cp grouper:/etc/shibboleth/shibboleth2.xml .
-$ docker container cp grouper:/etc/shibboleth/sp-cert.pem .
-$ docker container cp grouper:/etc/shibboleth/sp-key.pem .
-
-$ docker container rm grouper
-```
-
+    ```console
+    $ docker container cp grouper:/etc/shibboleth/shibboleth2.xml .
+    $ docker container cp grouper:/etc/shibboleth/sp-cert.pem .
+    $ docker container cp grouper:/etc/shibboleth/sp-key.pem .
+
+    $ docker container rm grouper
+    ```
+    
 1. After updating the `shibboleth2.xml` file, save the key, cert, and shibboleth2.xml as secrets/config:
-```console
-$ docker secret create sp-key.pem sp-key.pem
-$ docker config create sp-cert.pem sp-cert.pem
-$ docker config create shibboleth2.xml shibboleth2.xml
-```
-
-1. Add the following to the service creation command to mount the environment specific settings:
-```
-  --secret source=sp-key.pem.pem,target=shib_sp-key.pem \
-  --config source=sp-cert.pem,target=/etc/shibboleth/sp-cert.pem \
-  --config source=shibboleth2.xml,target=/etc/shibboleth/shibboleth2.xml \
-```
+    ```console
+    $ docker secret create sp-key.pem sp-key.pem
+    $ docker config create sp-cert.pem sp-cert.pem
+    $ docker config create shibboleth2.xml shibboleth2.xml
+    ```
+
+1. Add the following to the UI service creation command to mount the environment specific settings:
+    ```
+      --secret source=sp-key.pem.pem,target=shib_sp-key.pem \
+      --config source=sp-cert.pem,target=/etc/shibboleth/sp-cert.pem \
+      --config source=shibboleth2.xml,target=/etc/shibboleth/shibboleth2.xml \
+    ```
 
 # Logging
 

From 1ea72e2fe2ea4ff47fa604cdc3008ee053ff84cd Mon Sep 17 00:00:00 2001
From: John Gasper <jgasper@unicon.net>
Date: Thu, 26 Apr 2018 11:20:10 -0700
Subject: [PATCH 010/186] fixing issue with where Daemon libraries are copied
 too

---
 container_files/usr-local-bin/library.sh | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/container_files/usr-local-bin/library.sh b/container_files/usr-local-bin/library.sh
index eb29be8b..15cf545c 100644
--- a/container_files/usr-local-bin/library.sh
+++ b/container_files/usr-local-bin/library.sh
@@ -53,7 +53,7 @@ prepDaemon() {
         cp -r /opt/grouper/conf/* $dest/conf/
     fi
     if [ -d "/opt/grouper/lib" ]; then
-        cp -r /opt/grouper/lib/* $dest/lib/
+        cp -r /opt/grouper/lib/* $dest/lib/custom/
     fi      
 }
 

From 998429f9332bc7b21a484c89c844d0ab76533c24 Mon Sep 17 00:00:00 2001
From: John Gasper <jgasper@unicon.net>
Date: Mon, 30 Apr 2018 14:26:11 -0700
Subject: [PATCH 011/186] Update README.md

---
 README.md | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/README.md b/README.md
index c25caeba..dc613c9e 100644
--- a/README.md
+++ b/README.md
@@ -258,7 +258,7 @@ Note: a less privileged database user maybe used when running the typical Groupe
 
 # Provisioning a Grouper Database
 
-Using standard methods, create a MariaDb Server and an empty Grouper database. Create a database user with privileges to create and populate schema objects. Set the appropriate database connection properties in `grouper.hibernate.properties`. Be sure to the user created with schema manipulation privileges as the db user.
+Using standard methods, create a MariaDb Server and an empty Grouper database. Create a database user with privileges to create and populate schema objects. Set the appropriate database connection properties in `grouper.hibernate.properties`. Be sure that the user is created with schema manipulation privileges.
 
 Next populate the database by using the following command.
 
@@ -268,7 +268,7 @@ $ docker container run -it --rm \
   tier/grouper gsh -registry -check -runscript -noprompt
 ```
 
-Also, it is possible to just connect directly to the container, create the DDL, and copy it out:
+Also, it is possible to just connect directly to the container, create the DDL, and copy it out. This is necessary if your DBAs would prefer to manually execute the DDL to create the schema objects:
 
 ```console
 $ docker container run -it --name grouper \
@@ -284,7 +284,7 @@ $ docker container rm -f grouper
 ``` 
 The generated DDL will be on the host in the `ddlScripts` directory.
 
-Note: a less privileged database user maybe used when running the typical Grouper roles. This user needs SELECT, INSERT, UPDATE, and DELETE privileges on the schema objects.
+Note: A less privileged database user maybe used when running the typical Grouper roles. This user just needs SELECT, INSERT, UPDATE, and DELETE privileges on the tables and views. Running in this configuration requires DBAs to manually run the DDL scripts.
 
 # Configuring the embedded Shibboleth SP 
 

From 501167ca3e7d8f330d7fe02306af3aa9377a9097 Mon Sep 17 00:00:00 2001
From: Christopher Hubing <chubing@internet2.edu>
Date: Wed, 2 May 2018 09:48:58 -0400
Subject: [PATCH 012/186] updating patch level

---
 container_files/grouper.installer.properties | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/container_files/grouper.installer.properties b/container_files/grouper.installer.properties
index e611d249..dfd3ac5e 100644
--- a/container_files/grouper.installer.properties
+++ b/container_files/grouper.installer.properties
@@ -16,7 +16,7 @@ grouperInstaller.default.installOrUpgrade = install
 
 grouperInstaller.autorun.installAllPatches = false
 grouperInstaller.autorun.installPatchesUpToACertainPatchLevel = true
-grouperInstaller.autorun.installPatchesUpToThesePatchLevels = grouper_v2_3_0_api_patch_103,grouper_v2_3_0_ui_patch_42,grouper_v2_3_0_ws_patch_11,grouper_v2_3_0_pspng_patch_16
+grouperInstaller.autorun.installPatchesUpToThesePatchLevels = grouper_v2_3_0_api_patch_104,grouper_v2_3_0_ui_patch_42,grouper_v2_3_0_ws_patch_12,grouper_v2_3_0_pspng_patch_16
 
 #### set this to true to try to use defaults for everything.  Only things without default values will need to be set
 grouperInstaller.autorun.useDefaultsAsMuchAsAvailable = true

From 64e3953a77d22fc3769b584d5046994eaddd8821 Mon Sep 17 00:00:00 2001
From: Christopher Hubing <chubing@internet2.edu>
Date: Wed, 2 May 2018 10:13:32 -0400
Subject: [PATCH 013/186] Update Jenkinsfile

---
 Jenkinsfile | 19 +++++++++++++++++--
 1 file changed, 17 insertions(+), 2 deletions(-)

diff --git a/Jenkinsfile b/Jenkinsfile
index 9715dedd..02056edd 100644
--- a/Jenkinsfile
+++ b/Jenkinsfile
@@ -21,12 +21,27 @@ pipeline {
                         echo "You must define an imagename in common.bash"
                         currentBuild.result = 'FAILURE'
                      }
-                } 
+                    sh 'mkdir -p tmp'
+                    dir('tmp'){
+                    git([ url: "https://github.internet2.edu/docker/util.git",
+                    credentialsId: "jenkins-github-access-token" ])
+                    sh 'ls'
+                    sh 'mv bin/* ../bin/.'
+                }  
              }
         }    
         stage('Build') {
             steps {
-                echo 'step 2'
+                script {
+                   try{
+                     sh 'bin/rebuild.sh >> debug'
+                   } catch(error) {
+                     def error_details = readFile('./debug');
+                     def message = "BUILD ERROR: There was a problem building the Base Image. \n\n ${error_details}"
+                     sh "rm -f ./debug"
+                     handleError(message)
+                   }
+                }
             }
         } 
         stage('Push') {

From d9391b1793b28c2fc351133841d8f594d070f7b1 Mon Sep 17 00:00:00 2001
From: Christopher Hubing <chubing@internet2.edu>
Date: Wed, 2 May 2018 10:20:54 -0400
Subject: [PATCH 014/186] Update Jenkinsfile

---
 Jenkinsfile | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

diff --git a/Jenkinsfile b/Jenkinsfile
index 02056edd..f183d865 100644
--- a/Jenkinsfile
+++ b/Jenkinsfile
@@ -23,10 +23,10 @@ pipeline {
                      }
                     sh 'mkdir -p tmp'
                     dir('tmp'){
-                    git([ url: "https://github.internet2.edu/docker/util.git",
-                    credentialsId: "jenkins-github-access-token" ])
-                    sh 'ls'
-                    sh 'mv bin/* ../bin/.'
+                      git([ url: "https://github.internet2.edu/docker/util.git", credentialsId: "jenkins-github-access-token" ])
+                      sh 'ls'
+                      sh 'mv bin/* ../bin/.'
+                    }
                 }  
              }
         }    
@@ -63,7 +63,7 @@ pipeline {
     }
     post { 
         always { 
-            echo 'I will always say Hello again!'
+            echo 'Done Building.'
         }
         failure {
             // slackSend color: 'good', message: "Build failed"

From e8eba92a540a17a04dfd12b84476f373dc5111c7 Mon Sep 17 00:00:00 2001
From: Christopher Hubing <chubing@internet2.edu>
Date: Wed, 2 May 2018 10:23:02 -0400
Subject: [PATCH 015/186] Update Jenkinsfile

---
 Jenkinsfile | 1 +
 1 file changed, 1 insertion(+)

diff --git a/Jenkinsfile b/Jenkinsfile
index f183d865..020eb0df 100644
--- a/Jenkinsfile
+++ b/Jenkinsfile
@@ -21,6 +21,7 @@ pipeline {
                         echo "You must define an imagename in common.bash"
                         currentBuild.result = 'FAILURE'
                      }
+                    sh 'mkdir -p ../bin'
                     sh 'mkdir -p tmp'
                     dir('tmp'){
                       git([ url: "https://github.internet2.edu/docker/util.git", credentialsId: "jenkins-github-access-token" ])

From bfbfdd4e152916ca9c4f5c98afd566cd97586368 Mon Sep 17 00:00:00 2001
From: Christopher Hubing <chubing@internet2.edu>
Date: Wed, 2 May 2018 10:24:39 -0400
Subject: [PATCH 016/186] Update Jenkinsfile

---
 Jenkinsfile | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/Jenkinsfile b/Jenkinsfile
index 020eb0df..4ad40b94 100644
--- a/Jenkinsfile
+++ b/Jenkinsfile
@@ -21,7 +21,7 @@ pipeline {
                         echo "You must define an imagename in common.bash"
                         currentBuild.result = 'FAILURE'
                      }
-                    sh 'mkdir -p ../bin'
+                    sh 'mkdir -p bin'
                     sh 'mkdir -p tmp'
                     dir('tmp'){
                       git([ url: "https://github.internet2.edu/docker/util.git", credentialsId: "jenkins-github-access-token" ])

From c369a62684a21d38ae20dd228bec53fa92ab241c Mon Sep 17 00:00:00 2001
From: Christopher Hubing <chubing@internet2.edu>
Date: Wed, 2 May 2018 10:26:52 -0400
Subject: [PATCH 017/186] Update Jenkinsfile

---
 Jenkinsfile | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/Jenkinsfile b/Jenkinsfile
index 4ad40b94..e9c2315c 100644
--- a/Jenkinsfile
+++ b/Jenkinsfile
@@ -35,7 +35,7 @@ pipeline {
             steps {
                 script {
                    try{
-                     sh 'bin/rebuild.sh >> debug'
+                     sh 'bin/destroy.sh >> debug'
                    } catch(error) {
                      def error_details = readFile('./debug');
                      def message = "BUILD ERROR: There was a problem building the Base Image. \n\n ${error_details}"

From bf7972dfe0b7a967676cb196bbf66655d799b940 Mon Sep 17 00:00:00 2001
From: John Gasper <jtgasper3@gmail.com>
Date: Wed, 2 May 2018 13:16:45 -0700
Subject: [PATCH 018/186] Configuring Grouper to logout via the Shib SP

---
 container_files/ui/classes/grouper-ui.properties | 12 ++++++++++++
 1 file changed, 12 insertions(+)
 create mode 100644 container_files/ui/classes/grouper-ui.properties

diff --git a/container_files/ui/classes/grouper-ui.properties b/container_files/ui/classes/grouper-ui.properties
new file mode 100644
index 00000000..80fbee1e
--- /dev/null
+++ b/container_files/ui/classes/grouper-ui.properties
@@ -0,0 +1,12 @@
+#
+# Grouper UI configuration
+# $Id: grouper.client.example.properties,v 1.24 2009-12-30 04:23:02 mchyzer Exp $
+#
+
+# The grouper-ui.properties uses Grouper Configuration Overlays (documented on wiki)
+# By default the configuration is read from grouper-ui.base.properties
+# (which should not be edited), and the grouper-ui.properties overlays
+# the base settings.  See the grouper-ui.base.properties for the possible
+# settings that can be applied to the grouper-ui.properties
+
+grouperUi.logout.redirectToUrl=/Shibboleth.sso/Logout
\ No newline at end of file

From b4f86a52f380202ae00d21d17bd992d4e47e37b3 Mon Sep 17 00:00:00 2001
From: John Gasper <jgasper@unicon.net>
Date: Tue, 8 May 2018 09:42:59 -0700
Subject: [PATCH 019/186] Update gsh

---
 container_files/usr-local-bin/gsh | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/container_files/usr-local-bin/gsh b/container_files/usr-local-bin/gsh
index 0539b40a..e65979ab 100755
--- a/container_files/usr-local-bin/gsh
+++ b/container_files/usr-local-bin/gsh
@@ -4,6 +4,6 @@
 
 prepDaemon
 
-export GSH_JVMARGS="-DENV=$ENV -DUSERTOKEN=$USERTOKEN"
+export GSH_JVMARGS="$GSH_JVMARGS -DENV=$ENV -DUSERTOKEN=$USERTOKEN"
 
 exec bin/gsh "$@" | tee /tmp/loggrouper

From 269044d7c3fc5f9a6889d7067c4272e25a637045 Mon Sep 17 00:00:00 2001
From: John Gasper <jgasper@unicon.net>
Date: Tue, 8 May 2018 09:46:05 -0700
Subject: [PATCH 020/186] Update daemon

---
 container_files/usr-local-bin/daemon | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/container_files/usr-local-bin/daemon b/container_files/usr-local-bin/daemon
index 27f3da63..87d6aace 100755
--- a/container_files/usr-local-bin/daemon
+++ b/container_files/usr-local-bin/daemon
@@ -4,6 +4,6 @@
 
 prepDaemon
 
-export GSH_JVMARGS="-DENV=$ENV -DUSERTOKEN=$USERTOKEN"
+export GSH_JVMARGS="$$GSH_JVMARGS -DENV=$ENV -DUSERTOKEN=$USERTOKEN"
 
 exec bin/gsh -loader > /tmp/loggrouper

From 897c9dbf58b7ddc092e7ebe0b5ba3a36a9d157d8 Mon Sep 17 00:00:00 2001
From: Christopher Hubing <chubing@internet2.edu>
Date: Tue, 8 May 2018 10:42:07 -0700
Subject: [PATCH 021/186] persistent volumes for mysql and ldap

---
 test-compose/docker-compose.yml | 10 ++++++++++
 1 file changed, 10 insertions(+)

diff --git a/test-compose/docker-compose.yml b/test-compose/docker-compose.yml
index b4547273..b88a3204 100644
--- a/test-compose/docker-compose.yml
+++ b/test-compose/docker-compose.yml
@@ -210,6 +210,9 @@ services:
     ports:
      - "389:389"
      - "3306:3306"
+    volumes:
+     - grouper_mysql: /var/lib/mysql  
+     - grouper_ldap: /var/lib/dirsrv
 
 
   idp:
@@ -261,3 +264,10 @@ secrets:
     file: ./configs-and-secrets/grouper/subject.properties
   sp-key.pem:
     file: ./configs-and-secrets/shibboleth/sp-key.pem
+    
+    
+volumes:
+  grouper_mysql:
+    driver: local
+  grouper_ldap:  
+    driver: local

From d32b03ec6e2f5d9455e9e8579245f4cc8afd5c90 Mon Sep 17 00:00:00 2001
From: Christopher Hubing <chubing@internet2.edu>
Date: Tue, 8 May 2018 10:52:15 -0700
Subject: [PATCH 022/186] Update docker-compose.yml

---
 test-compose/docker-compose.yml | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/test-compose/docker-compose.yml b/test-compose/docker-compose.yml
index b88a3204..b1bcaa91 100644
--- a/test-compose/docker-compose.yml
+++ b/test-compose/docker-compose.yml
@@ -211,8 +211,8 @@ services:
      - "389:389"
      - "3306:3306"
     volumes:
-     - grouper_mysql: /var/lib/mysql  
-     - grouper_ldap: /var/lib/dirsrv
+     - grouper_mysql:/var/lib/mysql  
+     - grouper_ldap:/var/lib/dirsrv
 
 
   idp:

From 27040f3cc1f8854435f2b5604a3cff4581e9861e Mon Sep 17 00:00:00 2001
From: John Gasper <jtgasper3@gmail.com>
Date: Fri, 11 May 2018 18:31:15 -0700
Subject: [PATCH 023/186] minor tweaks

---
 Dockerfile                                  | 2 ++
 container_files/usr-local-bin/daemon        | 4 ----
 container_files/usr-local-bin/entrypoint.sh | 6 ++++++
 container_files/usr-local-bin/gsh           | 4 ----
 container_files/usr-local-bin/library.sh    | 0
 container_files/usr-local-bin/ui            | 2 --
 container_files/usr-local-bin/ui-ws         | 2 --
 container_files/usr-local-bin/ws            | 2 --
 test-compose/data/Dockerfile                | 4 ++--
 9 files changed, 10 insertions(+), 16 deletions(-)
 create mode 100755 container_files/usr-local-bin/entrypoint.sh
 mode change 100644 => 100755 container_files/usr-local-bin/library.sh

diff --git a/Dockerfile b/Dockerfile
index 6723853c..36f208d8 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -130,4 +130,6 @@ WORKDIR /opt/grouper/grouper.apiBinary/
 
 EXPOSE 80 443
 
+ENTRYPOINT ["/usr/local/bin/entrypoint.sh"]
+
 CMD ["bin/gsh", "-loader"]
diff --git a/container_files/usr-local-bin/daemon b/container_files/usr-local-bin/daemon
index 27f3da63..60ebd468 100755
--- a/container_files/usr-local-bin/daemon
+++ b/container_files/usr-local-bin/daemon
@@ -1,9 +1,5 @@
 #!/bin/bash
 
-. /usr/local/bin/library.sh
-
-prepDaemon
-
 export GSH_JVMARGS="-DENV=$ENV -DUSERTOKEN=$USERTOKEN"
 
 exec bin/gsh -loader > /tmp/loggrouper
diff --git a/container_files/usr-local-bin/entrypoint.sh b/container_files/usr-local-bin/entrypoint.sh
new file mode 100755
index 00000000..bf4bfd69
--- /dev/null
+++ b/container_files/usr-local-bin/entrypoint.sh
@@ -0,0 +1,6 @@
+#!/bin/sh
+
+. /usr/local/bin/library.sh
+prepDaemon
+
+exec "$@"
\ No newline at end of file
diff --git a/container_files/usr-local-bin/gsh b/container_files/usr-local-bin/gsh
index 0539b40a..589a1838 100755
--- a/container_files/usr-local-bin/gsh
+++ b/container_files/usr-local-bin/gsh
@@ -1,9 +1,5 @@
 #!/bin/bash
 
-. /usr/local/bin/library.sh
-
-prepDaemon
-
 export GSH_JVMARGS="-DENV=$ENV -DUSERTOKEN=$USERTOKEN"
 
 exec bin/gsh "$@" | tee /tmp/loggrouper
diff --git a/container_files/usr-local-bin/library.sh b/container_files/usr-local-bin/library.sh
old mode 100644
new mode 100755
diff --git a/container_files/usr-local-bin/ui b/container_files/usr-local-bin/ui
index a03ed585..c8895168 100755
--- a/container_files/usr-local-bin/ui
+++ b/container_files/usr-local-bin/ui
@@ -1,7 +1,5 @@
 #!/bin/bash
 
-. /usr/local/bin/library.sh
-
 prepUI
 
 export LD_LIBRARY_PATH=/opt/shibboleth/lib64:$LD_LIBRARY_PATH
diff --git a/container_files/usr-local-bin/ui-ws b/container_files/usr-local-bin/ui-ws
index de1384c4..8defab26 100755
--- a/container_files/usr-local-bin/ui-ws
+++ b/container_files/usr-local-bin/ui-ws
@@ -1,7 +1,5 @@
 #!/bin/bash
 
-. /usr/local/bin/library.sh
-
 prepUI
 prepWS
 
diff --git a/container_files/usr-local-bin/ws b/container_files/usr-local-bin/ws
index 0e10b688..51632529 100755
--- a/container_files/usr-local-bin/ws
+++ b/container_files/usr-local-bin/ws
@@ -1,7 +1,5 @@
 #!/bin/bash
 
-. /usr/local/bin/library.sh
-
 prepWS
 
 exec /usr/bin/supervisord -c /opt/tier-support/supervisord-tomcat.conf
diff --git a/test-compose/data/Dockerfile b/test-compose/data/Dockerfile
index 35317837..85b4e261 100644
--- a/test-compose/data/Dockerfile
+++ b/test-compose/data/Dockerfile
@@ -36,8 +36,8 @@ RUN useradd ldapadmin \
     && sed -i '/if (@errs = startServer($inf))/,/}/d' /usr/lib64/dirsrv/perl/* \
     && setup-ds.pl --silent --file /seed-data/ds-setup.inf \
     && /usr/sbin/ns-slapd -D /etc/dirsrv/slapd-dir \ 
-    && sleep 3 \
-    && ldapadd -H ldap:/// -f /seed-data/users.ldif -x -D "cn=Directory Manager" -w password
+    && while ! curl -s ldap://localhost:389 > /dev/null; do echo waiting for ldap to start; sleep 1; done; \
+    ldapadd -H ldap:/// -f /seed-data/users.ldif -x -D "cn=Directory Manager" -w password
 
 RUN (/usr/sbin/ns-slapd -D /etc/dirsrv/slapd-dir &) \
     && while ! curl -s ldap://localhost:389 > /dev/null; do echo waiting for ldap to start; sleep 1; done; \

From 1df10e8aac240200e81a184cbf46b719b6e2c910 Mon Sep 17 00:00:00 2001
From: John Gasper <jgasper@unicon.net>
Date: Wed, 16 May 2018 08:24:47 -0700
Subject: [PATCH 024/186] wait for ldap to start

---
 test-compose/data/Dockerfile | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/test-compose/data/Dockerfile b/test-compose/data/Dockerfile
index 35317837..a90e4017 100644
--- a/test-compose/data/Dockerfile
+++ b/test-compose/data/Dockerfile
@@ -36,7 +36,7 @@ RUN useradd ldapadmin \
     && sed -i '/if (@errs = startServer($inf))/,/}/d' /usr/lib64/dirsrv/perl/* \
     && setup-ds.pl --silent --file /seed-data/ds-setup.inf \
     && /usr/sbin/ns-slapd -D /etc/dirsrv/slapd-dir \ 
-    && sleep 3 \
+    && while ! curl -s ldap://localhost:389 > /dev/null; do echo waiting for ldap to start; sleep 1; done; \
     && ldapadd -H ldap:/// -f /seed-data/users.ldif -x -D "cn=Directory Manager" -w password
 
 RUN (/usr/sbin/ns-slapd -D /etc/dirsrv/slapd-dir &) \

From 789ac599d8ee918584b4cb8d9bf12b8031a72be1 Mon Sep 17 00:00:00 2001
From: John Gasper <jgasper@unicon.net>
Date: Wed, 16 May 2018 08:25:39 -0700
Subject: [PATCH 025/186] Update docker-compose.yml

---
 test-compose/docker-compose.yml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/test-compose/docker-compose.yml b/test-compose/docker-compose.yml
index b1bcaa91..ab5810f9 100644
--- a/test-compose/docker-compose.yml
+++ b/test-compose/docker-compose.yml
@@ -3,7 +3,7 @@ version: "3.3"
 services:
   daemon:
     build: ./daemon/
-    command: bash -c "while ! curl -s data:3306 > /dev/null; do echo waiting for mysql to start; sleep 3; done; exec daemon"
+    command: bash -c "while ! curl -s data:3306 > /dev/null; do echo waiting for mysql to start; sleep 3; done; while ! curl -s ldap://data:389 > /dev/null; do echo waiting for ldap to start; sleep 3; done; exec daemon"
     depends_on:
      - data
     environment:

From a5a934356b42605e26b51b60c2c26d21abdd4a95 Mon Sep 17 00:00:00 2001
From: John Gasper <jgasper@unicon.net>
Date: Wed, 16 May 2018 08:34:37 -0700
Subject: [PATCH 026/186] Update Dockerfile

---
 test-compose/data/Dockerfile | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/test-compose/data/Dockerfile b/test-compose/data/Dockerfile
index a90e4017..85b4e261 100644
--- a/test-compose/data/Dockerfile
+++ b/test-compose/data/Dockerfile
@@ -37,7 +37,7 @@ RUN useradd ldapadmin \
     && setup-ds.pl --silent --file /seed-data/ds-setup.inf \
     && /usr/sbin/ns-slapd -D /etc/dirsrv/slapd-dir \ 
     && while ! curl -s ldap://localhost:389 > /dev/null; do echo waiting for ldap to start; sleep 1; done; \
-    && ldapadd -H ldap:/// -f /seed-data/users.ldif -x -D "cn=Directory Manager" -w password
+    ldapadd -H ldap:/// -f /seed-data/users.ldif -x -D "cn=Directory Manager" -w password
 
 RUN (/usr/sbin/ns-slapd -D /etc/dirsrv/slapd-dir &) \
     && while ! curl -s ldap://localhost:389 > /dev/null; do echo waiting for ldap to start; sleep 1; done; \

From aa40fc2638bfc64690f217ec6068a08322167578 Mon Sep 17 00:00:00 2001
From: Christopher Hubing <chubing@internet2.edu>
Date: Wed, 16 May 2018 11:48:42 -0400
Subject: [PATCH 027/186] 2.3.0-a106-u43-w12-p16

grouper_v2_3_0_api_patch_106
grouper_v2_3_0_ui_patch_43
grouper_v2_3_0_ws_patch_12
grouper_v2_3_0_pspng_patch_16
---
 container_files/grouper.installer.properties | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/container_files/grouper.installer.properties b/container_files/grouper.installer.properties
index dfd3ac5e..ef3e7b55 100644
--- a/container_files/grouper.installer.properties
+++ b/container_files/grouper.installer.properties
@@ -16,7 +16,7 @@ grouperInstaller.default.installOrUpgrade = install
 
 grouperInstaller.autorun.installAllPatches = false
 grouperInstaller.autorun.installPatchesUpToACertainPatchLevel = true
-grouperInstaller.autorun.installPatchesUpToThesePatchLevels = grouper_v2_3_0_api_patch_104,grouper_v2_3_0_ui_patch_42,grouper_v2_3_0_ws_patch_12,grouper_v2_3_0_pspng_patch_16
+grouperInstaller.autorun.installPatchesUpToThesePatchLevels = grouper_v2_3_0_api_patch_106,grouper_v2_3_0_ui_patch_43,grouper_v2_3_0_ws_patch_12,grouper_v2_3_0_pspng_patch_16
 
 #### set this to true to try to use defaults for everything.  Only things without default values will need to be set
 grouperInstaller.autorun.useDefaultsAsMuchAsAvailable = true

From ec764d00eb2b1adcba863bb6fdaa6b0d9383e7fc Mon Sep 17 00:00:00 2001
From: Christopher Hubing <chubing@internet2.edu>
Date: Thu, 17 May 2018 11:43:53 -0400
Subject: [PATCH 028/186] Update daemon

---
 container_files/usr-local-bin/daemon | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/container_files/usr-local-bin/daemon b/container_files/usr-local-bin/daemon
index 87d6aace..da40d1e6 100755
--- a/container_files/usr-local-bin/daemon
+++ b/container_files/usr-local-bin/daemon
@@ -4,6 +4,6 @@
 
 prepDaemon
 
-export GSH_JVMARGS="$$GSH_JVMARGS -DENV=$ENV -DUSERTOKEN=$USERTOKEN"
+export GSH_JVMARGS="$GSH_JVMARGS -DENV=$ENV -DUSERTOKEN=$USERTOKEN"
 
 exec bin/gsh -loader > /tmp/loggrouper

From 2abfbfb9490ae3b819bf0051e8e24fecf9b80231 Mon Sep 17 00:00:00 2001
From: Christopher Hubing <chubing@internet2.edu>
Date: Thu, 17 May 2018 12:20:00 -0400
Subject: [PATCH 029/186] try test-compose after build

---
 Jenkinsfile | 1 +
 1 file changed, 1 insertion(+)

diff --git a/Jenkinsfile b/Jenkinsfile
index e9c2315c..f49479e8 100644
--- a/Jenkinsfile
+++ b/Jenkinsfile
@@ -50,6 +50,7 @@ pipeline {
                 script {
                    docker.withRegistry('https://registry.hub.docker.com/',   "dockerhub-$maintainer") {
                       def baseImg = docker.build("$maintainer/$imagename", "--no-cache .")
+                      sh 'cd test-compose && ./compose/sh'
                       baseImg.push("$tag")
                    }
                }

From b256a937f2992e98d1a508046b798ff244fa808a Mon Sep 17 00:00:00 2001
From: Christopher Hubing <chubing@internet2.edu>
Date: Thu, 17 May 2018 12:21:20 -0400
Subject: [PATCH 030/186] Update Jenkinsfile

---
 Jenkinsfile | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/Jenkinsfile b/Jenkinsfile
index f49479e8..da00818f 100644
--- a/Jenkinsfile
+++ b/Jenkinsfile
@@ -50,7 +50,7 @@ pipeline {
                 script {
                    docker.withRegistry('https://registry.hub.docker.com/',   "dockerhub-$maintainer") {
                       def baseImg = docker.build("$maintainer/$imagename", "--no-cache .")
-                      sh 'cd test-compose && ./compose/sh'
+                      sh 'cd test-compose && ./compose.sh'
                       baseImg.push("$tag")
                    }
                }

From 5bf134bf48621d04956119d58a8fddfa0736a911 Mon Sep 17 00:00:00 2001
From: Christopher Hubing <chubing@internet2.edu>
Date: Thu, 17 May 2018 14:26:39 -0400
Subject: [PATCH 031/186] Update Jenkinsfile

---
 Jenkinsfile | 1 +
 1 file changed, 1 insertion(+)

diff --git a/Jenkinsfile b/Jenkinsfile
index da00818f..b7ada966 100644
--- a/Jenkinsfile
+++ b/Jenkinsfile
@@ -51,6 +51,7 @@ pipeline {
                    docker.withRegistry('https://registry.hub.docker.com/',   "dockerhub-$maintainer") {
                       def baseImg = docker.build("$maintainer/$imagename", "--no-cache .")
                       sh 'cd test-compose && ./compose.sh'
+                      sh 'cd test-compose && docker-compose down'
                       baseImg.push("$tag")
                    }
                }

From bac85a4a0f75b5fb44db44bd867340142e17266e Mon Sep 17 00:00:00 2001
From: Christopher Hubing <chubing@internet2.edu>
Date: Thu, 17 May 2018 14:28:16 -0400
Subject: [PATCH 032/186] Update Jenkinsfile

---
 Jenkinsfile | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/Jenkinsfile b/Jenkinsfile
index b7ada966..8cb90349 100644
--- a/Jenkinsfile
+++ b/Jenkinsfile
@@ -31,7 +31,7 @@ pipeline {
                 }  
              }
         }    
-        stage('Build') {
+        stage('Clean') {
             steps {
                 script {
                    try{
@@ -45,12 +45,14 @@ pipeline {
                 }
             }
         } 
-        stage('Push') {
+        stage('Build') {
             steps {
                 script {
                    docker.withRegistry('https://registry.hub.docker.com/',   "dockerhub-$maintainer") {
                       def baseImg = docker.build("$maintainer/$imagename", "--no-cache .")
+                      // test the environment 
                       sh 'cd test-compose && ./compose.sh'
+                      // bring down after testing
                       sh 'cd test-compose && docker-compose down'
                       baseImg.push("$tag")
                    }

From 00b49d961342cf036f1c3ea37463ffeeda9f789e Mon Sep 17 00:00:00 2001
From: Christopher Hubing <chubing@internet2.edu>
Date: Thu, 17 May 2018 16:01:16 -0400
Subject: [PATCH 033/186] testing a failure condition will be reverted

---
 test-compose/docker-compose.yml | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/test-compose/docker-compose.yml b/test-compose/docker-compose.yml
index ab5810f9..2274c777 100644
--- a/test-compose/docker-compose.yml
+++ b/test-compose/docker-compose.yml
@@ -1,3 +1,5 @@
+this should blow up
+asdfasdfasdfsadf
 version: "3.3"
 
 services:

From 13c7a1b861d3b7583af0ef28a8ef34998daa16f0 Mon Sep 17 00:00:00 2001
From: Christopher Hubing <chubing@internet2.edu>
Date: Thu, 17 May 2018 16:16:22 -0400
Subject: [PATCH 034/186] reverting intentional failure

---
 test-compose/docker-compose.yml | 2 --
 1 file changed, 2 deletions(-)

diff --git a/test-compose/docker-compose.yml b/test-compose/docker-compose.yml
index 2274c777..ab5810f9 100644
--- a/test-compose/docker-compose.yml
+++ b/test-compose/docker-compose.yml
@@ -1,5 +1,3 @@
-this should blow up
-asdfasdfasdfsadf
 version: "3.3"
 
 services:

From 2f80c0fe3b2f44c681e3bd6ae79dbf053661e367 Mon Sep 17 00:00:00 2001
From: Christopher Hubing <chubing@internet2.edu>
Date: Fri, 18 May 2018 13:23:51 -0400
Subject: [PATCH 035/186] change example.edu to internet2.edu

---
 test-compose/data/container_files/seed-data/ds-setup.inf | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/test-compose/data/container_files/seed-data/ds-setup.inf b/test-compose/data/container_files/seed-data/ds-setup.inf
index ae365ca4..9eef33c4 100644
--- a/test-compose/data/container_files/seed-data/ds-setup.inf
+++ b/test-compose/data/container_files/seed-data/ds-setup.inf
@@ -1,5 +1,5 @@
 [General]
-AdminDomain = example.edu
+AdminDomain = internet2.edu
 ConfigDirectoryAdminID = admin
 ConfigDirectoryAdminPwd = admin
 ConfigDirectoryLdapURL = ldap://localhost:389/o=NetscapeRoot

From bbbda9d9dc145c78ffe4d4778eee07b448a4fb36 Mon Sep 17 00:00:00 2001
From: John Gasper <jtgasper3@gmail.com>
Date: Mon, 21 May 2018 11:52:41 -0700
Subject: [PATCH 036/186] re-working entrypoint/start-up scripts; fixed a few
 other things along the way.

---
 container_files/usr-local-bin/daemon          |  4 +
 container_files/usr-local-bin/entrypoint.sh   |  2 +-
 container_files/usr-local-bin/gsh             |  4 +
 container_files/usr-local-bin/library.sh      | 91 ++++++++++++++-----
 container_files/usr-local-bin/ui              |  2 +
 container_files/usr-local-bin/ui-ws           |  2 +
 container_files/usr-local-bin/ws              |  2 +
 test-compose/README.md                        |  2 +-
 .../grouper/grouper.client.properties         |  4 +-
 test-compose/data/Dockerfile                  |  3 +-
 test-compose/docker-compose.yml               | 14 +--
 11 files changed, 91 insertions(+), 39 deletions(-)

diff --git a/container_files/usr-local-bin/daemon b/container_files/usr-local-bin/daemon
index 60ebd468..27f3da63 100755
--- a/container_files/usr-local-bin/daemon
+++ b/container_files/usr-local-bin/daemon
@@ -1,5 +1,9 @@
 #!/bin/bash
 
+. /usr/local/bin/library.sh
+
+prepDaemon
+
 export GSH_JVMARGS="-DENV=$ENV -DUSERTOKEN=$USERTOKEN"
 
 exec bin/gsh -loader > /tmp/loggrouper
diff --git a/container_files/usr-local-bin/entrypoint.sh b/container_files/usr-local-bin/entrypoint.sh
index bf4bfd69..83e985d6 100755
--- a/container_files/usr-local-bin/entrypoint.sh
+++ b/container_files/usr-local-bin/entrypoint.sh
@@ -1,6 +1,6 @@
 #!/bin/sh
 
 . /usr/local/bin/library.sh
-prepDaemon
+prepConf
 
 exec "$@"
\ No newline at end of file
diff --git a/container_files/usr-local-bin/gsh b/container_files/usr-local-bin/gsh
index 589a1838..0539b40a 100755
--- a/container_files/usr-local-bin/gsh
+++ b/container_files/usr-local-bin/gsh
@@ -1,5 +1,9 @@
 #!/bin/bash
 
+. /usr/local/bin/library.sh
+
+prepDaemon
+
 export GSH_JVMARGS="-DENV=$ENV -DUSERTOKEN=$USERTOKEN"
 
 exec bin/gsh "$@" | tee /tmp/loggrouper
diff --git a/container_files/usr-local-bin/library.sh b/container_files/usr-local-bin/library.sh
index 15cf545c..5d3790af 100755
--- a/container_files/usr-local-bin/library.sh
+++ b/container_files/usr-local-bin/library.sh
@@ -7,26 +7,37 @@ setupPipe() {
     mkfifo -m 666 $1
 }
 
-# Make a "console" logging pipe that anyone can write too regardless of who owns the process.
-setupPipe /tmp/logpipe
-cat <> /tmp/logpipe &
+setupLoggingPipe() {
+    # Make a "console" logging pipe that anyone can write too regardless of who owns the process.
+    setupPipe /tmp/logpipe
+    cat <> /tmp/logpipe &
+}
 
 # Make loggers pipes for the supervisord connected apps' console, so that we can prepend the streams.
-setupPipe /tmp/loggrouper
-(cat <> /tmp/loggrouper | awk -v ENV="$ENV" -v UT="$USERTOKEN" '{printf "grouper;console;%s;%s;%s\n", ENV, UT, $0; fflush()}' &>/tmp/logpipe) &
-
-setupPipe /tmp/loghttpd
-(cat <> /tmp/loghttpd  | awk -v ENV="$ENV" -v UT="$USERTOKEN" '{printf "httpd;console;%s;%s;%s\n", ENV, UT, $0; fflush()}' &>/tmp/logpipe) &
+setupGrouperLogPipe() {
+    setupPipe /tmp/loggrouper
+    (cat <> /tmp/loggrouper | awk -v ENV="$ENV" -v UT="$USERTOKEN" '{printf "grouper;console;%s;%s;%s\n", ENV, UT, $0; fflush()}' &>/tmp/logpipe) &
+}
 
-setupPipe /tmp/logshibd
-(cat <> /tmp/logshibd | awk -v ENV="$ENV" -v UT="$USERTOKEN" '{printf "shibd;console;%s;%s;%s", ENV, UT, $0; fflush()}' &>/tmp/logpipe) &
+setupHttpdLogPipe() {
+    setupPipe /tmp/loghttpd
+    (cat <> /tmp/loghttpd  | awk -v ENV="$ENV" -v UT="$USERTOKEN" '{printf "httpd;console;%s;%s;%s\n", ENV, UT, $0; fflush()}' &>/tmp/logpipe) &
+}
 
-setupPipe /tmp/logtomcat
-(cat <> /tmp/logtomcat | awk -v ENV="$ENV" -v UT="$USERTOKEN" '{printf "tomcat;console;%s;%s;%s\n", ENV, UT, $0; fflush()}' &>/tmp/logpipe) &
+setupShibdLogPipe() {
+    setupPipe /tmp/logshibd
+    (cat <> /tmp/logshibd | awk -v ENV="$ENV" -v UT="$USERTOKEN" '{printf "shibd;console;%s;%s;%s", ENV, UT, $0; fflush()}' &>/tmp/logpipe) &
+}
 
-setupPipe /tmp/logsuperd
-(cat <> /tmp/logsuperd | awk -v ENV="$ENV" -v UT="$USERTOKEN" '{printf "supervisord;console;%s;%s;%s\n", ENV, UT, $0; fflush()}' &>/tmp/logpipe) &
+setupTomcatLogPipe() {
+    setupPipe /tmp/logtomcat
+    (cat <> /tmp/logtomcat | awk -v ENV="$ENV" -v UT="$USERTOKEN" '{printf "tomcat;console;%s;%s;%s\n", ENV, UT, $0; fflush()}' &>/tmp/logpipe) &
+}
 
+setupSupervisordLogPipe() {
+    setupPipe /tmp/logsuperd
+    (cat <> /tmp/logsuperd | awk -v ENV="$ENV" -v UT="$USERTOKEN" '{printf "supervisord;console;%s;%s;%s\n", ENV, UT, $0; fflush()}' &>/tmp/logpipe) &
+}
 
 linkGrouperSecrets() {
     for filepath in /run/secrets/*; do
@@ -46,6 +57,11 @@ linkGrouperSecrets() {
 }
 
 prepDaemon() {
+    setupLoggingPipe
+    setupGrouperLogPipe
+}
+
+prepDaemonConf() {
     local dest=/opt/grouper/grouper.apiBinary
     linkGrouperSecrets $dest/conf
 
@@ -58,6 +74,16 @@ prepDaemon() {
 }
 
 prepSCIM() {
+    setupLoggingPipe
+    setupGrouperLogPipe
+    setupHttpdLogPipe
+    setupTomcatLogPipe
+
+    
+    cp /opt/tier-support/grouper-ws-scim.xml /opt/tomee/conf/Catalina/localhost/
+}
+
+prepSCIMConf() {
     local dest=/opt/grouper/grouper.scim/WEB-INF
     linkGrouperSecrets $dest/classes
 
@@ -66,12 +92,21 @@ prepSCIM() {
     fi
     if [ -d "/opt/grouper/lib" ]; then
         cp -r /opt/grouper/lib/* $dest/lib/
-    fi
-
-    cp /opt/tier-support/grouper-ws-scim.xml /opt/tomee/conf/Catalina/localhost/
+    fi    
 }
 
 prepUI() {
+    setupLoggingPipe
+    setupGrouperLogPipe
+    setupHttpdLogPipe
+    setupShibdLogPipe
+    setupTomcatLogPipe
+    setupSupervisordLogPipe
+
+    cp /opt/tier-support/grouper.xml /opt/tomcat/conf/Catalina/localhost/
+}
+
+prepUIConf() {
     local dest=/opt/grouper/grouper.ui/WEB-INF
     linkGrouperSecrets $dest/classes
 
@@ -81,11 +116,19 @@ prepUI() {
     if [ -d "/opt/grouper/lib" ]; then
         cp -r /opt/grouper/lib/* $dest/lib/
     fi
-
-    cp /opt/tier-support/grouper.xml /opt/tomcat/conf/Catalina/localhost/
 }
 
 prepWS() {
+    setupLoggingPipe
+    setupGrouperLogPipe
+    setupHttpdLogPipe
+    setupTomcatLogPipe
+    setupSupervisordLogPipe
+
+    cp /opt/tier-support/grouper-ws.xml /opt/tomcat/conf/Catalina/localhost/
+}
+
+prepWSConf() {
     local dest=/opt/grouper/grouper.ws/WEB-INF
     linkGrouperSecrets $dest/classes
     
@@ -95,6 +138,12 @@ prepWS() {
     if [ -d "/opt/grouper/lib" ]; then
         cp -r /opt/grouper/lib/* $dest/lib/
     fi
-
-    cp /opt/tier-support/grouper-ws.xml /opt/tomcat/conf/Catalina/localhost/
 }
+
+
+prepConf() {
+    prepDaemonConf
+    prepSCIMConf
+    prepUIConf
+    prepWSConf
+}
\ No newline at end of file
diff --git a/container_files/usr-local-bin/ui b/container_files/usr-local-bin/ui
index c8895168..a03ed585 100755
--- a/container_files/usr-local-bin/ui
+++ b/container_files/usr-local-bin/ui
@@ -1,5 +1,7 @@
 #!/bin/bash
 
+. /usr/local/bin/library.sh
+
 prepUI
 
 export LD_LIBRARY_PATH=/opt/shibboleth/lib64:$LD_LIBRARY_PATH
diff --git a/container_files/usr-local-bin/ui-ws b/container_files/usr-local-bin/ui-ws
index 8defab26..de1384c4 100755
--- a/container_files/usr-local-bin/ui-ws
+++ b/container_files/usr-local-bin/ui-ws
@@ -1,5 +1,7 @@
 #!/bin/bash
 
+. /usr/local/bin/library.sh
+
 prepUI
 prepWS
 
diff --git a/container_files/usr-local-bin/ws b/container_files/usr-local-bin/ws
index 51632529..0e10b688 100755
--- a/container_files/usr-local-bin/ws
+++ b/container_files/usr-local-bin/ws
@@ -1,5 +1,7 @@
 #!/bin/bash
 
+. /usr/local/bin/library.sh
+
 prepWS
 
 exec /usr/bin/supervisord -c /opt/tier-support/supervisord-tomcat.conf
diff --git a/test-compose/README.md b/test-compose/README.md
index 2dc53e0e..6bf62c51 100644
--- a/test-compose/README.md
+++ b/test-compose/README.md
@@ -53,7 +53,7 @@ Note that when accessing the Grouper UI, Grouper WS, or Shibboleth IdP, your bro
 - In this example, we use a variety of ways to pass in passwords (Grouper database, LDAP, Grouper Client, and RabbitMQ). The point is to demonstrate possibilities and not demonstrating what is required. (See the image readme for more details.)
 - Docker `configs` are not supported by Docker Compose (when run in a non-Swarm mode), so those are represented in the `docker-compose.yml` file as bind mount volumes.
 - The Grouper config files in the `data` image's `conf` directory are used to build the sample grouper database and ldap store. They are not used when the container is instantiated as there is no Grouper runtime in this container.
-- The containers will use Docker Secrets and bind mounts for non-sensitive files that are read from the `configs-ans-secrets` directory in the `test-compose` directory.
+- The containers will use Docker Secrets and bind mounts for non-sensitive files that are read from the `configs-and-secrets` directory in the `test-compose` directory.
 - With regard to RabbitMQ, the deployer must manually add a queue named `sampleQueue` to see Grouper messages in RabbitMQ. Messages will be dropped by RabbitMQ (and the Grouper Deamon will log errors) until this occurs.
 - In this example, we don't care about the IdP secrets. They are baked into the overlay instead of using Docker Secrets. (This is not best practice for an IdP configuration, but that isn't the focus of this example.)
 
diff --git a/test-compose/configs-and-secrets/grouper/grouper.client.properties b/test-compose/configs-and-secrets/grouper/grouper.client.properties
index 5169c718..dcc50ae7 100644
--- a/test-compose/configs-and-secrets/grouper/grouper.client.properties
+++ b/test-compose/configs-and-secrets/grouper/grouper.client.properties
@@ -55,7 +55,7 @@ grouperClient.webService.login = banderson
 
 # password for shared secret authentication to web service
 # or you can put a filename with an encrypted password
-grouperClient.webService.password = ${java.lang.System.getenv().get('GROUPER_CLIENT_WEBSERVICE_PASSWORD_FILE') != null ? org.apache.commons.io.FileUtils.readFileToString(java.lang.System.getenv().get('GROUPER_CLIENT_WEBSERVICE_PASSWORD_FILE'), "utf-8") : java.lang.System.getenv().get('GROUPER_CLIENT_WEBSERVICE_PASSWORD') }
+grouperClient.webService.password.elConfig = ${java.lang.System.getenv().get('GROUPER_CLIENT_WEBSERVICE_PASSWORD_FILE') != null ? org.apache.commons.io.FileUtils.readFileToString(java.lang.System.getenv().get('GROUPER_CLIENT_WEBSERVICE_PASSWORD_FILE'), "utf-8") : java.lang.System.getenv().get('GROUPER_CLIENT_WEBSERVICE_PASSWORD') }
 
 
 ################################
@@ -100,7 +100,7 @@ grouper.messaging.system.rabbitmq.defaultSystemName = rabbitmqSystem
 grouper.messaging.system.rabbitmq.user = guest
 
 #pass
-grouper.messaging.system.rabbitmq.password = ${java.lang.System.getenv().get('RABBITMQ_PASSWORD_FILE') != null ? org.apache.commons.io.FileUtils.readFileToString(java.lang.System.getenv().get('RABBITMQ_PASSWORD_FILE'), "utf-8") : java.lang.System.getenv().get('RABBITMQ_PASSWORD') }
+grouper.messaging.system.rabbitmq.password.elConfig = ${java.lang.System.getenv().get('RABBITMQ_PASSWORD_FILE') != null ? org.apache.commons.io.FileUtils.readFileToString(java.lang.System.getenv().get('RABBITMQ_PASSWORD_FILE'), "utf-8") : java.lang.System.getenv().get('RABBITMQ_PASSWORD') }
 # set the following three properties if you want to use TLS connection to rabbitmq. All three need to be populated.
 # TLS Version
 #grouper.messaging.system.rabbitmqSystem.tlsVersion = TLSv1.1
diff --git a/test-compose/data/Dockerfile b/test-compose/data/Dockerfile
index 85b4e261..cbb3ca2d 100644
--- a/test-compose/data/Dockerfile
+++ b/test-compose/data/Dockerfile
@@ -8,7 +8,8 @@ COPY container_files/conf/ /opt/grouper/grouper.apiBinary/conf/
 RUN yum install -y epel-release \
     && yum update -y \
     && yum install -y 389-ds-base 389-admin 389-adminutil mariadb-server mariadb \
-    && yum clean all
+    && yum clean all \
+    && rm -rf /var/cache/yum
 
 RUN mysql_install_db \
     && chown -R mysql:mysql /var/lib/mysql/ \
diff --git a/test-compose/docker-compose.yml b/test-compose/docker-compose.yml
index b4547273..79c4bf26 100644
--- a/test-compose/docker-compose.yml
+++ b/test-compose/docker-compose.yml
@@ -3,7 +3,7 @@ version: "3.3"
 services:
   daemon:
     build: ./daemon/
-    command: bash -c "while ! curl -s data:3306 > /dev/null; do echo waiting for mysql to start; sleep 3; done; exec daemon"
+    command: bash -c "while ! curl -s data:3306 > /dev/null; do echo waiting for mysql to start; sleep 3; done; while ! curl -s ldap://data:389 > /dev/null; do echo waiting for ldap to start; sleep 3; done; exec daemon"
     depends_on:
      - data
     environment:
@@ -13,9 +13,6 @@ services:
      - RABBITMQ_PASSWORD_FILE=/run/secrets/rabbitmq_password.txt
      - SUBJECT_SOURCE_LDAP_PASSWORD=password
      - USERTOKEN=build-2
-    logging:
-      options:
-        tag: "grouper daemon"
     networks:
      - back
     secrets:
@@ -46,9 +43,6 @@ services:
      - GROUPER_DATABASE_PASSWORD_FILE=/run/secrets/database_password.txt
      - SUBJECT_SOURCE_LDAP_PASSWORD=password
      - USERTOKEN=build-2
-    logging:
-      options:
-         tag: "grouper ui"
     networks:
      - front
      - back
@@ -100,9 +94,6 @@ services:
      - GROUPER_DATABASE_PASSWORD_FILE=/run/secrets/database_password.txt
      - SUBJECT_SOURCE_LDAP_PASSWORD=password
      - USERTOKEN=build-2
-    logging:
-      options:
-        tag: "grouoer ws"
     networks:
      - front
      - back
@@ -178,9 +169,6 @@ services:
      - GROUPER_DATABASE_PASSWORD_FILE=/run/secrets/database_password.txt
      - SUBJECT_SOURCE_LDAP_PASSWORD=password
      - USERTOKEN=build-2
-    logging:
-      options:
-         tag: "grouper gsh"
     networks:
      - back
     secrets:

From 6da580cffc195ddeb1423df30ae4f08337293d55 Mon Sep 17 00:00:00 2001
From: Christopher Hubing <chubing@internet2.edu>
Date: Thu, 24 May 2018 11:17:46 -0400
Subject: [PATCH 037/186] Update README.md

---
 README.md | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/README.md b/README.md
index dc613c9e..f4b7f19d 100644
--- a/README.md
+++ b/README.md
@@ -1,3 +1,5 @@
+[![Build Status](https://jenkins.testbed.tier.internet2.edu/job/docker/job/grouper/job/master/badge/icon)](https://jenkins.testbed.tier.internet2.edu/job/docker/job/grouper/job/master/)
+
 
 # Supported tags
 

From b680ca8b225795ebc46f0616d66f1474f7545c1f Mon Sep 17 00:00:00 2001
From: Christopher Hubing <chubing@internet2.edu>
Date: Thu, 24 May 2018 11:26:18 -0400
Subject: [PATCH 038/186] Update README.md

---
 README.md | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/README.md b/README.md
index f4b7f19d..8c909fe5 100644
--- a/README.md
+++ b/README.md
@@ -45,7 +45,7 @@ While TIER recommends/supports using Docker Swarm for orchestrating the Grouper
 
 ### Daemon/Loader
 
-Run the Grouper Daemon/Loader as a service.
+Run the Grouper Daemon/Loader as a service. If the daemon/loader container dies unexpectedly, it may be due to memory contraints. Refer to the "Grouper Shell/Loader" section below for information on how to tweak memory settings. The default   
 
 ```console
 $ docker service create --detach --name grouper-daemon tier/grouper:latest daemon
@@ -208,8 +208,8 @@ Deployers can set runtime variables to both the Grouper Shell and Loader/Daemon
 ### Grouper Shell/Loader
 
 The following environment variables are used by the Grouper Shell/Loader: 
-- MEM_START: corresponds to the java's `-Xms`.
-- MEM_MAX: corresponds to java's `-Xmx`.
+- MEM_START: corresponds to the java's `-Xms`. (default is 64m)
+- MEM_MAX: corresponds to java's `-Xmx`. (default is 750m)
 
 ### Tomcat/TomEE
 

From 47209d316e882e6e5de20959524d2aef975a1536 Mon Sep 17 00:00:00 2001
From: Christopher Hubing <chubing@internet2.edu>
Date: Thu, 24 May 2018 11:27:07 -0400
Subject: [PATCH 039/186] Update README.md

---
 README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/README.md b/README.md
index 8c909fe5..fb7a474b 100644
--- a/README.md
+++ b/README.md
@@ -45,7 +45,7 @@ While TIER recommends/supports using Docker Swarm for orchestrating the Grouper
 
 ### Daemon/Loader
 
-Run the Grouper Daemon/Loader as a service. If the daemon/loader container dies unexpectedly, it may be due to memory contraints. Refer to the "Grouper Shell/Loader" section below for information on how to tweak memory settings. The default   
+Run the Grouper Daemon/Loader as a service. If the daemon/loader container dies unexpectedly, it may be due to memory contraints. Refer to the "Grouper Shell/Loader" section below for information on how to tweak memory settings.   
 
 ```console
 $ docker service create --detach --name grouper-daemon tier/grouper:latest daemon

From 8f4d014f6fa7b6ea5bfd3678904fe9c0108a6a2e Mon Sep 17 00:00:00 2001
From: Christopher Hubing <chubing@internet2.edu>
Date: Mon, 4 Jun 2018 16:15:29 -0400
Subject: [PATCH 040/186] bump zulu to 8u172

---
 Dockerfile | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/Dockerfile b/Dockerfile
index 36f208d8..dc0dba78 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -7,8 +7,8 @@ RUN yum update -y \
 ENV GROUPER_VERSION=2.3.0 \
     JAVA_HOME=/opt/java
 
-RUN java_version=8.0.131; \
-    zulu_version=8.21.0.1; \
+RUN java_version=8.0.172; \
+    zulu_version=8.30.0.1; \
     echo 'Downloading the OpenJDK Zulu...' \
     && wget -q http://cdn.azul.com/zulu/bin/zulu$zulu_version-jdk$java_version-linux_x64.tar.gz \
     && echo "1931ed3beedee0b16fb7fd37e069b162  zulu$zulu_version-jdk$java_version-linux_x64.tar.gz" | md5sum -c - \

From d262cdbd3168d9502bbb72f732397c9e3e8d4411 Mon Sep 17 00:00:00 2001
From: Christopher Hubing <chubing@internet2.edu>
Date: Mon, 4 Jun 2018 16:20:09 -0400
Subject: [PATCH 041/186] Update Dockerfile

---
 Dockerfile | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/Dockerfile b/Dockerfile
index dc0dba78..554abba8 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -11,7 +11,7 @@ RUN java_version=8.0.172; \
     zulu_version=8.30.0.1; \
     echo 'Downloading the OpenJDK Zulu...' \
     && wget -q http://cdn.azul.com/zulu/bin/zulu$zulu_version-jdk$java_version-linux_x64.tar.gz \
-    && echo "1931ed3beedee0b16fb7fd37e069b162  zulu$zulu_version-jdk$java_version-linux_x64.tar.gz" | md5sum -c - \
+    && echo "0a101a592a177c1c7bc63738d7bc2930  zulu$zulu_version-jdk$java_version-linux_x64.tar.gz" | md5sum -c - \
     && tar -zxvf zulu$zulu_version-jdk$java_version-linux_x64.tar.gz -C /opt \
     && ln -s /opt/zulu$zulu_version-jdk$java_version-linux_x64 $JAVA_HOME
 

From 7f1342978e58a986bb97bbb7ba91cfa7c195f4b4 Mon Sep 17 00:00:00 2001
From: Christopher Hubing <chubing@internet2.edu>
Date: Mon, 4 Jun 2018 20:33:30 -0400
Subject: [PATCH 042/186] Update grouper.installer.properties

---
 container_files/grouper.installer.properties | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/container_files/grouper.installer.properties b/container_files/grouper.installer.properties
index ef3e7b55..9b2d9c34 100644
--- a/container_files/grouper.installer.properties
+++ b/container_files/grouper.installer.properties
@@ -29,7 +29,7 @@ grouperInstaller.autorun.deleteAndInitDatabase = t
 grouperInstaller.autorun.addQuickstartData = f
 grouperInstaller.autorun.installClient = f
  
-grouperInstaller.autorun.installGrouperActiveMqMessaging = t
+grouperInstaller.autorun.installGrouperActiveMqMessaging = f
 grouperInstaller.autorun.activeMqWhereInstalled = /opt/grouper/2.3.0/grouper.apiBinary-2.3.0/
 
 grouperInstaller.autorun.installGrouperAwsSqsMessaging = t

From 1deb71235b51a73fb1d9547f6427f4d187117cb0 Mon Sep 17 00:00:00 2001
From: Paul Caskey <pcaskey@internet2.edu>
Date: Thu, 14 Jun 2018 11:38:22 -0400
Subject: [PATCH 043/186] change Zulu Java to CentOS-packaged Zulu

---
 Dockerfile | 23 ++++++++++++++---------
 1 file changed, 14 insertions(+), 9 deletions(-)

diff --git a/Dockerfile b/Dockerfile
index 554abba8..bdc6c589 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -5,15 +5,20 @@ RUN yum update -y \
     && yum clean all
 
 ENV GROUPER_VERSION=2.3.0 \
-    JAVA_HOME=/opt/java
+     JAVA_HOME=/usr
 
-RUN java_version=8.0.172; \
-    zulu_version=8.30.0.1; \
-    echo 'Downloading the OpenJDK Zulu...' \
-    && wget -q http://cdn.azul.com/zulu/bin/zulu$zulu_version-jdk$java_version-linux_x64.tar.gz \
-    && echo "0a101a592a177c1c7bc63738d7bc2930  zulu$zulu_version-jdk$java_version-linux_x64.tar.gz" | md5sum -c - \
-    && tar -zxvf zulu$zulu_version-jdk$java_version-linux_x64.tar.gz -C /opt \
-    && ln -s /opt/zulu$zulu_version-jdk$java_version-linux_x64 $JAVA_HOME
+# use Zulu package
+RUN rpm --import http://repos.azulsystems.com/RPM-GPG-KEY-azulsystems \
+       && curl -o /etc/yum.repos.d/zulu.repo http://repos.azulsystems.com/rhel/zulu.repo \
+       && yum -y install zulu-8
+
+#RUN java_version=8.0.172; \
+#    zulu_version=8.30.0.1; \
+#    echo 'Downloading the OpenJDK Zulu...' \
+#    && wget -q http://cdn.azul.com/zulu/bin/zulu$zulu_version-jdk$java_version-linux_x64.tar.gz \
+#    && echo "0a101a592a177c1c7bc63738d7bc2930  zulu$zulu_version-jdk$java_version-linux_x64.tar.gz" | md5sum -c - \
+#    && tar -zxvf zulu$zulu_version-jdk$java_version-linux_x64.tar.gz -C /opt \
+#    && ln -s /opt/zulu$zulu_version-jdk$java_version-linux_x64 $JAVA_HOME
 
 #RUN java_version=8u151; \
 #    java_bnumber=12; \
@@ -88,7 +93,7 @@ LABEL author="tier-packaging@internet2.edu <tier-packaging@internet2.edu>" \
       ImageName=$imagename \
       ImageOS=centos7
 
-ENV JAVA_HOME=/opt/java \
+ENV JAVA_HOME=/usr \
     PATH=$PATH:$JAVA_HOME/bin \
     GROUPER_HOME=/opt/grouper/grouper.apiBinary
 

From 87038f387bdd3e67da185886c2df8944c99f0fe0 Mon Sep 17 00:00:00 2001
From: Paul Caskey <pcaskey@internet2.edu>
Date: Thu, 14 Jun 2018 18:10:00 -0500
Subject: [PATCH 044/186] update README

---
 README.md | 1 +
 1 file changed, 1 insertion(+)

diff --git a/README.md b/README.md
index fb7a474b..c00d0dd8 100644
--- a/README.md
+++ b/README.md
@@ -231,6 +231,7 @@ Here is a list of significant directories and files that deployers should be awa
 - `/opt/tomcat/`: used to run Grouper UI and Grouper WS
 - `/opt/tomee/`: used to run the Grouper SCIM Server.
 - `/var/run/secrets`: location where Docker Secrets are mounted into the container. Secrets starting with `grouper_`, `shib_`, and `httpd_` have special meaning. See `Secrets/Configs` above.
+- `/usr/lib/jvm/zulu-8/jre/lib/security/cacerts`: location of the Java trust store.
 
 To examine baseline image files, one might run `docker run --name=temp -it tier/grouper bash` and browse through these file system endpoints. While the container is running one may copy files out of the image/container using something like `docker cp containerId:/opt/grouper/grouper.api/conf/grouper.properties .`, which will copy the `grouper.properties` to the Docker client's present working directory. These files can then be edited and applied via the mechanisms outlined above.
 

From 47a78326c44832c329e7b8e24968395e3bada532 Mon Sep 17 00:00:00 2001
From: Christopher Hubing <chubing@internet2.edu>
Date: Fri, 15 Jun 2018 16:02:36 -0400
Subject: [PATCH 045/186] Update Dockerfile

---
 Dockerfile | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/Dockerfile b/Dockerfile
index bdc6c589..1e052d72 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -5,7 +5,7 @@ RUN yum update -y \
     && yum clean all
 
 ENV GROUPER_VERSION=2.3.0 \
-     JAVA_HOME=/usr
+     JAVA_HOME=/usr/lib/jvm/zulu-8/
 
 # use Zulu package
 RUN rpm --import http://repos.azulsystems.com/RPM-GPG-KEY-azulsystems \

From 61a3ba6a0d2a4a8abb2afac430cc09713b759205 Mon Sep 17 00:00:00 2001
From: Christopher Hubing <chubing@internet2.edu>
Date: Fri, 15 Jun 2018 16:24:11 -0400
Subject: [PATCH 046/186] Update Dockerfile

---
 Dockerfile | 1 +
 1 file changed, 1 insertion(+)

diff --git a/Dockerfile b/Dockerfile
index 1e052d72..8720987f 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -11,6 +11,7 @@ ENV GROUPER_VERSION=2.3.0 \
 RUN rpm --import http://repos.azulsystems.com/RPM-GPG-KEY-azulsystems \
        && curl -o /etc/yum.repos.d/zulu.repo http://repos.azulsystems.com/rhel/zulu.repo \
        && yum -y install zulu-8
+       && ln -s $JAVA_HOME/bin/java /etc/alternatives
 
 #RUN java_version=8.0.172; \
 #    zulu_version=8.30.0.1; \

From 30df43bdb904c1c879ceb5cdd976fea5dd154ff2 Mon Sep 17 00:00:00 2001
From: Christopher Hubing <chubing@internet2.edu>
Date: Fri, 15 Jun 2018 16:24:58 -0400
Subject: [PATCH 047/186] Update Dockerfile

---
 Dockerfile | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/Dockerfile b/Dockerfile
index 8720987f..41c9cce2 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -10,7 +10,7 @@ ENV GROUPER_VERSION=2.3.0 \
 # use Zulu package
 RUN rpm --import http://repos.azulsystems.com/RPM-GPG-KEY-azulsystems \
        && curl -o /etc/yum.repos.d/zulu.repo http://repos.azulsystems.com/rhel/zulu.repo \
-       && yum -y install zulu-8
+       && yum -y install zulu-8 \
        && ln -s $JAVA_HOME/bin/java /etc/alternatives
 
 #RUN java_version=8.0.172; \

From b03d1cdda13aab81773bfe9a52343ae471a3effe Mon Sep 17 00:00:00 2001
From: Christopher Hubing <chubing@internet2.edu>
Date: Fri, 15 Jun 2018 16:28:36 -0400
Subject: [PATCH 048/186] Update Dockerfile

---
 Dockerfile | 1 +
 1 file changed, 1 insertion(+)

diff --git a/Dockerfile b/Dockerfile
index 41c9cce2..bc6512b0 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -11,6 +11,7 @@ ENV GROUPER_VERSION=2.3.0 \
 RUN rpm --import http://repos.azulsystems.com/RPM-GPG-KEY-azulsystems \
        && curl -o /etc/yum.repos.d/zulu.repo http://repos.azulsystems.com/rhel/zulu.repo \
        && yum -y install zulu-8 \
+       && ls -ld /etc/alternatives/java \
        && ln -s $JAVA_HOME/bin/java /etc/alternatives
 
 #RUN java_version=8.0.172; \

From a14c250bb2fdcacf49581b7feb2ced5fa971c0be Mon Sep 17 00:00:00 2001
From: Christopher Hubing <chubing@internet2.edu>
Date: Fri, 15 Jun 2018 16:31:29 -0400
Subject: [PATCH 049/186] Update Dockerfile

---
 Dockerfile | 5 ++---
 1 file changed, 2 insertions(+), 3 deletions(-)

diff --git a/Dockerfile b/Dockerfile
index bc6512b0..0070aedc 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -10,9 +10,7 @@ ENV GROUPER_VERSION=2.3.0 \
 # use Zulu package
 RUN rpm --import http://repos.azulsystems.com/RPM-GPG-KEY-azulsystems \
        && curl -o /etc/yum.repos.d/zulu.repo http://repos.azulsystems.com/rhel/zulu.repo \
-       && yum -y install zulu-8 \
-       && ls -ld /etc/alternatives/java \
-       && ln -s $JAVA_HOME/bin/java /etc/alternatives
+       && yum -y install zulu-8 
 
 #RUN java_version=8.0.172; \
 #    zulu_version=8.30.0.1; \
@@ -60,6 +58,7 @@ COPY --from=installing /opt/grouper/$GROUPER_VERSION/grouper.ws-$GROUPER_VERSION
 #COPY --from=installing /opt/grouper/$GROUPER_VERSION/grouper.clientBinary-$GROUPER_VERSION/ /opt/grouper/grouper.clientBinary/
 COPY --from=installing /opt/grouper/$GROUPER_VERSION/apache-tomcat-$TOMCAT_VERSION/ /opt/tomcat/
 COPY --from=installing /opt/grouper/$GROUPER_VERSION/apache-tomee-webprofile-$TOMEE_VERSION/ /opt/tomee/
+COPY --from=installing /etc/alternatives/java /etc/alternatives/java
 
 ADD http://central.maven.org/maven2/org/apache/logging/log4j/log4j-core/2.11.0/log4j-core-2.11.0.jar /opt/tomcat/bin
 ADD http://central.maven.org/maven2/org/apache/logging/log4j/log4j-api/2.11.0/log4j-api-2.11.0.jar /opt/tomcat/bin

From c200a08c8f35df4b146a7dcbffc4bd8293af73b6 Mon Sep 17 00:00:00 2001
From: Christopher Hubing <chubing@internet2.edu>
Date: Fri, 15 Jun 2018 17:37:55 -0400
Subject: [PATCH 050/186] Update Dockerfile

---
 Dockerfile | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/Dockerfile b/Dockerfile
index 0070aedc..4e13f4f2 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -94,7 +94,7 @@ LABEL author="tier-packaging@internet2.edu <tier-packaging@internet2.edu>" \
       ImageName=$imagename \
       ImageOS=centos7
 
-ENV JAVA_HOME=/usr \
+ENV JAVA_HOME=/usr/lib/jvm/zulu-8/ \
     PATH=$PATH:$JAVA_HOME/bin \
     GROUPER_HOME=/opt/grouper/grouper.apiBinary
 
@@ -115,7 +115,9 @@ RUN groupadd -r tomcat \
     && useradd -r -m -s /sbin/nologin -g tomcat tomcat \
     && mkdir -p /opt/tomcat/logs/ /opt/tomcat/temp/ /opt/tomcat/work/ \
     && chown -R tomcat:tomcat /opt/tomcat/logs/ /opt/tomcat/temp/ /opt/tomcat/work/ \
-    && chown -R tomcat:tomcat /opt/tomee/logs/ /opt/tomee/temp/ /opt/tomee/work/
+    && chown -R tomcat:tomcat /opt/tomee/logs/ /opt/tomee/temp/ /opt/tomee/work/ \
+    && rm /etc/alternatives/java \
+    && ln -s $JAVA_HOME/bin/java /etc/alternatives/java
 
 RUN rm /etc/shibboleth/sp-key.pem /etc/shibboleth/sp-cert.pem
 

From 64d77c1bdee8fcdbdb0f1d3d1175acd4b6c5a226 Mon Sep 17 00:00:00 2001
From: Christopher Hubing <chubing@internet2.edu>
Date: Fri, 15 Jun 2018 18:36:54 -0400
Subject: [PATCH 051/186] Update Dockerfile

---
 Dockerfile | 1 -
 1 file changed, 1 deletion(-)

diff --git a/Dockerfile b/Dockerfile
index 4e13f4f2..ac08e98b 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -116,7 +116,6 @@ RUN groupadd -r tomcat \
     && mkdir -p /opt/tomcat/logs/ /opt/tomcat/temp/ /opt/tomcat/work/ \
     && chown -R tomcat:tomcat /opt/tomcat/logs/ /opt/tomcat/temp/ /opt/tomcat/work/ \
     && chown -R tomcat:tomcat /opt/tomee/logs/ /opt/tomee/temp/ /opt/tomee/work/ \
-    && rm /etc/alternatives/java \
     && ln -s $JAVA_HOME/bin/java /etc/alternatives/java
 
 RUN rm /etc/shibboleth/sp-key.pem /etc/shibboleth/sp-cert.pem

From 0565665f97eb1f8a5124a7c70500a6472a78a031 Mon Sep 17 00:00:00 2001
From: Christopher Hubing <chubing@internet2.edu>
Date: Wed, 27 Jun 2018 13:35:39 -0400
Subject: [PATCH 052/186] Create native.logger

---
 container_files/shibboleth/native.logger | 39 ++++++++++++++++++++++++
 1 file changed, 39 insertions(+)
 create mode 100644 container_files/shibboleth/native.logger

diff --git a/container_files/shibboleth/native.logger b/container_files/shibboleth/native.logger
new file mode 100644
index 00000000..0b01f32f
--- /dev/null
+++ b/container_files/shibboleth/native.logger
@@ -0,0 +1,39 @@
+# set overall behavior
+log4j.rootCategory=INFO, native_log, warn_log
+
+# fairly verbose for DEBUG, so generally leave at INFO
+log4j.category.XMLTooling.XMLObject=INFO
+log4j.category.XMLTooling.KeyInfoResolver=INFO
+log4j.category.Shibboleth.IPRange=INFO
+log4j.category.Shibboleth.PropertySet=INFO
+
+# raise for low-level tracing of SOAP client HTTP/SSL behavior
+log4j.category.XMLTooling.libcurl=INFO
+
+# useful categories to tune independently:
+#
+# tracing of SAML messages and security policies
+#log4j.category.OpenSAML.MessageDecoder=DEBUG
+#log4j.category.OpenSAML.MessageEncoder=DEBUG
+#log4j.category.OpenSAML.SecurityPolicyRule=DEBUG
+# interprocess message remoting
+#log4j.category.Shibboleth.Listener=DEBUG
+# mapping of requests to applicationId
+#log4j.category.Shibboleth.RequestMapper=DEBUG
+# high level session cache operations
+#log4j.category.Shibboleth.SessionCache=DEBUG
+# persistent storage and caching
+#log4j.category.XMLTooling.StorageService=DEBUG
+
+# define the appender
+
+log4j.appender.native_log=org.apache.log4j.FileAppender
+log4j.appender.native_log.fileName=/tmp/logpipe
+log4j.appender.native_log.layout=org.apache.log4j.PatternLayout
+log4j.appender.native_log.layout.ConversionPattern=shibd;native.log;${ENV};${USERTOKEN};%d{%Y-%m-%d %H:%M:%S} %p %c %x: %m%n
+
+log4j.appender.warn_log=org.apache.log4j.FileAppender
+log4j.appender.warn_log.fileName=/tmp/logpipe
+log4j.appender.warn_log.layout=org.apache.log4j.PatternLayout
+log4j.appender.warn_log.layout.ConversionPattern=shibd;native_warn.log;${ENV};${USERTOKEN};%d{%Y-%m-%d %H:%M:%S} %p %c %x: %m%n
+log4j.appender.warn_log.threshold=WARN

From 961a8effd934a6c5da119af505728ee0378e3274 Mon Sep 17 00:00:00 2001
From: Christopher Hubing <chubing@internet2.edu>
Date: Fri, 13 Jul 2018 14:56:25 -0400
Subject: [PATCH 053/186] Update grouper.installer.properties

---
 container_files/grouper.installer.properties | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/container_files/grouper.installer.properties b/container_files/grouper.installer.properties
index 9b2d9c34..b9da7f2a 100644
--- a/container_files/grouper.installer.properties
+++ b/container_files/grouper.installer.properties
@@ -16,7 +16,7 @@ grouperInstaller.default.installOrUpgrade = install
 
 grouperInstaller.autorun.installAllPatches = false
 grouperInstaller.autorun.installPatchesUpToACertainPatchLevel = true
-grouperInstaller.autorun.installPatchesUpToThesePatchLevels = grouper_v2_3_0_api_patch_106,grouper_v2_3_0_ui_patch_43,grouper_v2_3_0_ws_patch_12,grouper_v2_3_0_pspng_patch_16
+grouperInstaller.autorun.installPatchesUpToThesePatchLevels = grouper_v2_3_0_api_patch_107,grouper_v2_3_0_ui_patch_44,grouper_v2_3_0_ws_patch_12,grouper_v2_3_0_pspng_patch_16
 
 #### set this to true to try to use defaults for everything.  Only things without default values will need to be set
 grouperInstaller.autorun.useDefaultsAsMuchAsAvailable = true

From a35a1b58419c598d1cc9d0d2ad2c6e764cc89a42 Mon Sep 17 00:00:00 2001
From: Christopher Hubing <chubing@internet2.edu>
Date: Tue, 17 Jul 2018 16:48:46 -0400
Subject: [PATCH 054/186] Update grouper.installer.properties

---
 container_files/grouper.installer.properties | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/container_files/grouper.installer.properties b/container_files/grouper.installer.properties
index b9da7f2a..284e5dca 100644
--- a/container_files/grouper.installer.properties
+++ b/container_files/grouper.installer.properties
@@ -16,7 +16,7 @@ grouperInstaller.default.installOrUpgrade = install
 
 grouperInstaller.autorun.installAllPatches = false
 grouperInstaller.autorun.installPatchesUpToACertainPatchLevel = true
-grouperInstaller.autorun.installPatchesUpToThesePatchLevels = grouper_v2_3_0_api_patch_107,grouper_v2_3_0_ui_patch_44,grouper_v2_3_0_ws_patch_12,grouper_v2_3_0_pspng_patch_16
+grouperInstaller.autorun.installPatchesUpToThesePatchLevels = grouper_v2_3_0_api_patch_108,grouper_v2_3_0_ui_patch_45,grouper_v2_3_0_ws_patch_12,grouper_v2_3_0_pspng_patch_16
 
 #### set this to true to try to use defaults for everything.  Only things without default values will need to be set
 grouperInstaller.autorun.useDefaultsAsMuchAsAvailable = true

From 13421ac4b4469859586775fccd5165ca9c92f968 Mon Sep 17 00:00:00 2001
From: Christopher Hubing <chubing@internet2.edu>
Date: Sat, 18 Aug 2018 11:49:12 -0400
Subject: [PATCH 055/186] Update grouper.installer.properties

---
 container_files/grouper.installer.properties | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/container_files/grouper.installer.properties b/container_files/grouper.installer.properties
index 284e5dca..9ac32f07 100644
--- a/container_files/grouper.installer.properties
+++ b/container_files/grouper.installer.properties
@@ -14,9 +14,9 @@ grouperInstaller.default.installOrUpgrade = install
 ##
 ##############################
 
-grouperInstaller.autorun.installAllPatches = false
-grouperInstaller.autorun.installPatchesUpToACertainPatchLevel = true
-grouperInstaller.autorun.installPatchesUpToThesePatchLevels = grouper_v2_3_0_api_patch_108,grouper_v2_3_0_ui_patch_45,grouper_v2_3_0_ws_patch_12,grouper_v2_3_0_pspng_patch_16
+grouperInstaller.autorun.installAllPatches = true
+# grouperInstaller.autorun.installPatchesUpToACertainPatchLevel = true
+# grouperInstaller.autorun.installPatchesUpToThesePatchLevels = grouper_v2_3_0_api_patch_108,grouper_v2_3_0_ui_patch_45,grouper_v2_3_0_ws_patch_12,grouper_v2_3_0_pspng_patch_16
 
 #### set this to true to try to use defaults for everything.  Only things without default values will need to be set
 grouperInstaller.autorun.useDefaultsAsMuchAsAvailable = true

From 9c931a0c83c39b95e0c751b8e315fe38fea65795 Mon Sep 17 00:00:00 2001
From: Christopher Hubing <chubing@internet2.edu>
Date: Sat, 18 Aug 2018 11:50:54 -0400
Subject: [PATCH 056/186] Update grouper.installer.properties

---
 container_files/grouper.installer.properties | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/container_files/grouper.installer.properties b/container_files/grouper.installer.properties
index 9ac32f07..7f0e354d 100644
--- a/container_files/grouper.installer.properties
+++ b/container_files/grouper.installer.properties
@@ -1,7 +1,7 @@
 # this should be before the version number
 download.server.url = https://software.internet2.edu/grouper
 # default version to install
-grouper.version = 2.3.0
+grouper.version = 2.4.0
 # print out autorun keys in prompts so you can easily see how to configure the autorun
 grouperInstaller.print.autorunKeys = true
 # default to install or upgrade (default is install)

From 8dc34ffb3578683f0e73e7297823ff1c3b0aea01 Mon Sep 17 00:00:00 2001
From: Christopher Hubing <chubing@internet2.edu>
Date: Sat, 18 Aug 2018 11:53:23 -0400
Subject: [PATCH 057/186] Update grouper.installer.properties

---
 container_files/grouper.installer.properties | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/container_files/grouper.installer.properties b/container_files/grouper.installer.properties
index 7f0e354d..35cab020 100644
--- a/container_files/grouper.installer.properties
+++ b/container_files/grouper.installer.properties
@@ -30,10 +30,10 @@ grouperInstaller.autorun.addQuickstartData = f
 grouperInstaller.autorun.installClient = f
  
 grouperInstaller.autorun.installGrouperActiveMqMessaging = f
-grouperInstaller.autorun.activeMqWhereInstalled = /opt/grouper/2.3.0/grouper.apiBinary-2.3.0/
+grouperInstaller.autorun.activeMqWhereInstalled = /opt/grouper/2.4.0/grouper.apiBinary-2.4.0/
 
 grouperInstaller.autorun.installGrouperAwsSqsMessaging = t
-grouperInstaller.autorun.AwsSqsWhereInstalled = /opt/grouper/2.3.0/grouper.apiBinary-2.3.0/
+grouperInstaller.autorun.AwsSqsWhereInstalled = /opt/grouper/2.4.0/grouper.apiBinary-2.4.0/
 
 grouperInstaller.autorun.installGrouperRabbitMqMessaging = t
-grouperInstaller.autorun.rabbitMqWhereInstalled = /opt/grouper/2.3.0/grouper.apiBinary-2.3.0/
+grouperInstaller.autorun.rabbitMqWhereInstalled = /opt/grouper/2.4.0/grouper.apiBinary-2.4.0/

From 369cf6cac3b93b677b0ed28c58fa608b63b555bc Mon Sep 17 00:00:00 2001
From: Christopher Hubing <chubing@internet2.edu>
Date: Sat, 18 Aug 2018 11:54:09 -0400
Subject: [PATCH 058/186] Update Dockerfile

---
 Dockerfile | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/Dockerfile b/Dockerfile
index ac08e98b..f600f750 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -4,7 +4,7 @@ RUN yum update -y \
     && yum install -y wget tar unzip dos2unix \
     && yum clean all
 
-ENV GROUPER_VERSION=2.3.0 \
+ENV GROUPER_VERSION=2.4.0 \
      JAVA_HOME=/usr/lib/jvm/zulu-8/
 
 # use Zulu package
@@ -46,7 +46,7 @@ RUN echo 'Installing Grouper'; \
 
 FROM centos:centos7 as cleanup
 
-ENV GROUPER_VERSION=2.3.0 \
+ENV GROUPER_VERSION=2.4.0 \
     TOMCAT_VERSION=8.5.12 \    
     TOMEE_VERSION=7.0.0
 

From 5f638ebabe52dee5a0f00fb95437f316fdc3dde5 Mon Sep 17 00:00:00 2001
From: Christopher Hubing <chubing@internet2.edu>
Date: Sat, 18 Aug 2018 12:36:30 -0400
Subject: [PATCH 059/186] Update grouper.installer.properties

---
 container_files/grouper.installer.properties | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/container_files/grouper.installer.properties b/container_files/grouper.installer.properties
index 35cab020..ef3aca3d 100644
--- a/container_files/grouper.installer.properties
+++ b/container_files/grouper.installer.properties
@@ -37,3 +37,6 @@ grouperInstaller.autorun.AwsSqsWhereInstalled = /opt/grouper/2.4.0/grouper.apiBi
 
 grouperInstaller.autorun.installGrouperRabbitMqMessaging = t
 grouperInstaller.autorun.rabbitMqWhereInstalled = /opt/grouper/2.4.0/grouper.apiBinary-2.4.0/
+
+# disable installing pspng, for now
+grouperInstaller.autorun.installPspng = f

From 63af7e075c8af8ea55242fac93289e4d3eebfbc4 Mon Sep 17 00:00:00 2001
From: Christopher Hubing <chubing@internet2.edu>
Date: Sat, 18 Aug 2018 12:43:03 -0400
Subject: [PATCH 060/186] Update grouper.installer.properties

---
 container_files/grouper.installer.properties | 1 +
 1 file changed, 1 insertion(+)

diff --git a/container_files/grouper.installer.properties b/container_files/grouper.installer.properties
index ef3aca3d..8537cf91 100644
--- a/container_files/grouper.installer.properties
+++ b/container_files/grouper.installer.properties
@@ -40,3 +40,4 @@ grouperInstaller.autorun.rabbitMqWhereInstalled = /opt/grouper/2.4.0/grouper.api
 
 # disable installing pspng, for now
 grouperInstaller.autorun.installPspng = f
+grouperInstaller.autorun.installPsp = f

From 31f29bc689a7859fbb40e3ba4f944b2cce4343f5 Mon Sep 17 00:00:00 2001
From: Christopher Hubing <chubing@internet2.edu>
Date: Sat, 18 Aug 2018 12:57:07 -0400
Subject: [PATCH 061/186] Update Dockerfile

---
 Dockerfile | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/Dockerfile b/Dockerfile
index f600f750..be3b3c21 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -118,7 +118,7 @@ RUN groupadd -r tomcat \
     && chown -R tomcat:tomcat /opt/tomee/logs/ /opt/tomee/temp/ /opt/tomee/work/ \
     && ln -s $JAVA_HOME/bin/java /etc/alternatives/java
 
-RUN rm /etc/shibboleth/sp-key.pem /etc/shibboleth/sp-cert.pem
+# RUN rm /etc/shibboleth/sp-key.pem /etc/shibboleth/sp-cert.pem
 
 COPY container_files/tier-support/ /opt/tier-support/
 COPY container_files/usr-local-bin/ /usr/local/bin/

From 46679ff5a1f6e42f5661ed55bb639779dabea725 Mon Sep 17 00:00:00 2001
From: Christopher Hubing <chubing@internet2.edu>
Date: Sat, 18 Aug 2018 13:41:19 -0400
Subject: [PATCH 062/186] Update Dockerfile

---
 Dockerfile | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/Dockerfile b/Dockerfile
index be3b3c21..f600f750 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -118,7 +118,7 @@ RUN groupadd -r tomcat \
     && chown -R tomcat:tomcat /opt/tomee/logs/ /opt/tomee/temp/ /opt/tomee/work/ \
     && ln -s $JAVA_HOME/bin/java /etc/alternatives/java
 
-# RUN rm /etc/shibboleth/sp-key.pem /etc/shibboleth/sp-cert.pem
+RUN rm /etc/shibboleth/sp-key.pem /etc/shibboleth/sp-cert.pem
 
 COPY container_files/tier-support/ /opt/tier-support/
 COPY container_files/usr-local-bin/ /usr/local/bin/

From fed93af0532a5b45728499d5252e3e2a0b11512e Mon Sep 17 00:00:00 2001
From: Christopher Hubing <chubing@internet2.edu>
Date: Sat, 18 Aug 2018 14:18:45 -0400
Subject: [PATCH 063/186] Update Dockerfile

---
 Dockerfile | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/Dockerfile b/Dockerfile
index f600f750..eee6c126 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -118,7 +118,8 @@ RUN groupadd -r tomcat \
     && chown -R tomcat:tomcat /opt/tomee/logs/ /opt/tomee/temp/ /opt/tomee/work/ \
     && ln -s $JAVA_HOME/bin/java /etc/alternatives/java
 
-RUN rm /etc/shibboleth/sp-key.pem /etc/shibboleth/sp-cert.pem
+# does shib sp3 not generate these files?
+# RUN rm /etc/shibboleth/sp-key.pem /etc/shibboleth/sp-cert.pem
 
 COPY container_files/tier-support/ /opt/tier-support/
 COPY container_files/usr-local-bin/ /usr/local/bin/

From effd79f8ce0a62d9da592d6ba92631d8ad295099 Mon Sep 17 00:00:00 2001
From: Christopher Hubing <chubing@internet2.edu>
Date: Tue, 28 Aug 2018 14:58:18 -0400
Subject: [PATCH 064/186] Update grouper.installer.properties

---
 container_files/grouper.installer.properties | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/container_files/grouper.installer.properties b/container_files/grouper.installer.properties
index 8537cf91..be9cd2b0 100644
--- a/container_files/grouper.installer.properties
+++ b/container_files/grouper.installer.properties
@@ -39,5 +39,5 @@ grouperInstaller.autorun.installGrouperRabbitMqMessaging = t
 grouperInstaller.autorun.rabbitMqWhereInstalled = /opt/grouper/2.4.0/grouper.apiBinary-2.4.0/
 
 # disable installing pspng, for now
-grouperInstaller.autorun.installPspng = f
+grouperInstaller.autorun.installPspng = t
 grouperInstaller.autorun.installPsp = f

From 218db1712a311cbbedb823c247d451e35d85cc60 Mon Sep 17 00:00:00 2001
From: Christopher Hubing <chubing@internet2.edu>
Date: Wed, 29 Aug 2018 11:20:44 -0400
Subject: [PATCH 065/186] Update grouper.installer.properties

---
 container_files/grouper.installer.properties | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/container_files/grouper.installer.properties b/container_files/grouper.installer.properties
index be9cd2b0..33c3edf6 100644
--- a/container_files/grouper.installer.properties
+++ b/container_files/grouper.installer.properties
@@ -40,4 +40,4 @@ grouperInstaller.autorun.rabbitMqWhereInstalled = /opt/grouper/2.4.0/grouper.api
 
 # disable installing pspng, for now
 grouperInstaller.autorun.installPspng = t
-grouperInstaller.autorun.installPsp = f
+grouperInstaller.autorun.installPsp = t

From 034f4cbdfde169d0ad87fe03a8dc716df45e0a17 Mon Sep 17 00:00:00 2001
From: Christopher Hubing <chubing@internet2.edu>
Date: Fri, 31 Aug 2018 10:07:12 -0400
Subject: [PATCH 066/186] Update grouper.installer.properties

---
 container_files/grouper.installer.properties | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/container_files/grouper.installer.properties b/container_files/grouper.installer.properties
index 33c3edf6..be9cd2b0 100644
--- a/container_files/grouper.installer.properties
+++ b/container_files/grouper.installer.properties
@@ -40,4 +40,4 @@ grouperInstaller.autorun.rabbitMqWhereInstalled = /opt/grouper/2.4.0/grouper.api
 
 # disable installing pspng, for now
 grouperInstaller.autorun.installPspng = t
-grouperInstaller.autorun.installPsp = t
+grouperInstaller.autorun.installPsp = f

From c27e192d0731fcd9d880c8abde729f4f88295472 Mon Sep 17 00:00:00 2001
From: Christopher Hubing <chubing@internet2.edu>
Date: Tue, 4 Sep 2018 10:11:28 -0400
Subject: [PATCH 067/186] Update grouper.installer.properties

---
 container_files/grouper.installer.properties | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/container_files/grouper.installer.properties b/container_files/grouper.installer.properties
index 284e5dca..5e5778d8 100644
--- a/container_files/grouper.installer.properties
+++ b/container_files/grouper.installer.properties
@@ -16,7 +16,7 @@ grouperInstaller.default.installOrUpgrade = install
 
 grouperInstaller.autorun.installAllPatches = false
 grouperInstaller.autorun.installPatchesUpToACertainPatchLevel = true
-grouperInstaller.autorun.installPatchesUpToThesePatchLevels = grouper_v2_3_0_api_patch_108,grouper_v2_3_0_ui_patch_45,grouper_v2_3_0_ws_patch_12,grouper_v2_3_0_pspng_patch_16
+grouperInstaller.autorun.installPatchesUpToThesePatchLevels = grouper_v2_3_0_api_patch_108,grouper_v2_3_0_ui_patch_45,grouper_v2_3_0_ws_patch_12,grouper_v2_3_0_pspng_patch_20
 
 #### set this to true to try to use defaults for everything.  Only things without default values will need to be set
 grouperInstaller.autorun.useDefaultsAsMuchAsAvailable = true

From 059b9a93d0ab827b4985423316f66ec691fc5eff Mon Sep 17 00:00:00 2001
From: Chris Hubing <chubing@internet2.edu>
Date: Tue, 4 Sep 2018 18:52:57 -0400
Subject: [PATCH 068/186] config changes for 2.4

---
 container_files/grouper.installer.properties  |  2 +-
 .../grouper/grouper-loader.properties         |  7 ++---
 .../grouper/subject.properties                | 26 ++++++++++++-------
 .../container_files/conf/subject.properties   | 26 ++++++++++++-------
 .../container_files/seed-data/bootstrap.gsh   |  7 +++++
 5 files changed, 44 insertions(+), 24 deletions(-)

diff --git a/container_files/grouper.installer.properties b/container_files/grouper.installer.properties
index 33c3edf6..be9cd2b0 100644
--- a/container_files/grouper.installer.properties
+++ b/container_files/grouper.installer.properties
@@ -40,4 +40,4 @@ grouperInstaller.autorun.rabbitMqWhereInstalled = /opt/grouper/2.4.0/grouper.api
 
 # disable installing pspng, for now
 grouperInstaller.autorun.installPspng = t
-grouperInstaller.autorun.installPsp = t
+grouperInstaller.autorun.installPsp = f
diff --git a/test-compose/configs-and-secrets/grouper/grouper-loader.properties b/test-compose/configs-and-secrets/grouper/grouper-loader.properties
index 07c4f56a..c406f91a 100644
--- a/test-compose/configs-and-secrets/grouper/grouper-loader.properties
+++ b/test-compose/configs-and-secrets/grouper/grouper-loader.properties
@@ -4,17 +4,18 @@
 # specify the ldap connection with user, pass, url
 # the string after "ldap." is the ID of the connection, and it should not have
 # spaces or other special chars in it.  In this case is it "personLdap"
- 
+
 #note the URL should start with ldap: or ldaps: if it is SSL.  
 #It should contain the server and port (optional if not default), and baseDn,
 #e.g. ldaps://ldapserver.school.edu:636/dc=school,dc=edu
-ldap.demo.url = ldap://data:389/dc=example,dc=edu
+ldap.demo.url = ldap://data:389/dc=internet2,dc=edu
  
 #optional, if authenticated
 ldap.demo.user = cn=admin,dc=internet2,dc=edu
  
 #optional, if authenticated note the password can be stored encrypted in an external file
-ldap.demo.pass = ${java.lang.System.getenv().get('SUBJECT_SOURCE_LDAP_PASSWORD_FILE') != null ? org.apache.commons.io.FileUtils.readFileToString(java.lang.System.getenv().get('SUBJECT_SOURCE_LDAP_PASSWORD_FILE'), "utf-8") : java.lang.System.getenv().get('SUBJECT_SOURCE_LDAP_PASSWORD')}
+#ldap.demo.pass = ${java.lang.System.getenv().get('SUBJECT_SOURCE_LDAP_PASSWORD_FILE') != null ? org.apache.commons.io.FileUtils.readFileToString(java.lang.System.getenv().get('SUBJECT_SOURCE_LDAP_PASSWORD_FILE'), "utf-8") : java.lang.System.getenv().get('SUBJECT_SOURCE_LDAP_PASSWORD')}
+ldap.demo.pass = password
  
 #optional, if you are using tls, set this to true.  Generally you will not be using an SSL URL to use TLS...
 ldap.demo.tls = false
diff --git a/test-compose/configs-and-secrets/grouper/subject.properties b/test-compose/configs-and-secrets/grouper/subject.properties
index fd5b25cd..c9329fdb 100644
--- a/test-compose/configs-and-secrets/grouper/subject.properties
+++ b/test-compose/configs-and-secrets/grouper/subject.properties
@@ -1,19 +1,25 @@
-subject.sources.xml.location =
+#subject.sources.xml.location =
+
+subjectApi.source.ldap.param.ldapServerId.value = demo
+
 
 subjectApi.source.ldap.id = ldap
 subjectApi.source.ldap.name = EDU Ldap 
 subjectApi.source.ldap.types = person
 subjectApi.source.ldap.adapterClass = edu.internet2.middleware.grouper.subj.GrouperJndiSourceAdapter
-subjectApi.source.ldap.param.INITIAL_CONTEXT_FACTORY.value = com.sun.jndi.ldap.LdapCtxFactory
-subjectApi.source.ldap.param.PROVIDER_URL.value = ldap://data:389
-subjectApi.source.ldap.param.SECURITY_AUTHENTICATION.value = simple
-subjectApi.source.ldap.param.SECURITY_PRINCIPAL.value = cn=admin,dc=internet2,dc=edu
-subjectApi.source.ldap.param.SECURITY_CREDENTIALS.value.elConfig = ${java.lang.System.getenv().get('SUBJECT_SOURCE_LDAP_PASSWORD_FILE') != null ? org.apache.commons.io.FileUtils.readFileToString(java.lang.System.getenv().get('SUBJECT_SOURCE_LDAP_PASSWORD_FILE'), "utf-8") : java.lang.System.getenv().get('SUBJECT_SOURCE_LDAP_PASSWORD')}
+
+## replaced with new LDAPTIVE lib
+#subjectApi.source.ldap.param.INITIAL_CONTEXT_FACTORY.value = com.sun.jndi.ldap.LdapCtxFactory
+#subjectApi.source.ldap.param.PROVIDER_URL.value = ldap://data:389
+#subjectApi.source.ldap.param.SECURITY_AUTHENTICATION.value = simple
+#subjectApi.source.ldap.param.SECURITY_PRINCIPAL.value = cn=admin,dc=internet2,dc=edu
+#subjectApi.source.ldap.param.SECURITY_CREDENTIALS.value.elConfig = ${java.lang.System.getenv().get('SUBJECT_SOURCE_LDAP_PASSWORD_FILE') != null ? org.apache.commons.io.FileUtils.readFileToString(java.lang.System.getenv().get('SUBJECT_SOURCE_LDAP_PASSWORD_FILE'), "utf-8") : java.lang.System.getenv().get('SUBJECT_SOURCE_LDAP_PASSWORD')}
+#subjectApi.source.ldap.param.VTLDAP_VALIDATOR.value = ConnectLdapValidator
+
 subjectApi.source.ldap.param.SubjectID_AttributeType.value = uid
 subjectApi.source.ldap.param.SubjectID_formatToLowerCase.value = false
 subjectApi.source.ldap.param.Name_AttributeType.value = cn
 subjectApi.source.ldap.param.Description_AttributeType.value = cn
-subjectApi.source.ldap.param.VTLDAP_VALIDATOR.value = ConnectLdapValidator
 subjectApi.source.ldap.param.subjectVirtualAttribute_0_searchAttribute0.value = ${subjectUtils.defaultIfBlank(subject.getAttributeValueOrCommaSeparated('uid'), "")},${subjectUtils.defaultIfBlank(subject.getAttributeValueOrCommaSeparated('cn'), "")},${subjectUtils.defaultIfBlank(subject.getAttributeValueOrCommaSeparated('exampleEduRegId'), "")}
 subjectApi.source.ldap.param.sortAttribute0.value = cn
 subjectApi.source.ldap.param.searchAttribute0.value = searchAttribute0
@@ -55,7 +61,7 @@ subjectApi.source.ldap.param.searchAttribute0.value = searchAttribute0
 #  Each subject has one and only on ID.  Returns one result when searching for one ID.
 subjectApi.source.ldap.search.searchSubject.param.filter.value = (&(uid=%TERM%)(objectclass=person))
 subjectApi.source.ldap.search.searchSubject.param.scope.value = SUBTREE_SCOPE
-subjectApi.source.ldap.search.searchSubject.param.base.value = ou=people,dc=internet2,dc=edu
+subjectApi.source.ldap.search.searchSubject.param.base.value = ou=people
 
 #searchSubjectByIdentifier: find a subject by identifier.  Identifier is anything that uniquely
 #  identifies the user, e.g. jsmith or jsmith@institution.edu.
@@ -63,13 +69,13 @@ subjectApi.source.ldap.search.searchSubject.param.base.value = ou=people,dc=inte
 #  even across sources.  Returns one result when searching for one identifier.
 subjectApi.source.ldap.search.searchSubjectByIdentifier.param.filter.value = (&(|(uid=%TERM%)(employeeNumber=%TERM%))(objectclass=person))
 subjectApi.source.ldap.search.searchSubjectByIdentifier.param.scope.value = SUBTREE_SCOPE
-subjectApi.source.ldap.search.searchSubjectByIdentifier.param.base.value = ou=people,dc=internet2,dc=edu
+subjectApi.source.ldap.search.searchSubjectByIdentifier.param.base.value = ou=people
 
 #   search: find subjects by free form search.  Returns multiple results.
 
 subjectApi.source.ldap.search.search.param.filter.value = (&(|(|(uid=%TERM%)(cn=*%TERM%*))(uid=%TERM%*))(objectclass=person))
 subjectApi.source.ldap.search.search.param.scope.value = SUBTREE_SCOPE
-subjectApi.source.ldap.search.search.param.base.value = ou=people,dc=internet2,dc=edu
+subjectApi.source.ldap.search.search.param.base.value = ou=people
 
 subjectApi.source.ldap.attributes = givenName, sn, uid, mail, employeeNumber
 subjectApi.source.ldap.internalAttributes = searchAttribute0
diff --git a/test-compose/data/container_files/conf/subject.properties b/test-compose/data/container_files/conf/subject.properties
index a8231911..c9329fdb 100644
--- a/test-compose/data/container_files/conf/subject.properties
+++ b/test-compose/data/container_files/conf/subject.properties
@@ -1,19 +1,25 @@
-subject.sources.xml.location =
+#subject.sources.xml.location =
+
+subjectApi.source.ldap.param.ldapServerId.value = demo
+
 
 subjectApi.source.ldap.id = ldap
 subjectApi.source.ldap.name = EDU Ldap 
 subjectApi.source.ldap.types = person
 subjectApi.source.ldap.adapterClass = edu.internet2.middleware.grouper.subj.GrouperJndiSourceAdapter
-subjectApi.source.ldap.param.INITIAL_CONTEXT_FACTORY.value = com.sun.jndi.ldap.LdapCtxFactory
-subjectApi.source.ldap.param.PROVIDER_URL.value = ldap://localhost:389
-subjectApi.source.ldap.param.SECURITY_AUTHENTICATION.value = simple
-subjectApi.source.ldap.param.SECURITY_PRINCIPAL.value = cn=admin,dc=internet2,dc=edu
-subjectApi.source.ldap.param.SECURITY_CREDENTIALS.value = password
+
+## replaced with new LDAPTIVE lib
+#subjectApi.source.ldap.param.INITIAL_CONTEXT_FACTORY.value = com.sun.jndi.ldap.LdapCtxFactory
+#subjectApi.source.ldap.param.PROVIDER_URL.value = ldap://data:389
+#subjectApi.source.ldap.param.SECURITY_AUTHENTICATION.value = simple
+#subjectApi.source.ldap.param.SECURITY_PRINCIPAL.value = cn=admin,dc=internet2,dc=edu
+#subjectApi.source.ldap.param.SECURITY_CREDENTIALS.value.elConfig = ${java.lang.System.getenv().get('SUBJECT_SOURCE_LDAP_PASSWORD_FILE') != null ? org.apache.commons.io.FileUtils.readFileToString(java.lang.System.getenv().get('SUBJECT_SOURCE_LDAP_PASSWORD_FILE'), "utf-8") : java.lang.System.getenv().get('SUBJECT_SOURCE_LDAP_PASSWORD')}
+#subjectApi.source.ldap.param.VTLDAP_VALIDATOR.value = ConnectLdapValidator
+
 subjectApi.source.ldap.param.SubjectID_AttributeType.value = uid
 subjectApi.source.ldap.param.SubjectID_formatToLowerCase.value = false
 subjectApi.source.ldap.param.Name_AttributeType.value = cn
 subjectApi.source.ldap.param.Description_AttributeType.value = cn
-subjectApi.source.ldap.param.VTLDAP_VALIDATOR.value = ConnectLdapValidator
 subjectApi.source.ldap.param.subjectVirtualAttribute_0_searchAttribute0.value = ${subjectUtils.defaultIfBlank(subject.getAttributeValueOrCommaSeparated('uid'), "")},${subjectUtils.defaultIfBlank(subject.getAttributeValueOrCommaSeparated('cn'), "")},${subjectUtils.defaultIfBlank(subject.getAttributeValueOrCommaSeparated('exampleEduRegId'), "")}
 subjectApi.source.ldap.param.sortAttribute0.value = cn
 subjectApi.source.ldap.param.searchAttribute0.value = searchAttribute0
@@ -55,7 +61,7 @@ subjectApi.source.ldap.param.searchAttribute0.value = searchAttribute0
 #  Each subject has one and only on ID.  Returns one result when searching for one ID.
 subjectApi.source.ldap.search.searchSubject.param.filter.value = (&(uid=%TERM%)(objectclass=person))
 subjectApi.source.ldap.search.searchSubject.param.scope.value = SUBTREE_SCOPE
-subjectApi.source.ldap.search.searchSubject.param.base.value = ou=people,dc=internet2,dc=edu
+subjectApi.source.ldap.search.searchSubject.param.base.value = ou=people
 
 #searchSubjectByIdentifier: find a subject by identifier.  Identifier is anything that uniquely
 #  identifies the user, e.g. jsmith or jsmith@institution.edu.
@@ -63,13 +69,13 @@ subjectApi.source.ldap.search.searchSubject.param.base.value = ou=people,dc=inte
 #  even across sources.  Returns one result when searching for one identifier.
 subjectApi.source.ldap.search.searchSubjectByIdentifier.param.filter.value = (&(|(uid=%TERM%)(employeeNumber=%TERM%))(objectclass=person))
 subjectApi.source.ldap.search.searchSubjectByIdentifier.param.scope.value = SUBTREE_SCOPE
-subjectApi.source.ldap.search.searchSubjectByIdentifier.param.base.value = ou=people,dc=internet2,dc=edu
+subjectApi.source.ldap.search.searchSubjectByIdentifier.param.base.value = ou=people
 
 #   search: find subjects by free form search.  Returns multiple results.
 
 subjectApi.source.ldap.search.search.param.filter.value = (&(|(|(uid=%TERM%)(cn=*%TERM%*))(uid=%TERM%*))(objectclass=person))
 subjectApi.source.ldap.search.search.param.scope.value = SUBTREE_SCOPE
-subjectApi.source.ldap.search.search.param.base.value = ou=people,dc=internet2,dc=edu
+subjectApi.source.ldap.search.search.param.base.value = ou=people
 
 subjectApi.source.ldap.attributes = givenName, sn, uid, mail, employeeNumber
 subjectApi.source.ldap.internalAttributes = searchAttribute0
diff --git a/test-compose/data/container_files/seed-data/bootstrap.gsh b/test-compose/data/container_files/seed-data/bootstrap.gsh
index e2a018aa..b8d9c9f7 100644
--- a/test-compose/data/container_files/seed-data/bootstrap.gsh
+++ b/test-compose/data/container_files/seed-data/bootstrap.gsh
@@ -1,3 +1,10 @@
 gs = GrouperSession.startRootSession()
 
+addStem("","app", "enterprise applications access control policy")
+addStem("","basis", "groups used exclusively by the IAM team to build reference groups")
+addStem("","bundle", "sets of reference groups used in policy for many services")
+addStem("","org", "delegated authority, ad-hoc groups, org owned apps or reference groups")
+addStem("","ref", "reference groups (i.e. institutional meaningful cohorts)")
+addStem("","test", "test folder for system verification")
+
 addMember("etc:sysadmingroup","banderson");

From e7cbf6f72c9539e7dae8bffa76eab2ad298324a7 Mon Sep 17 00:00:00 2001
From: Christopher Hubing <chubing@internet2.edu>
Date: Fri, 7 Sep 2018 09:15:02 -0400
Subject: [PATCH 069/186] Update grouper.installer.properties

---
 container_files/grouper.installer.properties | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/container_files/grouper.installer.properties b/container_files/grouper.installer.properties
index 5e5778d8..bc4e1b30 100644
--- a/container_files/grouper.installer.properties
+++ b/container_files/grouper.installer.properties
@@ -16,7 +16,7 @@ grouperInstaller.default.installOrUpgrade = install
 
 grouperInstaller.autorun.installAllPatches = false
 grouperInstaller.autorun.installPatchesUpToACertainPatchLevel = true
-grouperInstaller.autorun.installPatchesUpToThesePatchLevels = grouper_v2_3_0_api_patch_108,grouper_v2_3_0_ui_patch_45,grouper_v2_3_0_ws_patch_12,grouper_v2_3_0_pspng_patch_20
+grouperInstaller.autorun.installPatchesUpToThesePatchLevels = grouper_v2_3_0_api_patch_109,grouper_v2_3_0_ui_patch_47,grouper_v2_3_0_ws_patch_12,grouper_v2_3_0_pspng_patch_20
 
 #### set this to true to try to use defaults for everything.  Only things without default values will need to be set
 grouperInstaller.autorun.useDefaultsAsMuchAsAvailable = true

From f36b8560e2070b2ce206833ae2ed5eab23673a93 Mon Sep 17 00:00:00 2001
From: Chris Hubing <chubing@internet2.edu>
Date: Fri, 7 Sep 2018 09:48:14 -0400
Subject: [PATCH 070/186] 2.4 config updates

---
 .../grouper/grouper-loader.properties         |  4 +-
 .../conf/grouper-loader.properties            | 64 +++++++++++++++++++
 test-compose/docker-compose.yml               | 15 +++++
 3 files changed, 81 insertions(+), 2 deletions(-)
 create mode 100644 test-compose/data/container_files/conf/grouper-loader.properties

diff --git a/test-compose/configs-and-secrets/grouper/grouper-loader.properties b/test-compose/configs-and-secrets/grouper/grouper-loader.properties
index c406f91a..68bef05f 100644
--- a/test-compose/configs-and-secrets/grouper/grouper-loader.properties
+++ b/test-compose/configs-and-secrets/grouper/grouper-loader.properties
@@ -14,8 +14,8 @@ ldap.demo.url = ldap://data:389/dc=internet2,dc=edu
 ldap.demo.user = cn=admin,dc=internet2,dc=edu
  
 #optional, if authenticated note the password can be stored encrypted in an external file
-#ldap.demo.pass = ${java.lang.System.getenv().get('SUBJECT_SOURCE_LDAP_PASSWORD_FILE') != null ? org.apache.commons.io.FileUtils.readFileToString(java.lang.System.getenv().get('SUBJECT_SOURCE_LDAP_PASSWORD_FILE'), "utf-8") : java.lang.System.getenv().get('SUBJECT_SOURCE_LDAP_PASSWORD')}
-ldap.demo.pass = password
+ldap.demo.pass.elConfig = ${java.lang.System.getenv().get('SUBJECT_SOURCE_LDAP_PASSWORD_FILE') != null ? org.apache.commons.io.FileUtils.readFileToString(java.lang.System.getenv().get('SUBJECT_SOURCE_LDAP_PASSWORD_FILE'), "utf-8") : java.lang.System.getenv().get('SUBJECT_SOURCE_LDAP_PASSWORD')}
+#ldap.demo.pass = password
  
 #optional, if you are using tls, set this to true.  Generally you will not be using an SSL URL to use TLS...
 ldap.demo.tls = false
diff --git a/test-compose/data/container_files/conf/grouper-loader.properties b/test-compose/data/container_files/conf/grouper-loader.properties
new file mode 100644
index 00000000..c7d0bcbc
--- /dev/null
+++ b/test-compose/data/container_files/conf/grouper-loader.properties
@@ -0,0 +1,64 @@
+#################################
+## LDAP connections
+#################################
+# specify the ldap connection with user, pass, url
+# the string after "ldap." is the ID of the connection, and it should not have
+# spaces or other special chars in it.  In this case is it "personLdap"
+
+#note the URL should start with ldap: or ldaps: if it is SSL.  
+#It should contain the server and port (optional if not default), and baseDn,
+#e.g. ldaps://ldapserver.school.edu:636/dc=school,dc=edu
+ldap.demo.url = ldap://localhost:389/dc=internet2,dc=edu
+ 
+#optional, if authenticated
+ldap.demo.user = cn=admin,dc=internet2,dc=edu
+#ldap.demo.user = cn=admin
+ 
+#optional, if authenticated note the password can be stored encrypted in an external file
+#ldap.demo.pass = ${java.lang.System.getenv().get('SUBJECT_SOURCE_LDAP_PASSWORD_FILE') != null ? org.apache.commons.io.FileUtils.readFileToString(java.lang.System.getenv().get('SUBJECT_SOURCE_LDAP_PASSWORD_FILE'), "utf-8") : java.lang.System.getenv().get('SUBJECT_SOURCE_LDAP_PASSWORD')}
+ldap.demo.pass = password
+ 
+#optional, if you are using tls, set this to true.  Generally you will not be using an SSL URL to use TLS...
+ldap.demo.tls = false
+ 
+#optional, if using sasl
+#ldap.personLdap.saslAuthorizationId =
+#ldap.personLdap.saslRealm =
+ 
+#optional (note, time limit is for search operations, timeout is for connection timeouts),
+#most of these default to vt-ldap defaults.  times are in millis
+#validateOnCheckout defaults to true if all other validate methods are false
+#ldap.personLdap.batchSize =
+#ldap.personLdap.countLimit =
+#ldap.personLdap.timeLimit =
+#ldap.personLdap.timeout =
+#ldap.personLdap.minPoolSize =
+#ldap.personLdap.maxPoolSize =
+#ldap.personLdap.validateOnCheckIn =
+#ldap.personLdap.validateOnCheckOut =
+#ldap.personLdap.validatePeriodically =
+#ldap.personLdap.validateTimerPeriod =
+#ldap.personLdap.pruneTimerPeriod =
+#if connections expire after a certain amount of time, this is it, in millis, defaults to 300000 (5 minutes)
+#ldap.personLdap.expirationTime =
+
+#make the paths fully qualified and not relative to the loader group.
+loader.ldap.requireTopStemAsStemFromConfigGroup=false
+
+#####################################
+## Messaging integration with change log
+#####################################
+changeLog.consumer.rabbitMqMessagingSample.quartzCron = 0 * * * * ?                                                          
+
+# note, change "messagingSample" in key to be the name of the consumer.  e.g. changeLog.consumer.someNameAnyName.class
+changeLog.consumer.rabbitMqMessagingSample.class = edu.internet2.middleware.grouper.changeLog.esb.consumer.EsbConsumer
+
+changeLog.consumer.rabbitMqMessagingSample.publisher.class = edu.internet2.middleware.grouper.changeLog.esb.consumer.EsbMessagingPublisher
+changeLog.consumer.rabbitMqMessagingSample.publisher.messagingSystemName = rabbitmq
+# note, routingKey property is valid only for rabbitmq. For other messaging systems, it is ignored.
+changeLog.consumer.rabbitMqMessagingSample.publisher.routingKey = 
+## queue or topic
+changeLog.consumer.rabbitMqMessagingSample.publisher.messageQueueType = queue
+changeLog.consumer.rabbitMqMessagingSample.publisher.queueOrTopicName = sampleQueue
+## this is optional if not using "id" for subjectId, need to be a subject attribute in the sources.xml
+#changeLog.consumer.rabbitMqMessagingSample.publisher.addSubjectAttributes = email
diff --git a/test-compose/docker-compose.yml b/test-compose/docker-compose.yml
index bf11466c..c0e21ed3 100644
--- a/test-compose/docker-compose.yml
+++ b/test-compose/docker-compose.yml
@@ -198,7 +198,22 @@ services:
     ports:
      - "389:389"
      - "3306:3306"
+    secrets:
+     - database_password.txt
+     - rabbitmq_password.txt
+     - source: grouper.hibernate.properties
+       target: grouper_grouper.hibernate.properties
+     - source: grouper-loader.properties
+       target: grouper_grouper-loader.properties
+     - source: subject.properties
+       target: grouper_subject.properties
     volumes:
+     - type: bind
+       source: ./configs-and-secrets/grouper/grouper.properties
+       target: /opt/grouper/conf/grouper.properties
+     - type: bind
+       source: ./configs-and-secrets/grouper/grouper.client.properties
+       target: /opt/grouper/conf/grouper.client.properties
      - grouper_mysql:/var/lib/mysql  
      - grouper_ldap:/var/lib/dirsrv
 

From 7b24ed0c528d37d9ff1323820c168b7050dbbe1d Mon Sep 17 00:00:00 2001
From: Christopher Hubing <chubing@internet2.edu>
Date: Mon, 10 Sep 2018 09:17:44 -0400
Subject: [PATCH 071/186] Update grouper.installer.properties

---
 container_files/grouper.installer.properties | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/container_files/grouper.installer.properties b/container_files/grouper.installer.properties
index bc4e1b30..4b08cf86 100644
--- a/container_files/grouper.installer.properties
+++ b/container_files/grouper.installer.properties
@@ -16,7 +16,7 @@ grouperInstaller.default.installOrUpgrade = install
 
 grouperInstaller.autorun.installAllPatches = false
 grouperInstaller.autorun.installPatchesUpToACertainPatchLevel = true
-grouperInstaller.autorun.installPatchesUpToThesePatchLevels = grouper_v2_3_0_api_patch_109,grouper_v2_3_0_ui_patch_47,grouper_v2_3_0_ws_patch_12,grouper_v2_3_0_pspng_patch_20
+grouperInstaller.autorun.installPatchesUpToThesePatchLevels = grouper_v2_3_0_api_patch_109,grouper_v2_3_0_ui_patch_47,grouper_v2_3_0_ws_patch_12,grouper_v2_3_0_pspng_patch_21
 
 #### set this to true to try to use defaults for everything.  Only things without default values will need to be set
 grouperInstaller.autorun.useDefaultsAsMuchAsAvailable = true

From e4af63fc294342ca20de78343f95bb7182558727 Mon Sep 17 00:00:00 2001
From: Chris Hubing <chubing@internet2.edu>
Date: Mon, 10 Sep 2018 11:17:05 -0400
Subject: [PATCH 072/186] fixed web.xml shib for 2.4

---
 container_files/grouper.installer.properties |   2 +-
 container_files/ui/web.xml                   | 174 ++++---------------
 test-compose/ui/Dockerfile                   |   1 +
 3 files changed, 32 insertions(+), 145 deletions(-)

diff --git a/container_files/grouper.installer.properties b/container_files/grouper.installer.properties
index be9cd2b0..fa0f8b8d 100644
--- a/container_files/grouper.installer.properties
+++ b/container_files/grouper.installer.properties
@@ -16,7 +16,7 @@ grouperInstaller.default.installOrUpgrade = install
 
 grouperInstaller.autorun.installAllPatches = true
 # grouperInstaller.autorun.installPatchesUpToACertainPatchLevel = true
-# grouperInstaller.autorun.installPatchesUpToThesePatchLevels = grouper_v2_3_0_api_patch_108,grouper_v2_3_0_ui_patch_45,grouper_v2_3_0_ws_patch_12,grouper_v2_3_0_pspng_patch_16
+ grouperInstaller.autorun.installPatchesUpToThesePatchLevels = grouper_v2_3_0_api_patch_0,grouper_v2_3_0_ui_patch_0,grouper_v2_3_0_ws_patch_0,grouper_v2_3_0_pspng_patch_0
 
 #### set this to true to try to use defaults for everything.  Only things without default values will need to be set
 grouperInstaller.autorun.useDefaultsAsMuchAsAvailable = true
diff --git a/container_files/ui/web.xml b/container_files/ui/web.xml
index 92d4125d..f3aa302f 100644
--- a/container_files/ui/web.xml
+++ b/container_files/ui/web.xml
@@ -1,203 +1,89 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:j2ee="http://java.sun.com/xml/ns/j2ee" version="2.4" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.s
-un.com/xml/ns/j2ee/web-app_2_4.xsd">
-<!--DO NOT EDIT THIS FILE. IT WILL BE OVERWRITTEN. CHANGE YOUR FILE specified by the build.properties value [additional.web.xml]. The contents of that file are merged into ${grouper-ui}/w
-ebapp/WEB-INF/web.core.xml-->
-<!--In webapp-->
-<!--Processing context-param-->
-<!--Processing filter-->
-<!--Inserting tag from merge file-->
-<filter>
+<web-app xmlns:j2ee="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+  xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
+  version="2.4">
+  <filter>
     <filter-name>GrouperUi</filter-name>
     <filter-class>edu.internet2.middleware.grouper.ui.GrouperUiFilter</filter-class>
-</filter>
-<!--Inserting tag from merge file-->
-<filter>
-  	<filter-name>Error Catcher</filter-name>
-  	<filter-class>edu.internet2.middleware.grouper.ui.ErrorFilter</filter-class>
   </filter>
-<!--Inserting tag from base file. Merge file was file:/opt/grouper.ui-2.3.0/temp/99.web.core-filters.xml-->
-<filter>
-  	<filter-name>Login check</filter-name>
-  	<filter-class>edu.internet2.middleware.grouper.ui.LoginCheckFilter</filter-class>
-  	<init-param>    
-  		<param-name>failureUrl</param-name>    
-  		<param-value>/index.jsp</param-value>  
-  	</init-param>
-	 	<init-param>    
-  	<param-name>ignore</param-name>    
-  		<param-value>:/populateIndex.do:/callLogin.do:/error.do:/logout.do:/status:</param-value>  
-  	</init-param>
-  	<init-param>    
-  		<param-name>grouperRole</param-name>    
-  		<param-value>*</param-value>  
-  	</init-param>
-  </filter>
-<!--Inserting tag from base file. Merge file was file:/opt/grouper.ui-2.3.0/temp/99.web.core-filters.xml-->
-<filter>
-  	<filter-name>Caller page</filter-name>
-  	<filter-class>edu.internet2.middleware.grouper.ui.CallerPageFilter</filter-class>
-    </filter>
-<!--Inserting tag from base file. Merge file was file:/opt/grouper.ui-2.3.0/temp/99.web.core-filters.xml-->
-<filter>
+  <filter>
     <filter-name>CSRFGuard</filter-name>
     <filter-class>org.owasp.csrfguard.CsrfGuardFilter</filter-class>
   </filter>
-<!--Processing filter-mapping-->
-<!--Inserting tag from merge file-->
-<filter-mapping>
-    <filter-name>GrouperUi</filter-name>
-    <url-pattern>*.do</url-pattern>
-  </filter-mapping>
-<!--Inserting tag from merge file-->
-<filter-mapping>
+  <filter-mapping>
     <filter-name>GrouperUi</filter-name>
     <url-pattern>*.jsp</url-pattern>
   </filter-mapping>
-<!--Inserting tag from merge file-->
-<filter-mapping>
-  	<filter-name>Error Catcher</filter-name>
-  	<url-pattern>*.do</url-pattern>
-  </filter-mapping>
-<!--Inserting tag from merge file-->
-<filter-mapping>
-  	<filter-name>Error Catcher</filter-name>
-  	<url-pattern>/gotoCallerPage</url-pattern>
-  </filter-mapping>
-<!--Inserting tag from base file. Merge file was file:/opt/grouper.ui-2.3.0/temp/99.web.core-filters.xml-->
-<filter-mapping>
+  <filter-mapping>
     <filter-name>GrouperUi</filter-name>
     <url-pattern>/grouperUi/app/*</url-pattern>
   </filter-mapping>
-<!--Inserting tag from base file. Merge file was file:/opt/grouper.ui-2.3.0/temp/99.web.core-filters.xml-->
-<filter-mapping>
+  <filter-mapping>
     <filter-name>GrouperUi</filter-name>
     <url-pattern>/grouperUi/appHtml/*</url-pattern>
   </filter-mapping>
-<!--Inserting tag from base file. Merge file was file:/opt/grouper.ui-2.3.0/temp/99.web.core-filters.xml-->
-<filter-mapping>
+  <filter-mapping>
     <filter-name>GrouperUi</filter-name>
     <url-pattern>/grouperExternal/app/*</url-pattern>
   </filter-mapping>
-<!--Inserting tag from base file. Merge file was file:/opt/grouper.ui-2.3.0/temp/99.web.core-filters.xml-->
-<filter-mapping>
-    <filter-name>GrouperUi</filter-name>
-    <url-pattern>/grouperExternal/appHtml/*</url-pattern>
-  </filter-mapping>
-<!--Inserting tag from base file. Merge file was file:/opt/grouper.ui-2.3.0/temp/99.web.core-filters.xml-->
-<filter-mapping>
+  <filter-mapping>
     <filter-name>GrouperUi</filter-name>
     <url-pattern>/grouperExternal/public/UiV2Public.index</url-pattern>
   </filter-mapping>
-<!--Inserting tag from base file. Merge file was file:/opt/grouper.ui-2.3.0/temp/99.web.core-filters.xml-->
-<filter-mapping>
+  <filter-mapping>
     <filter-name>GrouperUi</filter-name>
     <url-pattern>/grouperExternal/public/UiV2Public.postIndex</url-pattern>
   </filter-mapping>
-<!--Inserting tag from base file. Merge file was file:/opt/grouper.ui-2.3.0/temp/99.web.core-filters.xml-->
-<filter-mapping>
-  	<filter-name>Caller page</filter-name>
-  	<url-pattern>/gotoCallerPage</url-pattern>
-  </filter-mapping>
-<!--Inserting tag from base file. Merge file was file:/opt/grouper.ui-2.3.0/temp/99.web.core-filters.xml-->
-<filter-mapping>
-  	<filter-name>Login check</filter-name>
-  	<url-pattern>*.do</url-pattern>
-  </filter-mapping>
-<!--Inserting tag from base file. Merge file was file:/opt/grouper.ui-2.3.0/temp/99.web.core-filters.xml-->
-<filter-mapping>
+  <filter-mapping>
     <filter-name>CSRFGuard</filter-name>
     <url-pattern>/*</url-pattern>
   </filter-mapping>
-<!--Processing listener-->
-<!--Inserting tag from base file. Merge file was file:/opt/grouper.ui-2.3.0/temp/99.web.core-filters.xml-->
-<listener>
-  	<listener-class>edu.internet2.middleware.grouper.ui.GrouperSessionAttributeListener</listener-class>
-</listener>
-<!--Inserting tag from base file. Merge file was file:/opt/grouper.ui-2.3.0/temp/99.web.core-filters.xml-->
-<listener>
+  <listener>
+    <listener-class>edu.internet2.middleware.grouper.ui.GrouperSessionAttributeListener</listener-class>
+  </listener>
+  <listener>
     <listener-class>org.owasp.csrfguard.CsrfGuardServletContextListener</listener-class>
   </listener>
-<!--Inserting tag from base file. Merge file was file:/opt/grouper.ui-2.3.0/temp/99.web.core-filters.xml-->
-<listener>
+  <listener>
     <listener-class>org.owasp.csrfguard.CsrfGuardHttpSessionListener</listener-class>
   </listener>
-<!--Processing servlet-->
-<!--Inserting tag from base file. Merge file was file:/opt/grouper.ui-2.3.0/temp/99.web.core-filters.xml-->
-<servlet>
+  <servlet>
     <servlet-name>StatusServlet</servlet-name>
     <display-name>Status Servlet</display-name>
     <servlet-class>edu.internet2.middleware.grouper.j2ee.status.GrouperStatusServlet</servlet-class>
     <load-on-startup>1</load-on-startup>
   </servlet>
-<!--Inserting tag from base file. Merge file was file:/opt/grouper.ui-2.3.0/temp/99.web.core-filters.xml-->
-<servlet>
-  <!-- Map the filter to a Servlet or URL -->
-
+  <servlet>
     <servlet-name>UiServlet</servlet-name>
     <servlet-class>edu.internet2.middleware.grouper.j2ee.GrouperUiRestServlet</servlet-class>
     <load-on-startup>1</load-on-startup>
   </servlet>
-<!--Inserting tag from base file. Merge file was file:/opt/grouper.ui-2.3.0/temp/99.web.core-filters.xml-->
-<servlet>
-     <servlet-name>OwaspJavaScriptServlet</servlet-name>
-     <servlet-class>org.owasp.csrfguard.servlet.JavaScriptServlet</servlet-class>
-  </servlet>
-<!--Inserting tag from base file. Merge file was file:/opt/grouper.ui-2.3.0/temp/99.web.core-filters.xml-->
-<servlet>
-    <servlet-name>action</servlet-name>
-    <servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
-    <init-param>
-      <param-name>config</param-name>
-      <param-value>/WEB-INF/struts-config.xml</param-value>
-    </init-param>
-    <load-on-startup>2</load-on-startup>
+  <servlet>
+    <servlet-name>OwaspJavaScriptServlet</servlet-name>
+    <servlet-class>org.owasp.csrfguard.servlet.JavaScriptServlet</servlet-class>
   </servlet>
-<!--Processing servlet-mapping-->
-<!--Inserting tag from base file. Merge file was file:/opt/grouper.ui-2.3.0/temp/99.web.core-filters.xml-->
-<servlet-mapping>
+  <servlet-mapping>
     <servlet-name>StatusServlet</servlet-name>
     <url-pattern>/status</url-pattern>
   </servlet-mapping>
-<!--Inserting tag from base file. Merge file was file:/opt/grouper.ui-2.3.0/temp/99.web.core-filters.xml-->
-<servlet-mapping>
+  <servlet-mapping>
     <servlet-name>UiServlet</servlet-name>
     <url-pattern>/grouperUi/app/*</url-pattern>
   </servlet-mapping>
-<!--Inserting tag from base file. Merge file was file:/opt/grouper.ui-2.3.0/temp/99.web.core-filters.xml-->
-<servlet-mapping>
+  <servlet-mapping>
     <servlet-name>UiServlet</servlet-name>
     <url-pattern>/grouperExternal/app/*</url-pattern>
   </servlet-mapping>
-<!--Inserting tag from base file. Merge file was file:/opt/grouper.ui-2.3.0/temp/99.web.core-filters.xml-->
-<servlet-mapping>
+  <servlet-mapping>
     <servlet-name>UiServlet</servlet-name>
     <url-pattern>/grouperExternal/public/UiV2Public.index</url-pattern>
   </servlet-mapping>
-<!--Inserting tag from base file. Merge file was file:/opt/grouper.ui-2.3.0/temp/99.web.core-filters.xml-->
-<servlet-mapping>
+  <servlet-mapping>
     <servlet-name>UiServlet</servlet-name>
     <url-pattern>/grouperExternal/public/UiV2Public.postIndex</url-pattern>
   </servlet-mapping>
-<!--Inserting tag from base file. Merge file was file:/opt/grouper.ui-2.3.0/temp/99.web.core-filters.xml-->
-<servlet-mapping>
-     <servlet-name>OwaspJavaScriptServlet</servlet-name>
-     <url-pattern>/grouperExternal/public/OwaspJavaScriptServlet</url-pattern>
-  </servlet-mapping>
-<!--Inserting tag from base file. Merge file was file:/opt/grouper.ui-2.3.0/temp/99.web.core-filters.xml-->
-<servlet-mapping>
-    <servlet-name>action</servlet-name>
-    <url-pattern>*.do</url-pattern>
+  <servlet-mapping>
+    <servlet-name>OwaspJavaScriptServlet</servlet-name>
+    <url-pattern>/grouperExternal/public/OwaspJavaScriptServlet</url-pattern>
   </servlet-mapping>
-<!--Processing mime-mapping-->
-<!--Processing error-page-->
-<!--Processing error-page-->
-<!--Processing taglib-->
-<!--Processing resource-env-ref-->
-<!--Processing resource-ref-->
-<!--Processing security-constraint-->
-<!--Inserting tag from base file. Merge file was file:/opt/grouper.ui-2.3.0/temp/99.web.core-filters.xml-->
-<!--Processing env-entry-->
-<!--Processing ejb-ref-->
-<!--Processing ejb-local-ref-->
 </web-app>
diff --git a/test-compose/ui/Dockerfile b/test-compose/ui/Dockerfile
index 8fec2ae0..672230a8 100644
--- a/test-compose/ui/Dockerfile
+++ b/test-compose/ui/Dockerfile
@@ -3,5 +3,6 @@ FROM tier/grouper:latest
 LABEL author="tier-packaging@internet2.edu <tier-packaging@internet2.edu>"
 
 #COPY in custom css, images, etc
+ENV CLASSPATH=/
 
 CMD ["ui"]

From 1b3d216a5b9e4862c1b3f2bbe2cf7440261eaddc Mon Sep 17 00:00:00 2001
From: Chris Hubing <chubing@internet2.edu>
Date: Mon, 10 Sep 2018 11:21:24 -0400
Subject: [PATCH 073/186] Added folders per the TIER Grouper Deployment Guide

---
 .../data/container_files/seed-data/bootstrap.gsh     | 12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)

diff --git a/test-compose/data/container_files/seed-data/bootstrap.gsh b/test-compose/data/container_files/seed-data/bootstrap.gsh
index b8d9c9f7..4f902129 100644
--- a/test-compose/data/container_files/seed-data/bootstrap.gsh
+++ b/test-compose/data/container_files/seed-data/bootstrap.gsh
@@ -1,10 +1,10 @@
 gs = GrouperSession.startRootSession()
 
-addStem("","app", "enterprise applications access control policy")
-addStem("","basis", "groups used exclusively by the IAM team to build reference groups")
-addStem("","bundle", "sets of reference groups used in policy for many services")
-addStem("","org", "delegated authority, ad-hoc groups, org owned apps or reference groups")
-addStem("","ref", "reference groups (i.e. institutional meaningful cohorts)")
-addStem("","test", "test folder for system verification")
+addStem("","app", "app")
+addStem("","basis", "basis")
+addStem("","bundle", "bundle")
+addStem("","org", "org")
+addStem("","ref", "ref")
+addStem("","test", "test")
 
 addMember("etc:sysadmingroup","banderson");

From 6786a42ba91066f2ec451cc631c1aaf1113ac7b9 Mon Sep 17 00:00:00 2001
From: Chris Hubing <chubing@internet2.edu>
Date: Mon, 10 Sep 2018 11:40:42 -0400
Subject: [PATCH 074/186] Removed unneeded line

---
 test-compose/ui/Dockerfile | 1 -
 1 file changed, 1 deletion(-)

diff --git a/test-compose/ui/Dockerfile b/test-compose/ui/Dockerfile
index 672230a8..8fec2ae0 100644
--- a/test-compose/ui/Dockerfile
+++ b/test-compose/ui/Dockerfile
@@ -3,6 +3,5 @@ FROM tier/grouper:latest
 LABEL author="tier-packaging@internet2.edu <tier-packaging@internet2.edu>"
 
 #COPY in custom css, images, etc
-ENV CLASSPATH=/
 
 CMD ["ui"]

From f08da3496bc79d2cabbf146d5c80339cbcc182af Mon Sep 17 00:00:00 2001
From: Christopher Hubing <chubing@internet2.edu>
Date: Mon, 10 Sep 2018 12:08:10 -0400
Subject: [PATCH 075/186] Update README.md

---
 README.md | 7 +++++++
 1 file changed, 7 insertions(+)

diff --git a/README.md b/README.md
index c00d0dd8..47bcfdd5 100644
--- a/README.md
+++ b/README.md
@@ -1,6 +1,13 @@
 [![Build Status](https://jenkins.testbed.tier.internet2.edu/job/docker/job/grouper/job/master/badge/icon)](https://jenkins.testbed.tier.internet2.edu/job/docker/job/grouper/job/master/)
 
 
+# Upgrading from 2.3 to 2.4
+
+If upgrading from Grouper version 2.3 to 2.4, modifications will be needed in subject.properties and grouper-loaders.proprties. Further details about this can be found at the following URL:
+https://spaces.at.internet2.edu/display/Grouper/vt-ldap+to+ldaptive+migration+for+LDAP+access
+
+Additional upgrade information can be found at the following URL: https://spaces.at.internet2.edu/display/Grouper/v2.4+Upgrade+Instructions+from+v2.3
+
 # Supported tags
 
 -	latest

From 5f5120a79c74f6f2046a06ab14211353fd6fd094 Mon Sep 17 00:00:00 2001
From: Christopher Hubing <chubing@internet2.edu>
Date: Mon, 10 Sep 2018 12:21:12 -0400
Subject: [PATCH 076/186] Update grouper.installer.properties

---
 container_files/grouper.installer.properties | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/container_files/grouper.installer.properties b/container_files/grouper.installer.properties
index fa0f8b8d..6ee5ce3a 100644
--- a/container_files/grouper.installer.properties
+++ b/container_files/grouper.installer.properties
@@ -14,9 +14,9 @@ grouperInstaller.default.installOrUpgrade = install
 ##
 ##############################
 
-grouperInstaller.autorun.installAllPatches = true
-# grouperInstaller.autorun.installPatchesUpToACertainPatchLevel = true
- grouperInstaller.autorun.installPatchesUpToThesePatchLevels = grouper_v2_3_0_api_patch_0,grouper_v2_3_0_ui_patch_0,grouper_v2_3_0_ws_patch_0,grouper_v2_3_0_pspng_patch_0
+grouperInstaller.autorun.installAllPatches = false
+grouperInstaller.autorun.installPatchesUpToACertainPatchLevel = true
+grouperInstaller.autorun.installPatchesUpToThesePatchLevels = grouper_v2_4_0_api_patch_0,grouper_v2_4_0_ui_patch_0,grouper_v2_4_0_ws_patch_0,grouper_v2_4_0_pspng_patch_0
 
 #### set this to true to try to use defaults for everything.  Only things without default values will need to be set
 grouperInstaller.autorun.useDefaultsAsMuchAsAvailable = true

From a8a634ed4d07832862208dad22e8e314c8dc257b Mon Sep 17 00:00:00 2001
From: Christopher Hubing <chubing@internet2.edu>
Date: Tue, 11 Sep 2018 12:46:36 -0400
Subject: [PATCH 077/186] Update README.md

---
 README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/README.md b/README.md
index 47bcfdd5..edd47bb5 100644
--- a/README.md
+++ b/README.md
@@ -3,7 +3,7 @@
 
 # Upgrading from 2.3 to 2.4
 
-If upgrading from Grouper version 2.3 to 2.4, modifications will be needed in subject.properties and grouper-loaders.proprties. Further details about this can be found at the following URL:
+If upgrading from Grouper version 2.3 to 2.4 and using LDAP, modifications will be needed in subject.properties and grouper-loaders.proprties. Further details about this can be found at the following URL:
 https://spaces.at.internet2.edu/display/Grouper/vt-ldap+to+ldaptive+migration+for+LDAP+access
 
 Additional upgrade information can be found at the following URL: https://spaces.at.internet2.edu/display/Grouper/v2.4+Upgrade+Instructions+from+v2.3

From 442c07f4b0cc30b937967f30d3aad4ab2a0d13f7 Mon Sep 17 00:00:00 2001
From: Christopher Hubing <chubing@internet2.edu>
Date: Sun, 16 Sep 2018 12:02:43 -0400
Subject: [PATCH 078/186] api patch 1

---
 container_files/grouper.installer.properties | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/container_files/grouper.installer.properties b/container_files/grouper.installer.properties
index 6ee5ce3a..3d2b2f6d 100644
--- a/container_files/grouper.installer.properties
+++ b/container_files/grouper.installer.properties
@@ -16,7 +16,7 @@ grouperInstaller.default.installOrUpgrade = install
 
 grouperInstaller.autorun.installAllPatches = false
 grouperInstaller.autorun.installPatchesUpToACertainPatchLevel = true
-grouperInstaller.autorun.installPatchesUpToThesePatchLevels = grouper_v2_4_0_api_patch_0,grouper_v2_4_0_ui_patch_0,grouper_v2_4_0_ws_patch_0,grouper_v2_4_0_pspng_patch_0
+grouperInstaller.autorun.installPatchesUpToThesePatchLevels = grouper_v2_4_0_api_patch_1,grouper_v2_4_0_ui_patch_0,grouper_v2_4_0_ws_patch_0,grouper_v2_4_0_pspng_patch_0
 
 #### set this to true to try to use defaults for everything.  Only things without default values will need to be set
 grouperInstaller.autorun.useDefaultsAsMuchAsAvailable = true

From 20aedfd9d143943eab72ff9f10aefebbe6bb893a Mon Sep 17 00:00:00 2001
From: Christopher Hubing <chubing@internet2.edu>
Date: Tue, 18 Sep 2018 07:44:11 -0400
Subject: [PATCH 079/186] API patch 2

---
 container_files/grouper.installer.properties | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/container_files/grouper.installer.properties b/container_files/grouper.installer.properties
index 3d2b2f6d..e3b3dc58 100644
--- a/container_files/grouper.installer.properties
+++ b/container_files/grouper.installer.properties
@@ -16,7 +16,7 @@ grouperInstaller.default.installOrUpgrade = install
 
 grouperInstaller.autorun.installAllPatches = false
 grouperInstaller.autorun.installPatchesUpToACertainPatchLevel = true
-grouperInstaller.autorun.installPatchesUpToThesePatchLevels = grouper_v2_4_0_api_patch_1,grouper_v2_4_0_ui_patch_0,grouper_v2_4_0_ws_patch_0,grouper_v2_4_0_pspng_patch_0
+grouperInstaller.autorun.installPatchesUpToThesePatchLevels = grouper_v2_4_0_api_patch_2,grouper_v2_4_0_ui_patch_0,grouper_v2_4_0_ws_patch_0,grouper_v2_4_0_pspng_patch_0
 
 #### set this to true to try to use defaults for everything.  Only things without default values will need to be set
 grouperInstaller.autorun.useDefaultsAsMuchAsAvailable = true

From 454e7c6db59d65b77330de284253d328dfd29744 Mon Sep 17 00:00:00 2001
From: Christopher Hubing <chubing@internet2.edu>
Date: Mon, 1 Oct 2018 12:41:01 -0400
Subject: [PATCH 080/186] Update README.md

---
 README.md | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/README.md b/README.md
index edd47bb5..933bbdf3 100644
--- a/README.md
+++ b/README.md
@@ -6,6 +6,8 @@
 If upgrading from Grouper version 2.3 to 2.4 and using LDAP, modifications will be needed in subject.properties and grouper-loaders.proprties. Further details about this can be found at the following URL:
 https://spaces.at.internet2.edu/display/Grouper/vt-ldap+to+ldaptive+migration+for+LDAP+access
 
+In particular, in subject.properties, *.param.base.value should be adjusted to only contain the RDN (Relative Distinguished Name), not the full DN.  For example, "OU=People", not "OU=People,DC=domain,DC=edu"
+
 Additional upgrade information can be found at the following URL: https://spaces.at.internet2.edu/display/Grouper/v2.4+Upgrade+Instructions+from+v2.3
 
 # Supported tags

From 1f1797d7a98fd14559181fe0fec24b856f222384 Mon Sep 17 00:00:00 2001
From: Christopher Hubing <chubing@internet2.edu>
Date: Tue, 2 Oct 2018 16:12:03 -0400
Subject: [PATCH 081/186] Testing Aqua Microscanner

---
 Jenkinsfile | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/Jenkinsfile b/Jenkinsfile
index 8cb90349..c274a79a 100644
--- a/Jenkinsfile
+++ b/Jenkinsfile
@@ -51,10 +51,12 @@ pipeline {
                    docker.withRegistry('https://registry.hub.docker.com/',   "dockerhub-$maintainer") {
                       def baseImg = docker.build("$maintainer/$imagename", "--no-cache .")
                       // test the environment 
+                      aquaMicroscanner imageName: "$maintainer/$imagename"
                       sh 'cd test-compose && ./compose.sh'
                       // bring down after testing
                       sh 'cd test-compose && docker-compose down'
                       baseImg.push("$tag")
+                      
                    }
                }
             }

From c83210b70804b22be5061bc18d914ec59c3e84b3 Mon Sep 17 00:00:00 2001
From: Christopher Hubing <chubing@internet2.edu>
Date: Thu, 4 Oct 2018 14:34:07 -0400
Subject: [PATCH 082/186] testing clair scanner in jenkins

---
 Jenkinsfile | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)

diff --git a/Jenkinsfile b/Jenkinsfile
index c274a79a..95d84907 100644
--- a/Jenkinsfile
+++ b/Jenkinsfile
@@ -50,8 +50,13 @@ pipeline {
                 script {
                    docker.withRegistry('https://registry.hub.docker.com/',   "dockerhub-$maintainer") {
                       def baseImg = docker.build("$maintainer/$imagename", "--no-cache .")
+                      // scan the image with clair
+                      docker run -p 5432:5432 -d --name db arminc/clair-db:2017-10-04
+                      docker run -p 6060:6060 --link db:postgres -d --name clair arminc/clair-local-scan:v2.0.5
+                      curl -L -o clair-scanner https://github.com/arminc/clair-scanner/releases/download/v8/clair-scanner_linux_amd64
+                      chmod 755 clair-scanner
+                      ./clair-scanner --ip 172.17.0.1 -r test.out $maintainer/$imagename
                       // test the environment 
-                      aquaMicroscanner imageName: "$maintainer/$imagename"
                       sh 'cd test-compose && ./compose.sh'
                       // bring down after testing
                       sh 'cd test-compose && docker-compose down'

From 9445f3111860f2b4547bcd9f860987ee4adad368 Mon Sep 17 00:00:00 2001
From: Christopher Hubing <chubing@internet2.edu>
Date: Thu, 4 Oct 2018 14:36:40 -0400
Subject: [PATCH 083/186] Update Jenkinsfile

---
 Jenkinsfile | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

diff --git a/Jenkinsfile b/Jenkinsfile
index 95d84907..a8c4c679 100644
--- a/Jenkinsfile
+++ b/Jenkinsfile
@@ -51,11 +51,11 @@ pipeline {
                    docker.withRegistry('https://registry.hub.docker.com/',   "dockerhub-$maintainer") {
                       def baseImg = docker.build("$maintainer/$imagename", "--no-cache .")
                       // scan the image with clair
-                      docker run -p 5432:5432 -d --name db arminc/clair-db:2017-10-04
-                      docker run -p 6060:6060 --link db:postgres -d --name clair arminc/clair-local-scan:v2.0.5
-                      curl -L -o clair-scanner https://github.com/arminc/clair-scanner/releases/download/v8/clair-scanner_linux_amd64
-                      chmod 755 clair-scanner
-                      ./clair-scanner --ip 172.17.0.1 -r test.out $maintainer/$imagename
+                      sh 'docker run -p 5432:5432 -d --name db arminc/clair-db:2017-10-04'
+                      sh 'docker run -p 6060:6060 --link db:postgres -d --name clair arminc/clair-local-scan:v2.0.5'
+                      sh 'curl -L -o clair-scanner https://github.com/arminc/clair-scanner/releases/download/v8/clair-scanner_linux_amd64'
+                      sh 'chmod 755 clair-scanner'
+                      sh './clair-scanner --ip 172.17.0.1 -r test.out $maintainer/$imagename'
                       // test the environment 
                       sh 'cd test-compose && ./compose.sh'
                       // bring down after testing

From 298594f64d0733223e47d5f220d4a5d1ccd4ba64 Mon Sep 17 00:00:00 2001
From: Christopher Hubing <chubing@internet2.edu>
Date: Thu, 4 Oct 2018 14:55:10 -0400
Subject: [PATCH 084/186] hard coding image name temporarily

---
 Jenkinsfile | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/Jenkinsfile b/Jenkinsfile
index a8c4c679..df57acc0 100644
--- a/Jenkinsfile
+++ b/Jenkinsfile
@@ -49,18 +49,18 @@ pipeline {
             steps {
                 script {
                    docker.withRegistry('https://registry.hub.docker.com/',   "dockerhub-$maintainer") {
-                      def baseImg = docker.build("$maintainer/$imagename", "--no-cache .")
+                      // def baseImg = docker.build("$maintainer/$imagename", "--no-cache .")
                       // scan the image with clair
                       sh 'docker run -p 5432:5432 -d --name db arminc/clair-db:2017-10-04'
                       sh 'docker run -p 6060:6060 --link db:postgres -d --name clair arminc/clair-local-scan:v2.0.5'
                       sh 'curl -L -o clair-scanner https://github.com/arminc/clair-scanner/releases/download/v8/clair-scanner_linux_amd64'
                       sh 'chmod 755 clair-scanner'
-                      sh './clair-scanner --ip 172.17.0.1 -r test.out $maintainer/$imagename'
+                      sh './clair-scanner --ip 172.17.0.1 -r test.out tier/grouper'
                       // test the environment 
                       sh 'cd test-compose && ./compose.sh'
                       // bring down after testing
                       sh 'cd test-compose && docker-compose down'
-                      baseImg.push("$tag")
+                      // baseImg.push("$tag")
                       
                    }
                }

From b156912162b65a7c005e74752b3ea955b079c2d7 Mon Sep 17 00:00:00 2001
From: Christopher Hubing <chubing@internet2.edu>
Date: Thu, 4 Oct 2018 15:01:39 -0400
Subject: [PATCH 085/186] Update Jenkinsfile

---
 Jenkinsfile | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/Jenkinsfile b/Jenkinsfile
index df57acc0..35cd096c 100644
--- a/Jenkinsfile
+++ b/Jenkinsfile
@@ -55,7 +55,7 @@ pipeline {
                       sh 'docker run -p 6060:6060 --link db:postgres -d --name clair arminc/clair-local-scan:v2.0.5'
                       sh 'curl -L -o clair-scanner https://github.com/arminc/clair-scanner/releases/download/v8/clair-scanner_linux_amd64'
                       sh 'chmod 755 clair-scanner'
-                      sh './clair-scanner --ip 172.17.0.1 -r test.out tier/grouper'
+                      sh "./clair-scanner --ip 172.17.0.1 -r test.out $maintainer/$imagename:$tag"
                       // test the environment 
                       sh 'cd test-compose && ./compose.sh'
                       // bring down after testing

From 6d0199c3e570b2864809f5097418668d2dbef3bc Mon Sep 17 00:00:00 2001
From: Christopher Hubing <chubing@internet2.edu>
Date: Thu, 4 Oct 2018 15:22:37 -0400
Subject: [PATCH 086/186] Update Jenkinsfile

---
 Jenkinsfile | 14 +++++++++-----
 1 file changed, 9 insertions(+), 5 deletions(-)

diff --git a/Jenkinsfile b/Jenkinsfile
index 35cd096c..5d5b035a 100644
--- a/Jenkinsfile
+++ b/Jenkinsfile
@@ -49,18 +49,22 @@ pipeline {
             steps {
                 script {
                    docker.withRegistry('https://registry.hub.docker.com/',   "dockerhub-$maintainer") {
-                      // def baseImg = docker.build("$maintainer/$imagename", "--no-cache .")
+                      def baseImg = docker.build("$maintainer/$imagename", "--no-cache .")
                       // scan the image with clair
-                      sh 'docker run -p 5432:5432 -d --name db arminc/clair-db:2017-10-04'
-                      sh 'docker run -p 6060:6060 --link db:postgres -d --name clair arminc/clair-local-scan:v2.0.5'
+                      sh 'docker run -p 5432:5432 -d --name clairdb arminc/clair-db:2017-10-04'
+                      sh 'docker run -p 6060:6060 --link clairdb:postgres -d --name clair arminc/clair-local-scan:v2.0.5'
                       sh 'curl -L -o clair-scanner https://github.com/arminc/clair-scanner/releases/download/v8/clair-scanner_linux_amd64'
                       sh 'chmod 755 clair-scanner'
                       sh "./clair-scanner --ip 172.17.0.1 -r test.out $maintainer/$imagename:$tag"
-                      // test the environment 
+                      // test the environment
+                      sh 'docker kill clairdb'
+                      sh 'docker rm clairdb'
+                      sh 'docker kill clair'
+                      sh 'docker rm clair'
                       sh 'cd test-compose && ./compose.sh'
                       // bring down after testing
                       sh 'cd test-compose && docker-compose down'
-                      // baseImg.push("$tag")
+                      baseImg.push("$tag")
                       
                    }
                }

From 846dc965af1c7b7a82e682d2170db3d13fd603e2 Mon Sep 17 00:00:00 2001
From: Christopher Hubing <chubing@internet2.edu>
Date: Thu, 4 Oct 2018 15:35:02 -0400
Subject: [PATCH 087/186] Update Jenkinsfile

---
 Jenkinsfile | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/Jenkinsfile b/Jenkinsfile
index 5d5b035a..9db4574d 100644
--- a/Jenkinsfile
+++ b/Jenkinsfile
@@ -55,7 +55,7 @@ pipeline {
                       sh 'docker run -p 6060:6060 --link clairdb:postgres -d --name clair arminc/clair-local-scan:v2.0.5'
                       sh 'curl -L -o clair-scanner https://github.com/arminc/clair-scanner/releases/download/v8/clair-scanner_linux_amd64'
                       sh 'chmod 755 clair-scanner'
-                      sh "./clair-scanner --ip 172.17.0.1 -r test.out $maintainer/$imagename:$tag"
+                      sh "./clair-scanner --ip 172.17.0.1 -r test.out $maintainer/$imagename:latest"
                       // test the environment
                       sh 'docker kill clairdb'
                       sh 'docker rm clairdb'

From a4fa056cf65378f9d01ff49307b1df8bcbd59196 Mon Sep 17 00:00:00 2001
From: Christopher Hubing <chubing@internet2.edu>
Date: Thu, 4 Oct 2018 15:52:32 -0400
Subject: [PATCH 088/186] Update Jenkinsfile

---
 Jenkinsfile | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/Jenkinsfile b/Jenkinsfile
index 9db4574d..17cdd795 100644
--- a/Jenkinsfile
+++ b/Jenkinsfile
@@ -51,7 +51,7 @@ pipeline {
                    docker.withRegistry('https://registry.hub.docker.com/',   "dockerhub-$maintainer") {
                       def baseImg = docker.build("$maintainer/$imagename", "--no-cache .")
                       // scan the image with clair
-                      sh 'docker run -p 5432:5432 -d --name clairdb arminc/clair-db:2017-10-04'
+                      sh 'docker run -p 5432:5432 -d --name clairdb arminc/clair-db:2018-10-04'
                       sh 'docker run -p 6060:6060 --link clairdb:postgres -d --name clair arminc/clair-local-scan:v2.0.5'
                       sh 'curl -L -o clair-scanner https://github.com/arminc/clair-scanner/releases/download/v8/clair-scanner_linux_amd64'
                       sh 'chmod 755 clair-scanner'

From c08db92982f167125f376efcebabe0139591a771 Mon Sep 17 00:00:00 2001
From: Christopher Hubing <chubing@internet2.edu>
Date: Thu, 4 Oct 2018 16:28:40 -0400
Subject: [PATCH 089/186] Update Jenkinsfile

---
 Jenkinsfile | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/Jenkinsfile b/Jenkinsfile
index 17cdd795..fb2ba008 100644
--- a/Jenkinsfile
+++ b/Jenkinsfile
@@ -51,7 +51,7 @@ pipeline {
                    docker.withRegistry('https://registry.hub.docker.com/',   "dockerhub-$maintainer") {
                       def baseImg = docker.build("$maintainer/$imagename", "--no-cache .")
                       // scan the image with clair
-                      sh 'docker run -p 5432:5432 -d --name clairdb arminc/clair-db:2018-10-04'
+                      sh 'docker run -p 5432:5432 -d --name clairdb arminc/clair-db:latest'
                       sh 'docker run -p 6060:6060 --link clairdb:postgres -d --name clair arminc/clair-local-scan:v2.0.5'
                       sh 'curl -L -o clair-scanner https://github.com/arminc/clair-scanner/releases/download/v8/clair-scanner_linux_amd64'
                       sh 'chmod 755 clair-scanner'

From fdfd1f6b82a615bd3d3a2add7720f811eea79577 Mon Sep 17 00:00:00 2001
From: Christopher Hubing <chubing@internet2.edu>
Date: Mon, 8 Oct 2018 12:31:29 -0400
Subject: [PATCH 090/186] Create clairscan.sh

---
 tests/clairscan.sh | 72 ++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 72 insertions(+)
 create mode 100644 tests/clairscan.sh

diff --git a/tests/clairscan.sh b/tests/clairscan.sh
new file mode 100644
index 00000000..99e36141
--- /dev/null
+++ b/tests/clairscan.sh
@@ -0,0 +1,72 @@
+#!/bin/bash
+
+startsecs=$(date +'%s')
+starttime=$(date +%H:%M:%S)
+
+echo 'starting:' ${starttime}
+
+#ensure clair-scanner
+if [ ! -s ./clair-scanner ]; then
+  echo 'downloading curl-scanner...'
+  curl -s -L -o ./clair-scanner https://github.com/arminc/clair-scanner/releases/download/v8/clair-scanner_linux_amd64
+  chmod 755 clair-scanner
+else
+  echo 'using existing clair-scanner...'
+fi
+
+#ensure DB container
+echo 'ensuring a fresh clair-db container...'
+docker ps | grep clair-db &>/dev/null
+if [ $? == "0" ]; then
+  echo 'removing existing clair-db container...'
+  docker kill db &>/dev/null
+  docker rm db &>/dev/null
+  docker run -p 5432:5432 -d --name db arminc/clair-db:latest &>/dev/null
+else
+  docker run -p 5432:5432 -d --name db arminc/clair-db:latest &>/dev/null
+fi
+sleep 30
+
+#ensure clair-scan container
+echo 'ensuring a fresh clair-scan container...'
+docker ps | grep clair-local-scan &>/dev/null
+if [ $? == "0" ]; then
+  echo 'removing existing clair-scan container...'
+  docker kill clair &>/dev/null
+  docker rm clair &>/dev/null
+  docker run -p 6060:6060 --link db:postgres -d --name clair arminc/clair-local-scan:v2.0.5 &>/dev/null
+else
+  docker run -p 6060:6060 --link db:postgres -d --name clair arminc/clair-local-scan:v2.0.5 &>/dev/null
+fi
+sleep 30
+
+#get ip where clair-scanner will listen
+clairip=$(/sbin/ifconfig docker0 | grep 'inet ' | sed 's/^[[:space:]]*//g' | cut -f 2 -d ' ' | sed 's/^[[:space:]]*//g')
+echo 'sending ip addr' ${clairip} 'to clair-scan server...'
+
+#run scan
+echo 'running scan...'
+./clair-scanner --ip ${clairip} $1
+retcode=$?
+
+#eval results
+if [ $retcode == '0' ]; then
+  echo 'scan found nothing.'
+else
+  echo 'scan found issues.'
+fi
+
+#cleanup
+echo 'removing temporary containers...'
+docker kill clair &>/dev/null
+docker rm clair &>/dev/null
+docker kill db &>/dev/null
+docker rm db &>/dev/null
+
+endsecs=$(date +'%s')
+endtime=$(date +%H:%M:%S)
+echo 'finished:' $endtime '  ('$((endsecs - startsecs)) 'seconds)'
+echo ""
+
+#pass along return code from scan
+exit $retcode

From d5241b56d33d634e200f23b2c8e3b27f35a2bbaa Mon Sep 17 00:00:00 2001
From: Christopher Hubing <chubing@internet2.edu>
Date: Mon, 8 Oct 2018 12:33:25 -0400
Subject: [PATCH 091/186] Create main.bats

---
 tests/main.bats | 33 +++++++++++++++++++++++++++++++++
 1 file changed, 33 insertions(+)
 create mode 100644 tests/main.bats

diff --git a/tests/main.bats b/tests/main.bats
new file mode 100644
index 00000000..73d3cf82
--- /dev/null
+++ b/tests/main.bats
@@ -0,0 +1,33 @@
+#!/usr/bin/env bats
+
+load ../common
+
+@test "010 Image is present and healthy" {
+    docker image inspect ${maintainer}/${imagename}
+}
+
+@test "030 Port 443/https is listening" {
+    docker run -d ${maintainer}/${imagename}
+    sleep 25
+    #get cont id
+    contid=$(docker ps | grep ${maintainer}/${imagename} | cut -f 1 -d ' ')
+    run docker exec -i ${contid} sh -c 'cat < /dev/null > /dev/tcp/127.0.0.1/443'
+    docker kill ${contid} &>/dev/null
+    docker rm ${contid} &>/dev/null
+    [ "$status" -eq 0 ]
+}
+
+@test "040 The Grouper Status page is present" {
+    docker run -d ${maintainer}/${imagename}
+    sleep 60
+    contid2=$(docker ps | grep ${maintainer}/${imagename} | cut -f 1 -d ' ')
+    run docker exec -i ${contid2} sh -c 'curl -I -k -s -f https://127.0.0.1/grouper/status?diagnosticType=trivial'
+    docker kill ${contid2} &>/dev/null
+    docker rm ${contid2} &>/dev/null
+    [ "$status" -eq 0 ]
+}
+
+
+@test "070 There are no known security vulnerabilities" {
+    ./tests/clairscan.sh ${maintainer}/${imagename}
+}

From 91c611f8aa3c172896b5f17009c56b60e6639dac Mon Sep 17 00:00:00 2001
From: Christopher Hubing <chubing@internet2.edu>
Date: Mon, 8 Oct 2018 12:41:05 -0400
Subject: [PATCH 092/186] Update Jenkinsfile

---
 Jenkinsfile | 55 +++++++++++++++++++++++++++++++++++++++--------------
 1 file changed, 41 insertions(+), 14 deletions(-)

diff --git a/Jenkinsfile b/Jenkinsfile
index fb2ba008..0d52ba13 100644
--- a/Jenkinsfile
+++ b/Jenkinsfile
@@ -46,24 +46,51 @@ pipeline {
             }
         } 
         stage('Build') {
+            steps {
+                script {
+                  try{
+                    sh 'bin/rebuild.sh &> debug'
+                  } catch(error) {
+                     def error_details = readFile('./debug');
+                     def message = "BUILD ERROR: There was a problem building ${imagename}:${tag}. \n\n ${error_details}"
+                     sh "rm -f ./debug"
+                     handleError(message)
+                  }
+                }
+        }
+        stage('Test') {
+            steps {
+                script {
+                   try {
+                     sh 'bin/test.sh 2>&1 | tee debug ; test ${PIPESTATUS[0]} -eq 0'
+                   } catch (error) {
+                     def error_details = readFile('./debug')
+                     def message = "BUILD ERROR: There was a problem testing ${imagename}:${tag}. \n\n ${error_details}"
+                     sh "rm -f ./debug"
+                     handleError(message)
+                   } 
+                }    
+        }
+        
+        stage('Push') {
             steps {
                 script {
                    docker.withRegistry('https://registry.hub.docker.com/',   "dockerhub-$maintainer") {
                       def baseImg = docker.build("$maintainer/$imagename", "--no-cache .")
-                      // scan the image with clair
-                      sh 'docker run -p 5432:5432 -d --name clairdb arminc/clair-db:latest'
-                      sh 'docker run -p 6060:6060 --link clairdb:postgres -d --name clair arminc/clair-local-scan:v2.0.5'
-                      sh 'curl -L -o clair-scanner https://github.com/arminc/clair-scanner/releases/download/v8/clair-scanner_linux_amd64'
-                      sh 'chmod 755 clair-scanner'
-                      sh "./clair-scanner --ip 172.17.0.1 -r test.out $maintainer/$imagename:latest"
-                      // test the environment
-                      sh 'docker kill clairdb'
-                      sh 'docker rm clairdb'
-                      sh 'docker kill clair'
-                      sh 'docker rm clair'
-                      sh 'cd test-compose && ./compose.sh'
-                      // bring down after testing
-                      sh 'cd test-compose && docker-compose down'
+                      //// scan the image with clair
+                      // sh 'docker run -p 5432:5432 -d --name clairdb arminc/clair-db:latest'
+                      // sh 'docker run -p 6060:6060 --link clairdb:postgres -d --name clair arminc/clair-local-scan:v2.0.5'
+                      // sh 'curl -L -o clair-scanner https://github.com/arminc/clair-scanner/releases/download/v8/clair-scanner_linux_amd64'
+                      // sh 'chmod 755 clair-scanner'
+                      // sh "./clair-scanner --ip 172.17.0.1 -r test.out $maintainer/$imagename:latest"
+                      //// test the environment
+                      // sh 'docker kill clairdb'
+                      // sh 'docker rm clairdb'
+                      // sh 'docker kill clair'
+                      // sh 'docker rm clair'
+                      // sh 'cd test-compose && ./compose.sh'
+                      //// bring down after testing
+                      //sh 'cd test-compose && docker-compose down'
                       baseImg.push("$tag")
                       
                    }

From a783a1a4402382834e087338457bef28bd99b2dc Mon Sep 17 00:00:00 2001
From: Christopher Hubing <chubing@internet2.edu>
Date: Mon, 8 Oct 2018 12:44:23 -0400
Subject: [PATCH 093/186] Update Jenkinsfile

---
 Jenkinsfile | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/Jenkinsfile b/Jenkinsfile
index 0d52ba13..9b43e606 100644
--- a/Jenkinsfile
+++ b/Jenkinsfile
@@ -57,6 +57,7 @@ pipeline {
                      handleError(message)
                   }
                 }
+            }
         }
         stage('Test') {
             steps {
@@ -70,6 +71,7 @@ pipeline {
                      handleError(message)
                    } 
                 }    
+             }
         }
         
         stage('Push') {

From e56671814d9d7b9222ff482fa683601c5d1b867e Mon Sep 17 00:00:00 2001
From: Chris Hubing <chubing@internet2.edu>
Date: Mon, 8 Oct 2018 12:56:23 -0400
Subject: [PATCH 094/186] added x bit

---
 tests/clairscan.sh | 0
 1 file changed, 0 insertions(+), 0 deletions(-)
 mode change 100644 => 100755 tests/clairscan.sh

diff --git a/tests/clairscan.sh b/tests/clairscan.sh
old mode 100644
new mode 100755

From d37730b882f051c8a591d760ac22f657c485b63c Mon Sep 17 00:00:00 2001
From: Christopher Hubing <chubing@internet2.edu>
Date: Mon, 8 Oct 2018 13:01:41 -0400
Subject: [PATCH 095/186] Update Jenkinsfile

---
 Jenkinsfile | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/Jenkinsfile b/Jenkinsfile
index 9b43e606..c764ea9b 100644
--- a/Jenkinsfile
+++ b/Jenkinsfile
@@ -49,7 +49,7 @@ pipeline {
             steps {
                 script {
                   try{
-                    sh 'bin/rebuild.sh &> debug'
+                    sh 'bin/rebuild.sh | tee debug ; test ${PIPESTATUS[0]} -eq 0'
                   } catch(error) {
                      def error_details = readFile('./debug');
                      def message = "BUILD ERROR: There was a problem building ${imagename}:${tag}. \n\n ${error_details}"

From effd5212d768694f1fe4c27760529ff233296219 Mon Sep 17 00:00:00 2001
From: Christopher Hubing <chubing@internet2.edu>
Date: Mon, 8 Oct 2018 13:03:05 -0400
Subject: [PATCH 096/186] Update main.bats

---
 tests/main.bats | 10 ----------
 1 file changed, 10 deletions(-)

diff --git a/tests/main.bats b/tests/main.bats
index 73d3cf82..e7be030f 100644
--- a/tests/main.bats
+++ b/tests/main.bats
@@ -17,16 +17,6 @@ load ../common
     [ "$status" -eq 0 ]
 }
 
-@test "040 The Grouper Status page is present" {
-    docker run -d ${maintainer}/${imagename}
-    sleep 60
-    contid2=$(docker ps | grep ${maintainer}/${imagename} | cut -f 1 -d ' ')
-    run docker exec -i ${contid2} sh -c 'curl -I -k -s -f https://127.0.0.1/grouper/status?diagnosticType=trivial'
-    docker kill ${contid2} &>/dev/null
-    docker rm ${contid2} &>/dev/null
-    [ "$status" -eq 0 ]
-}
-
 
 @test "070 There are no known security vulnerabilities" {
     ./tests/clairscan.sh ${maintainer}/${imagename}

From 5a963c1c96633f5640f4acb5c4dacfd8e57f3506 Mon Sep 17 00:00:00 2001
From: Christopher Hubing <chubing@internet2.edu>
Date: Mon, 8 Oct 2018 13:07:01 -0400
Subject: [PATCH 097/186] Update main.bats

---
 tests/main.bats | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/tests/main.bats b/tests/main.bats
index e7be030f..d70655b0 100644
--- a/tests/main.bats
+++ b/tests/main.bats
@@ -7,7 +7,7 @@ load ../common
 }
 
 @test "030 Port 443/https is listening" {
-    docker run -d ${maintainer}/${imagename}
+    docker run -d ${maintainer}/${imagename} ui
     sleep 25
     #get cont id
     contid=$(docker ps | grep ${maintainer}/${imagename} | cut -f 1 -d ' ')

From 4cc64f08da86be058624260f87bcf6e53860f91d Mon Sep 17 00:00:00 2001
From: Christopher Hubing <chubing@internet2.edu>
Date: Mon, 8 Oct 2018 13:23:49 -0400
Subject: [PATCH 098/186] Update main.bats

---
 tests/main.bats | 11 +++--------
 1 file changed, 3 insertions(+), 8 deletions(-)

diff --git a/tests/main.bats b/tests/main.bats
index d70655b0..cbe8ea2d 100644
--- a/tests/main.bats
+++ b/tests/main.bats
@@ -6,14 +6,9 @@ load ../common
     docker image inspect ${maintainer}/${imagename}
 }
 
-@test "030 Port 443/https is listening" {
-    docker run -d ${maintainer}/${imagename} ui
-    sleep 25
-    #get cont id
-    contid=$(docker ps | grep ${maintainer}/${imagename} | cut -f 1 -d ' ')
-    run docker exec -i ${contid} sh -c 'cat < /dev/null > /dev/tcp/127.0.0.1/443'
-    docker kill ${contid} &>/dev/null
-    docker rm ${contid} &>/dev/null
+@test "030 Test Compose the environment" {
+    cd test-compose && ./compose.sh
+    cd test-compose && docker-compose down
     [ "$status" -eq 0 ]
 }
 

From cf745dae4e74bf2f12680a8a61876b09c886b197 Mon Sep 17 00:00:00 2001
From: Christopher Hubing <chubing@internet2.edu>
Date: Mon, 8 Oct 2018 13:31:46 -0400
Subject: [PATCH 099/186] Update main.bats

---
 tests/main.bats | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/tests/main.bats b/tests/main.bats
index cbe8ea2d..ade16fbd 100644
--- a/tests/main.bats
+++ b/tests/main.bats
@@ -7,8 +7,7 @@ load ../common
 }
 
 @test "030 Test Compose the environment" {
-    cd test-compose && ./compose.sh
-    cd test-compose && docker-compose down
+    cd test-compose && ./compose.sh && docker-compose down
     [ "$status" -eq 0 ]
 }
 

From 5c9e23c40bf8b23aa96a385b05a3b523b02cd9ef Mon Sep 17 00:00:00 2001
From: Christopher Hubing <chubing@internet2.edu>
Date: Mon, 8 Oct 2018 13:33:27 -0400
Subject: [PATCH 100/186] Update main.bats

---
 tests/main.bats | 1 -
 1 file changed, 1 deletion(-)

diff --git a/tests/main.bats b/tests/main.bats
index ade16fbd..8a865bfe 100644
--- a/tests/main.bats
+++ b/tests/main.bats
@@ -8,7 +8,6 @@ load ../common
 
 @test "030 Test Compose the environment" {
     cd test-compose && ./compose.sh && docker-compose down
-    [ "$status" -eq 0 ]
 }
 
 

From 7d975abdfbfaed9fa2b845dda13b9da652a2728b Mon Sep 17 00:00:00 2001
From: Christopher Hubing <chubing@internet2.edu>
Date: Mon, 8 Oct 2018 13:38:27 -0400
Subject: [PATCH 101/186] Update main.bats

---
 tests/main.bats | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/tests/main.bats b/tests/main.bats
index 8a865bfe..973dc981 100644
--- a/tests/main.bats
+++ b/tests/main.bats
@@ -12,5 +12,5 @@ load ../common
 
 
 @test "070 There are no known security vulnerabilities" {
-    ./tests/clairscan.sh ${maintainer}/${imagename}
+    ./tests/clairscan.sh ${maintainer}/${imagename}:${tag}
 }

From 1b24c3b8d9aee55f534577f0508f0a1c7d9cbfa3 Mon Sep 17 00:00:00 2001
From: Christopher Hubing <chubing@internet2.edu>
Date: Mon, 8 Oct 2018 13:43:49 -0400
Subject: [PATCH 102/186] Update Jenkinsfile

---
 Jenkinsfile | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/Jenkinsfile b/Jenkinsfile
index c764ea9b..823b222e 100644
--- a/Jenkinsfile
+++ b/Jenkinsfile
@@ -28,6 +28,9 @@ pipeline {
                       sh 'ls'
                       sh 'mv bin/* ../bin/.'
                     }
+                    // Build and test scripts expect that 'tag' is present in common.bash. This is necessary for both Jenkins and standalone testing.
+                    // We don't care if there are more 'tag' assignments there. The latest one wins.
+                    sh "echo >> common.bash ; echo \"tag=\\\"${tag}\\\"\" >> common.bash ; echo common.bash ; cat common.bash"
                 }  
              }
         }    

From fe4fdf42237d95ba7520777b99b7358311ba7a11 Mon Sep 17 00:00:00 2001
From: Christopher Hubing <chubing@internet2.edu>
Date: Tue, 9 Oct 2018 11:45:25 -0400
Subject: [PATCH 103/186] Update Jenkinsfile

---
 Jenkinsfile | 11 +++++------
 1 file changed, 5 insertions(+), 6 deletions(-)

diff --git a/Jenkinsfile b/Jenkinsfile
index 823b222e..a015af5e 100644
--- a/Jenkinsfile
+++ b/Jenkinsfile
@@ -1,6 +1,7 @@
 
 pipeline {
     agent any
+    def baseImg
     environment { 
         maintainer = "t"
         imagename = 'g'
@@ -52,7 +53,9 @@ pipeline {
             steps {
                 script {
                   try{
-                    sh 'bin/rebuild.sh | tee debug ; test ${PIPESTATUS[0]} -eq 0'
+                      docker.withRegistry('https://registry.hub.docker.com/',   "dockerhub-$maintainer") {
+                        baseImg = docker.build("$maintainer/$imagename", "--no-cache .")
+                      }
                   } catch(error) {
                      def error_details = readFile('./debug');
                      def message = "BUILD ERROR: There was a problem building ${imagename}:${tag}. \n\n ${error_details}"
@@ -80,8 +83,6 @@ pipeline {
         stage('Push') {
             steps {
                 script {
-                   docker.withRegistry('https://registry.hub.docker.com/',   "dockerhub-$maintainer") {
-                      def baseImg = docker.build("$maintainer/$imagename", "--no-cache .")
                       //// scan the image with clair
                       // sh 'docker run -p 5432:5432 -d --name clairdb arminc/clair-db:latest'
                       // sh 'docker run -p 6060:6060 --link clairdb:postgres -d --name clair arminc/clair-local-scan:v2.0.5'
@@ -97,9 +98,7 @@ pipeline {
                       //// bring down after testing
                       //sh 'cd test-compose && docker-compose down'
                       baseImg.push("$tag")
-                      
-                   }
-               }
+                  }
             }
         }
         stage('Notify') {

From ffd56bd7fa472fa646224f4dd57ec7eb060c2f99 Mon Sep 17 00:00:00 2001
From: Christopher Hubing <chubing@internet2.edu>
Date: Tue, 9 Oct 2018 11:46:10 -0400
Subject: [PATCH 104/186] Update Jenkinsfile

---
 Jenkinsfile | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/Jenkinsfile b/Jenkinsfile
index a015af5e..1fab98ac 100644
--- a/Jenkinsfile
+++ b/Jenkinsfile
@@ -1,7 +1,7 @@
 
 pipeline {
     agent any
-    def baseImg
+    def baseImg = ''
     environment { 
         maintainer = "t"
         imagename = 'g'

From 5f9098a2238d90d149a28b3ff5b036f66bc13910 Mon Sep 17 00:00:00 2001
From: Christopher Hubing <chubing@internet2.edu>
Date: Tue, 9 Oct 2018 11:46:48 -0400
Subject: [PATCH 105/186] Update Jenkinsfile

---
 Jenkinsfile | 1 -
 1 file changed, 1 deletion(-)

diff --git a/Jenkinsfile b/Jenkinsfile
index 1fab98ac..0dedd0b3 100644
--- a/Jenkinsfile
+++ b/Jenkinsfile
@@ -1,7 +1,6 @@
 
 pipeline {
     agent any
-    def baseImg = ''
     environment { 
         maintainer = "t"
         imagename = 'g'

From f0eae16956f9a9ff45bfc1b6030b85492a96867b Mon Sep 17 00:00:00 2001
From: Christopher Hubing <chubing@internet2.edu>
Date: Tue, 9 Oct 2018 12:03:22 -0400
Subject: [PATCH 106/186] Update main.bats

---
 tests/main.bats | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/tests/main.bats b/tests/main.bats
index 973dc981..8a865bfe 100644
--- a/tests/main.bats
+++ b/tests/main.bats
@@ -12,5 +12,5 @@ load ../common
 
 
 @test "070 There are no known security vulnerabilities" {
-    ./tests/clairscan.sh ${maintainer}/${imagename}:${tag}
+    ./tests/clairscan.sh ${maintainer}/${imagename}
 }

From 44b1d57b8d38c300ad1af369329761a25448b4af Mon Sep 17 00:00:00 2001
From: Christopher Hubing <chubing@internet2.edu>
Date: Tue, 9 Oct 2018 12:24:02 -0400
Subject: [PATCH 107/186] Update Jenkinsfile

---
 Jenkinsfile | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/Jenkinsfile b/Jenkinsfile
index 0dedd0b3..31cc94d1 100644
--- a/Jenkinsfile
+++ b/Jenkinsfile
@@ -96,7 +96,9 @@ pipeline {
                       // sh 'cd test-compose && ./compose.sh'
                       //// bring down after testing
                       //sh 'cd test-compose && docker-compose down'
-                      baseImg.push("$tag")
+                      docker.withRegistry('https://registry.hub.docker.com/',   "dockerhub-$maintainer") {
+                        baseImg.push("$tag")
+                      }
                   }
             }
         }

From 515c65090b0a1e93c426768cb71848aac0ad16dc Mon Sep 17 00:00:00 2001
From: Christopher Hubing <chubing@internet2.edu>
Date: Tue, 9 Oct 2018 12:38:08 -0400
Subject: [PATCH 108/186] Update main.bats

---
 tests/main.bats | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/tests/main.bats b/tests/main.bats
index 8a865bfe..973dc981 100644
--- a/tests/main.bats
+++ b/tests/main.bats
@@ -12,5 +12,5 @@ load ../common
 
 
 @test "070 There are no known security vulnerabilities" {
-    ./tests/clairscan.sh ${maintainer}/${imagename}
+    ./tests/clairscan.sh ${maintainer}/${imagename}:${tag}
 }

From d179cf7e4ccc253c793501d27a29d1f84298de71 Mon Sep 17 00:00:00 2001
From: Christopher Hubing <chubing@internet2.edu>
Date: Tue, 9 Oct 2018 13:09:10 -0400
Subject: [PATCH 109/186] Update main.bats

---
 tests/main.bats | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/tests/main.bats b/tests/main.bats
index 973dc981..9dc81676 100644
--- a/tests/main.bats
+++ b/tests/main.bats
@@ -12,5 +12,5 @@ load ../common
 
 
 @test "070 There are no known security vulnerabilities" {
-    ./tests/clairscan.sh ${maintainer}/${imagename}:${tag}
+    ./tests/clairscan.sh ${maintainer}/${imagename}:$latest
 }

From 004636368bf0e53457ff203ca1caf27f5a9af8bf Mon Sep 17 00:00:00 2001
From: Christopher Hubing <chubing@internet2.edu>
Date: Tue, 9 Oct 2018 13:41:05 -0400
Subject: [PATCH 110/186] Update main.bats

---
 tests/main.bats | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/tests/main.bats b/tests/main.bats
index 9dc81676..0c18d122 100644
--- a/tests/main.bats
+++ b/tests/main.bats
@@ -12,5 +12,5 @@ load ../common
 
 
 @test "070 There are no known security vulnerabilities" {
-    ./tests/clairscan.sh ${maintainer}/${imagename}:$latest
+    ./tests/clairscan.sh ${maintainer}/${imagename}:latest
 }

From 2701cfa7fcc6a88a7485683c9e00c44407652cd5 Mon Sep 17 00:00:00 2001
From: Christopher Hubing <chubing@internet2.edu>
Date: Tue, 16 Oct 2018 12:49:47 -0400
Subject: [PATCH 111/186] Update grouper.installer.properties

---
 container_files/grouper.installer.properties | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/container_files/grouper.installer.properties b/container_files/grouper.installer.properties
index e3b3dc58..2ed11a54 100644
--- a/container_files/grouper.installer.properties
+++ b/container_files/grouper.installer.properties
@@ -16,7 +16,7 @@ grouperInstaller.default.installOrUpgrade = install
 
 grouperInstaller.autorun.installAllPatches = false
 grouperInstaller.autorun.installPatchesUpToACertainPatchLevel = true
-grouperInstaller.autorun.installPatchesUpToThesePatchLevels = grouper_v2_4_0_api_patch_2,grouper_v2_4_0_ui_patch_0,grouper_v2_4_0_ws_patch_0,grouper_v2_4_0_pspng_patch_0
+grouperInstaller.autorun.installPatchesUpToThesePatchLevels = grouper_v2_4_0_api_patch_2,grouper_v2_4_0_ui_patch_1,grouper_v2_4_0_ws_patch_0,grouper_v2_4_0_pspng_patch_0
 
 #### set this to true to try to use defaults for everything.  Only things without default values will need to be set
 grouperInstaller.autorun.useDefaultsAsMuchAsAvailable = true

From 7ea8949bd23dc107d920ee1cbaaa10cdd325b841 Mon Sep 17 00:00:00 2001
From: Christopher Hubing <chubing@internet2.edu>
Date: Wed, 31 Oct 2018 22:20:12 -0400
Subject: [PATCH 112/186] API patch 3

---
 container_files/grouper.installer.properties | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/container_files/grouper.installer.properties b/container_files/grouper.installer.properties
index 2ed11a54..7aeb8776 100644
--- a/container_files/grouper.installer.properties
+++ b/container_files/grouper.installer.properties
@@ -16,7 +16,7 @@ grouperInstaller.default.installOrUpgrade = install
 
 grouperInstaller.autorun.installAllPatches = false
 grouperInstaller.autorun.installPatchesUpToACertainPatchLevel = true
-grouperInstaller.autorun.installPatchesUpToThesePatchLevels = grouper_v2_4_0_api_patch_2,grouper_v2_4_0_ui_patch_1,grouper_v2_4_0_ws_patch_0,grouper_v2_4_0_pspng_patch_0
+grouperInstaller.autorun.installPatchesUpToThesePatchLevels = grouper_v2_4_0_api_patch_3,grouper_v2_4_0_ui_patch_1,grouper_v2_4_0_ws_patch_0,grouper_v2_4_0_pspng_patch_0
 
 #### set this to true to try to use defaults for everything.  Only things without default values will need to be set
 grouperInstaller.autorun.useDefaultsAsMuchAsAvailable = true

From cada700298286c8191a772e742b8a69886993058 Mon Sep 17 00:00:00 2001
From: Christopher Hubing <chubing@internet2.edu>
Date: Wed, 7 Nov 2018 14:28:26 -0500
Subject: [PATCH 113/186] Update grouper.installer.properties

---
 container_files/grouper.installer.properties | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/container_files/grouper.installer.properties b/container_files/grouper.installer.properties
index 7aeb8776..c3b77116 100644
--- a/container_files/grouper.installer.properties
+++ b/container_files/grouper.installer.properties
@@ -16,7 +16,7 @@ grouperInstaller.default.installOrUpgrade = install
 
 grouperInstaller.autorun.installAllPatches = false
 grouperInstaller.autorun.installPatchesUpToACertainPatchLevel = true
-grouperInstaller.autorun.installPatchesUpToThesePatchLevels = grouper_v2_4_0_api_patch_3,grouper_v2_4_0_ui_patch_1,grouper_v2_4_0_ws_patch_0,grouper_v2_4_0_pspng_patch_0
+grouperInstaller.autorun.installPatchesUpToThesePatchLevels = grouper_v2_4_0_api_patch_6,grouper_v2_4_0_ui_patch_3,grouper_v2_4_0_ws_patch_0,grouper_v2_4_0_pspng_patch_0
 
 #### set this to true to try to use defaults for everything.  Only things without default values will need to be set
 grouperInstaller.autorun.useDefaultsAsMuchAsAvailable = true

From 6f9502e1c22dd8e8dac4df28b57c23b7c57d0c89 Mon Sep 17 00:00:00 2001
From: Christopher Hubing <chubing@internet2.edu>
Date: Fri, 7 Dec 2018 10:32:05 -0500
Subject: [PATCH 114/186] a11-u5-w0-p0

---
 container_files/grouper.installer.properties | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/container_files/grouper.installer.properties b/container_files/grouper.installer.properties
index c3b77116..967b0d10 100644
--- a/container_files/grouper.installer.properties
+++ b/container_files/grouper.installer.properties
@@ -16,7 +16,7 @@ grouperInstaller.default.installOrUpgrade = install
 
 grouperInstaller.autorun.installAllPatches = false
 grouperInstaller.autorun.installPatchesUpToACertainPatchLevel = true
-grouperInstaller.autorun.installPatchesUpToThesePatchLevels = grouper_v2_4_0_api_patch_6,grouper_v2_4_0_ui_patch_3,grouper_v2_4_0_ws_patch_0,grouper_v2_4_0_pspng_patch_0
+grouperInstaller.autorun.installPatchesUpToThesePatchLevels = grouper_v2_4_0_api_patch_11,grouper_v2_4_0_ui_patch_5,grouper_v2_4_0_ws_patch_0,grouper_v2_4_0_pspng_patch_0
 
 #### set this to true to try to use defaults for everything.  Only things without default values will need to be set
 grouperInstaller.autorun.useDefaultsAsMuchAsAvailable = true

From de3486b0b3b62ba274e383e6fa92429b485577d7 Mon Sep 17 00:00:00 2001
From: Christopher Hubing <chubing@internet2.edu>
Date: Fri, 7 Dec 2018 10:47:45 -0500
Subject: [PATCH 115/186] Update Jenkinsfile

---
 Jenkinsfile | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/Jenkinsfile b/Jenkinsfile
index 31cc94d1..2b7b801b 100644
--- a/Jenkinsfile
+++ b/Jenkinsfile
@@ -26,7 +26,7 @@ pipeline {
                     dir('tmp'){
                       git([ url: "https://github.internet2.edu/docker/util.git", credentialsId: "jenkins-github-access-token" ])
                       sh 'ls'
-                      sh 'mv bin/* ../bin/.'
+                      sh 'mv bin/* ../bin'
                     }
                     // Build and test scripts expect that 'tag' is present in common.bash. This is necessary for both Jenkins and standalone testing.
                     // We don't care if there are more 'tag' assignments there. The latest one wins.

From 67cf458ab4b887510c633de3d7ca86159c79161f Mon Sep 17 00:00:00 2001
From: Christopher Hubing <chubing@internet2.edu>
Date: Fri, 4 Jan 2019 12:29:02 -0500
Subject: [PATCH 116/186] Update grouper.installer.properties

---
 container_files/grouper.installer.properties | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/container_files/grouper.installer.properties b/container_files/grouper.installer.properties
index 967b0d10..ce6477e9 100644
--- a/container_files/grouper.installer.properties
+++ b/container_files/grouper.installer.properties
@@ -16,7 +16,7 @@ grouperInstaller.default.installOrUpgrade = install
 
 grouperInstaller.autorun.installAllPatches = false
 grouperInstaller.autorun.installPatchesUpToACertainPatchLevel = true
-grouperInstaller.autorun.installPatchesUpToThesePatchLevels = grouper_v2_4_0_api_patch_11,grouper_v2_4_0_ui_patch_5,grouper_v2_4_0_ws_patch_0,grouper_v2_4_0_pspng_patch_0
+grouperInstaller.autorun.installPatchesUpToThesePatchLevels = grouper_v2_4_0_api_patch_11,grouper_v2_4_0_ui_patch_6,grouper_v2_4_0_ws_patch_0,grouper_v2_4_0_pspng_patch_0
 
 #### set this to true to try to use defaults for everything.  Only things without default values will need to be set
 grouperInstaller.autorun.useDefaultsAsMuchAsAvailable = true

From 9891cf0784fdcfd812f9c43b0e75cd0bb5daebca Mon Sep 17 00:00:00 2001
From: Christopher Hubing <chubing@internet2.edu>
Date: Fri, 4 Jan 2019 12:33:20 -0500
Subject: [PATCH 117/186] Update Jenkinsfile

---
 Jenkinsfile | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/Jenkinsfile b/Jenkinsfile
index 2b7b801b..d7b0dc62 100644
--- a/Jenkinsfile
+++ b/Jenkinsfile
@@ -53,7 +53,7 @@ pipeline {
                 script {
                   try{
                       docker.withRegistry('https://registry.hub.docker.com/',   "dockerhub-$maintainer") {
-                        baseImg = docker.build("$maintainer/$imagename", "--no-cache .")
+                        baseImg = docker.build("$maintainer/$imagename", "--build-arg GROUPER_CONTAINER_VERSION=$tag --no-cache .")
                       }
                   } catch(error) {
                      def error_details = readFile('./debug');

From b12c150413b73fa63c05845efbe1bc23ca15e7d8 Mon Sep 17 00:00:00 2001
From: Christopher Hubing <chubing@internet2.edu>
Date: Fri, 4 Jan 2019 15:38:43 -0500
Subject: [PATCH 118/186] Update Dockerfile

---
 Dockerfile | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/Dockerfile b/Dockerfile
index eee6c126..d618b9fe 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -3,9 +3,12 @@ FROM centos:centos7 as installing
 RUN yum update -y \
     && yum install -y wget tar unzip dos2unix \
     && yum clean all
+    
+ARG GROUPER_CONTAINER_VERSION
 
 ENV GROUPER_VERSION=2.4.0 \
-     JAVA_HOME=/usr/lib/jvm/zulu-8/
+     JAVA_HOME=/usr/lib/jvm/zulu-8/ \
+     GROUPER_CONTAINER_VERSION=$GROUPER_CONTAINER_VERSION
 
 # use Zulu package
 RUN rpm --import http://repos.azulsystems.com/RPM-GPG-KEY-azulsystems \

From f76052103703ee7855a7df24e53ecbc08deac249 Mon Sep 17 00:00:00 2001
From: Christopher Hubing <chubing@internet2.edu>
Date: Fri, 4 Jan 2019 16:05:54 -0500
Subject: [PATCH 119/186] Update Dockerfile

---
 Dockerfile | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)

diff --git a/Dockerfile b/Dockerfile
index d618b9fe..accfc65b 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -96,10 +96,15 @@ LABEL author="tier-packaging@internet2.edu <tier-packaging@internet2.edu>" \
       ImageType="Grouper" \
       ImageName=$imagename \
       ImageOS=centos7
+      
+ARG GROUPER_CONTAINER_VERSION
 
 ENV JAVA_HOME=/usr/lib/jvm/zulu-8/ \
     PATH=$PATH:$JAVA_HOME/bin \
-    GROUPER_HOME=/opt/grouper/grouper.apiBinary
+    GROUPER_HOME=/opt/grouper/grouper.apiBinary \
+    GROUPER_CONTAINER_VERSION=$GROUPER_CONTAINER_VERSION \
+    
+
 
 RUN ln -sf /usr/share/zoneinfo/UTC /etc/localtime
 

From bfa62a7b3c076370cc4e6b2abea1d297760425ee Mon Sep 17 00:00:00 2001
From: Christopher Hubing <chubing@internet2.edu>
Date: Fri, 4 Jan 2019 16:09:41 -0500
Subject: [PATCH 120/186] Update Dockerfile

---
 Dockerfile | 4 +---
 1 file changed, 1 insertion(+), 3 deletions(-)

diff --git a/Dockerfile b/Dockerfile
index accfc65b..e5f412bf 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -102,9 +102,7 @@ ARG GROUPER_CONTAINER_VERSION
 ENV JAVA_HOME=/usr/lib/jvm/zulu-8/ \
     PATH=$PATH:$JAVA_HOME/bin \
     GROUPER_HOME=/opt/grouper/grouper.apiBinary \
-    GROUPER_CONTAINER_VERSION=$GROUPER_CONTAINER_VERSION \
-    
-
+    GROUPER_CONTAINER_VERSION=$GROUPER_CONTAINER_VERSION
 
 RUN ln -sf /usr/share/zoneinfo/UTC /etc/localtime
 

From 39679df77ca065557efdd77fecb3d2ccd0c223f4 Mon Sep 17 00:00:00 2001
From: Christopher Hubing <chubing@internet2.edu>
Date: Mon, 7 Jan 2019 11:08:54 -0500
Subject: [PATCH 121/186] Update grouper.installer.properties

---
 container_files/grouper.installer.properties | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/container_files/grouper.installer.properties b/container_files/grouper.installer.properties
index ce6477e9..d79ed61d 100644
--- a/container_files/grouper.installer.properties
+++ b/container_files/grouper.installer.properties
@@ -16,7 +16,7 @@ grouperInstaller.default.installOrUpgrade = install
 
 grouperInstaller.autorun.installAllPatches = false
 grouperInstaller.autorun.installPatchesUpToACertainPatchLevel = true
-grouperInstaller.autorun.installPatchesUpToThesePatchLevels = grouper_v2_4_0_api_patch_11,grouper_v2_4_0_ui_patch_6,grouper_v2_4_0_ws_patch_0,grouper_v2_4_0_pspng_patch_0
+grouperInstaller.autorun.installPatchesUpToThesePatchLevels = grouper_v2_4_0_api_patch_11,grouper_v2_4_0_ui_patch_8,grouper_v2_4_0_ws_patch_1,grouper_v2_4_0_pspng_patch_0
 
 #### set this to true to try to use defaults for everything.  Only things without default values will need to be set
 grouperInstaller.autorun.useDefaultsAsMuchAsAvailable = true

From ed2fbd50591b24ceed77c583d23c4142ccf7b327 Mon Sep 17 00:00:00 2001
From: Christopher Hubing <chubing@internet2.edu>
Date: Mon, 7 Jan 2019 13:31:11 -0500
Subject: [PATCH 122/186] Update grouper.installer.properties

---
 container_files/grouper.installer.properties | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/container_files/grouper.installer.properties b/container_files/grouper.installer.properties
index d79ed61d..1d78ed2f 100644
--- a/container_files/grouper.installer.properties
+++ b/container_files/grouper.installer.properties
@@ -16,7 +16,7 @@ grouperInstaller.default.installOrUpgrade = install
 
 grouperInstaller.autorun.installAllPatches = false
 grouperInstaller.autorun.installPatchesUpToACertainPatchLevel = true
-grouperInstaller.autorun.installPatchesUpToThesePatchLevels = grouper_v2_4_0_api_patch_11,grouper_v2_4_0_ui_patch_8,grouper_v2_4_0_ws_patch_1,grouper_v2_4_0_pspng_patch_0
+grouperInstaller.autorun.installPatchesUpToThesePatchLevels = grouper_v2_4_0_api_patch_13,grouper_v2_4_0_ui_patch_8,grouper_v2_4_0_ws_patch_1,grouper_v2_4_0_pspng_patch_0
 
 #### set this to true to try to use defaults for everything.  Only things without default values will need to be set
 grouperInstaller.autorun.useDefaultsAsMuchAsAvailable = true

From 661fb87da7cb32433d0829f17dea1c02d92711d7 Mon Sep 17 00:00:00 2001
From: Christopher Hubing <chubing@internet2.edu>
Date: Tue, 8 Jan 2019 16:32:08 -0500
Subject: [PATCH 123/186] Update grouper.installer.properties

---
 container_files/grouper.installer.properties | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/container_files/grouper.installer.properties b/container_files/grouper.installer.properties
index 1d78ed2f..2cbef7ea 100644
--- a/container_files/grouper.installer.properties
+++ b/container_files/grouper.installer.properties
@@ -16,7 +16,7 @@ grouperInstaller.default.installOrUpgrade = install
 
 grouperInstaller.autorun.installAllPatches = false
 grouperInstaller.autorun.installPatchesUpToACertainPatchLevel = true
-grouperInstaller.autorun.installPatchesUpToThesePatchLevels = grouper_v2_4_0_api_patch_13,grouper_v2_4_0_ui_patch_8,grouper_v2_4_0_ws_patch_1,grouper_v2_4_0_pspng_patch_0
+grouperInstaller.autorun.installPatchesUpToThesePatchLevels = grouper_v2_4_0_api_patch_14,grouper_v2_4_0_ui_patch_8,grouper_v2_4_0_ws_patch_1,grouper_v2_4_0_pspng_patch_0
 
 #### set this to true to try to use defaults for everything.  Only things without default values will need to be set
 grouperInstaller.autorun.useDefaultsAsMuchAsAvailable = true

From 8784d7534988a1ed84a5d4cc5d0df68eaa5866ea Mon Sep 17 00:00:00 2001
From: Christopher Hubing <chubing@internet2.edu>
Date: Tue, 15 Jan 2019 05:46:23 -0500
Subject: [PATCH 124/186] Update grouper.installer.properties

---
 container_files/grouper.installer.properties | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/container_files/grouper.installer.properties b/container_files/grouper.installer.properties
index 2cbef7ea..dd108d85 100644
--- a/container_files/grouper.installer.properties
+++ b/container_files/grouper.installer.properties
@@ -16,7 +16,7 @@ grouperInstaller.default.installOrUpgrade = install
 
 grouperInstaller.autorun.installAllPatches = false
 grouperInstaller.autorun.installPatchesUpToACertainPatchLevel = true
-grouperInstaller.autorun.installPatchesUpToThesePatchLevels = grouper_v2_4_0_api_patch_14,grouper_v2_4_0_ui_patch_8,grouper_v2_4_0_ws_patch_1,grouper_v2_4_0_pspng_patch_0
+grouperInstaller.autorun.installPatchesUpToThesePatchLevels = grouper_v2_4_0_api_patch_17,grouper_v2_4_0_ui_patch_8,grouper_v2_4_0_ws_patch_1,grouper_v2_4_0_pspng_patch_0
 
 #### set this to true to try to use defaults for everything.  Only things without default values will need to be set
 grouperInstaller.autorun.useDefaultsAsMuchAsAvailable = true

From 79be192561a81321d461efb440f90262e6eb0280 Mon Sep 17 00:00:00 2001
From: Christopher Hubing <chubing@internet2.edu>
Date: Wed, 16 Jan 2019 20:35:24 -0500
Subject: [PATCH 125/186] Update grouper.installer.properties

---
 container_files/grouper.installer.properties | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/container_files/grouper.installer.properties b/container_files/grouper.installer.properties
index dd108d85..b47a51eb 100644
--- a/container_files/grouper.installer.properties
+++ b/container_files/grouper.installer.properties
@@ -16,7 +16,7 @@ grouperInstaller.default.installOrUpgrade = install
 
 grouperInstaller.autorun.installAllPatches = false
 grouperInstaller.autorun.installPatchesUpToACertainPatchLevel = true
-grouperInstaller.autorun.installPatchesUpToThesePatchLevels = grouper_v2_4_0_api_patch_17,grouper_v2_4_0_ui_patch_8,grouper_v2_4_0_ws_patch_1,grouper_v2_4_0_pspng_patch_0
+grouperInstaller.autorun.installPatchesUpToThesePatchLevels = grouper_v2_4_0_api_patch_19,grouper_v2_4_0_ui_patch_8,grouper_v2_4_0_ws_patch_1,grouper_v2_4_0_pspng_patch_0
 
 #### set this to true to try to use defaults for everything.  Only things without default values will need to be set
 grouperInstaller.autorun.useDefaultsAsMuchAsAvailable = true

From 3bf230f45e822400155c6c55b38df857b2d0126f Mon Sep 17 00:00:00 2001
From: Christopher Hubing <chubing@internet2.edu>
Date: Tue, 29 Jan 2019 08:20:10 -0500
Subject: [PATCH 126/186] Update grouper.installer.properties

---
 container_files/grouper.installer.properties | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/container_files/grouper.installer.properties b/container_files/grouper.installer.properties
index b47a51eb..7f2f9b4b 100644
--- a/container_files/grouper.installer.properties
+++ b/container_files/grouper.installer.properties
@@ -16,7 +16,7 @@ grouperInstaller.default.installOrUpgrade = install
 
 grouperInstaller.autorun.installAllPatches = false
 grouperInstaller.autorun.installPatchesUpToACertainPatchLevel = true
-grouperInstaller.autorun.installPatchesUpToThesePatchLevels = grouper_v2_4_0_api_patch_19,grouper_v2_4_0_ui_patch_8,grouper_v2_4_0_ws_patch_1,grouper_v2_4_0_pspng_patch_0
+grouperInstaller.autorun.installPatchesUpToThesePatchLevels = grouper_v2_4_0_api_patch_19,grouper_v2_4_0_ui_patch_9,grouper_v2_4_0_ws_patch_1,grouper_v2_4_0_pspng_patch_2
 
 #### set this to true to try to use defaults for everything.  Only things without default values will need to be set
 grouperInstaller.autorun.useDefaultsAsMuchAsAvailable = true

From ab1f9481075b4538d1ad404ed1eeef97eb9ee21f Mon Sep 17 00:00:00 2001
From: Christopher Hubing <chubing@internet2.edu>
Date: Wed, 6 Feb 2019 12:04:48 -0500
Subject: [PATCH 127/186] Update grouper.installer.properties

---
 container_files/grouper.installer.properties | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/container_files/grouper.installer.properties b/container_files/grouper.installer.properties
index 7f2f9b4b..cafa7c87 100644
--- a/container_files/grouper.installer.properties
+++ b/container_files/grouper.installer.properties
@@ -16,7 +16,7 @@ grouperInstaller.default.installOrUpgrade = install
 
 grouperInstaller.autorun.installAllPatches = false
 grouperInstaller.autorun.installPatchesUpToACertainPatchLevel = true
-grouperInstaller.autorun.installPatchesUpToThesePatchLevels = grouper_v2_4_0_api_patch_19,grouper_v2_4_0_ui_patch_9,grouper_v2_4_0_ws_patch_1,grouper_v2_4_0_pspng_patch_2
+grouperInstaller.autorun.installPatchesUpToThesePatchLevels = grouper_v2_4_0_api_patch_23,grouper_v2_4_0_ui_patch_9,grouper_v2_4_0_ws_patch_2,grouper_v2_4_0_pspng_patch_2
 
 #### set this to true to try to use defaults for everything.  Only things without default values will need to be set
 grouperInstaller.autorun.useDefaultsAsMuchAsAvailable = true

From f32bc0610f708873c8028fdf514956db139d1fe7 Mon Sep 17 00:00:00 2001
From: Christopher Hubing <chubing@internet2.edu>
Date: Thu, 7 Feb 2019 15:46:56 -0500
Subject: [PATCH 128/186] Update grouper.installer.properties

---
 container_files/grouper.installer.properties | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/container_files/grouper.installer.properties b/container_files/grouper.installer.properties
index cafa7c87..dbe725eb 100644
--- a/container_files/grouper.installer.properties
+++ b/container_files/grouper.installer.properties
@@ -16,7 +16,7 @@ grouperInstaller.default.installOrUpgrade = install
 
 grouperInstaller.autorun.installAllPatches = false
 grouperInstaller.autorun.installPatchesUpToACertainPatchLevel = true
-grouperInstaller.autorun.installPatchesUpToThesePatchLevels = grouper_v2_4_0_api_patch_23,grouper_v2_4_0_ui_patch_9,grouper_v2_4_0_ws_patch_2,grouper_v2_4_0_pspng_patch_2
+grouperInstaller.autorun.installPatchesUpToThesePatchLevels = grouper_v2_4_0_api_patch_25,grouper_v2_4_0_ui_patch_11,grouper_v2_4_0_ws_patch_2,grouper_v2_4_0_pspng_patch_2
 
 #### set this to true to try to use defaults for everything.  Only things without default values will need to be set
 grouperInstaller.autorun.useDefaultsAsMuchAsAvailable = true

From 795bd16cfdde80909df5855d26a88ea603416a22 Mon Sep 17 00:00:00 2001
From: Christopher Hubing <chubing@internet2.edu>
Date: Fri, 8 Feb 2019 14:15:30 -0500
Subject: [PATCH 129/186] Update grouper.installer.properties

---
 container_files/grouper.installer.properties | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/container_files/grouper.installer.properties b/container_files/grouper.installer.properties
index dbe725eb..5644c5cb 100644
--- a/container_files/grouper.installer.properties
+++ b/container_files/grouper.installer.properties
@@ -16,7 +16,7 @@ grouperInstaller.default.installOrUpgrade = install
 
 grouperInstaller.autorun.installAllPatches = false
 grouperInstaller.autorun.installPatchesUpToACertainPatchLevel = true
-grouperInstaller.autorun.installPatchesUpToThesePatchLevels = grouper_v2_4_0_api_patch_25,grouper_v2_4_0_ui_patch_11,grouper_v2_4_0_ws_patch_2,grouper_v2_4_0_pspng_patch_2
+grouperInstaller.autorun.installPatchesUpToThesePatchLevels = grouper_v2_4_0_api_patch_26,grouper_v2_4_0_ui_patch_11,grouper_v2_4_0_ws_patch_2,grouper_v2_4_0_pspng_patch_2
 
 #### set this to true to try to use defaults for everything.  Only things without default values will need to be set
 grouperInstaller.autorun.useDefaultsAsMuchAsAvailable = true

From 76ac8667cc6debf5405533a58c1dfd855a37609a Mon Sep 17 00:00:00 2001
From: Christopher Hubing <chubing@internet2.edu>
Date: Fri, 8 Feb 2019 16:31:42 -0500
Subject: [PATCH 130/186] Update grouper.installer.properties

---
 container_files/grouper.installer.properties | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/container_files/grouper.installer.properties b/container_files/grouper.installer.properties
index 4b08cf86..b2acf050 100644
--- a/container_files/grouper.installer.properties
+++ b/container_files/grouper.installer.properties
@@ -16,7 +16,7 @@ grouperInstaller.default.installOrUpgrade = install
 
 grouperInstaller.autorun.installAllPatches = false
 grouperInstaller.autorun.installPatchesUpToACertainPatchLevel = true
-grouperInstaller.autorun.installPatchesUpToThesePatchLevels = grouper_v2_3_0_api_patch_109,grouper_v2_3_0_ui_patch_47,grouper_v2_3_0_ws_patch_12,grouper_v2_3_0_pspng_patch_21
+grouperInstaller.autorun.installPatchesUpToThesePatchLevels = grouper_v2_3_0_api_patch_109,grouper_v2_3_0_ui_patch_47,grouper_v2_3_0_ws_patch_13,grouper_v2_3_0_pspng_patch_24
 
 #### set this to true to try to use defaults for everything.  Only things without default values will need to be set
 grouperInstaller.autorun.useDefaultsAsMuchAsAvailable = true

From 8ebeef12fa7f5e77f49059e4915d6cf84d80e097 Mon Sep 17 00:00:00 2001
From: Christopher Hubing <chubing@internet2.edu>
Date: Mon, 11 Feb 2019 15:10:00 -0500
Subject: [PATCH 131/186] Update grouper.installer.properties

---
 container_files/grouper.installer.properties | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/container_files/grouper.installer.properties b/container_files/grouper.installer.properties
index 5644c5cb..a20f71f2 100644
--- a/container_files/grouper.installer.properties
+++ b/container_files/grouper.installer.properties
@@ -16,7 +16,7 @@ grouperInstaller.default.installOrUpgrade = install
 
 grouperInstaller.autorun.installAllPatches = false
 grouperInstaller.autorun.installPatchesUpToACertainPatchLevel = true
-grouperInstaller.autorun.installPatchesUpToThesePatchLevels = grouper_v2_4_0_api_patch_26,grouper_v2_4_0_ui_patch_11,grouper_v2_4_0_ws_patch_2,grouper_v2_4_0_pspng_patch_2
+grouperInstaller.autorun.installPatchesUpToThesePatchLevels = grouper_v2_4_0_api_patch_27,grouper_v2_4_0_ui_patch_11,grouper_v2_4_0_ws_patch_2,grouper_v2_4_0_pspng_patch_2
 
 #### set this to true to try to use defaults for everything.  Only things without default values will need to be set
 grouperInstaller.autorun.useDefaultsAsMuchAsAvailable = true

From 8e0f56764a5087587ae00e0d055efda9f77f4bfe Mon Sep 17 00:00:00 2001
From: Christopher Hubing <chubing@internet2.edu>
Date: Tue, 12 Feb 2019 10:42:27 -0500
Subject: [PATCH 132/186] Update Jenkinsfile

---
 Jenkinsfile | 7 +++----
 1 file changed, 3 insertions(+), 4 deletions(-)

diff --git a/Jenkinsfile b/Jenkinsfile
index 8cb90349..f97f1526 100644
--- a/Jenkinsfile
+++ b/Jenkinsfile
@@ -21,12 +21,11 @@ pipeline {
                         echo "You must define an imagename in common.bash"
                         currentBuild.result = 'FAILURE'
                      }
-                    sh 'mkdir -p bin'
-                    sh 'mkdir -p tmp'
+                    sh 'mkdir -p tmp && mkdir -p bin'
                     dir('tmp'){
                       git([ url: "https://github.internet2.edu/docker/util.git", credentialsId: "jenkins-github-access-token" ])
-                      sh 'ls'
-                      sh 'mv bin/* ../bin/.'
+                      sh 'rm -rf ../bin/*'
+                      sh 'mv ./bin/* ../bin/.'
                     }
                 }  
              }

From 08e687a9d383bcc4d81e86886ddbc370dcef949f Mon Sep 17 00:00:00 2001
From: Christopher Hubing <chubing@internet2.edu>
Date: Sun, 17 Feb 2019 12:00:56 -0500
Subject: [PATCH 133/186] Update grouper.installer.properties

---
 container_files/grouper.installer.properties | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/container_files/grouper.installer.properties b/container_files/grouper.installer.properties
index a20f71f2..6b0241d0 100644
--- a/container_files/grouper.installer.properties
+++ b/container_files/grouper.installer.properties
@@ -16,7 +16,7 @@ grouperInstaller.default.installOrUpgrade = install
 
 grouperInstaller.autorun.installAllPatches = false
 grouperInstaller.autorun.installPatchesUpToACertainPatchLevel = true
-grouperInstaller.autorun.installPatchesUpToThesePatchLevels = grouper_v2_4_0_api_patch_27,grouper_v2_4_0_ui_patch_11,grouper_v2_4_0_ws_patch_2,grouper_v2_4_0_pspng_patch_2
+grouperInstaller.autorun.installPatchesUpToThesePatchLevels = grouper_v2_4_0_api_patch_29,grouper_v2_4_0_ui_patch_14,grouper_v2_4_0_ws_patch_3,grouper_v2_4_0_pspng_patch_2
 
 #### set this to true to try to use defaults for everything.  Only things without default values will need to be set
 grouperInstaller.autorun.useDefaultsAsMuchAsAvailable = true

From 71bc2ee834aed674e30e44c245d668fc56c93fe0 Mon Sep 17 00:00:00 2001
From: Christopher Hubing <chubing@internet2.edu>
Date: Tue, 26 Feb 2019 16:58:26 -0500
Subject: [PATCH 134/186] Update README.md

---
 README.md | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/README.md b/README.md
index 933bbdf3..2c5c73cb 100644
--- a/README.md
+++ b/README.md
@@ -1,4 +1,5 @@
-[![Build Status](https://jenkins.testbed.tier.internet2.edu/job/docker/job/grouper/job/master/badge/icon)](https://jenkins.testbed.tier.internet2.edu/job/docker/job/grouper/job/master/)
+[![Build Status](https://jenkins.testbed.tier.internet2.edu/buildStatus/icon?job=docker/grouper/2.4.0-a29-u14-w3-p2-20190217)](https://jenkins.testbed.tier.internet2.edu/buildStatus/icon?job=docker/grouper/2.4.0-a29-u14-w3-p2-20190217)
+
 
 
 # Upgrading from 2.3 to 2.4

From 6275b358b1c93c6e44605e7067ed45f070764baf Mon Sep 17 00:00:00 2001
From: Christopher Hubing <chubing@internet2.edu>
Date: Tue, 26 Feb 2019 17:05:02 -0500
Subject: [PATCH 135/186] Update Jenkinsfile

---
 Jenkinsfile | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/Jenkinsfile b/Jenkinsfile
index d7b0dc62..f07c3f43 100644
--- a/Jenkinsfile
+++ b/Jenkinsfile
@@ -21,12 +21,12 @@ pipeline {
                         echo "You must define an imagename in common.bash"
                         currentBuild.result = 'FAILURE'
                      }
-                    sh 'mkdir -p bin'
-                    sh 'mkdir -p tmp'
+                    
+                    sh 'mkdir -p tmp && mkdir -p bin'
                     dir('tmp'){
                       git([ url: "https://github.internet2.edu/docker/util.git", credentialsId: "jenkins-github-access-token" ])
-                      sh 'ls'
-                      sh 'mv bin/* ../bin'
+                      sh 'rm -rf ../bin/*'
+                      sh 'mv ./bin/* ../bin/.'
                     }
                     // Build and test scripts expect that 'tag' is present in common.bash. This is necessary for both Jenkins and standalone testing.
                     // We don't care if there are more 'tag' assignments there. The latest one wins.

From 80ab1303d31dc0b37f6d8a9639899c7d7c2d3e95 Mon Sep 17 00:00:00 2001
From: Christopher Hubing <chubing@internet2.edu>
Date: Mon, 4 Mar 2019 10:53:01 -0500
Subject: [PATCH 136/186] Update grouper.installer.properties

---
 container_files/grouper.installer.properties | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/container_files/grouper.installer.properties b/container_files/grouper.installer.properties
index 6b0241d0..92d1ffc2 100644
--- a/container_files/grouper.installer.properties
+++ b/container_files/grouper.installer.properties
@@ -16,7 +16,7 @@ grouperInstaller.default.installOrUpgrade = install
 
 grouperInstaller.autorun.installAllPatches = false
 grouperInstaller.autorun.installPatchesUpToACertainPatchLevel = true
-grouperInstaller.autorun.installPatchesUpToThesePatchLevels = grouper_v2_4_0_api_patch_29,grouper_v2_4_0_ui_patch_14,grouper_v2_4_0_ws_patch_3,grouper_v2_4_0_pspng_patch_2
+grouperInstaller.autorun.installPatchesUpToThesePatchLevels = grouper_v2_4_0_api_patch_31,grouper_v2_4_0_ui_patch_14,grouper_v2_4_0_ws_patch_3,grouper_v2_4_0_pspng_patch_3
 
 #### set this to true to try to use defaults for everything.  Only things without default values will need to be set
 grouperInstaller.autorun.useDefaultsAsMuchAsAvailable = true

From a4cbae8551f12a55c2e83b162010e87ca97c81a2 Mon Sep 17 00:00:00 2001
From: Christopher Hubing <chubing@internet2.edu>
Date: Tue, 12 Mar 2019 12:52:21 -0400
Subject: [PATCH 137/186] Update grouper.installer.properties

---
 container_files/grouper.installer.properties | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/container_files/grouper.installer.properties b/container_files/grouper.installer.properties
index ee6acce7..dd32b019 100644
--- a/container_files/grouper.installer.properties
+++ b/container_files/grouper.installer.properties
@@ -16,7 +16,7 @@ grouperInstaller.default.installOrUpgrade = install
 
 grouperInstaller.autorun.installAllPatches = false
 grouperInstaller.autorun.installPatchesUpToACertainPatchLevel = true
-grouperInstaller.autorun.installPatchesUpToThesePatchLevels = grouper_v2_4_0_api_patch_31,grouper_v2_4_0_ui_patch_14,grouper_v2_4_0_ws_patch_3,grouper_v2_4_0_pspng_patch_3
+grouperInstaller.autorun.installPatchesUpToThesePatchLevels = grouper_v2_4_0_api_patch_32,grouper_v2_4_0_ui_patch_14,grouper_v2_4_0_ws_patch_3,grouper_v2_4_0_pspng_patch_3
 
 
 #### set this to true to try to use defaults for everything.  Only things without default values will need to be set

From 5297deb414a0480a582dce5b419cb010dfb042e4 Mon Sep 17 00:00:00 2001
From: Christopher Hubing <chubing@internet2.edu>
Date: Thu, 14 Mar 2019 12:17:36 -0400
Subject: [PATCH 138/186] Update grouper.installer.properties

---
 container_files/grouper.installer.properties | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/container_files/grouper.installer.properties b/container_files/grouper.installer.properties
index dd32b019..5f0b79de 100644
--- a/container_files/grouper.installer.properties
+++ b/container_files/grouper.installer.properties
@@ -16,7 +16,7 @@ grouperInstaller.default.installOrUpgrade = install
 
 grouperInstaller.autorun.installAllPatches = false
 grouperInstaller.autorun.installPatchesUpToACertainPatchLevel = true
-grouperInstaller.autorun.installPatchesUpToThesePatchLevels = grouper_v2_4_0_api_patch_32,grouper_v2_4_0_ui_patch_14,grouper_v2_4_0_ws_patch_3,grouper_v2_4_0_pspng_patch_3
+grouperInstaller.autorun.installPatchesUpToThesePatchLevels = grouper_v2_4_0_api_patch_32,grouper_v2_4_0_ui_patch_14,grouper_v2_4_0_ws_patch_5,grouper_v2_4_0_pspng_patch_3
 
 
 #### set this to true to try to use defaults for everything.  Only things without default values will need to be set

From d56bc60e22684bc2764d9431d3676124f5d5fbfa Mon Sep 17 00:00:00 2001
From: Christopher Hubing <chubing@internet2.edu>
Date: Sun, 17 Mar 2019 09:56:49 -0400
Subject: [PATCH 139/186] Update grouper.installer.properties

---
 container_files/grouper.installer.properties | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/container_files/grouper.installer.properties b/container_files/grouper.installer.properties
index 5f0b79de..99142801 100644
--- a/container_files/grouper.installer.properties
+++ b/container_files/grouper.installer.properties
@@ -16,7 +16,7 @@ grouperInstaller.default.installOrUpgrade = install
 
 grouperInstaller.autorun.installAllPatches = false
 grouperInstaller.autorun.installPatchesUpToACertainPatchLevel = true
-grouperInstaller.autorun.installPatchesUpToThesePatchLevels = grouper_v2_4_0_api_patch_32,grouper_v2_4_0_ui_patch_14,grouper_v2_4_0_ws_patch_5,grouper_v2_4_0_pspng_patch_3
+grouperInstaller.autorun.installPatchesUpToThesePatchLevels = grouper_v2_4_0_api_patch_32,grouper_v2_4_0_ui_patch_18,grouper_v2_4_0_ws_patch_5,grouper_v2_4_0_pspng_patch_3
 
 
 #### set this to true to try to use defaults for everything.  Only things without default values will need to be set

From 2af5dac90ab7a119641641b7a125fc4ed6241bc8 Mon Sep 17 00:00:00 2001
From: Christopher Hubing <chubing@internet2.edu>
Date: Mon, 18 Mar 2019 08:33:38 -0400
Subject: [PATCH 140/186] Update grouper.installer.properties

---
 container_files/grouper.installer.properties | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/container_files/grouper.installer.properties b/container_files/grouper.installer.properties
index 99142801..90b9b7e4 100644
--- a/container_files/grouper.installer.properties
+++ b/container_files/grouper.installer.properties
@@ -16,7 +16,7 @@ grouperInstaller.default.installOrUpgrade = install
 
 grouperInstaller.autorun.installAllPatches = false
 grouperInstaller.autorun.installPatchesUpToACertainPatchLevel = true
-grouperInstaller.autorun.installPatchesUpToThesePatchLevels = grouper_v2_4_0_api_patch_32,grouper_v2_4_0_ui_patch_18,grouper_v2_4_0_ws_patch_5,grouper_v2_4_0_pspng_patch_3
+grouperInstaller.autorun.installPatchesUpToThesePatchLevels = grouper_v2_4_0_api_patch_38,grouper_v2_4_0_ui_patch_18,grouper_v2_4_0_ws_patch_5,grouper_v2_4_0_pspng_patch_4
 
 
 #### set this to true to try to use defaults for everything.  Only things without default values will need to be set

From d96a3e16dea5036e011f16e6a9d51080a86fc1fd Mon Sep 17 00:00:00 2001
From: Christopher Hubing <chubing@internet2.edu>
Date: Mon, 15 Apr 2019 15:03:53 -0400
Subject: [PATCH 141/186] Update grouper.installer.properties

---
 container_files/grouper.installer.properties | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/container_files/grouper.installer.properties b/container_files/grouper.installer.properties
index 90b9b7e4..977942bc 100644
--- a/container_files/grouper.installer.properties
+++ b/container_files/grouper.installer.properties
@@ -16,7 +16,7 @@ grouperInstaller.default.installOrUpgrade = install
 
 grouperInstaller.autorun.installAllPatches = false
 grouperInstaller.autorun.installPatchesUpToACertainPatchLevel = true
-grouperInstaller.autorun.installPatchesUpToThesePatchLevels = grouper_v2_4_0_api_patch_38,grouper_v2_4_0_ui_patch_18,grouper_v2_4_0_ws_patch_5,grouper_v2_4_0_pspng_patch_4
+grouperInstaller.autorun.installPatchesUpToThesePatchLevels = grouper_v2_4_0_api_patch_41,grouper_v2_4_0_ui_patch_22,grouper_v2_4_0_ws_patch_5,grouper_v2_4_0_pspng_patch_4
 
 
 #### set this to true to try to use defaults for everything.  Only things without default values will need to be set

From f208d3b6e60e95dda03d43e24ec82ddcf0b47861 Mon Sep 17 00:00:00 2001
From: Christopher Hubing <chubing@internet2.edu>
Date: Fri, 26 Apr 2019 14:17:05 -0400
Subject: [PATCH 142/186] 2.4.0-a42-u23-w5-p4-20190426-rc1

---
 container_files/grouper.installer.properties | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/container_files/grouper.installer.properties b/container_files/grouper.installer.properties
index 977942bc..36a97a89 100644
--- a/container_files/grouper.installer.properties
+++ b/container_files/grouper.installer.properties
@@ -16,7 +16,8 @@ grouperInstaller.default.installOrUpgrade = install
 
 grouperInstaller.autorun.installAllPatches = false
 grouperInstaller.autorun.installPatchesUpToACertainPatchLevel = true
-grouperInstaller.autorun.installPatchesUpToThesePatchLevels = grouper_v2_4_0_api_patch_41,grouper_v2_4_0_ui_patch_22,grouper_v2_4_0_ws_patch_5,grouper_v2_4_0_pspng_patch_4
+# 2.4.0-a42-u23-w5-p4-20190426-rc1
+grouperInstaller.autorun.installPatchesUpToThesePatchLevels = grouper_v2_4_0_api_patch_42,grouper_v2_4_0_ui_patch_23,grouper_v2_4_0_ws_patch_5,grouper_v2_4_0_pspng_patch_4
 
 
 #### set this to true to try to use defaults for everything.  Only things without default values will need to be set

From cc5917b8bae262d317da2d3bae442ab520e87745 Mon Sep 17 00:00:00 2001
From: Christopher Hubing <chubing@internet2.edu>
Date: Fri, 26 Apr 2019 14:18:23 -0400
Subject: [PATCH 143/186] update shib_sp tag to 3.0.4_03122019

---
 Dockerfile | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/Dockerfile b/Dockerfile
index e5f412bf..716d44c9 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -89,7 +89,7 @@ COPY container_files/tomcat/ /opt/tomcat/
 COPY container_files/tomee/ /opt/tomee/
 
 
-FROM tier/shibboleth_sp
+FROM tier/shibboleth_sp:3.0.4_03122019
 
 LABEL author="tier-packaging@internet2.edu <tier-packaging@internet2.edu>" \
       Vendor="TIER" \

From ebe0ee41e798bbd30c8443ba3cf04facafacbc9f Mon Sep 17 00:00:00 2001
From: Christopher Hubing <chubing@internet2.edu>
Date: Mon, 29 Apr 2019 10:24:54 -0400
Subject: [PATCH 144/186] 2.4.0-a42-u23-w5-p5-20190429-rc1

---
 container_files/grouper.installer.properties | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/container_files/grouper.installer.properties b/container_files/grouper.installer.properties
index 36a97a89..2eecedb4 100644
--- a/container_files/grouper.installer.properties
+++ b/container_files/grouper.installer.properties
@@ -16,8 +16,8 @@ grouperInstaller.default.installOrUpgrade = install
 
 grouperInstaller.autorun.installAllPatches = false
 grouperInstaller.autorun.installPatchesUpToACertainPatchLevel = true
-# 2.4.0-a42-u23-w5-p4-20190426-rc1
-grouperInstaller.autorun.installPatchesUpToThesePatchLevels = grouper_v2_4_0_api_patch_42,grouper_v2_4_0_ui_patch_23,grouper_v2_4_0_ws_patch_5,grouper_v2_4_0_pspng_patch_4
+# 2.4.0-a42-u23-w5-p5-20190429-rc1
+grouperInstaller.autorun.installPatchesUpToThesePatchLevels = grouper_v2_4_0_api_patch_42,grouper_v2_4_0_ui_patch_23,grouper_v2_4_0_ws_patch_5,grouper_v2_4_0_pspng_patch_5
 
 
 #### set this to true to try to use defaults for everything.  Only things without default values will need to be set

From 564ee1f8ccad16e2806ead67e1790731e12f14b7 Mon Sep 17 00:00:00 2001
From: Christopher Hubing <chubing@internet2.edu>
Date: Wed, 1 May 2019 09:41:34 -0400
Subject: [PATCH 145/186] Update grouper.installer.properties

---
 container_files/grouper.installer.properties | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/container_files/grouper.installer.properties b/container_files/grouper.installer.properties
index 2eecedb4..0f38148b 100644
--- a/container_files/grouper.installer.properties
+++ b/container_files/grouper.installer.properties
@@ -16,7 +16,7 @@ grouperInstaller.default.installOrUpgrade = install
 
 grouperInstaller.autorun.installAllPatches = false
 grouperInstaller.autorun.installPatchesUpToACertainPatchLevel = true
-# 2.4.0-a42-u23-w5-p5-20190429-rc1
+# 2.4.0-a42-u23-w5-p6-20190501-rc1
 grouperInstaller.autorun.installPatchesUpToThesePatchLevels = grouper_v2_4_0_api_patch_42,grouper_v2_4_0_ui_patch_23,grouper_v2_4_0_ws_patch_5,grouper_v2_4_0_pspng_patch_5
 
 

From adc5284703d09039757925847570bc2a027facc8 Mon Sep 17 00:00:00 2001
From: Christopher Hubing <chubing@internet2.edu>
Date: Wed, 1 May 2019 11:32:55 -0400
Subject: [PATCH 146/186] Update grouper.installer.properties

---
 container_files/grouper.installer.properties | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/container_files/grouper.installer.properties b/container_files/grouper.installer.properties
index 0f38148b..e5d30b23 100644
--- a/container_files/grouper.installer.properties
+++ b/container_files/grouper.installer.properties
@@ -16,8 +16,8 @@ grouperInstaller.default.installOrUpgrade = install
 
 grouperInstaller.autorun.installAllPatches = false
 grouperInstaller.autorun.installPatchesUpToACertainPatchLevel = true
-# 2.4.0-a42-u23-w5-p6-20190501-rc1
-grouperInstaller.autorun.installPatchesUpToThesePatchLevels = grouper_v2_4_0_api_patch_42,grouper_v2_4_0_ui_patch_23,grouper_v2_4_0_ws_patch_5,grouper_v2_4_0_pspng_patch_5
+# 2.4.0-a43-u23-w5-p6-20190501-rc1
+grouperInstaller.autorun.installPatchesUpToThesePatchLevels = grouper_v2_4_0_api_patch_43,grouper_v2_4_0_ui_patch_23,grouper_v2_4_0_ws_patch_5,grouper_v2_4_0_pspng_patch_5
 
 
 #### set this to true to try to use defaults for everything.  Only things without default values will need to be set

From 6d4b379c3cca8091a3083b72d3f489b438b0620d Mon Sep 17 00:00:00 2001
From: Christopher Hubing <chubing@internet2.edu>
Date: Wed, 1 May 2019 15:09:10 -0400
Subject: [PATCH 147/186] Update grouper.installer.properties

---
 container_files/grouper.installer.properties | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/container_files/grouper.installer.properties b/container_files/grouper.installer.properties
index e5d30b23..ed78b0bd 100644
--- a/container_files/grouper.installer.properties
+++ b/container_files/grouper.installer.properties
@@ -17,7 +17,7 @@ grouperInstaller.default.installOrUpgrade = install
 grouperInstaller.autorun.installAllPatches = false
 grouperInstaller.autorun.installPatchesUpToACertainPatchLevel = true
 # 2.4.0-a43-u23-w5-p6-20190501-rc1
-grouperInstaller.autorun.installPatchesUpToThesePatchLevels = grouper_v2_4_0_api_patch_43,grouper_v2_4_0_ui_patch_23,grouper_v2_4_0_ws_patch_5,grouper_v2_4_0_pspng_patch_5
+grouperInstaller.autorun.installPatchesUpToThesePatchLevels = grouper_v2_4_0_api_patch_43,grouper_v2_4_0_ui_patch_23,grouper_v2_4_0_ws_patch_5,grouper_v2_4_0_pspng_patch_6
 
 
 #### set this to true to try to use defaults for everything.  Only things without default values will need to be set

From 0d5bb36795c1fc72b197b6bcb0b4bff9771db44d Mon Sep 17 00:00:00 2001
From: Christopher Hubing <chubing@internet2.edu>
Date: Wed, 1 May 2019 15:45:13 -0400
Subject: [PATCH 148/186] Update grouper.installer.properties

---
 container_files/grouper.installer.properties | 1 +
 1 file changed, 1 insertion(+)

diff --git a/container_files/grouper.installer.properties b/container_files/grouper.installer.properties
index ed78b0bd..3e30035c 100644
--- a/container_files/grouper.installer.properties
+++ b/container_files/grouper.installer.properties
@@ -14,6 +14,7 @@ grouperInstaller.default.installOrUpgrade = install
 ##
 ##############################
 
+grouperInstaller.autorun.forceInstallPatch = t
 grouperInstaller.autorun.installAllPatches = false
 grouperInstaller.autorun.installPatchesUpToACertainPatchLevel = true
 # 2.4.0-a43-u23-w5-p6-20190501-rc1

From cbc027e78e90be24d65b4f678a37d5ad5db55b37 Mon Sep 17 00:00:00 2001
From: Christopher Hubing <chubing@internet2.edu>
Date: Mon, 6 May 2019 14:39:53 -0400
Subject: [PATCH 149/186] 2.4.0-a47-u23-w5-p6-20190506-rc1

---
 container_files/grouper.installer.properties | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/container_files/grouper.installer.properties b/container_files/grouper.installer.properties
index 3e30035c..ee30d9d7 100644
--- a/container_files/grouper.installer.properties
+++ b/container_files/grouper.installer.properties
@@ -17,8 +17,8 @@ grouperInstaller.default.installOrUpgrade = install
 grouperInstaller.autorun.forceInstallPatch = t
 grouperInstaller.autorun.installAllPatches = false
 grouperInstaller.autorun.installPatchesUpToACertainPatchLevel = true
-# 2.4.0-a43-u23-w5-p6-20190501-rc1
-grouperInstaller.autorun.installPatchesUpToThesePatchLevels = grouper_v2_4_0_api_patch_43,grouper_v2_4_0_ui_patch_23,grouper_v2_4_0_ws_patch_5,grouper_v2_4_0_pspng_patch_6
+# 2.4.0-a47-u23-w5-p6-20190506-rc1
+grouperInstaller.autorun.installPatchesUpToThesePatchLevels = grouper_v2_4_0_api_patch_47,grouper_v2_4_0_ui_patch_23,grouper_v2_4_0_ws_patch_5,grouper_v2_4_0_pspng_patch_6
 
 
 #### set this to true to try to use defaults for everything.  Only things without default values will need to be set

From 08ab73f90daef019f200f526cd902eea8035347b Mon Sep 17 00:00:00 2001
From: Christopher Hubing <chubing@internet2.edu>
Date: Tue, 7 May 2019 16:44:50 -0600
Subject: [PATCH 150/186] Add HEALTCHECK NONE to fix gsh problem

---
 Dockerfile | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/Dockerfile b/Dockerfile
index 716d44c9..920c2841 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -144,6 +144,8 @@ WORKDIR /opt/grouper/grouper.apiBinary/
 
 EXPOSE 80 443
 
+HEALTHCHECK NONE
+
 ENTRYPOINT ["/usr/local/bin/entrypoint.sh"]
 
 CMD ["bin/gsh", "-loader"]

From 3a1c0740e2809e971685f52e3ed8aa7c33dfe945 Mon Sep 17 00:00:00 2001
From: Christopher Hubing <chubing@internet2.edu>
Date: Thu, 9 May 2019 13:28:11 -0400
Subject: [PATCH 151/186] 2.4.0-a47-u25-w5-p6-20190509-rc1

---
 container_files/grouper.installer.properties | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/container_files/grouper.installer.properties b/container_files/grouper.installer.properties
index ee30d9d7..3680125d 100644
--- a/container_files/grouper.installer.properties
+++ b/container_files/grouper.installer.properties
@@ -17,8 +17,8 @@ grouperInstaller.default.installOrUpgrade = install
 grouperInstaller.autorun.forceInstallPatch = t
 grouperInstaller.autorun.installAllPatches = false
 grouperInstaller.autorun.installPatchesUpToACertainPatchLevel = true
-# 2.4.0-a47-u23-w5-p6-20190506-rc1
-grouperInstaller.autorun.installPatchesUpToThesePatchLevels = grouper_v2_4_0_api_patch_47,grouper_v2_4_0_ui_patch_23,grouper_v2_4_0_ws_patch_5,grouper_v2_4_0_pspng_patch_6
+# 2.4.0-a47-u25-w5-p6-20190509-rc1
+grouperInstaller.autorun.installPatchesUpToThesePatchLevels = grouper_v2_4_0_api_patch_47,grouper_v2_4_0_ui_patch_25,grouper_v2_4_0_ws_patch_5,grouper_v2_4_0_pspng_patch_6
 
 
 #### set this to true to try to use defaults for everything.  Only things without default values will need to be set

From d2465097ac6368eb75488a6c97b0b6293bd8feb5 Mon Sep 17 00:00:00 2001
From: Christopher Hubing <chubing@internet2.edu>
Date: Wed, 15 May 2019 10:23:24 -0400
Subject: [PATCH 152/186] removing webapps/ROOT/ from container

---
 Dockerfile | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/Dockerfile b/Dockerfile
index 716d44c9..a37e2a60 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -76,7 +76,7 @@ RUN cd /opt/grouper/grouper.apiBinary/; \
 
 RUN cd /opt/tomcat/; \
     chmod +r bin/log4j-*.jar; \
-    rm -fr webapps/docs/ webapps/examples/ webapps/host-manager/ webapps/manager/ logs/* temp/* work/* conf/logging.properties
+    rm -fr webapps/docs/ webapps/examples/ webapps/host-manager/ webapps/manager/ webapps/ROOT/ logs/* temp/* work/* conf/logging.properties
 
 RUN cd /opt/tomee/; \
     chmod +r bin/log4j-*.jar; \

From c23674d7f82abac245155c0bfbcaa4e0e5affbaf Mon Sep 17 00:00:00 2001
From: Christopher Hubing <chubing@internet2.edu>
Date: Wed, 15 May 2019 10:24:09 -0400
Subject: [PATCH 153/186] Update grouper-www.conf

---
 container_files/httpd/grouper-www.conf | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/container_files/httpd/grouper-www.conf b/container_files/httpd/grouper-www.conf
index 368f7f6c..0108c5f8 100644
--- a/container_files/httpd/grouper-www.conf
+++ b/container_files/httpd/grouper-www.conf
@@ -7,6 +7,11 @@ ProxyPass /grouper ajp://localhost:8009/grouper  timeout=2400
 ProxyPass /grouper-ws ajp://localhost:8009/grouper-ws  timeout=2400
 ProxyPass /grouper-ws-scim ajp://localhost:8009/grouper-ws-scim  timeout=2400
 
+RewriteEngine on
+
+RewriteCond %{REQUEST_URI} "^/$"
+RewriteRule . %{REQUEST_SCHEME}://%{HTTP_HOST}/grouper/ [R=301,L]
+
 <Location /grouper>
   AuthType shibboleth
   ShibRequestSetting requireSession 1

From 04394718dd5d9d19f6320ad091d3ebe4b5ca37b2 Mon Sep 17 00:00:00 2001
From: Christopher Hubing <chubing@internet2.edu>
Date: Wed, 15 May 2019 10:31:12 -0400
Subject: [PATCH 154/186] Update grouper-www.conf

---
 container_files/httpd/grouper-www.conf | 1 -
 1 file changed, 1 deletion(-)

diff --git a/container_files/httpd/grouper-www.conf b/container_files/httpd/grouper-www.conf
index 0108c5f8..562e47c6 100644
--- a/container_files/httpd/grouper-www.conf
+++ b/container_files/httpd/grouper-www.conf
@@ -8,7 +8,6 @@ ProxyPass /grouper-ws ajp://localhost:8009/grouper-ws  timeout=2400
 ProxyPass /grouper-ws-scim ajp://localhost:8009/grouper-ws-scim  timeout=2400
 
 RewriteEngine on
-
 RewriteCond %{REQUEST_URI} "^/$"
 RewriteRule . %{REQUEST_SCHEME}://%{HTTP_HOST}/grouper/ [R=301,L]
 

From 3ca9108b3da4b0b56119fb257e236f63748ce41e Mon Sep 17 00:00:00 2001
From: Scott Koranda <skoranda@gmail.com>
Date: Sat, 8 Jun 2019 08:21:29 -0500
Subject: [PATCH 155/186] Fixed bad JEXL/elConfig example in README.md

The JEXL/elConfig example in the README.md documentation will not work
to read the database password from a file path pointed to by an
environment variable because the first argument to
org.apache.commons.io.FileUtils.readFileToString() must be an instance
of java.io.File and not String. This commit fixes that with an example
that is tested to work with Grouper 2.4.x.
---
 README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/README.md b/README.md
index 2c5c73cb..d4b9069e 100644
--- a/README.md
+++ b/README.md
@@ -168,7 +168,7 @@ For passing full files into the container, this container will make any secrets
 Docker Secrets can also be used to pass in strings, such as a database connection string password, into the component config. To pass in the Grouper database connection string, one might set the property and value as such:
 
 ```text
-hibernate.connection.password.elConfig = ${java.lang.System.getenv().get('GROUPER_DATABASE_PASSWORD_FILE') != null ? org.apache.commons.io.FileUtils.readFileToString(java.lang.System.getenv().get('GROUPER_DATABASE_PASSWORD_FILE'), "utf-8") : java.lang.System.getenv().get('GROUPER_DATABASE_PASSWORD') }
+hibernate.connection.password.elConfig = ${java.lang.System.getenv().get('GROUPER_DATABASE_PASSWORD_FILE') != null ? org.apache.commons.io.FileUtils.readFileToString(new("java.io.File", java.lang.System.getenv().get('GROUPER_DATABASE_PASSWORD_FILE')), "utf-8") : java.lang.System.getenv().get('GROUPER_DATABASE_PASSWORD') }
 ```
 
 Note that the default property name has been changed by appending `.elConfig`. (This causes Grouper to evaluate the string before saving the value.) The expression allows deployers to use a file containing only the database password as a Docker Secret and reference the file name via the `GROUPER_DATABASE_PASSWORD_FILE` environment property. This allows the config files to be baked into the image, if desired. Also, but not recommended, the database password could just be set in the Docker Service definition as an environment variable, `GROUPER_DATABASE_PASSWORD`. (Technically the expression can be broken up and just the desired functionality used.) Of course, using Grouper's MorphString functionality is supported and likely is the best option, but does require more effort in setting it up.

From 904f6d87389de5cba61c546681ce155fd2b0ec1c Mon Sep 17 00:00:00 2001
From: Christopher Hubing <chubing@internet2.edu>
Date: Wed, 12 Jun 2019 09:42:10 -0400
Subject: [PATCH 156/186] Update grouper.installer.properties

---
 container_files/grouper.installer.properties | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/container_files/grouper.installer.properties b/container_files/grouper.installer.properties
index 3680125d..0dd88fa2 100644
--- a/container_files/grouper.installer.properties
+++ b/container_files/grouper.installer.properties
@@ -17,7 +17,7 @@ grouperInstaller.default.installOrUpgrade = install
 grouperInstaller.autorun.forceInstallPatch = t
 grouperInstaller.autorun.installAllPatches = false
 grouperInstaller.autorun.installPatchesUpToACertainPatchLevel = true
-# 2.4.0-a47-u25-w5-p6-20190509-rc1
+# 2.4.0-a64-u38-w6-p6-20190612-rc1
 grouperInstaller.autorun.installPatchesUpToThesePatchLevels = grouper_v2_4_0_api_patch_47,grouper_v2_4_0_ui_patch_25,grouper_v2_4_0_ws_patch_5,grouper_v2_4_0_pspng_patch_6
 
 

From 4a49defa8148c4c81197e3febb879dd0fae7b972 Mon Sep 17 00:00:00 2001
From: Christopher Hubing <chubing@internet2.edu>
Date: Wed, 12 Jun 2019 09:43:02 -0400
Subject: [PATCH 157/186] Update grouper.installer.properties

---
 container_files/grouper.installer.properties | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/container_files/grouper.installer.properties b/container_files/grouper.installer.properties
index 3680125d..e74a0f5f 100644
--- a/container_files/grouper.installer.properties
+++ b/container_files/grouper.installer.properties
@@ -17,8 +17,8 @@ grouperInstaller.default.installOrUpgrade = install
 grouperInstaller.autorun.forceInstallPatch = t
 grouperInstaller.autorun.installAllPatches = false
 grouperInstaller.autorun.installPatchesUpToACertainPatchLevel = true
-# 2.4.0-a47-u25-w5-p6-20190509-rc1
-grouperInstaller.autorun.installPatchesUpToThesePatchLevels = grouper_v2_4_0_api_patch_47,grouper_v2_4_0_ui_patch_25,grouper_v2_4_0_ws_patch_5,grouper_v2_4_0_pspng_patch_6
+# 2.4.0-a64-u38-w6-p6-20190612-rc1
+grouperInstaller.autorun.installPatchesUpToThesePatchLevels = grouper_v2_4_0_api_patch_64,grouper_v2_4_0_ui_patch_38,grouper_v2_4_0_ws_patch_6,grouper_v2_4_0_pspng_patch_6
 
 
 #### set this to true to try to use defaults for everything.  Only things without default values will need to be set

From d0e8a62537dfef39ee2b420032c70c5e42e6f269 Mon Sep 17 00:00:00 2001
From: Christopher Hubing <chubing@internet2.edu>
Date: Wed, 12 Jun 2019 14:41:23 -0400
Subject: [PATCH 158/186] Update grouper.installer.properties

---
 container_files/grouper.installer.properties | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/container_files/grouper.installer.properties b/container_files/grouper.installer.properties
index 0dd88fa2..e74a0f5f 100644
--- a/container_files/grouper.installer.properties
+++ b/container_files/grouper.installer.properties
@@ -18,7 +18,7 @@ grouperInstaller.autorun.forceInstallPatch = t
 grouperInstaller.autorun.installAllPatches = false
 grouperInstaller.autorun.installPatchesUpToACertainPatchLevel = true
 # 2.4.0-a64-u38-w6-p6-20190612-rc1
-grouperInstaller.autorun.installPatchesUpToThesePatchLevels = grouper_v2_4_0_api_patch_47,grouper_v2_4_0_ui_patch_25,grouper_v2_4_0_ws_patch_5,grouper_v2_4_0_pspng_patch_6
+grouperInstaller.autorun.installPatchesUpToThesePatchLevels = grouper_v2_4_0_api_patch_64,grouper_v2_4_0_ui_patch_38,grouper_v2_4_0_ws_patch_6,grouper_v2_4_0_pspng_patch_6
 
 
 #### set this to true to try to use defaults for everything.  Only things without default values will need to be set

From 1179e13d5cfdf2a2a4aca8481a8a89c22aed1276 Mon Sep 17 00:00:00 2001
From: Christopher Hubing <chubing@internet2.edu>
Date: Tue, 25 Jun 2019 14:27:59 -0400
Subject: [PATCH 159/186] tomcat 8.5.42

---
 Dockerfile | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/Dockerfile b/Dockerfile
index 9471c34c..87435e24 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -50,7 +50,7 @@ RUN echo 'Installing Grouper'; \
 FROM centos:centos7 as cleanup
 
 ENV GROUPER_VERSION=2.4.0 \
-    TOMCAT_VERSION=8.5.12 \    
+    TOMCAT_VERSION=8.5.42 \    
     TOMEE_VERSION=7.0.0
 
 COPY --from=installing /opt/grouper/$GROUPER_VERSION/grouperInstaller.jar /opt/grouper/

From f1d4f8ef0f2877c6a6086f81ffe2b7223db10ac3 Mon Sep 17 00:00:00 2001
From: Christopher Hubing <chubing@internet2.edu>
Date: Sun, 29 Sep 2019 18:51:25 -0400
Subject: [PATCH 160/186] 2.4.0-a74-u44-w8-p11-20190929-rc1

---
 container_files/grouper.installer.properties | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/container_files/grouper.installer.properties b/container_files/grouper.installer.properties
index e74a0f5f..809bbbe5 100644
--- a/container_files/grouper.installer.properties
+++ b/container_files/grouper.installer.properties
@@ -17,8 +17,8 @@ grouperInstaller.default.installOrUpgrade = install
 grouperInstaller.autorun.forceInstallPatch = t
 grouperInstaller.autorun.installAllPatches = false
 grouperInstaller.autorun.installPatchesUpToACertainPatchLevel = true
-# 2.4.0-a64-u38-w6-p6-20190612-rc1
-grouperInstaller.autorun.installPatchesUpToThesePatchLevels = grouper_v2_4_0_api_patch_64,grouper_v2_4_0_ui_patch_38,grouper_v2_4_0_ws_patch_6,grouper_v2_4_0_pspng_patch_6
+# 2.4.0-a74-u44-w8-p11-20190929-rc1
+grouperInstaller.autorun.installPatchesUpToThesePatchLevels = grouper_v2_4_0_api_patch_74,grouper_v2_4_0_ui_patch_44,grouper_v2_4_0_ws_patch_8,grouper_v2_4_0_pspng_patch_11
 
 
 #### set this to true to try to use defaults for everything.  Only things without default values will need to be set

From 7836648e8642251273a0007204096297ed506639 Mon Sep 17 00:00:00 2001
From: Christopher Hubing <chubing@internet2.edu>
Date: Sun, 29 Sep 2019 20:00:53 -0400
Subject: [PATCH 161/186] Update Dockerfile

---
 test-compose/data/Dockerfile | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/test-compose/data/Dockerfile b/test-compose/data/Dockerfile
index cbb3ca2d..e4ffb7f8 100644
--- a/test-compose/data/Dockerfile
+++ b/test-compose/data/Dockerfile
@@ -11,7 +11,7 @@ RUN yum install -y epel-release \
     && yum clean all \
     && rm -rf /var/cache/yum
 
-RUN mysql_install_db \
+RUN mysql_install_db --force \
     && chown -R mysql:mysql /var/lib/mysql/ \
     && sed -i 's/^\(bind-address\s.*\)/# \1/' /etc/my.cnf \
     && sed -i 's/^\(log_error\s.*\)/# \1/' /etc/my.cnf \

From bcfb7e3727dc33d79ae3f274d18b23845d9a7099 Mon Sep 17 00:00:00 2001
From: Christopher Hubing <chubing@internet2.edu>
Date: Tue, 1 Oct 2019 16:49:40 -0400
Subject: [PATCH 162/186] 2.4.0-a74-u45-w8-p11-20191001-rc1

---
 container_files/grouper.installer.properties | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/container_files/grouper.installer.properties b/container_files/grouper.installer.properties
index 809bbbe5..edb46202 100644
--- a/container_files/grouper.installer.properties
+++ b/container_files/grouper.installer.properties
@@ -17,8 +17,8 @@ grouperInstaller.default.installOrUpgrade = install
 grouperInstaller.autorun.forceInstallPatch = t
 grouperInstaller.autorun.installAllPatches = false
 grouperInstaller.autorun.installPatchesUpToACertainPatchLevel = true
-# 2.4.0-a74-u44-w8-p11-20190929-rc1
-grouperInstaller.autorun.installPatchesUpToThesePatchLevels = grouper_v2_4_0_api_patch_74,grouper_v2_4_0_ui_patch_44,grouper_v2_4_0_ws_patch_8,grouper_v2_4_0_pspng_patch_11
+# 2.4.0-a74-u45-w8-p11-20191001-rc1
+grouperInstaller.autorun.installPatchesUpToThesePatchLevels = grouper_v2_4_0_api_patch_74,grouper_v2_4_0_ui_patch_45,grouper_v2_4_0_ws_patch_8,grouper_v2_4_0_pspng_patch_11
 
 
 #### set this to true to try to use defaults for everything.  Only things without default values will need to be set

From 5e9523c29d682653312009e33aed87f0eabe013d Mon Sep 17 00:00:00 2001
From: Christopher Hubing <chubing@internet2.edu>
Date: Thu, 24 Oct 2019 09:01:57 -0600
Subject: [PATCH 163/186] 2.4.0-a77-u49-w10-p11-20191024-rc1

---
 container_files/grouper.installer.properties | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/container_files/grouper.installer.properties b/container_files/grouper.installer.properties
index edb46202..ed2f2aaf 100644
--- a/container_files/grouper.installer.properties
+++ b/container_files/grouper.installer.properties
@@ -17,8 +17,8 @@ grouperInstaller.default.installOrUpgrade = install
 grouperInstaller.autorun.forceInstallPatch = t
 grouperInstaller.autorun.installAllPatches = false
 grouperInstaller.autorun.installPatchesUpToACertainPatchLevel = true
-# 2.4.0-a74-u45-w8-p11-20191001-rc1
-grouperInstaller.autorun.installPatchesUpToThesePatchLevels = grouper_v2_4_0_api_patch_74,grouper_v2_4_0_ui_patch_45,grouper_v2_4_0_ws_patch_8,grouper_v2_4_0_pspng_patch_11
+# 2.4.0-a77-u49-w10-p11-20191024-rc1
+grouperInstaller.autorun.installPatchesUpToThesePatchLevels = grouper_v2_4_0_api_patch_77,grouper_v2_4_0_ui_patch_49,grouper_v2_4_0_ws_patch_10,grouper_v2_4_0_pspng_patch_11
 
 
 #### set this to true to try to use defaults for everything.  Only things without default values will need to be set

From 5e8e64ec215db06fc235b3c42311dbb6f66fa40c Mon Sep 17 00:00:00 2001
From: Christopher Hubing <chubing@internet2.edu>
Date: Mon, 28 Oct 2019 07:56:06 -0400
Subject: [PATCH 164/186] 2.4.0-a78-u51-w10-p11-20191028-rc1

---
 container_files/grouper.installer.properties | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/container_files/grouper.installer.properties b/container_files/grouper.installer.properties
index ed2f2aaf..138d653f 100644
--- a/container_files/grouper.installer.properties
+++ b/container_files/grouper.installer.properties
@@ -17,8 +17,8 @@ grouperInstaller.default.installOrUpgrade = install
 grouperInstaller.autorun.forceInstallPatch = t
 grouperInstaller.autorun.installAllPatches = false
 grouperInstaller.autorun.installPatchesUpToACertainPatchLevel = true
-# 2.4.0-a77-u49-w10-p11-20191024-rc1
-grouperInstaller.autorun.installPatchesUpToThesePatchLevels = grouper_v2_4_0_api_patch_77,grouper_v2_4_0_ui_patch_49,grouper_v2_4_0_ws_patch_10,grouper_v2_4_0_pspng_patch_11
+# 2.4.0-a78-u51-w10-p11-20191028-rc1
+grouperInstaller.autorun.installPatchesUpToThesePatchLevels = grouper_v2_4_0_api_patch_78,grouper_v2_4_0_ui_patch_51,grouper_v2_4_0_ws_patch_10,grouper_v2_4_0_pspng_patch_11
 
 
 #### set this to true to try to use defaults for everything.  Only things without default values will need to be set

From 1190b34d451067a6d43a8f0def26669c142efc7d Mon Sep 17 00:00:00 2001
From: Christopher Hubing <chubing@internet2.edu>
Date: Wed, 30 Oct 2019 15:10:24 -0400
Subject: [PATCH 165/186] 2.4.0-a79-u51-w10-p11-20191030-rc1

---
 container_files/grouper.installer.properties | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/container_files/grouper.installer.properties b/container_files/grouper.installer.properties
index 138d653f..17955d17 100644
--- a/container_files/grouper.installer.properties
+++ b/container_files/grouper.installer.properties
@@ -17,8 +17,8 @@ grouperInstaller.default.installOrUpgrade = install
 grouperInstaller.autorun.forceInstallPatch = t
 grouperInstaller.autorun.installAllPatches = false
 grouperInstaller.autorun.installPatchesUpToACertainPatchLevel = true
-# 2.4.0-a78-u51-w10-p11-20191028-rc1
-grouperInstaller.autorun.installPatchesUpToThesePatchLevels = grouper_v2_4_0_api_patch_78,grouper_v2_4_0_ui_patch_51,grouper_v2_4_0_ws_patch_10,grouper_v2_4_0_pspng_patch_11
+# 2.4.0-a79-u51-w10-p11-20191030-rc1
+grouperInstaller.autorun.installPatchesUpToThesePatchLevels = grouper_v2_4_0_api_patch_79,grouper_v2_4_0_ui_patch_51,grouper_v2_4_0_ws_patch_10,grouper_v2_4_0_pspng_patch_11
 
 
 #### set this to true to try to use defaults for everything.  Only things without default values will need to be set

From 33db44d2c2a41f2c5462f0d24dfc14b1b183dcc9 Mon Sep 17 00:00:00 2001
From: Christopher Hubing <chubing@internet2.edu>
Date: Thu, 31 Oct 2019 14:46:27 -0400
Subject: [PATCH 166/186] 2.4.0-80-u51-w10-p11-20191031-rc1

---
 container_files/grouper.installer.properties | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/container_files/grouper.installer.properties b/container_files/grouper.installer.properties
index 17955d17..8e0300e0 100644
--- a/container_files/grouper.installer.properties
+++ b/container_files/grouper.installer.properties
@@ -17,8 +17,8 @@ grouperInstaller.default.installOrUpgrade = install
 grouperInstaller.autorun.forceInstallPatch = t
 grouperInstaller.autorun.installAllPatches = false
 grouperInstaller.autorun.installPatchesUpToACertainPatchLevel = true
-# 2.4.0-a79-u51-w10-p11-20191030-rc1
-grouperInstaller.autorun.installPatchesUpToThesePatchLevels = grouper_v2_4_0_api_patch_79,grouper_v2_4_0_ui_patch_51,grouper_v2_4_0_ws_patch_10,grouper_v2_4_0_pspng_patch_11
+# 2.4.0-80-u51-w10-p11-20191031-rc1
+grouperInstaller.autorun.installPatchesUpToThesePatchLevels = grouper_v2_4_0_api_patch_80,grouper_v2_4_0_ui_patch_51,grouper_v2_4_0_ws_patch_10,grouper_v2_4_0_pspng_patch_11
 
 
 #### set this to true to try to use defaults for everything.  Only things without default values will need to be set

From 1ba4216468753af1bce8553b87f84f097d7a6ae3 Mon Sep 17 00:00:00 2001
From: Christopher Hubing <chubing@internet2.edu>
Date: Mon, 9 Dec 2019 13:47:15 -0600
Subject: [PATCH 167/186] Update README.md

---
 README.md | 9 ++++++++-
 1 file changed, 8 insertions(+), 1 deletion(-)

diff --git a/README.md b/README.md
index d4b9069e..0d21538c 100644
--- a/README.md
+++ b/README.md
@@ -1,6 +1,10 @@
 [![Build Status](https://jenkins.testbed.tier.internet2.edu/buildStatus/icon?job=docker/grouper/2.4.0-a29-u14-w3-p2-20190217)](https://jenkins.testbed.tier.internet2.edu/buildStatus/icon?job=docker/grouper/2.4.0-a29-u14-w3-p2-20190217)
 
 
+This repository contains the source code used to create the InCommon Trusted Access Platform Grouper container. This standalone container is pushed to Dockerhub, various tags are avalailable at the following URL: https://hub.docker.com/r/tier/grouper/tags. This repo can also be cloned and the container built locally. 
+
+The test-compose directory contains an example Grouper environment that starts up the various Grouper components. This example demonstrates how one might go about customizing and deploying their Grouper containers, using the TIER Grouper image as a base image. If evaluating Grouper, this is a good place to start. 
+
 
 # Upgrading from 2.3 to 2.4
 
@@ -11,10 +15,12 @@ In particular, in subject.properties, *.param.base.value should be adjusted to o
 
 Additional upgrade information can be found at the following URL: https://spaces.at.internet2.edu/display/Grouper/v2.4+Upgrade+Instructions+from+v2.3
 
+
+
 # Supported tags
 
 -	latest
--   patch specific tags* (i.e. 2.3.0-a97-u41-w11-p16)
+-   patch specific tags with date timestamp* (i.e. 2.4.0-80-u51-w10-p11-20191118)
 
 \* Patch builds are routinely produced, but not necessarily for each patch release. The following monikers are used to construct the tag name:
  
@@ -22,6 +28,7 @@ Additional upgrade information can be found at the following URL: https://spaces
 - u = ui patch number
 - w = ws patch number
 - p = pspng patch number
+- last field = the year, month and day the image was built
 
 # Quick reference
 

From 2e59eb4aae6f9be679337ac910901f010b008f4c Mon Sep 17 00:00:00 2001
From: Christopher Hubing <chubing@internet2.edu>
Date: Mon, 9 Dec 2019 13:48:13 -0600
Subject: [PATCH 168/186] Update README.md

---
 README.md | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/README.md b/README.md
index 0d21538c..1707123c 100644
--- a/README.md
+++ b/README.md
@@ -1,7 +1,7 @@
-[![Build Status](https://jenkins.testbed.tier.internet2.edu/buildStatus/icon?job=docker/grouper/2.4.0-a29-u14-w3-p2-20190217)](https://jenkins.testbed.tier.internet2.edu/buildStatus/icon?job=docker/grouper/2.4.0-a29-u14-w3-p2-20190217)
+[![Build Status](https://jenkins.testbed.tier.internet2.edu/buildStatus/icon?job=docker/grouper/2.4.0-80-u51-w10-p11-20191118)](https://jenkins.testbed.tier.internet2.edu/buildStatus/icon?job=docker/grouper/2.4.0-80-u51-w10-p11-20191118)
 
 
-This repository contains the source code used to create the InCommon Trusted Access Platform Grouper container. This standalone container is pushed to Dockerhub, various tags are avalailable at the following URL: https://hub.docker.com/r/tier/grouper/tags. This repo can also be cloned and the container built locally. 
+This repository contains the source code used to create the InCommon Trusted Access Platform Grouper container. This standalone container is pushed to Dockerhub, various tags are available at the following URL: https://hub.docker.com/r/tier/grouper/tags. This repo can also be cloned and the container built locally. 
 
 The test-compose directory contains an example Grouper environment that starts up the various Grouper components. This example demonstrates how one might go about customizing and deploying their Grouper containers, using the TIER Grouper image as a base image. If evaluating Grouper, this is a good place to start. 
 

From f4b81f69634d61c01459c20606e2d93f5564db76 Mon Sep 17 00:00:00 2001
From: Christopher Hubing <chubing@internet2.edu>
Date: Mon, 23 Dec 2019 08:46:46 -0500
Subject: [PATCH 169/186] 2.4.0-a85-u53-w10-p12-20191223-rc1

---
 container_files/grouper.installer.properties | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/container_files/grouper.installer.properties b/container_files/grouper.installer.properties
index 8e0300e0..f0ba8c39 100644
--- a/container_files/grouper.installer.properties
+++ b/container_files/grouper.installer.properties
@@ -17,8 +17,8 @@ grouperInstaller.default.installOrUpgrade = install
 grouperInstaller.autorun.forceInstallPatch = t
 grouperInstaller.autorun.installAllPatches = false
 grouperInstaller.autorun.installPatchesUpToACertainPatchLevel = true
-# 2.4.0-80-u51-w10-p11-20191031-rc1
-grouperInstaller.autorun.installPatchesUpToThesePatchLevels = grouper_v2_4_0_api_patch_80,grouper_v2_4_0_ui_patch_51,grouper_v2_4_0_ws_patch_10,grouper_v2_4_0_pspng_patch_11
+# 2.4.0-a85-u53-w10-p12-20191223-rc1
+grouperInstaller.autorun.installPatchesUpToThesePatchLevels = grouper_v2_4_0_api_patch_85,grouper_v2_4_0_ui_patch_53,grouper_v2_4_0_ws_patch_10,grouper_v2_4_0_pspng_patch_12
 
 
 #### set this to true to try to use defaults for everything.  Only things without default values will need to be set

From 3509ca460b2f3223e3b7993050cb94d304977af1 Mon Sep 17 00:00:00 2001
From: Christopher Hubing <chubing@internet2.edu>
Date: Tue, 24 Dec 2019 07:15:31 -0500
Subject: [PATCH 170/186] 2.4.0-a86-u53-w10-p12-20191224-rc1

---
 container_files/grouper.installer.properties | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/container_files/grouper.installer.properties b/container_files/grouper.installer.properties
index f0ba8c39..6efa4ed3 100644
--- a/container_files/grouper.installer.properties
+++ b/container_files/grouper.installer.properties
@@ -17,8 +17,8 @@ grouperInstaller.default.installOrUpgrade = install
 grouperInstaller.autorun.forceInstallPatch = t
 grouperInstaller.autorun.installAllPatches = false
 grouperInstaller.autorun.installPatchesUpToACertainPatchLevel = true
-# 2.4.0-a85-u53-w10-p12-20191223-rc1
-grouperInstaller.autorun.installPatchesUpToThesePatchLevels = grouper_v2_4_0_api_patch_85,grouper_v2_4_0_ui_patch_53,grouper_v2_4_0_ws_patch_10,grouper_v2_4_0_pspng_patch_12
+# 2.4.0-a86-u53-w10-p12-20191224-rc1
+grouperInstaller.autorun.installPatchesUpToThesePatchLevels = grouper_v2_4_0_api_patch_86,grouper_v2_4_0_ui_patch_53,grouper_v2_4_0_ws_patch_10,grouper_v2_4_0_pspng_patch_12
 
 
 #### set this to true to try to use defaults for everything.  Only things without default values will need to be set

From 3058d5fcd524b84fb572d081892a334d1955457e Mon Sep 17 00:00:00 2001
From: Christopher Hubing <chubing@internet2.edu>
Date: Thu, 2 Jan 2020 19:35:03 -0500
Subject: [PATCH 171/186] 2.4.0-a87-u53-w10-p12-20200102-rc1

---
 container_files/grouper.installer.properties | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/container_files/grouper.installer.properties b/container_files/grouper.installer.properties
index 6efa4ed3..322ceff3 100644
--- a/container_files/grouper.installer.properties
+++ b/container_files/grouper.installer.properties
@@ -17,8 +17,8 @@ grouperInstaller.default.installOrUpgrade = install
 grouperInstaller.autorun.forceInstallPatch = t
 grouperInstaller.autorun.installAllPatches = false
 grouperInstaller.autorun.installPatchesUpToACertainPatchLevel = true
-# 2.4.0-a86-u53-w10-p12-20191224-rc1
-grouperInstaller.autorun.installPatchesUpToThesePatchLevels = grouper_v2_4_0_api_patch_86,grouper_v2_4_0_ui_patch_53,grouper_v2_4_0_ws_patch_10,grouper_v2_4_0_pspng_patch_12
+# 2.4.0-a87-u53-w10-p12-20200102-rc1
+grouperInstaller.autorun.installPatchesUpToThesePatchLevels = grouper_v2_4_0_api_patch_87,grouper_v2_4_0_ui_patch_53,grouper_v2_4_0_ws_patch_10,grouper_v2_4_0_pspng_patch_12
 
 
 #### set this to true to try to use defaults for everything.  Only things without default values will need to be set

From 7b7a12a3472682a03b2fcd56acae69d007a058ab Mon Sep 17 00:00:00 2001
From: Christopher Hubing <chubing@internet2.edu>
Date: Thu, 2 Jan 2020 21:37:47 -0500
Subject: [PATCH 172/186] 2.4.0-a87-u54-w10-p12-20200102-rc1

---
 container_files/grouper.installer.properties | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/container_files/grouper.installer.properties b/container_files/grouper.installer.properties
index 322ceff3..b49f46e2 100644
--- a/container_files/grouper.installer.properties
+++ b/container_files/grouper.installer.properties
@@ -17,8 +17,8 @@ grouperInstaller.default.installOrUpgrade = install
 grouperInstaller.autorun.forceInstallPatch = t
 grouperInstaller.autorun.installAllPatches = false
 grouperInstaller.autorun.installPatchesUpToACertainPatchLevel = true
-# 2.4.0-a87-u53-w10-p12-20200102-rc1
-grouperInstaller.autorun.installPatchesUpToThesePatchLevels = grouper_v2_4_0_api_patch_87,grouper_v2_4_0_ui_patch_53,grouper_v2_4_0_ws_patch_10,grouper_v2_4_0_pspng_patch_12
+# 2.4.0-a87-u54-w10-p12-20200102-rc1
+grouperInstaller.autorun.installPatchesUpToThesePatchLevels = grouper_v2_4_0_api_patch_87,grouper_v2_4_0_ui_patch_54,grouper_v2_4_0_ws_patch_10,grouper_v2_4_0_pspng_patch_12
 
 
 #### set this to true to try to use defaults for everything.  Only things without default values will need to be set

From a2a1cac94180d61bdebf85cae0a9b9014132579d Mon Sep 17 00:00:00 2001
From: Christopher Hubing <chubing@internet2.edu>
Date: Fri, 3 Jan 2020 13:30:57 -0500
Subject: [PATCH 173/186] Update README.md

---
 README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/README.md b/README.md
index 1707123c..2862d7c4 100644
--- a/README.md
+++ b/README.md
@@ -1,4 +1,4 @@
-[![Build Status](https://jenkins.testbed.tier.internet2.edu/buildStatus/icon?job=docker/grouper/2.4.0-80-u51-w10-p11-20191118)](https://jenkins.testbed.tier.internet2.edu/buildStatus/icon?job=docker/grouper/2.4.0-80-u51-w10-p11-20191118)
+[![Build Status](https://jenkins.testbed.tier.internet2.edu/buildStatus/icon?job=docker/grouper/latest)](https://jenkins.testbed.tier.internet2.edu/buildStatus/icon?job=docker/grouper/latest)
 
 
 This repository contains the source code used to create the InCommon Trusted Access Platform Grouper container. This standalone container is pushed to Dockerhub, various tags are available at the following URL: https://hub.docker.com/r/tier/grouper/tags. This repo can also be cloned and the container built locally. 

From 3e8bd5c7518deebf05c5e63a4f10a122b33e9783 Mon Sep 17 00:00:00 2001
From: Christopher Hubing <chubing@internet2.edu>
Date: Fri, 3 Jan 2020 13:58:19 -0500
Subject: [PATCH 174/186] typo in jenkins url

---
 README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/README.md b/README.md
index 2862d7c4..126d8942 100644
--- a/README.md
+++ b/README.md
@@ -1,4 +1,4 @@
-[![Build Status](https://jenkins.testbed.tier.internet2.edu/buildStatus/icon?job=docker/grouper/latest)](https://jenkins.testbed.tier.internet2.edu/buildStatus/icon?job=docker/grouper/latest)
+[![Build Status](https://jenkins.testbed.tier.internet2.edu/buildStatus/icon?job=docker/grouper/master)](https://jenkins.testbed.tier.internet2.edu/buildStatus/icon?job=docker/grouper/master)
 
 
 This repository contains the source code used to create the InCommon Trusted Access Platform Grouper container. This standalone container is pushed to Dockerhub, various tags are available at the following URL: https://hub.docker.com/r/tier/grouper/tags. This repo can also be cloned and the container built locally. 

From e6bd8854a19e7d4a7240bbed67dc84acde861619 Mon Sep 17 00:00:00 2001
From: Christopher Hubing <chubing@internet2.edu>
Date: Thu, 9 Jan 2020 14:16:31 -0500
Subject: [PATCH 175/186] 2.4.0-a88-u55-w11-p12-20200109-rc1

---
 container_files/grouper.installer.properties | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/container_files/grouper.installer.properties b/container_files/grouper.installer.properties
index b49f46e2..f081b8c4 100644
--- a/container_files/grouper.installer.properties
+++ b/container_files/grouper.installer.properties
@@ -17,8 +17,8 @@ grouperInstaller.default.installOrUpgrade = install
 grouperInstaller.autorun.forceInstallPatch = t
 grouperInstaller.autorun.installAllPatches = false
 grouperInstaller.autorun.installPatchesUpToACertainPatchLevel = true
-# 2.4.0-a87-u54-w10-p12-20200102-rc1
-grouperInstaller.autorun.installPatchesUpToThesePatchLevels = grouper_v2_4_0_api_patch_87,grouper_v2_4_0_ui_patch_54,grouper_v2_4_0_ws_patch_10,grouper_v2_4_0_pspng_patch_12
+# 2.4.0-a88-u55-w11-p12-20200109-rc1
+grouperInstaller.autorun.installPatchesUpToThesePatchLevels = grouper_v2_4_0_api_patch_88,grouper_v2_4_0_ui_patch_55,grouper_v2_4_0_ws_patch_11,grouper_v2_4_0_pspng_patch_12
 
 
 #### set this to true to try to use defaults for everything.  Only things without default values will need to be set

From ce4b1d43898ca7d2469b3e1ecc987f804cd8f115 Mon Sep 17 00:00:00 2001
From: Christopher Hubing <chubing@internet2.edu>
Date: Thu, 9 Jan 2020 14:17:02 -0500
Subject: [PATCH 176/186] Update README.md

---
 README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/README.md b/README.md
index 1707123c..84567891 100644
--- a/README.md
+++ b/README.md
@@ -1,4 +1,4 @@
-[![Build Status](https://jenkins.testbed.tier.internet2.edu/buildStatus/icon?job=docker/grouper/2.4.0-80-u51-w10-p11-20191118)](https://jenkins.testbed.tier.internet2.edu/buildStatus/icon?job=docker/grouper/2.4.0-80-u51-w10-p11-20191118)
+[![Build Status](https://jenkins.testbed.tier.internet2.edu/buildStatus/icon?job=docker/grouper/2.4.0-a88-u55-w11-p12-20200109-rc1)](https://jenkins.testbed.tier.internet2.edu/buildStatus/icon?job=docker/grouper/2.4.0-a88-u55-w11-p12-20200109-rc1)
 
 
 This repository contains the source code used to create the InCommon Trusted Access Platform Grouper container. This standalone container is pushed to Dockerhub, various tags are available at the following URL: https://hub.docker.com/r/tier/grouper/tags. This repo can also be cloned and the container built locally. 

From 82b97ac2449ca7ea4d5c261e112cc3cccd997007 Mon Sep 17 00:00:00 2001
From: Christopher Hubing <chubing@internet2.edu>
Date: Thu, 9 Jan 2020 14:46:47 -0500
Subject: [PATCH 177/186] temporary morphString.properties file for build

---
 container_files/morphString.properties | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 container_files/morphString.properties

diff --git a/container_files/morphString.properties b/container_files/morphString.properties
new file mode 100644
index 00000000..7c1cc4ca
--- /dev/null
+++ b/container_files/morphString.properties
@@ -0,0 +1 @@
+fh43IRJ4Nf5

From 22847a5a3a259b25c6814fbc159b61698de77bd5 Mon Sep 17 00:00:00 2001
From: Christopher Hubing <chubing@internet2.edu>
Date: Thu, 9 Jan 2020 14:47:38 -0500
Subject: [PATCH 178/186] install temporary morphString.properties

---
 Dockerfile | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/Dockerfile b/Dockerfile
index 87435e24..601828c8 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -39,6 +39,8 @@ RUN echo 'Downloading Grouper Installer...' \
     && wget -q -O /opt/grouper/$GROUPER_VERSION/grouperInstaller.jar http://software.internet2.edu/grouper/release/$GROUPER_VERSION/grouperInstaller.jar
 
 COPY container_files/grouper.installer.properties /opt/grouper/$GROUPER_VERSION
+COPY container_files/morphString.properties /opt/grouper/$GROUPER_VERSION
+
 
 RUN echo 'Installing Grouper'; \
     PATH=$PATH:$JAVA_HOME/bin; \

From 9788217fa8b8eee4d286878c16f90df173b731a4 Mon Sep 17 00:00:00 2001
From: Christopher Hubing <chubing@internet2.edu>
Date: Thu, 9 Jan 2020 15:00:46 -0500
Subject: [PATCH 179/186] Update Dockerfile

---
 Dockerfile | 1 +
 1 file changed, 1 insertion(+)

diff --git a/Dockerfile b/Dockerfile
index 601828c8..12116253 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -39,6 +39,7 @@ RUN echo 'Downloading Grouper Installer...' \
     && wget -q -O /opt/grouper/$GROUPER_VERSION/grouperInstaller.jar http://software.internet2.edu/grouper/release/$GROUPER_VERSION/grouperInstaller.jar
 
 COPY container_files/grouper.installer.properties /opt/grouper/$GROUPER_VERSION
+# Temporary morphString file used for building, not used in production
 COPY container_files/morphString.properties /opt/grouper/$GROUPER_VERSION
 
 

From bf865a59134eeaa807fb1063a182bdf7fe814425 Mon Sep 17 00:00:00 2001
From: Christopher Hubing <chubing@internet2.edu>
Date: Fri, 10 Jan 2020 09:20:08 -0500
Subject: [PATCH 180/186] update dummy encrypt.key

---
 container_files/morphString.properties | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/container_files/morphString.properties b/container_files/morphString.properties
index 7c1cc4ca..52479216 100644
--- a/container_files/morphString.properties
+++ b/container_files/morphString.properties
@@ -1 +1 @@
-fh43IRJ4Nf5
+encrypt.key=fh43IRJ4Nf5

From 70d9ca6bedac287392ac46f9bce30de149ccbe0f Mon Sep 17 00:00:00 2001
From: Christopher Hubing <chubing@internet2.edu>
Date: Fri, 10 Jan 2020 13:36:22 -0500
Subject: [PATCH 181/186] 2.4.0-a89-u55-w11-p12-20200110-rc1

---
 container_files/grouper.installer.properties | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/container_files/grouper.installer.properties b/container_files/grouper.installer.properties
index f081b8c4..11fcfef9 100644
--- a/container_files/grouper.installer.properties
+++ b/container_files/grouper.installer.properties
@@ -17,8 +17,8 @@ grouperInstaller.default.installOrUpgrade = install
 grouperInstaller.autorun.forceInstallPatch = t
 grouperInstaller.autorun.installAllPatches = false
 grouperInstaller.autorun.installPatchesUpToACertainPatchLevel = true
-# 2.4.0-a88-u55-w11-p12-20200109-rc1
-grouperInstaller.autorun.installPatchesUpToThesePatchLevels = grouper_v2_4_0_api_patch_88,grouper_v2_4_0_ui_patch_55,grouper_v2_4_0_ws_patch_11,grouper_v2_4_0_pspng_patch_12
+# 2.4.0-a89-u55-w11-p12-20200110-rc1
+grouperInstaller.autorun.installPatchesUpToThesePatchLevels = grouper_v2_4_0_api_patch_89,grouper_v2_4_0_ui_patch_55,grouper_v2_4_0_ws_patch_11,grouper_v2_4_0_pspng_patch_12
 
 
 #### set this to true to try to use defaults for everything.  Only things without default values will need to be set

From 332ddf1496bbb9651595609d148211bafd1e37c2 Mon Sep 17 00:00:00 2001
From: Christopher Hubing <chubing@internet2.edu>
Date: Fri, 31 Jan 2020 12:39:40 -0500
Subject: [PATCH 182/186] 2.4.0-a89-u55-w11-p12-20200131-rc1

remove extraneous grouper.properties in /opt/grouper/grouper.apiBinary/
---
 Dockerfile | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/Dockerfile b/Dockerfile
index 12116253..a397ab04 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -75,7 +75,7 @@ ADD http://central.maven.org/maven2/org/apache/logging/log4j/log4j-api/2.11.0/lo
 ADD http://central.maven.org/maven2/org/apache/logging/log4j/log4j-jul/2.11.0/log4j-jul-2.11.0.jar /opt/tomee/bin
 
 RUN cd /opt/grouper/grouper.apiBinary/; \
-    rm -fr ddlScripts/ grouper.lck grouper.log grouper.script grouper.tmp/ gshAddGrouperSystemWsGroup.gsh logs/
+    rm -fr ddlScripts/ grouper.properties grouper.lck grouper.log grouper.script grouper.tmp/ gshAddGrouperSystemWsGroup.gsh logs/
 
 RUN cd /opt/tomcat/; \
     chmod +r bin/log4j-*.jar; \

From 9c045d439169867e07fc98336e01226ed4f2da32 Mon Sep 17 00:00:00 2001
From: Christopher Hubing <chubing@internet2.edu>
Date: Fri, 31 Jan 2020 12:54:58 -0500
Subject: [PATCH 183/186] central.maven.org to repo1 for now

---
 Dockerfile | 12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)

diff --git a/Dockerfile b/Dockerfile
index a397ab04..6fdf32bd 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -66,13 +66,13 @@ COPY --from=installing /opt/grouper/$GROUPER_VERSION/apache-tomcat-$TOMCAT_VERSI
 COPY --from=installing /opt/grouper/$GROUPER_VERSION/apache-tomee-webprofile-$TOMEE_VERSION/ /opt/tomee/
 COPY --from=installing /etc/alternatives/java /etc/alternatives/java
 
-ADD http://central.maven.org/maven2/org/apache/logging/log4j/log4j-core/2.11.0/log4j-core-2.11.0.jar /opt/tomcat/bin
-ADD http://central.maven.org/maven2/org/apache/logging/log4j/log4j-api/2.11.0/log4j-api-2.11.0.jar /opt/tomcat/bin
-ADD http://central.maven.org/maven2/org/apache/logging/log4j/log4j-jul/2.11.0/log4j-jul-2.11.0.jar /opt/tomcat/bin
+ADD https://repo1.maven.org/maven2/org/apache/logging/log4j/log4j-core/2.11.0/log4j-core-2.11.0.jar /opt/tomcat/bin
+ADD https://repo1.maven.org/maven2/org/apache/logging/log4j/log4j-api/2.11.0/log4j-api-2.11.0.jar /opt/tomcat/bin
+ADD https://repo1.maven.org/maven2/org/apache/logging/log4j/log4j-jul/2.11.0/log4j-jul-2.11.0.jar /opt/tomcat/bin
 
-ADD http://central.maven.org/maven2/org/apache/logging/log4j/log4j-core/2.11.0/log4j-core-2.11.0.jar /opt/tomee/bin
-ADD http://central.maven.org/maven2/org/apache/logging/log4j/log4j-api/2.11.0/log4j-api-2.11.0.jar /opt/tomee/bin
-ADD http://central.maven.org/maven2/org/apache/logging/log4j/log4j-jul/2.11.0/log4j-jul-2.11.0.jar /opt/tomee/bin
+ADD https://repo1.maven.org/maven2/org/apache/logging/log4j/log4j-core/2.11.0/log4j-core-2.11.0.jar /opt/tomee/bin
+ADD https://repo1.maven.org/maven2/org/apache/logging/log4j/log4j-api/2.11.0/log4j-api-2.11.0.jar /opt/tomee/bin
+ADD https://repo1.maven.org/maven2/org/apache/logging/log4j/log4j-jul/2.11.0/log4j-jul-2.11.0.jar /opt/tomee/bin
 
 RUN cd /opt/grouper/grouper.apiBinary/; \
     rm -fr ddlScripts/ grouper.properties grouper.lck grouper.log grouper.script grouper.tmp/ gshAddGrouperSystemWsGroup.gsh logs/

From ac86dac0ea3fc331145befda8e6e7543b552f554 Mon Sep 17 00:00:00 2001
From: Christopher Hubing <chubing@internet2.edu>
Date: Wed, 5 Feb 2020 16:13:56 -0500
Subject: [PATCH 184/186] 2.4.0-a90-u56-w11-p12-20200205-rc1

---
 container_files/grouper.installer.properties | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/container_files/grouper.installer.properties b/container_files/grouper.installer.properties
index 11fcfef9..2a917dc1 100644
--- a/container_files/grouper.installer.properties
+++ b/container_files/grouper.installer.properties
@@ -17,8 +17,8 @@ grouperInstaller.default.installOrUpgrade = install
 grouperInstaller.autorun.forceInstallPatch = t
 grouperInstaller.autorun.installAllPatches = false
 grouperInstaller.autorun.installPatchesUpToACertainPatchLevel = true
-# 2.4.0-a89-u55-w11-p12-20200110-rc1
-grouperInstaller.autorun.installPatchesUpToThesePatchLevels = grouper_v2_4_0_api_patch_89,grouper_v2_4_0_ui_patch_55,grouper_v2_4_0_ws_patch_11,grouper_v2_4_0_pspng_patch_12
+# 2.4.0-a90-u56-w11-p12-20200205-rc1
+grouperInstaller.autorun.installPatchesUpToThesePatchLevels = grouper_v2_4_0_api_patch_90,grouper_v2_4_0_ui_patch_56,grouper_v2_4_0_ws_patch_11,grouper_v2_4_0_pspng_patch_12
 
 
 #### set this to true to try to use defaults for everything.  Only things without default values will need to be set

From 3fc57112861802f3e777acc41a6b4fc57ce02e32 Mon Sep 17 00:00:00 2001
From: Christopher Hubing <chubing@internet2.edu>
Date: Mon, 10 Feb 2020 10:21:07 -0500
Subject: [PATCH 185/186] 2.4.0-a91-u56-w11-p12-20200210-rc1

---
 container_files/grouper.installer.properties | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/container_files/grouper.installer.properties b/container_files/grouper.installer.properties
index 2a917dc1..c63c9d5f 100644
--- a/container_files/grouper.installer.properties
+++ b/container_files/grouper.installer.properties
@@ -17,8 +17,8 @@ grouperInstaller.default.installOrUpgrade = install
 grouperInstaller.autorun.forceInstallPatch = t
 grouperInstaller.autorun.installAllPatches = false
 grouperInstaller.autorun.installPatchesUpToACertainPatchLevel = true
-# 2.4.0-a90-u56-w11-p12-20200205-rc1
-grouperInstaller.autorun.installPatchesUpToThesePatchLevels = grouper_v2_4_0_api_patch_90,grouper_v2_4_0_ui_patch_56,grouper_v2_4_0_ws_patch_11,grouper_v2_4_0_pspng_patch_12
+# 2.4.0-a91-u56-w11-p12-20200210-rc1
+grouperInstaller.autorun.installPatchesUpToThesePatchLevels = grouper_v2_4_0_api_patch_91,grouper_v2_4_0_ui_patch_56,grouper_v2_4_0_ws_patch_11,grouper_v2_4_0_pspng_patch_12
 
 
 #### set this to true to try to use defaults for everything.  Only things without default values will need to be set

From 6f931f09ccf4758cacbb544211c991ce65f77f7f Mon Sep 17 00:00:00 2001
From: Christopher Hubing <chubing@internet2.edu>
Date: Fri, 14 Feb 2020 09:27:31 -0500
Subject: [PATCH 186/186] Update grouper.installer.properties

---
 container_files/grouper.installer.properties | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/container_files/grouper.installer.properties b/container_files/grouper.installer.properties
index c63c9d5f..4e018728 100644
--- a/container_files/grouper.installer.properties
+++ b/container_files/grouper.installer.properties
@@ -17,8 +17,8 @@ grouperInstaller.default.installOrUpgrade = install
 grouperInstaller.autorun.forceInstallPatch = t
 grouperInstaller.autorun.installAllPatches = false
 grouperInstaller.autorun.installPatchesUpToACertainPatchLevel = true
-# 2.4.0-a91-u56-w11-p12-20200210-rc1
-grouperInstaller.autorun.installPatchesUpToThesePatchLevels = grouper_v2_4_0_api_patch_91,grouper_v2_4_0_ui_patch_56,grouper_v2_4_0_ws_patch_11,grouper_v2_4_0_pspng_patch_12
+# 2.4.0-a93-u56-w11-p12-20200214-rc1
+grouperInstaller.autorun.installPatchesUpToThesePatchLevels = grouper_v2_4_0_api_patch_93,grouper_v2_4_0_ui_patch_56,grouper_v2_4_0_ws_patch_11,grouper_v2_4_0_pspng_patch_12
 
 
 #### set this to true to try to use defaults for everything.  Only things without default values will need to be set