Merge branch 'master' of http://wagnertech.de/git/xhome
authorMichael Wagner <michael@wagnertech.de>
Thu, 26 Nov 2020 11:02:37 +0000 (12:02 +0100)
committerMichael Wagner <michael@wagnertech.de>
Thu, 26 Nov 2020 11:02:37 +0000 (12:02 +0100)
55 files changed:
README.md [new file with mode: 0644]
debian/libperl-x86-64-linux-gnu.changelog [new file with mode: 0644]
debian/libperl-x86-64-linux-gnu.control [new file with mode: 0644]
debian/libperl-x86-64-linux-gnu.cp [new file with mode: 0755]
debian/mbuild.changelog [new file with mode: 0644]
debian/mbuild.control [new file with mode: 0644]
debian/mbuild.cp [new file with mode: 0755]
debian/sysd2sysv.changelog [new file with mode: 0644]
debian/sysd2sysv.control [new file with mode: 0644]
debian/sysd2sysv.cp [new file with mode: 0755]
debian/sysd2sysv.postinst [new file with mode: 0755]
debian/verleihnix.changelog [new file with mode: 0644]
debian/verleihnix.control [new file with mode: 0644]
debian/verleihnix.cp [new file with mode: 0755]
debian/verleihnix.postinst [new file with mode: 0755]
doc/copyright [new file with mode: 0644]
doc/mbuild.8 [new file with mode: 0644]
doc/mconfigure.1 [new file with mode: 0644]
doc/sysd2sysv.8 [new file with mode: 0644]
etc/.dummy [new file with mode: 0644]
etc/sysd2sysv.tpl [new file with mode: 0644]
sh/sysd2sysv [new file with mode: 0755]
tools/cpan2deb [new file with mode: 0755]
tools/make/c_configure.sh [new file with mode: 0755]
tools/make/configure [new file with mode: 0755]
tools/make/cpp.make [new file with mode: 0644]
tools/make/insert_build.sh [new file with mode: 0755]
tools/make/mMakefile [new file with mode: 0644]
tools/make/makefile [new file with mode: 0644]
tools/make/mconfigure [new file with mode: 0755]
tools/make/rules [new file with mode: 0755]
tools/make/treecopy [new file with mode: 0755]
tools/tex/framed.sty [new file with mode: 0644]
tools/tex/titling.sty [new file with mode: 0644]
tools/tex/wallpaper.sty [new file with mode: 0644]
verleihnix/.dummy [new file with mode: 0644]
verleihnix/Verleihnix/.dummy [new file with mode: 0644]
verleihnix/Verleihnix/VNAdministration.php [new file with mode: 0644]
verleihnix/Verleihnix/impl/.dummy [new file with mode: 0644]
verleihnix/Verleihnix/impl/GenadData.php [new file with mode: 0644]
verleihnix/Verleihnix/impl/data/.dummy [new file with mode: 0644]
verleihnix/Verleihnix/impl/data/build.properties [new file with mode: 0644]
verleihnix/Verleihnix/impl/data/runtime-conf.xml [new file with mode: 0644]
verleihnix/Verleihnix/impl/data/schema.xml [new file with mode: 0644]
verleihnix/etc/.dummy [new file with mode: 0644]
verleihnix/etc/verleihnix.conf [new file with mode: 0644]
verleihnix/gui/.dummy [new file with mode: 0644]
verleihnix/gui/ConfigurationData.php [new file with mode: 0644]
verleihnix/gui/index.php [new symlink]
verleihnix/gui/mKrimiGui.php [new file with mode: 0644]
verleihnix/gui/name_map.php [new file with mode: 0644]
verleihnix/gui/view/.dummy [new file with mode: 0644]
verleihnix/gui/view/admin.css [new symlink]
verleihnix/gui/view/gfx [new symlink]
verleihnix/gui/view/gfx.dummy [new file with mode: 0644]

diff --git a/README.md b/README.md
new file mode 100644 (file)
index 0000000..b5bd55b
--- /dev/null
+++ b/README.md
@@ -0,0 +1,5 @@
+# projects
+WagnerTech utility projects
+
+To build a debian package:
+git checkout <build-tag>
diff --git a/debian/libperl-x86-64-linux-gnu.changelog b/debian/libperl-x86-64-linux-gnu.changelog
new file mode 100644 (file)
index 0000000..2c111e6
--- /dev/null
@@ -0,0 +1,6 @@
+projects (5.22.1-9ubuntu0.6) unstable; urgency=medium
+  * libperl for cross compile
+  * hint for build: a dir libperl* containing the files is expected to be
+  * parallel to the projects dir
+ -- Michael Wagner <michael@wagnertech.de>  Sat, 6 Apr 2019 18:34:36 +0100
+
diff --git a/debian/libperl-x86-64-linux-gnu.control b/debian/libperl-x86-64-linux-gnu.control
new file mode 100644 (file)
index 0000000..8d4109f
--- /dev/null
@@ -0,0 +1,12 @@
+Source: projects
+Section: main
+Priority: optional
+Maintainer: Michael Wagner <michael@wagnertech.de>
+Build-Depends: git
+Package: libperl-x86-64-linux-gnu
+Architecture: all
+Description: libperl for cross compile
+ .
+ This package contains libperl for cross compile
+
diff --git a/debian/libperl-x86-64-linux-gnu.cp b/debian/libperl-x86-64-linux-gnu.cp
new file mode 100755 (executable)
index 0000000..94fc7a9
--- /dev/null
@@ -0,0 +1,8 @@
+#!/bin/bash
+set -e
+
+base=$1
+
+mkdir -p $base/usr/
+cp -a ../libperl*/usr/lib $base/usr/
+
diff --git a/debian/mbuild.changelog b/debian/mbuild.changelog
new file mode 100644 (file)
index 0000000..4ac574d
--- /dev/null
@@ -0,0 +1,34 @@
+projects (0.6-%BUILD%) unstable; urgency=medium
+  * calls PAKET.prepare (if present) in config step
+  * RSYNC_OPTS in rules.pre
+  * cpp build support
+  * correction of bug 58 (build in new sandbox)
+ -- Michael Wagner <michael@wagnertech.de>  Thu, 11 Apr 2019 22:54:48 +0100
+
+projects (0.5-%BUILD%) unstable; urgency=medium
+  * mconfigure -o for Debian 7 downward compatibility
+  * works with multiple git tags on the same commit
+ -- Michael Wagner <michael@wagnertech.de>  Thu, 11 Apr 2019 22:54:48 +0100
+
+projects (0.4-%BUILD%) unstable; urgency=medium
+  * architecture specific build
+ -- Michael Wagner <michael@wagnertech.de>  Thu, 11 Apr 2019 22:54:48 +0100
+
+projects (0.3) unstable; urgency=medium
+  * new number due to version numbering problems
+  * check for unversioned files
+  * git works with "-" in package name
+ -- Michael Wagner <michael@wagnertech.de>  Wed, 09 Jan 2019 22:54:48 +0100
+
+projects (0.2) unstable; urgency=medium
+  * Build in svn-Umgebung
+  * including build script
+  * new options
+  * including pre/post installation scripts
+  * packing for tgz and versioning
+ -- Michael Wagner <michael@wagnertech.de>  Fri, 10 Aug 2018 22:54:48 +0100
+
+projects (0.1) unstable; urgency=medium
+  * Build in neuer git-Umgebung
+ -- Michael Wagner <michael@wagnertech.de>  Mon, 12 Feb 2018 09:45:25 +0100
+
diff --git a/debian/mbuild.control b/debian/mbuild.control
new file mode 100644 (file)
index 0000000..5650041
--- /dev/null
@@ -0,0 +1,14 @@
+Source: projects
+Section: main
+Priority: optional
+Maintainer: Michael Wagner <michael@wagnertech.de>
+Build-Depends: git
+Package: mbuild
+Architecture: all
+Depends: dpkg-dev,mutil(>=0.1-200)
+Description: WagnerTech build environment
+ Simple build environment for Debian packages
+ .
+ This package contains scripts and makefiles for
+ script and C/C++ packages.
diff --git a/debian/mbuild.cp b/debian/mbuild.cp
new file mode 100755 (executable)
index 0000000..47558c7
--- /dev/null
@@ -0,0 +1,25 @@
+#!/bin/bash
+set -e
+
+base=$1
+
+mkdir -p $base/usr/bin/
+cp tools/make/mconfigure $base/usr/bin/
+cp tools/make/treecopy $base/usr/bin/
+
+mkdir -p $base/usr/share/mbuild/
+cp tools/make/rules $base/usr/share/mbuild/
+cp tools/make/insert_build.sh $base/usr/share/mbuild/
+cp tools/make/mMakefile $base/usr/share/mbuild/makefile
+cp tools/make/c_configure.sh $base/usr/share/mbuild/
+cp tools/make/cpp.make $base/usr/share/mbuild/
+
+mkdir -p $base/usr/share/man/man8
+gzip -c doc/mbuild.8 >$base/usr/share/man/man8/mbuild.8.gz
+mkdir -p $base/usr/share/man/man1
+gzip -c doc/mconfigure.1 >$base/usr/share/man/man1/mconfigure.1.gz
+
+mkdir -p $base/usr/share/doc/mbuild
+cp doc/copyright $base/usr/share/doc/mbuild/
+cp debian/mbuild.changelog $base/usr/share/doc/mbuild/changelog
+
diff --git a/debian/sysd2sysv.changelog b/debian/sysd2sysv.changelog
new file mode 100644 (file)
index 0000000..7c5564b
--- /dev/null
@@ -0,0 +1,8 @@
+projects (0.2-%BUILD%) unstable; urgency=medium
+  * with template for init-script
+ -- Michael Wagner <info@wagnertech.de>  Sun, 11 Feb 2018 20:03:04 +0100
+
+projects (0.1) unstable; urgency=medium
+  * initial version
+ -- Michael Wagner <info@wagnertech.de>  Sun, 11 Feb 2018 20:03:04 +0100
+
diff --git a/debian/sysd2sysv.control b/debian/sysd2sysv.control
new file mode 100644 (file)
index 0000000..c50d469
--- /dev/null
@@ -0,0 +1,12 @@
+Source: projects
+Section: main
+Priority: optional
+Maintainer: Michael Wagner <michael@wagnertech.de>
+Build-Depends: git
+Package: sysd2sysv
+Architecture: all
+Description: System V init compatibility wrapper
+ .
+ System V init compatibility wrapper
+
diff --git a/debian/sysd2sysv.cp b/debian/sysd2sysv.cp
new file mode 100755 (executable)
index 0000000..4632c02
--- /dev/null
@@ -0,0 +1,13 @@
+#!/bin/bash
+set -e
+
+mkdir -p $1/usr/bin/
+cp sh/sysd2sysv $1/usr/bin/
+
+mkdir -p $1/var/sysd2sysv
+cp etc/sysd2sysv.tpl $1/var/sysd2sysv/
+
+# copy man page
+mkdir -p $1/usr/share/man/man8
+gzip -c doc/sysd2sysv.8 >$1/usr/share/man/man8/sysd2sysv.8.gz
+
diff --git a/debian/sysd2sysv.postinst b/debian/sysd2sysv.postinst
new file mode 100755 (executable)
index 0000000..e47abd8
--- /dev/null
@@ -0,0 +1,20 @@
+#!/bin/bash
+set -e
+
+# delete init files created from template
+pushd /etc/init.d >/dev/null
+for file in $(ls)
+do
+       if grep "# sysd2sysv-template #" $file >/dev/null
+       then
+               echo "renew $file from template"
+               sed "s/%PROG%/$file/" /var/sysd2sysv/sysd2sysv.tpl > $file
+       fi
+done
+
+# for downward compatibility
+if [ -f mlistd ]
+then
+       sed "s/%PROG%/mlistd/" /var/sysd2sysv/sysd2sysv.tpl > mlistd
+fi
+
diff --git a/debian/verleihnix.changelog b/debian/verleihnix.changelog
new file mode 100644 (file)
index 0000000..c24ef63
--- /dev/null
@@ -0,0 +1,4 @@
+projects (0.1-%BUILD%) unstable; urgency=medium
+  * initial version
+ -- Michael Wagner <info@wagnertech.de>  Sat, 06 Jun 2020 20:03:04 +0100
+
diff --git a/debian/verleihnix.control b/debian/verleihnix.control
new file mode 100644 (file)
index 0000000..0508f01
--- /dev/null
@@ -0,0 +1,12 @@
+Source: projects
+Section: main
+Priority: optional
+Maintainer: Michael Wagner <michael@wagnertech.de>
+Build-Depends: git, mbuild
+Package: verleihnix
+Architecture: all
+Description: Verleih Management
+ .
+ Verleih Management
+
diff --git a/debian/verleihnix.cp b/debian/verleihnix.cp
new file mode 100755 (executable)
index 0000000..5ca08da
--- /dev/null
@@ -0,0 +1,9 @@
+#!/bin/bash
+set -e
+
+mkdir -p $1/usr/share/php/verleihnix
+cp -a verleihnix/* $1/usr/share/php/verleihnix
+
+mkdir -p $1/etc/apache2/sites-available/
+cp verleihnix/etc/verleihnix.conf $1/etc/apache2/sites-available/
+
diff --git a/debian/verleihnix.postinst b/debian/verleihnix.postinst
new file mode 100755 (executable)
index 0000000..9f30658
--- /dev/null
@@ -0,0 +1,47 @@
+#!/bin/bash
+set -e
+
+# check MariaDB or MySQL
+maria=$(mysql -V |grep MariaDB) || true
+
+# check, whether mkrimi user exists
+if ! mysql -umkrimi -pmkrimi mkrimi -e";"
+then
+       echo "Installation of mkrimi user ..."
+       # unix_socket authentification for MariaDB 10
+       if [ -n "$maria" ]
+       then
+               mysql <<END
+create user mkrimi@localhost identified by 'mkrimi';
+create database mkrimi;
+grant all on mkrimi.* to mkrimi@localhost;
+END
+       else
+               echo "Password of mysql root:"
+               read pw
+               mysql -uroot -p$pw <<END1
+create user mkrimi@localhost identified by 'mkrimi';
+create database mkrimi;
+grant all on mkrimi.* to mkrimi@localhost;
+END1
+       fi
+fi
+
+# check schema
+if ! mysql -umkrimi -pmkrimi mkrimi -e"select * from medium;" >/dev/null 2>&1
+then
+       echo "Installation of mkrimi schema ..."
+       mysql -umkrimi -pmkrimi mkrimi </usr/share/php/verleihnix/Verleihnix/impl/data/build/sql/schema.sql
+fi
+
+# Apache configuration
+sctl=$(which systemctl) || sctl=$(which sysd2sysv) || (echo "install sysd2sysv"; exit 1)
+
+# activate verleihnix configuration
+if ! test -e /etc/apache2/sites-enabled/verleihnix.conf
+then
+       ln -s /etc/apache2/sites-available/verleihnix.conf /etc/apache2/sites-enabled
+       echo "verleihnix-apache2 configration enabled"
+fi
+$sctl reload apache2
+
diff --git a/doc/copyright b/doc/copyright
new file mode 100644 (file)
index 0000000..49772bf
--- /dev/null
@@ -0,0 +1,3816 @@
+
+
+
+
+
+
+<!DOCTYPE html>
+<html lang="en">
+  <head>
+    <meta charset="utf-8">
+  <link rel="dns-prefetch" href="https://github.githubassets.com">
+  <link rel="dns-prefetch" href="https://avatars0.githubusercontent.com">
+  <link rel="dns-prefetch" href="https://avatars1.githubusercontent.com">
+  <link rel="dns-prefetch" href="https://avatars2.githubusercontent.com">
+  <link rel="dns-prefetch" href="https://avatars3.githubusercontent.com">
+  <link rel="dns-prefetch" href="https://github-cloud.s3.amazonaws.com">
+  <link rel="dns-prefetch" href="https://user-images.githubusercontent.com/">
+
+
+
+  <link crossorigin="anonymous" media="all" integrity="sha512-/YEVWs7BzxfKyUd6zVxjEQcXRWsLbcEjv045Rq8DSoipySmQblhVKxlXLva2GtNd5DhwCxHwW1RM0N9I7S2Vew==" rel="stylesheet" href="https://github.githubassets.com/assets/frameworks-481a47a96965f6706fb41bae0d14b09a.css" />
+  <link crossorigin="anonymous" media="all" integrity="sha512-xod5+iick6st6a0tvmfiqwCFLFTRzOkGLX0SAqY7SQFl0Q3sWxKUB2rm1Kw4Vz/57FMg7chtfVYeUB/Yr/xmFQ==" rel="stylesheet" href="https://github.githubassets.com/assets/site-d3c48f1b58ea95d9efb184fd4592b411.css" />
+    <link crossorigin="anonymous" media="all" integrity="sha512-xlKdcTpXrrd+rLG1h8yYl5yt/S94zWLil75KS5529Mf0/RdApUbGTKcFbY0OZMotEz3l11k0GqfDAhasayWehw==" rel="stylesheet" href="https://github.githubassets.com/assets/github-eabfbaded2e91939e805d1a3af34018a.css" />
+    
+    
+    
+    
+
+
+  <meta name="viewport" content="width=device-width">
+  
+  <title>mmail/LICENSE at master · wagner-tech/mmail · GitHub</title>
+    <meta name="description" content="WagnerTech Mail Utilities. Contribute to wagner-tech/mmail development by creating an account on GitHub.">
+    <link rel="search" type="application/opensearchdescription+xml" href="/opensearch.xml" title="GitHub">
+  <link rel="fluid-icon" href="https://github.com/fluidicon.png" title="GitHub">
+  <meta property="fb:app_id" content="1401488693436528">
+
+    <meta name="twitter:image:src" content="https://avatars2.githubusercontent.com/u/15978181?s=400&amp;v=4" /><meta name="twitter:site" content="@github" /><meta name="twitter:card" content="summary" /><meta name="twitter:title" content="wagner-tech/mmail" /><meta name="twitter:description" content="WagnerTech Mail Utilities. Contribute to wagner-tech/mmail development by creating an account on GitHub." />
+    <meta property="og:image" content="https://avatars2.githubusercontent.com/u/15978181?s=400&amp;v=4" /><meta property="og:site_name" content="GitHub" /><meta property="og:type" content="object" /><meta property="og:title" content="wagner-tech/mmail" /><meta property="og:url" content="https://github.com/wagner-tech/mmail" /><meta property="og:description" content="WagnerTech Mail Utilities. Contribute to wagner-tech/mmail development by creating an account on GitHub." />
+
+  <link rel="assets" href="https://github.githubassets.com/">
+  
+  
+
+    <meta name="request-id" content="86E4:3BBD3:25EF2C9:3832E1E:5DDEE960" data-pjax-transient>
+
+
+  
+
+  <meta name="selected-link" value="repo_source" data-pjax-transient>
+
+      <meta name="google-site-verification" content="KT5gs8h0wvaagLKAVWq8bbeNwnZZK1r1XQysX3xurLU">
+    <meta name="google-site-verification" content="ZzhVyEFwb7w3e0-uOTltm8Jsck2F5StVihD0exw2fsA">
+    <meta name="google-site-verification" content="GXs5KoUUkNCoaAZn7wPN-t01Pywp9M3sEjnt_3_ZWPc">
+
+    <meta name="octolytics-host" content="collector.githubapp.com" /><meta name="octolytics-app-id" content="github" /><meta name="octolytics-event-url" content="https://collector.githubapp.com/github-external/browser_event" /><meta name="octolytics-dimension-request_id" content="86E4:3BBD3:25EF2C9:3832E1E:5DDEE960" /><meta name="octolytics-dimension-region_edge" content="ams" /><meta name="octolytics-dimension-region_render" content="iad" /><meta name="octolytics-dimension-ga_id" content="" class="js-octo-ga-id" /><meta name="octolytics-dimension-visitor_id" content="6381707850172786991" />
+
+<meta name="analytics-location" content="/&lt;user-name&gt;/&lt;repo-name&gt;/blob/show" data-pjax-transient="true" />
+
+
+
+    <meta name="google-analytics" content="UA-3769691-2">
+
+
+<meta class="js-ga-set" name="dimension1" content="Logged Out">
+
+
+
+  
+
+      <meta name="hostname" content="github.com">
+    <meta name="user-login" content="">
+
+      <meta name="expected-hostname" content="github.com">
+
+      <meta name="js-proxy-site-detection-payload" content="OWIzM2ZiMDVhM2NiZWZlNGQ3ZDkyNDgyNmZkZGVhNTA1MjZiYWRmOTkxM2E4YzA3NDI0Y2EwNzIzYWY5MmM4Nnx7InJlbW90ZV9hZGRyZXNzIjoiMjE3LjgwLjEzNS4yNSIsInJlcXVlc3RfaWQiOiI4NkU0OjNCQkQzOjI1RUYyQzk6MzgzMkUxRTo1RERFRTk2MCIsInRpbWVzdGFtcCI6MTU3NDg4OTg1MiwiaG9zdCI6ImdpdGh1Yi5jb20ifQ==">
+
+    <meta name="enabled-features" content="MARKETPLACE_FEATURED_BLOG_POSTS,MARKETPLACE_INVOICED_BILLING,MARKETPLACE_SOCIAL_PROOF_CUSTOMERS,MARKETPLACE_TRENDING_SOCIAL_PROOF,MARKETPLACE_RECOMMENDATIONS,MARKETPLACE_PENDING_INSTALLATIONS">
+
+    <meta name="html-safe-nonce" content="3bea4f0f9e52a11d0e3aae89b53488e71cd205cd">
+
+  <meta http-equiv="x-pjax-version" content="5889f893dcaa7c2acb03cae96934b7a4">
+  
+
+      <link href="https://github.com/wagner-tech/mmail/commits/master.atom" rel="alternate" title="Recent Commits to mmail:master" type="application/atom+xml">
+
+  <meta name="go-import" content="github.com/wagner-tech/mmail git https://github.com/wagner-tech/mmail.git">
+
+  <meta name="octolytics-dimension-user_id" content="15978181" /><meta name="octolytics-dimension-user_login" content="wagner-tech" /><meta name="octolytics-dimension-repository_id" content="102461951" /><meta name="octolytics-dimension-repository_nwo" content="wagner-tech/mmail" /><meta name="octolytics-dimension-repository_public" content="true" /><meta name="octolytics-dimension-repository_is_fork" content="false" /><meta name="octolytics-dimension-repository_network_root_id" content="102461951" /><meta name="octolytics-dimension-repository_network_root_nwo" content="wagner-tech/mmail" /><meta name="octolytics-dimension-repository_explore_github_marketplace_ci_cta_shown" content="false" />
+
+
+    <link rel="canonical" href="https://github.com/wagner-tech/mmail/blob/master/LICENSE" data-pjax-transient>
+
+
+  <meta name="browser-stats-url" content="https://api.github.com/_private/browser/stats">
+
+  <meta name="browser-errors-url" content="https://api.github.com/_private/browser/errors">
+
+  <link rel="mask-icon" href="https://github.githubassets.com/pinned-octocat.svg" color="#000000">
+  <link rel="icon" type="image/x-icon" class="js-site-favicon" href="https://github.githubassets.com/favicon.ico">
+
+<meta name="theme-color" content="#1e2327">
+
+
+
+
+
+  <link rel="manifest" href="/manifest.json" crossOrigin="use-credentials">
+
+  </head>
+
+  <body class="logged-out env-production page-responsive page-blob">
+    
+
+  <div class="position-relative js-header-wrapper ">
+    <a href="#start-of-content" tabindex="1" class="px-2 py-4 bg-blue text-white show-on-focus js-skip-to-content">Skip to content</a>
+    <span class="Progress progress-pjax-loader position-fixed width-full js-pjax-loader-bar">
+      <span class="progress-pjax-loader-bar top-0 left-0" style="width: 0%;"></span>
+    </span>
+
+    
+    
+    
+
+
+        <header class="Header-old header-logged-out js-details-container Details position-relative f4 py-2" role="banner">
+  <div class="container-lg d-lg-flex flex-items-center p-responsive">
+    <div class="d-flex flex-justify-between flex-items-center">
+        <a class="mr-4" href="https://github.com/" aria-label="Homepage" data-ga-click="(Logged out) Header, go to homepage, icon:logo-wordmark">
+          <svg height="32" class="octicon octicon-mark-github text-white" viewBox="0 0 16 16" version="1.1" width="32" aria-hidden="true"><path fill-rule="evenodd" d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.013 8.013 0 0016 8c0-4.42-3.58-8-8-8z"/></svg>
+        </a>
+
+          <div class="d-lg-none css-truncate css-truncate-target width-fit p-2">
+            
+              <svg class="octicon octicon-repo" viewBox="0 0 12 16" version="1.1" width="12" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M4 9H3V8h1v1zm0-3H3v1h1V6zm0-2H3v1h1V4zm0-2H3v1h1V2zm8-1v12c0 .55-.45 1-1 1H6v2l-1.5-1.5L3 16v-2H1c-.55 0-1-.45-1-1V1c0-.55.45-1 1-1h10c.55 0 1 .45 1 1zm-1 10H1v2h2v-1h3v1h5v-2zm0-10H2v9h9V1z"/></svg>
+    <a class="Header-link" href="/wagner-tech">wagner-tech</a>
+    /
+    <a class="Header-link" href="/wagner-tech/mmail">mmail</a>
+
+
+          </div>
+
+        <div class="d-flex flex-items-center">
+            <a href="/join?source=header-repo"
+              class="d-inline-block d-lg-none f5 text-white no-underline border border-gray-dark rounded-2 px-2 py-1 mr-3 mr-sm-5"
+              data-hydro-click="{&quot;event_type&quot;:&quot;authentication.click&quot;,&quot;payload&quot;:{&quot;location_in_page&quot;:&quot;site header&quot;,&quot;repository_id&quot;:null,&quot;auth_type&quot;:&quot;SIGN_UP&quot;,&quot;client_id&quot;:&quot;1485857146.1574889775&quot;,&quot;originating_request_id&quot;:&quot;86E4:3BBD3:25EF2C9:3832E1E:5DDEE960&quot;,&quot;originating_url&quot;:&quot;https://github.com/wagner-tech/mmail/blob/master/LICENSE&quot;,&quot;referrer&quot;:&quot;https://github.com/wagner-tech/mmail&quot;,&quot;user_id&quot;:null}}" data-hydro-click-hmac="bfa89353144b53a89c25c3c962b7dcfec8272c459da6b712ef154635c02bc27c"
+              data-ga-click="(Logged out) Header, clicked Sign up, text:sign-up">
+              Sign&nbsp;up
+            </a>
+
+          <button class="btn-link d-lg-none mt-1 js-details-target" type="button" aria-label="Toggle navigation" aria-expanded="false">
+            <svg height="24" class="octicon octicon-three-bars text-white" viewBox="0 0 12 16" version="1.1" width="18" aria-hidden="true"><path fill-rule="evenodd" d="M11.41 9H.59C0 9 0 8.59 0 8c0-.59 0-1 .59-1H11.4c.59 0 .59.41.59 1 0 .59 0 1-.59 1h.01zm0-4H.59C0 5 0 4.59 0 4c0-.59 0-1 .59-1H11.4c.59 0 .59.41.59 1 0 .59 0 1-.59 1h.01zM.59 11H11.4c.59 0 .59.41.59 1 0 .59 0 1-.59 1H.59C0 13 0 12.59 0 12c0-.59 0-1 .59-1z"/></svg>
+          </button>
+        </div>
+    </div>
+
+    <div class="HeaderMenu HeaderMenu--logged-out position-fixed top-0 right-0 bottom-0 height-fit position-lg-relative d-lg-flex flex-justify-between flex-items-center flex-auto">
+      <div class="d-flex d-lg-none flex-justify-end border-bottom bg-gray-light p-3">
+        <button class="btn-link js-details-target" type="button" aria-label="Toggle navigation" aria-expanded="false">
+          <svg height="24" class="octicon octicon-x text-gray" viewBox="0 0 12 16" version="1.1" width="18" aria-hidden="true"><path fill-rule="evenodd" d="M7.48 8l3.75 3.75-1.48 1.48L6 9.48l-3.75 3.75-1.48-1.48L4.52 8 .77 4.25l1.48-1.48L6 6.52l3.75-3.75 1.48 1.48L7.48 8z"/></svg>
+        </button>
+      </div>
+
+        <nav class="mt-0 px-3 px-lg-0 mb-5 mb-lg-0" aria-label="Global">
+          <ul class="d-lg-flex list-style-none">
+              <li class="d-block d-lg-flex flex-lg-nowrap flex-lg-items-center border-bottom border-lg-bottom-0 mr-0 mr-lg-3 edge-item-fix position-relative flex-wrap flex-justify-between d-flex flex-items-center ">
+                <details class="HeaderMenu-details details-overlay details-reset width-full">
+                  <summary class="HeaderMenu-summary HeaderMenu-link px-0 py-3 border-0 no-wrap d-block d-lg-inline-block">
+                    Why GitHub?
+                    <svg x="0px" y="0px" viewBox="0 0 14 8" xml:space="preserve" fill="none" class="icon-chevon-down-mktg position-absolute position-lg-relative">
+                      <path d="M1,1l6.2,6L13,1"></path>
+                    </svg>
+                  </summary>
+                  <div class="dropdown-menu flex-auto rounded-1 bg-white px-0 mt-0 pb-4 p-lg-4 position-relative position-lg-absolute left-0 left-lg-n4">
+                    <a href="/features" class="py-2 lh-condensed-ultra d-block link-gray-dark no-underline h5 Bump-link--hover" data-ga-click="(Logged out) Header, go to Features">Features <span class="Bump-link-symbol float-right text-normal text-gray-light">&rarr;</span></a>
+                    <ul class="list-style-none f5 pb-3">
+                      <li class="edge-item-fix"><a href="/features/code-review/" class="py-2 lh-condensed-ultra d-block link-gray no-underline f5" data-ga-click="(Logged out) Header, go to Code review">Code review</a></li>
+                      <li class="edge-item-fix"><a href="/features/project-management/" class="py-2 lh-condensed-ultra d-block link-gray no-underline f5" data-ga-click="(Logged out) Header, go to Project management">Project management</a></li>
+                      <li class="edge-item-fix"><a href="/features/integrations" class="py-2 lh-condensed-ultra d-block link-gray no-underline f5" data-ga-click="(Logged out) Header, go to Integrations">Integrations</a></li>
+                      <li class="edge-item-fix"><a href="/features/actions" class="py-2 lh-condensed-ultra d-block link-gray no-underline f5" data-ga-click="(Logged out) Header, go to Actions">Actions</a></li>
+                          <li class="edge-item-fix"><a href="/features/packages" class="py-2 lh-condensed-ultra d-block link-gray no-underline f5" data-ga-click="(Logged out) Header, go to GitHub Packages">Packages</a></li>
+                      <li class="edge-item-fix"><a href="/features/security" class="py-2 lh-condensed-ultra d-block link-gray no-underline f5" data-ga-click="(Logged out) Header, go to Security">Security</a></li>
+                      <li class="edge-item-fix"><a href="/features#team-management" class="py-2 lh-condensed-ultra d-block link-gray no-underline f5" data-ga-click="(Logged out) Header, go to Team management">Team management</a></li>
+                      <li class="edge-item-fix"><a href="/features#social-coding" class="py-2 lh-condensed-ultra d-block link-gray no-underline f5" data-ga-click="(Logged out) Header, go to Social coding">Social coding</a></li>
+                      <li class="edge-item-fix"><a href="/features#documentation" class="py-2 lh-condensed-ultra d-block link-gray no-underline f5" data-ga-click="(Logged out) Header, go to Documentation">Documentation</a></li>
+                      <li class="edge-item-fix"><a href="/features#code-hosting" class="py-2 lh-condensed-ultra d-block link-gray no-underline f5" data-ga-click="(Logged out) Header, go to Code hosting">Code hosting</a></li>
+                    </ul>
+
+                    <ul class="list-style-none mb-0 border-lg-top pt-lg-3">
+                      <li class="edge-item-fix"><a href="/customer-stories" class="py-2 lh-condensed-ultra d-block no-underline link-gray-dark no-underline h5 Bump-link--hover" data-ga-click="(Logged out) Header, go to Customer stories">Customer stories <span class="Bump-link-symbol float-right text-normal text-gray-light">&rarr;</span></a></li>
+                      <li class="edge-item-fix"><a href="/security" class="py-2 lh-condensed-ultra d-block no-underline link-gray-dark no-underline h5 Bump-link--hover" data-ga-click="(Logged out) Header, go to Security">Security <span class="Bump-link-symbol float-right text-normal text-gray-light">&rarr;</span></a></li>
+                    </ul>
+                  </div>
+                </details>
+              </li>
+              <li class="border-bottom border-lg-bottom-0 mr-0 mr-lg-3">
+                <a href="/enterprise" class="HeaderMenu-link no-underline py-3 d-block d-lg-inline-block" data-ga-click="(Logged out) Header, go to Enterprise">Enterprise</a>
+              </li>
+
+              <li class="d-block d-lg-flex flex-lg-nowrap flex-lg-items-center border-bottom border-lg-bottom-0 mr-0 mr-lg-3 edge-item-fix position-relative flex-wrap flex-justify-between d-flex flex-items-center ">
+                <details class="HeaderMenu-details details-overlay details-reset width-full">
+                  <summary class="HeaderMenu-summary HeaderMenu-link px-0 py-3 border-0 no-wrap d-block d-lg-inline-block">
+                    Explore
+                    <svg x="0px" y="0px" viewBox="0 0 14 8" xml:space="preserve" fill="none" class="icon-chevon-down-mktg position-absolute position-lg-relative">
+                      <path d="M1,1l6.2,6L13,1"></path>
+                    </svg>
+                  </summary>
+
+                  <div class="dropdown-menu flex-auto rounded-1 bg-white px-0 pt-2 pb-0 mt-0 pb-4 p-lg-4 position-relative position-lg-absolute left-0 left-lg-n4">
+                    <ul class="list-style-none mb-3">
+                      <li class="edge-item-fix"><a href="/explore" class="py-2 lh-condensed-ultra d-block link-gray-dark no-underline h5 Bump-link--hover" data-ga-click="(Logged out) Header, go to Explore">Explore GitHub <span class="Bump-link-symbol float-right text-normal text-gray-light">&rarr;</span></a></li>
+                    </ul>
+
+                    <h4 class="text-gray-light text-normal text-mono f5 mb-2 border-lg-top pt-lg-3">Learn &amp; contribute</h4>
+                    <ul class="list-style-none mb-3">
+                      <li class="edge-item-fix"><a href="/topics" class="py-2 lh-condensed-ultra d-block link-gray no-underline f5" data-ga-click="(Logged out) Header, go to Topics">Topics</a></li>
+                        <li class="edge-item-fix"><a href="/collections" class="py-2 lh-condensed-ultra d-block link-gray no-underline f5" data-ga-click="(Logged out) Header, go to Collections">Collections</a></li>
+                      <li class="edge-item-fix"><a href="/trending" class="py-2 lh-condensed-ultra d-block link-gray no-underline f5" data-ga-click="(Logged out) Header, go to Trending">Trending</a></li>
+                      <li class="edge-item-fix"><a href="https://lab.github.com/" class="py-2 lh-condensed-ultra d-block link-gray no-underline f5" data-ga-click="(Logged out) Header, go to Learning lab">Learning Lab</a></li>
+                      <li class="edge-item-fix"><a href="https://opensource.guide" class="py-2 lh-condensed-ultra d-block link-gray no-underline f5" data-ga-click="(Logged out) Header, go to Open source guides">Open source guides</a></li>
+                    </ul>
+
+                    <h4 class="text-gray-light text-normal text-mono f5 mb-2 border-lg-top pt-lg-3">Connect with others</h4>
+                    <ul class="list-style-none mb-0">
+                      <li class="edge-item-fix"><a href="https://github.com/events" class="py-2 lh-condensed-ultra d-block link-gray no-underline f5" data-ga-click="(Logged out) Header, go to Events">Events</a></li>
+                      <li class="edge-item-fix"><a href="https://github.community" class="py-2 lh-condensed-ultra d-block link-gray no-underline f5" data-ga-click="(Logged out) Header, go to Community forum">Community forum</a></li>
+                      <li class="edge-item-fix"><a href="https://education.github.com" class="py-2 pb-0 lh-condensed-ultra d-block link-gray no-underline f5" data-ga-click="(Logged out) Header, go to GitHub Education">GitHub Education</a></li>
+                    </ul>
+                  </div>
+                </details>
+              </li>
+
+              <li class="border-bottom border-lg-bottom-0 mr-0 mr-lg-3">
+                <a href="/marketplace" class="HeaderMenu-link no-underline py-3 d-block d-lg-inline-block" data-ga-click="(Logged out) Header, go to Marketplace">Marketplace</a>
+              </li>
+
+              <li class="d-block d-lg-flex flex-lg-nowrap flex-lg-items-center border-bottom border-lg-bottom-0 mr-0 mr-lg-3 edge-item-fix position-relative flex-wrap flex-justify-between d-flex flex-items-center ">
+                <details class="HeaderMenu-details details-overlay details-reset width-full">
+                  <summary class="HeaderMenu-summary HeaderMenu-link px-0 py-3 border-0 no-wrap d-block d-lg-inline-block">
+                    Pricing
+                    <svg x="0px" y="0px" viewBox="0 0 14 8" xml:space="preserve" fill="none" class="icon-chevon-down-mktg position-absolute position-lg-relative">
+                       <path d="M1,1l6.2,6L13,1"></path>
+                    </svg>
+                  </summary>
+
+                  <div class="dropdown-menu flex-auto rounded-1 bg-white px-0 pt-2 pb-4 mt-0 p-lg-4 position-relative position-lg-absolute left-0 left-lg-n4">
+                    <a href="/pricing" class="pb-2 lh-condensed-ultra d-block link-gray-dark no-underline h5 Bump-link--hover" data-ga-click="(Logged out) Header, go to Pricing">Plans <span class="Bump-link-symbol float-right text-normal text-gray-light">&rarr;</span></a>
+
+                    <ul class="list-style-none mb-3">
+                      <li class="edge-item-fix"><a href="/pricing#feature-comparison" class="py-2 lh-condensed-ultra d-block link-gray no-underline f5" data-ga-click="(Logged out) Header, go to Compare plans">Compare plans</a></li>
+                      <li class="edge-item-fix"><a href="https://enterprise.github.com/contact" class="py-2 lh-condensed-ultra d-block link-gray no-underline f5" data-ga-click="(Logged out) Header, go to Contact Sales">Contact Sales</a></li>
+                    </ul>
+
+                    <ul class="list-style-none mb-0 border-lg-top pt-lg-3">
+                      <li class="edge-item-fix"><a href="/nonprofit" class="py-2 lh-condensed-ultra d-block no-underline link-gray-dark no-underline h5 Bump-link--hover" data-ga-click="(Logged out) Header, go to Nonprofits">Nonprofit <span class="Bump-link-symbol float-right text-normal text-gray-light">&rarr;</span></a></li>
+                      <li class="edge-item-fix"><a href="https://education.github.com" class="py-2 pb-0 lh-condensed-ultra d-block no-underline link-gray-dark no-underline h5 Bump-link--hover"  data-ga-click="(Logged out) Header, go to Education">Education <span class="Bump-link-symbol float-right text-normal text-gray-light">&rarr;</span></a></li>
+                    </ul>
+                  </div>
+                </details>
+              </li>
+          </ul>
+        </nav>
+
+      <div class="d-lg-flex flex-items-center px-3 px-lg-0 text-center text-lg-left">
+          <div class="d-lg-flex mb-3 mb-lg-0">
+            <div class="header-search flex-self-stretch flex-lg-self-auto mr-0 mr-lg-3 mb-3 mb-lg-0 scoped-search site-scoped-search js-site-search position-relative js-jump-to"
+  role="combobox"
+  aria-owns="jump-to-results"
+  aria-label="Search or jump to"
+  aria-haspopup="listbox"
+  aria-expanded="false"
+>
+  <div class="position-relative">
+    <!-- '"` --><!-- </textarea></xmp> --></option></form><form class="js-site-search-form" role="search" aria-label="Site" data-scope-type="Repository" data-scope-id="102461951" data-scoped-search-url="/wagner-tech/mmail/search" data-unscoped-search-url="/search" action="/wagner-tech/mmail/search" accept-charset="UTF-8" method="get"><input name="utf8" type="hidden" value="&#x2713;" />
+      <label class="form-control input-sm header-search-wrapper p-0 header-search-wrapper-jump-to position-relative d-flex flex-justify-between flex-items-center js-chromeless-input-container">
+        <input type="text"
+          class="form-control input-sm header-search-input jump-to-field js-jump-to-field js-site-search-focus js-site-search-field is-clearable"
+          data-hotkey="s,/"
+          name="q"
+          value=""
+          placeholder="Search"
+          data-unscoped-placeholder="Search GitHub"
+          data-scoped-placeholder="Search"
+          autocapitalize="off"
+          aria-autocomplete="list"
+          aria-controls="jump-to-results"
+          aria-label="Search"
+          data-jump-to-suggestions-path="/_graphql/GetSuggestedNavigationDestinations#csrf-token=Z7QWWkPUj8rItsyx0Kf4MUvuI/YfZ9bLjSbQC+2Y/dN50xW9ptE2YxRBi2ebzE6yJYILRxbqBDz8ksqqbXSiKg=="
+          spellcheck="false"
+          autocomplete="off"
+          >
+          <input type="hidden" class="js-site-search-type-field" name="type" >
+            <img src="https://github.githubassets.com/images/search-key-slash.svg" alt="" class="mr-2 header-search-key-slash">
+
+            <div class="Box position-absolute overflow-hidden d-none jump-to-suggestions js-jump-to-suggestions-container">
+              
+<ul class="d-none js-jump-to-suggestions-template-container">
+  
+
+<li class="d-flex flex-justify-start flex-items-center p-0 f5 navigation-item js-navigation-item js-jump-to-suggestion" role="option">
+  <a tabindex="-1" class="no-underline d-flex flex-auto flex-items-center jump-to-suggestions-path js-jump-to-suggestion-path js-navigation-open p-2" href="">
+    <div class="jump-to-octicon js-jump-to-octicon flex-shrink-0 mr-2 text-center d-none">
+      <svg height="16" width="16" class="octicon octicon-repo flex-shrink-0 js-jump-to-octicon-repo d-none" title="Repository" aria-label="Repository" viewBox="0 0 12 16" version="1.1" role="img"><path fill-rule="evenodd" d="M4 9H3V8h1v1zm0-3H3v1h1V6zm0-2H3v1h1V4zm0-2H3v1h1V2zm8-1v12c0 .55-.45 1-1 1H6v2l-1.5-1.5L3 16v-2H1c-.55 0-1-.45-1-1V1c0-.55.45-1 1-1h10c.55 0 1 .45 1 1zm-1 10H1v2h2v-1h3v1h5v-2zm0-10H2v9h9V1z"/></svg>
+      <svg height="16" width="16" class="octicon octicon-project flex-shrink-0 js-jump-to-octicon-project d-none" title="Project" aria-label="Project" viewBox="0 0 15 16" version="1.1" role="img"><path fill-rule="evenodd" d="M10 12h3V2h-3v10zm-4-2h3V2H6v8zm-4 4h3V2H2v12zm-1 1h13V1H1v14zM14 0H1a1 1 0 00-1 1v14a1 1 0 001 1h13a1 1 0 001-1V1a1 1 0 00-1-1z"/></svg>
+      <svg height="16" width="16" class="octicon octicon-search flex-shrink-0 js-jump-to-octicon-search d-none" title="Search" aria-label="Search" viewBox="0 0 16 16" version="1.1" role="img"><path fill-rule="evenodd" d="M15.7 13.3l-3.81-3.83A5.93 5.93 0 0013 6c0-3.31-2.69-6-6-6S1 2.69 1 6s2.69 6 6 6c1.3 0 2.48-.41 3.47-1.11l3.83 3.81c.19.2.45.3.7.3.25 0 .52-.09.7-.3a.996.996 0 000-1.41v.01zM7 10.7c-2.59 0-4.7-2.11-4.7-4.7 0-2.59 2.11-4.7 4.7-4.7 2.59 0 4.7 2.11 4.7 4.7 0 2.59-2.11 4.7-4.7 4.7z"/></svg>
+    </div>
+
+    <img class="avatar mr-2 flex-shrink-0 js-jump-to-suggestion-avatar d-none" alt="" aria-label="Team" src="" width="28" height="28">
+
+    <div class="jump-to-suggestion-name js-jump-to-suggestion-name flex-auto overflow-hidden text-left no-wrap css-truncate css-truncate-target">
+    </div>
+
+    <div class="border rounded-1 flex-shrink-0 bg-gray px-1 text-gray-light ml-1 f6 d-none js-jump-to-badge-search">
+      <span class="js-jump-to-badge-search-text-default d-none" aria-label="in this repository">
+        In this repository
+      </span>
+      <span class="js-jump-to-badge-search-text-global d-none" aria-label="in all of GitHub">
+        All GitHub
+      </span>
+      <span aria-hidden="true" class="d-inline-block ml-1 v-align-middle">↵</span>
+    </div>
+
+    <div aria-hidden="true" class="border rounded-1 flex-shrink-0 bg-gray px-1 text-gray-light ml-1 f6 d-none d-on-nav-focus js-jump-to-badge-jump">
+      Jump to
+      <span class="d-inline-block ml-1 v-align-middle">↵</span>
+    </div>
+  </a>
+</li>
+
+</ul>
+
+<ul class="d-none js-jump-to-no-results-template-container">
+  <li class="d-flex flex-justify-center flex-items-center f5 d-none js-jump-to-suggestion p-2">
+    <span class="text-gray">No suggested jump to results</span>
+  </li>
+</ul>
+
+<ul id="jump-to-results" role="listbox" class="p-0 m-0 js-navigation-container jump-to-suggestions-results-container js-jump-to-suggestions-results-container">
+  
+
+<li class="d-flex flex-justify-start flex-items-center p-0 f5 navigation-item js-navigation-item js-jump-to-scoped-search d-none" role="option">
+  <a tabindex="-1" class="no-underline d-flex flex-auto flex-items-center jump-to-suggestions-path js-jump-to-suggestion-path js-navigation-open p-2" href="">
+    <div class="jump-to-octicon js-jump-to-octicon flex-shrink-0 mr-2 text-center d-none">
+      <svg height="16" width="16" class="octicon octicon-repo flex-shrink-0 js-jump-to-octicon-repo d-none" title="Repository" aria-label="Repository" viewBox="0 0 12 16" version="1.1" role="img"><path fill-rule="evenodd" d="M4 9H3V8h1v1zm0-3H3v1h1V6zm0-2H3v1h1V4zm0-2H3v1h1V2zm8-1v12c0 .55-.45 1-1 1H6v2l-1.5-1.5L3 16v-2H1c-.55 0-1-.45-1-1V1c0-.55.45-1 1-1h10c.55 0 1 .45 1 1zm-1 10H1v2h2v-1h3v1h5v-2zm0-10H2v9h9V1z"/></svg>
+      <svg height="16" width="16" class="octicon octicon-project flex-shrink-0 js-jump-to-octicon-project d-none" title="Project" aria-label="Project" viewBox="0 0 15 16" version="1.1" role="img"><path fill-rule="evenodd" d="M10 12h3V2h-3v10zm-4-2h3V2H6v8zm-4 4h3V2H2v12zm-1 1h13V1H1v14zM14 0H1a1 1 0 00-1 1v14a1 1 0 001 1h13a1 1 0 001-1V1a1 1 0 00-1-1z"/></svg>
+      <svg height="16" width="16" class="octicon octicon-search flex-shrink-0 js-jump-to-octicon-search d-none" title="Search" aria-label="Search" viewBox="0 0 16 16" version="1.1" role="img"><path fill-rule="evenodd" d="M15.7 13.3l-3.81-3.83A5.93 5.93 0 0013 6c0-3.31-2.69-6-6-6S1 2.69 1 6s2.69 6 6 6c1.3 0 2.48-.41 3.47-1.11l3.83 3.81c.19.2.45.3.7.3.25 0 .52-.09.7-.3a.996.996 0 000-1.41v.01zM7 10.7c-2.59 0-4.7-2.11-4.7-4.7 0-2.59 2.11-4.7 4.7-4.7 2.59 0 4.7 2.11 4.7 4.7 0 2.59-2.11 4.7-4.7 4.7z"/></svg>
+    </div>
+
+    <img class="avatar mr-2 flex-shrink-0 js-jump-to-suggestion-avatar d-none" alt="" aria-label="Team" src="" width="28" height="28">
+
+    <div class="jump-to-suggestion-name js-jump-to-suggestion-name flex-auto overflow-hidden text-left no-wrap css-truncate css-truncate-target">
+    </div>
+
+    <div class="border rounded-1 flex-shrink-0 bg-gray px-1 text-gray-light ml-1 f6 d-none js-jump-to-badge-search">
+      <span class="js-jump-to-badge-search-text-default d-none" aria-label="in this repository">
+        In this repository
+      </span>
+      <span class="js-jump-to-badge-search-text-global d-none" aria-label="in all of GitHub">
+        All GitHub
+      </span>
+      <span aria-hidden="true" class="d-inline-block ml-1 v-align-middle">↵</span>
+    </div>
+
+    <div aria-hidden="true" class="border rounded-1 flex-shrink-0 bg-gray px-1 text-gray-light ml-1 f6 d-none d-on-nav-focus js-jump-to-badge-jump">
+      Jump to
+      <span class="d-inline-block ml-1 v-align-middle">↵</span>
+    </div>
+  </a>
+</li>
+
+  
+
+<li class="d-flex flex-justify-start flex-items-center p-0 f5 navigation-item js-navigation-item js-jump-to-global-search d-none" role="option">
+  <a tabindex="-1" class="no-underline d-flex flex-auto flex-items-center jump-to-suggestions-path js-jump-to-suggestion-path js-navigation-open p-2" href="">
+    <div class="jump-to-octicon js-jump-to-octicon flex-shrink-0 mr-2 text-center d-none">
+      <svg height="16" width="16" class="octicon octicon-repo flex-shrink-0 js-jump-to-octicon-repo d-none" title="Repository" aria-label="Repository" viewBox="0 0 12 16" version="1.1" role="img"><path fill-rule="evenodd" d="M4 9H3V8h1v1zm0-3H3v1h1V6zm0-2H3v1h1V4zm0-2H3v1h1V2zm8-1v12c0 .55-.45 1-1 1H6v2l-1.5-1.5L3 16v-2H1c-.55 0-1-.45-1-1V1c0-.55.45-1 1-1h10c.55 0 1 .45 1 1zm-1 10H1v2h2v-1h3v1h5v-2zm0-10H2v9h9V1z"/></svg>
+      <svg height="16" width="16" class="octicon octicon-project flex-shrink-0 js-jump-to-octicon-project d-none" title="Project" aria-label="Project" viewBox="0 0 15 16" version="1.1" role="img"><path fill-rule="evenodd" d="M10 12h3V2h-3v10zm-4-2h3V2H6v8zm-4 4h3V2H2v12zm-1 1h13V1H1v14zM14 0H1a1 1 0 00-1 1v14a1 1 0 001 1h13a1 1 0 001-1V1a1 1 0 00-1-1z"/></svg>
+      <svg height="16" width="16" class="octicon octicon-search flex-shrink-0 js-jump-to-octicon-search d-none" title="Search" aria-label="Search" viewBox="0 0 16 16" version="1.1" role="img"><path fill-rule="evenodd" d="M15.7 13.3l-3.81-3.83A5.93 5.93 0 0013 6c0-3.31-2.69-6-6-6S1 2.69 1 6s2.69 6 6 6c1.3 0 2.48-.41 3.47-1.11l3.83 3.81c.19.2.45.3.7.3.25 0 .52-.09.7-.3a.996.996 0 000-1.41v.01zM7 10.7c-2.59 0-4.7-2.11-4.7-4.7 0-2.59 2.11-4.7 4.7-4.7 2.59 0 4.7 2.11 4.7 4.7 0 2.59-2.11 4.7-4.7 4.7z"/></svg>
+    </div>
+
+    <img class="avatar mr-2 flex-shrink-0 js-jump-to-suggestion-avatar d-none" alt="" aria-label="Team" src="" width="28" height="28">
+
+    <div class="jump-to-suggestion-name js-jump-to-suggestion-name flex-auto overflow-hidden text-left no-wrap css-truncate css-truncate-target">
+    </div>
+
+    <div class="border rounded-1 flex-shrink-0 bg-gray px-1 text-gray-light ml-1 f6 d-none js-jump-to-badge-search">
+      <span class="js-jump-to-badge-search-text-default d-none" aria-label="in this repository">
+        In this repository
+      </span>
+      <span class="js-jump-to-badge-search-text-global d-none" aria-label="in all of GitHub">
+        All GitHub
+      </span>
+      <span aria-hidden="true" class="d-inline-block ml-1 v-align-middle">↵</span>
+    </div>
+
+    <div aria-hidden="true" class="border rounded-1 flex-shrink-0 bg-gray px-1 text-gray-light ml-1 f6 d-none d-on-nav-focus js-jump-to-badge-jump">
+      Jump to
+      <span class="d-inline-block ml-1 v-align-middle">↵</span>
+    </div>
+  </a>
+</li>
+
+
+</ul>
+
+            </div>
+      </label>
+</form>  </div>
+</div>
+
+          </div>
+
+        <a href="/login?return_to=%2Fwagner-tech%2Fmmail%2Fblob%2Fmaster%2FLICENSE"
+          class="HeaderMenu-link no-underline mr-3"
+          data-hydro-click="{&quot;event_type&quot;:&quot;authentication.click&quot;,&quot;payload&quot;:{&quot;location_in_page&quot;:&quot;site header menu&quot;,&quot;repository_id&quot;:null,&quot;auth_type&quot;:&quot;SIGN_UP&quot;,&quot;client_id&quot;:&quot;1485857146.1574889775&quot;,&quot;originating_request_id&quot;:&quot;86E4:3BBD3:25EF2C9:3832E1E:5DDEE960&quot;,&quot;originating_url&quot;:&quot;https://github.com/wagner-tech/mmail/blob/master/LICENSE&quot;,&quot;referrer&quot;:&quot;https://github.com/wagner-tech/mmail&quot;,&quot;user_id&quot;:null}}" data-hydro-click-hmac="dd77b811143ba3799106eca39047d28a2f3a2580a978d3b7aad466271ecd8e2d"
+          data-ga-click="(Logged out) Header, clicked Sign in, text:sign-in">
+          Sign&nbsp;in
+        </a>
+          <a href="/join?source=header-repo&amp;source_repo=wagner-tech%2Fmmail"
+            class="HeaderMenu-link d-inline-block no-underline border border-gray-dark rounded-1 px-2 py-1"
+            data-hydro-click="{&quot;event_type&quot;:&quot;authentication.click&quot;,&quot;payload&quot;:{&quot;location_in_page&quot;:&quot;site header menu&quot;,&quot;repository_id&quot;:null,&quot;auth_type&quot;:&quot;SIGN_UP&quot;,&quot;client_id&quot;:&quot;1485857146.1574889775&quot;,&quot;originating_request_id&quot;:&quot;86E4:3BBD3:25EF2C9:3832E1E:5DDEE960&quot;,&quot;originating_url&quot;:&quot;https://github.com/wagner-tech/mmail/blob/master/LICENSE&quot;,&quot;referrer&quot;:&quot;https://github.com/wagner-tech/mmail&quot;,&quot;user_id&quot;:null}}" data-hydro-click-hmac="dd77b811143ba3799106eca39047d28a2f3a2580a978d3b7aad466271ecd8e2d"
+            data-ga-click="(Logged out) Header, clicked Sign up, text:sign-up">
+            Sign&nbsp;up
+          </a>
+      </div>
+    </div>
+  </div>
+</header>
+
+  </div>
+
+  <div id="start-of-content" class="show-on-focus"></div>
+
+
+    <div id="js-flash-container">
+
+</div>
+
+
+
+  <div class="application-main " data-commit-hovercards-enabled>
+        <div itemscope itemtype="http://schema.org/SoftwareSourceCode" class="">
+    <main  >
+      
+
+
+  
+
+
+
+  
+
+
+
+
+
+
+
+
+
+  <div class=" pagehead repohead instapaper_ignore readability-menu experiment-repo-nav pt-0 pt-lg-4 ">
+    <div class="repohead-details-container clearfix container-lg p-responsive d-none d-lg-block">
+
+      <ul class="pagehead-actions">
+
+
+
+
+  <li>
+    
+  <a class="tooltipped tooltipped-s btn btn-sm btn-with-count" aria-label="You must be signed in to watch a repository" rel="nofollow" data-hydro-click="{&quot;event_type&quot;:&quot;authentication.click&quot;,&quot;payload&quot;:{&quot;location_in_page&quot;:&quot;notification subscription menu watch&quot;,&quot;repository_id&quot;:null,&quot;auth_type&quot;:&quot;LOG_IN&quot;,&quot;client_id&quot;:&quot;1485857146.1574889775&quot;,&quot;originating_request_id&quot;:&quot;86E4:3BBD3:25EF2C9:3832E1E:5DDEE960&quot;,&quot;originating_url&quot;:&quot;https://github.com/wagner-tech/mmail/blob/master/LICENSE&quot;,&quot;referrer&quot;:&quot;https://github.com/wagner-tech/mmail&quot;,&quot;user_id&quot;:null}}" data-hydro-click-hmac="4e1f8aecb7f9115c184fff4e3381bc37c57b80e8f8a789126c612ed77c021e8f" href="/login?return_to=%2Fwagner-tech%2Fmmail">
+    <svg class="octicon octicon-eye v-align-text-bottom" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M8.06 2C3 2 0 8 0 8s3 6 8.06 6C13 14 16 8 16 8s-3-6-7.94-6zM8 12c-2.2 0-4-1.78-4-4 0-2.2 1.8-4 4-4 2.22 0 4 1.8 4 4 0 2.22-1.78 4-4 4zm2-4c0 1.11-.89 2-2 2-1.11 0-2-.89-2-2 0-1.11.89-2 2-2 1.11 0 2 .89 2 2z"/></svg>
+    Watch
+</a>    <a class="social-count" href="/wagner-tech/mmail/watchers"
+       aria-label="1 user is watching this repository">
+      1
+    </a>
+
+  </li>
+
+  <li>
+        <a class="btn btn-sm btn-with-count tooltipped tooltipped-s" aria-label="You must be signed in to star a repository" rel="nofollow" data-hydro-click="{&quot;event_type&quot;:&quot;authentication.click&quot;,&quot;payload&quot;:{&quot;location_in_page&quot;:&quot;star button&quot;,&quot;repository_id&quot;:102461951,&quot;auth_type&quot;:&quot;LOG_IN&quot;,&quot;client_id&quot;:&quot;1485857146.1574889775&quot;,&quot;originating_request_id&quot;:&quot;86E4:3BBD3:25EF2C9:3832E1E:5DDEE960&quot;,&quot;originating_url&quot;:&quot;https://github.com/wagner-tech/mmail/blob/master/LICENSE&quot;,&quot;referrer&quot;:&quot;https://github.com/wagner-tech/mmail&quot;,&quot;user_id&quot;:null}}" data-hydro-click-hmac="c6839fdf7c92a1a5f0719ed6d96024d1c710e939975cd94edf0cae6bfe4e64e4" href="/login?return_to=%2Fwagner-tech%2Fmmail">
+      <svg class="octicon octicon-star v-align-text-bottom" viewBox="0 0 14 16" version="1.1" width="14" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M14 6l-4.9-.64L7 1 4.9 5.36 0 6l3.6 3.26L2.67 14 7 11.67 11.33 14l-.93-4.74L14 6z"/></svg>
+      Star
+</a>
+    <a class="social-count js-social-count" href="/wagner-tech/mmail/stargazers"
+      aria-label="0 users starred this repository">
+      0
+    </a>
+
+  </li>
+
+  <li>
+      <a class="btn btn-sm btn-with-count tooltipped tooltipped-s" aria-label="You must be signed in to fork a repository" rel="nofollow" data-hydro-click="{&quot;event_type&quot;:&quot;authentication.click&quot;,&quot;payload&quot;:{&quot;location_in_page&quot;:&quot;repo details fork button&quot;,&quot;repository_id&quot;:102461951,&quot;auth_type&quot;:&quot;LOG_IN&quot;,&quot;client_id&quot;:&quot;1485857146.1574889775&quot;,&quot;originating_request_id&quot;:&quot;86E4:3BBD3:25EF2C9:3832E1E:5DDEE960&quot;,&quot;originating_url&quot;:&quot;https://github.com/wagner-tech/mmail/blob/master/LICENSE&quot;,&quot;referrer&quot;:&quot;https://github.com/wagner-tech/mmail&quot;,&quot;user_id&quot;:null}}" data-hydro-click-hmac="a3d08b51414455f8682847be9373baa10a0a5e6312349b4d6fbac1371b4f1a6e" href="/login?return_to=%2Fwagner-tech%2Fmmail">
+        <svg class="octicon octicon-repo-forked v-align-text-bottom" viewBox="0 0 10 16" version="1.1" width="10" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M8 1a1.993 1.993 0 00-1 3.72V6L5 8 3 6V4.72A1.993 1.993 0 002 1a1.993 1.993 0 00-1 3.72V6.5l3 3v1.78A1.993 1.993 0 005 15a1.993 1.993 0 001-3.72V9.5l3-3V4.72A1.993 1.993 0 008 1zM2 4.2C1.34 4.2.8 3.65.8 3c0-.65.55-1.2 1.2-1.2.65 0 1.2.55 1.2 1.2 0 .65-.55 1.2-1.2 1.2zm3 10c-.66 0-1.2-.55-1.2-1.2 0-.65.55-1.2 1.2-1.2.65 0 1.2.55 1.2 1.2 0 .65-.55 1.2-1.2 1.2zm3-10c-.66 0-1.2-.55-1.2-1.2 0-.65.55-1.2 1.2-1.2.65 0 1.2.55 1.2 1.2 0 .65-.55 1.2-1.2 1.2z"/></svg>
+        Fork
+</a>
+    <a href="/wagner-tech/mmail/network/members" class="social-count"
+       aria-label="0 users forked this repository">
+      0
+    </a>
+  </li>
+</ul>
+
+      <h1 class="public ">
+    <svg class="octicon octicon-repo" viewBox="0 0 12 16" version="1.1" width="12" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M4 9H3V8h1v1zm0-3H3v1h1V6zm0-2H3v1h1V4zm0-2H3v1h1V2zm8-1v12c0 .55-.45 1-1 1H6v2l-1.5-1.5L3 16v-2H1c-.55 0-1-.45-1-1V1c0-.55.45-1 1-1h10c.55 0 1 .45 1 1zm-1 10H1v2h2v-1h3v1h5v-2zm0-10H2v9h9V1z"/></svg>
+  <span class="author" itemprop="author"><a class="url fn" rel="author" data-hovercard-type="organization" data-hovercard-url="/orgs/wagner-tech/hovercard" href="/wagner-tech">wagner-tech</a></span><!--
+--><span class="path-divider">/</span><!--
+--><strong itemprop="name"><a data-pjax="#js-repo-pjax-container" href="/wagner-tech/mmail">mmail</a></strong>
+  
+
+</h1>
+
+    </div>
+    
+<nav class="hx_reponav reponav js-repo-nav js-sidenav-container-pjax container-lg p-responsive d-none d-lg-block"
+     itemscope
+     itemtype="http://schema.org/BreadcrumbList"
+    aria-label="Repository"
+     data-pjax="#js-repo-pjax-container">
+
+  <span itemscope itemtype="http://schema.org/ListItem" itemprop="itemListElement">
+    <a class="js-selected-navigation-item selected reponav-item" itemprop="url" data-hotkey="g c" aria-current="page" data-selected-links="repo_source repo_downloads repo_commits repo_releases repo_tags repo_branches repo_packages /wagner-tech/mmail" href="/wagner-tech/mmail">
+      <svg class="octicon octicon-code" viewBox="0 0 14 16" version="1.1" width="14" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M9.5 3L8 4.5 11.5 8 8 11.5 9.5 13 14 8 9.5 3zm-5 0L0 8l4.5 5L6 11.5 2.5 8 6 4.5 4.5 3z"/></svg>
+      <span itemprop="name">Code</span>
+      <meta itemprop="position" content="1">
+</a>  </span>
+
+    <span itemscope itemtype="http://schema.org/ListItem" itemprop="itemListElement">
+      <a itemprop="url" data-hotkey="g i" class="js-selected-navigation-item reponav-item" data-selected-links="repo_issues repo_labels repo_milestones /wagner-tech/mmail/issues" href="/wagner-tech/mmail/issues">
+        <svg class="octicon octicon-issue-opened" viewBox="0 0 14 16" version="1.1" width="14" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 011.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z"/></svg>
+        <span itemprop="name">Issues</span>
+        <span class="Counter">0</span>
+        <meta itemprop="position" content="2">
+</a>    </span>
+
+  <span itemscope itemtype="http://schema.org/ListItem" itemprop="itemListElement">
+    <a data-hotkey="g p" data-skip-pjax="true" itemprop="url" class="js-selected-navigation-item reponav-item" data-selected-links="repo_pulls checks /wagner-tech/mmail/pulls" href="/wagner-tech/mmail/pulls">
+      <svg class="octicon octicon-git-pull-request" viewBox="0 0 12 16" version="1.1" width="12" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M11 11.28V5c-.03-.78-.34-1.47-.94-2.06C9.46 2.35 8.78 2.03 8 2H7V0L4 3l3 3V4h1c.27.02.48.11.69.31.21.2.3.42.31.69v6.28A1.993 1.993 0 0010 15a1.993 1.993 0 001-3.72zm-1 2.92c-.66 0-1.2-.55-1.2-1.2 0-.65.55-1.2 1.2-1.2.65 0 1.2.55 1.2 1.2 0 .65-.55 1.2-1.2 1.2zM4 3c0-1.11-.89-2-2-2a1.993 1.993 0 00-1 3.72v6.56A1.993 1.993 0 002 15a1.993 1.993 0 001-3.72V4.72c.59-.34 1-.98 1-1.72zm-.8 10c0 .66-.55 1.2-1.2 1.2-.65 0-1.2-.55-1.2-1.2 0-.65.55-1.2 1.2-1.2.65 0 1.2.55 1.2 1.2zM2 4.2C1.34 4.2.8 3.65.8 3c0-.65.55-1.2 1.2-1.2.65 0 1.2.55 1.2 1.2 0 .65-.55 1.2-1.2 1.2z"/></svg>
+      <span itemprop="name">Pull requests</span>
+      <span class="Counter">0</span>
+      <meta itemprop="position" content="3">
+</a>  </span>
+
+
+    <a data-hotkey="g b" class="js-selected-navigation-item reponav-item" data-selected-links="repo_projects new_repo_project repo_project /wagner-tech/mmail/projects" href="/wagner-tech/mmail/projects">
+      <svg class="octicon octicon-project" viewBox="0 0 15 16" version="1.1" width="15" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M10 12h3V2h-3v10zm-4-2h3V2H6v8zm-4 4h3V2H2v12zm-1 1h13V1H1v14zM14 0H1a1 1 0 00-1 1v14a1 1 0 001 1h13a1 1 0 001-1V1a1 1 0 00-1-1z"/></svg>
+      Projects
+      <span class="Counter" >0</span>
+</a>
+
+
+    <a data-skip-pjax="true" class="js-selected-navigation-item reponav-item" data-selected-links="security alerts policy code_scanning /wagner-tech/mmail/security/advisories" href="/wagner-tech/mmail/security/advisories">
+      <svg class="octicon octicon-shield" viewBox="0 0 14 16" version="1.1" width="14" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M0 2l7-2 7 2v6.02C14 12.69 8.69 16 7 16c-1.69 0-7-3.31-7-7.98V2zm1 .75L7 1l6 1.75v5.268C13 12.104 8.449 15 7 15c-1.449 0-6-2.896-6-6.982V2.75zm1 .75L7 2v12c-1.207 0-5-2.482-5-5.985V3.5z"/></svg>
+      Security
+</a>
+    <a class="js-selected-navigation-item reponav-item" data-selected-links="repo_graphs repo_contributors dependency_graph pulse people /wagner-tech/mmail/pulse" href="/wagner-tech/mmail/pulse">
+      <svg class="octicon octicon-graph" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M16 14v1H0V0h1v14h15zM5 13H3V8h2v5zm4 0H7V3h2v10zm4 0h-2V6h2v7z"/></svg>
+      Insights
+</a>
+
+</nav>
+
+  <div class="reponav-wrapper reponav-small d-lg-none">
+  <nav class="reponav js-reponav text-center no-wrap"
+       itemscope
+       itemtype="http://schema.org/BreadcrumbList">
+
+    <span itemscope itemtype="http://schema.org/ListItem" itemprop="itemListElement">
+      <a class="js-selected-navigation-item selected reponav-item" itemprop="url" aria-current="page" data-selected-links="repo_source repo_downloads repo_commits repo_releases repo_tags repo_branches repo_packages /wagner-tech/mmail" href="/wagner-tech/mmail">
+        <span itemprop="name">Code</span>
+        <meta itemprop="position" content="1">
+</a>    </span>
+
+      <span itemscope itemtype="http://schema.org/ListItem" itemprop="itemListElement">
+        <a itemprop="url" class="js-selected-navigation-item reponav-item" data-selected-links="repo_issues repo_labels repo_milestones /wagner-tech/mmail/issues" href="/wagner-tech/mmail/issues">
+          <span itemprop="name">Issues</span>
+          <span class="Counter">0</span>
+          <meta itemprop="position" content="2">
+</a>      </span>
+
+    <span itemscope itemtype="http://schema.org/ListItem" itemprop="itemListElement">
+      <a itemprop="url" class="js-selected-navigation-item reponav-item" data-selected-links="repo_pulls checks /wagner-tech/mmail/pulls" href="/wagner-tech/mmail/pulls">
+        <span itemprop="name">Pull requests</span>
+        <span class="Counter">0</span>
+        <meta itemprop="position" content="3">
+</a>    </span>
+
+      <span itemscope itemtype="http://schema.org/ListItem" itemprop="itemListElement">
+        <a itemprop="url" class="js-selected-navigation-item reponav-item" data-selected-links="repo_projects new_repo_project repo_project /wagner-tech/mmail/projects" href="/wagner-tech/mmail/projects">
+          <span itemprop="name">Projects</span>
+          <span class="Counter">0</span>
+          <meta itemprop="position" content="4">
+</a>      </span>
+
+
+      <a itemprop="url" class="js-selected-navigation-item reponav-item" data-selected-links="security alerts policy code_scanning /wagner-tech/mmail/security/advisories" href="/wagner-tech/mmail/security/advisories">
+        <span itemprop="name">Security</span>
+        <meta itemprop="position" content="6">
+</a>
+      <a class="js-selected-navigation-item reponav-item" data-selected-links="pulse /wagner-tech/mmail/pulse" href="/wagner-tech/mmail/pulse">
+        Pulse
+</a>
+
+  </nav>
+</div>
+
+
+  </div>
+<div class="container-lg clearfix new-discussion-timeline experiment-repo-nav  p-responsive">
+  <div class="repository-content ">
+
+    
+    
+
+
+  
+
+
+    <a class="d-none js-permalink-shortcut" data-hotkey="y" href="/wagner-tech/mmail/blob/79a63adf5dc1780a1460a3fd1f24aa52b7721957/LICENSE">Permalink</a>
+
+    <!-- blob contrib key: blob_contributors:v21:7b50399955c8b3ec2c18da87fbd93853 -->
+          <div class="signup-prompt-bg rounded-1">
+      <div class="signup-prompt p-4 text-center mb-4 rounded-1">
+        <div class="position-relative">
+          <!-- '"` --><!-- </textarea></xmp> --></option></form><form action="/prompt_dismissals/signup" accept-charset="UTF-8" method="post"><input name="utf8" type="hidden" value="&#x2713;" /><input type="hidden" name="_method" value="put" /><input type="hidden" name="authenticity_token" value="7A0YSvR0XsetqJuskJFmefhxJMQAuB/pjQMKvQDq0EaHW1XJQu0pLIjQBxueK2Qez9fhB1ghbxarTfrpXyjXjQ==" />
+            <button type="submit" class="position-absolute top-0 right-0 btn-link link-gray" data-ga-click="(Logged out) Sign up prompt, clicked Dismiss, text:dismiss">
+              Dismiss
+            </button>
+</form>          <h3 class="pt-2">Join GitHub today</h3>
+          <p class="col-6 mx-auto">GitHub is home to over 40 million developers working together to host and review code, manage projects, and build software together.</p>
+          <a class="btn btn-primary" data-hydro-click="{&quot;event_type&quot;:&quot;authentication.click&quot;,&quot;payload&quot;:{&quot;location_in_page&quot;:&quot;files signup prompt&quot;,&quot;repository_id&quot;:null,&quot;auth_type&quot;:&quot;SIGN_UP&quot;,&quot;client_id&quot;:&quot;1485857146.1574889775&quot;,&quot;originating_request_id&quot;:&quot;86E4:3BBD3:25EF2C9:3832E1E:5DDEE960&quot;,&quot;originating_url&quot;:&quot;https://github.com/wagner-tech/mmail/blob/master/LICENSE&quot;,&quot;referrer&quot;:&quot;https://github.com/wagner-tech/mmail&quot;,&quot;user_id&quot;:null}}" data-hydro-click-hmac="380cae9c6c2039cd60722868c69ec4a6cc83fb505cdecefbad5c0618e9378937" data-ga-click="(Logged out) Sign up prompt, clicked Sign up, text:sign-up" href="/join?source=prompt-blob-show&amp;source_repo=wagner-tech%2Fmmail">Sign up</a>
+        </div>
+      </div>
+    </div>
+
+
+    <div class="d-flex flex-items-start flex-shrink-0 pb-3 flex-column flex-md-row">
+      <span class="d-flex flex-justify-between width-full width-md-auto">
+        
+<details class="details-reset details-overlay select-menu branch-select-menu  hx_rsm" id="branch-select-menu">
+  <summary class="btn btn-sm select-menu-button css-truncate"
+           data-hotkey="w"
+           title="Switch branches or tags">
+    <i>Branch:</i>
+    <span class="css-truncate-target" data-menu-button>master</span>
+  </summary>
+
+  <details-menu class="select-menu-modal hx_rsm-modal position-absolute" style="z-index: 99;" src="/wagner-tech/mmail/ref-list/master/LICENSE?source_action=show&amp;source_controller=blob" preload>
+    <include-fragment class="select-menu-loading-overlay anim-pulse">
+      <svg height="32" class="octicon octicon-octoface" viewBox="0 0 16 16" version="1.1" width="32" aria-hidden="true"><path fill-rule="evenodd" d="M14.7 5.34c.13-.32.55-1.59-.13-3.31 0 0-1.05-.33-3.44 1.3-1-.28-2.07-.32-3.13-.32s-2.13.04-3.13.32c-2.39-1.64-3.44-1.3-3.44-1.3-.68 1.72-.26 2.99-.13 3.31C.49 6.21 0 7.33 0 8.69 0 13.84 3.33 15 7.98 15S16 13.84 16 8.69c0-1.36-.49-2.48-1.3-3.35zM8 14.02c-3.3 0-5.98-.15-5.98-3.35 0-.76.38-1.48 1.02-2.07 1.07-.98 2.9-.46 4.96-.46 2.07 0 3.88-.52 4.96.46.65.59 1.02 1.3 1.02 2.07 0 3.19-2.68 3.35-5.98 3.35zM5.49 9.01c-.66 0-1.2.8-1.2 1.78s.54 1.79 1.2 1.79c.66 0 1.2-.8 1.2-1.79s-.54-1.78-1.2-1.78zm5.02 0c-.66 0-1.2.79-1.2 1.78s.54 1.79 1.2 1.79c.66 0 1.2-.8 1.2-1.79s-.53-1.78-1.2-1.78z"/></svg>
+    </include-fragment>
+  </details-menu>
+</details>
+
+        <div class="BtnGroup flex-shrink-0 d-md-none">
+          <a href="/wagner-tech/mmail/find/master"
+                class="js-pjax-capture-input btn btn-sm BtnGroup-item"
+                data-pjax
+                data-hotkey="t">
+            Find file
+          </a>
+          <clipboard-copy value="LICENSE" class="btn btn-sm BtnGroup-item">
+            Copy path
+          </clipboard-copy>
+        </div>
+      </span>
+      <h2 id="blob-path" class="breadcrumb flex-auto min-width-0 text-normal flex-md-self-center ml-md-2 mr-md-3 my-2 my-md-0">
+        <span class="js-repo-root text-bold"><span class="js-path-segment"><a data-pjax="true" href="/wagner-tech/mmail"><span>mmail</span></a></span></span><span class="separator">/</span><strong class="final-path">LICENSE</strong>
+      </h2>
+
+      <div class="BtnGroup flex-shrink-0 d-none d-md-inline-block">
+        <a href="/wagner-tech/mmail/find/master"
+              class="js-pjax-capture-input btn btn-sm BtnGroup-item"
+              data-pjax
+              data-hotkey="t">
+          Find file
+        </a>
+        <clipboard-copy value="LICENSE" class="btn btn-sm BtnGroup-item">
+          Copy path
+        </clipboard-copy>
+      </div>
+    </div>
+
+    
+
+      <div class="Box mb-3 clearfix">
+  <div class="d-flex flex-column flex-md-row">
+    <div class="p-3 col-md-6">
+      <svg height="32" class="octicon octicon-law text-gray-dark float-left mr-2" viewBox="0 0 14 16" version="1.1" width="28" aria-hidden="true"><path fill-rule="evenodd" d="M7 4c-.83 0-1.5-.67-1.5-1.5S6.17 1 7 1s1.5.67 1.5 1.5S7.83 4 7 4zm7 6c0 1.11-.89 2-2 2h-1c-1.11 0-2-.89-2-2l2-4h-1c-.55 0-1-.45-1-1H8v8c.42 0 1 .45 1 1h1c.42 0 1 .45 1 1H3c0-.55.58-1 1-1h1c0-.55.58-1 1-1h.03L6 5H5c0 .55-.45 1-1 1H3l2 4c0 1.11-.89 2-2 2H2c-1.11 0-2-.89-2-2l2-4H1V5h3c0-.55.45-1 1-1h4c.55 0 1 .45 1 1h3v1h-1l2 4zM2.5 7L1 10h3L2.5 7zM13 10l-1.5-3-1.5 3h3z"/></svg>
+      <p class="text-small text-gray mb-0 lh-condensed-ultra">
+        wagner-tech/mmail is licensed under the
+      </p>
+      <h3 class="mt-0 mb-2 h4">GNU General Public License v3.0</h3>
+      <p class="mb-0 text-gray text-small pr-2">Permissions of this strong copyleft license are conditioned on making available complete source code of licensed works and modifications, which include larger works using a licensed work, under the same license. Copyright and license notices must be preserved. Contributors provide an express grant of patent rights.</p>
+    </div>
+
+    <div class="d-flex px-3 col-md-6 flex-column flex-sm-row pb-sm-3">
+        <div class="pb-3 col-sm-4 pt-md-2">
+          <h4 class="mt-1 mb-2 h5">Permissions</h4>
+          <ul class="list-style-none">
+              <li class="text-small pl-3">
+                <svg width="13" class="octicon octicon-check text-green ml-n3 v-align-middle" viewBox="0 0 12 16" version="1.1" height="17" aria-hidden="true"><path fill-rule="evenodd" d="M12 5l-8 8-4-4 1.5-1.5L4 10l6.5-6.5L12 5z"/></svg>
+                <span class="v-align-middle" title="This software and derivatives may be used for commercial purposes.">
+                  Commercial use
+                </span>
+              </li>
+              <li class="text-small pl-3">
+                <svg width="13" class="octicon octicon-check text-green ml-n3 v-align-middle" viewBox="0 0 12 16" version="1.1" height="17" aria-hidden="true"><path fill-rule="evenodd" d="M12 5l-8 8-4-4 1.5-1.5L4 10l6.5-6.5L12 5z"/></svg>
+                <span class="v-align-middle" title="This software may be modified.">
+                  Modification
+                </span>
+              </li>
+              <li class="text-small pl-3">
+                <svg width="13" class="octicon octicon-check text-green ml-n3 v-align-middle" viewBox="0 0 12 16" version="1.1" height="17" aria-hidden="true"><path fill-rule="evenodd" d="M12 5l-8 8-4-4 1.5-1.5L4 10l6.5-6.5L12 5z"/></svg>
+                <span class="v-align-middle" title="This software may be distributed.">
+                  Distribution
+                </span>
+              </li>
+              <li class="text-small pl-3">
+                <svg width="13" class="octicon octicon-check text-green ml-n3 v-align-middle" viewBox="0 0 12 16" version="1.1" height="17" aria-hidden="true"><path fill-rule="evenodd" d="M12 5l-8 8-4-4 1.5-1.5L4 10l6.5-6.5L12 5z"/></svg>
+                <span class="v-align-middle" title="This license provides an express grant of patent rights from contributors.">
+                  Patent use
+                </span>
+              </li>
+              <li class="text-small pl-3">
+                <svg width="13" class="octicon octicon-check text-green ml-n3 v-align-middle" viewBox="0 0 12 16" version="1.1" height="17" aria-hidden="true"><path fill-rule="evenodd" d="M12 5l-8 8-4-4 1.5-1.5L4 10l6.5-6.5L12 5z"/></svg>
+                <span class="v-align-middle" title="This software may be used and modified in private.">
+                  Private use
+                </span>
+              </li>
+          </ul>
+        </div>
+        <div class="pb-3 col-sm-4 pt-md-2">
+          <h4 class="mt-1 mb-2 h5">Limitations</h4>
+          <ul class="list-style-none">
+              <li class="text-small pl-3">
+                <svg width="13" class="octicon octicon-x text-red ml-n3 v-align-middle" viewBox="0 0 12 16" version="1.1" height="17" aria-hidden="true"><path fill-rule="evenodd" d="M7.48 8l3.75 3.75-1.48 1.48L6 9.48l-3.75 3.75-1.48-1.48L4.52 8 .77 4.25l1.48-1.48L6 6.52l3.75-3.75 1.48 1.48L7.48 8z"/></svg>
+                <span class="v-align-middle" title="This license includes a limitation of liability.">
+                  Liability
+                </span>
+              </li>
+              <li class="text-small pl-3">
+                <svg width="13" class="octicon octicon-x text-red ml-n3 v-align-middle" viewBox="0 0 12 16" version="1.1" height="17" aria-hidden="true"><path fill-rule="evenodd" d="M7.48 8l3.75 3.75-1.48 1.48L6 9.48l-3.75 3.75-1.48-1.48L4.52 8 .77 4.25l1.48-1.48L6 6.52l3.75-3.75 1.48 1.48L7.48 8z"/></svg>
+                <span class="v-align-middle" title="The license explicitly states that it does NOT provide any warranty.">
+                  Warranty
+                </span>
+              </li>
+          </ul>
+        </div>
+        <div class="pb-3 col-sm-4 pt-md-2">
+          <h4 class="mt-1 mb-2 h5">Conditions</h4>
+          <ul class="list-style-none">
+              <li class="text-small pl-3">
+                <svg width="13" class="octicon octicon-info text-blue ml-n3 v-align-middle" viewBox="0 0 14 16" version="1.1" height="14" aria-hidden="true"><path fill-rule="evenodd" d="M6.3 5.69a.942.942 0 01-.28-.7c0-.28.09-.52.28-.7.19-.18.42-.28.7-.28.28 0 .52.09.7.28.18.19.28.42.28.7 0 .28-.09.52-.28.7a1 1 0 01-.7.3c-.28 0-.52-.11-.7-.3zM8 7.99c-.02-.25-.11-.48-.31-.69-.2-.19-.42-.3-.69-.31H6c-.27.02-.48.13-.69.31-.2.2-.3.44-.31.69h1v3c.02.27.11.5.31.69.2.2.42.31.69.31h1c.27 0 .48-.11.69-.31.2-.19.3-.42.31-.69H8V7.98v.01zM7 2.3c-3.14 0-5.7 2.54-5.7 5.68 0 3.14 2.56 5.7 5.7 5.7s5.7-2.55 5.7-5.7c0-3.15-2.56-5.69-5.7-5.69v.01zM7 .98c3.86 0 7 3.14 7 7s-3.14 7-7 7-7-3.12-7-7 3.14-7 7-7z"/></svg>
+                <span class="v-align-middle" title="A copy of the license and copyright notice must be included with the software.">
+                  License and copyright notice
+                </span>
+              </li>
+              <li class="text-small pl-3">
+                <svg width="13" class="octicon octicon-info text-blue ml-n3 v-align-middle" viewBox="0 0 14 16" version="1.1" height="14" aria-hidden="true"><path fill-rule="evenodd" d="M6.3 5.69a.942.942 0 01-.28-.7c0-.28.09-.52.28-.7.19-.18.42-.28.7-.28.28 0 .52.09.7.28.18.19.28.42.28.7 0 .28-.09.52-.28.7a1 1 0 01-.7.3c-.28 0-.52-.11-.7-.3zM8 7.99c-.02-.25-.11-.48-.31-.69-.2-.19-.42-.3-.69-.31H6c-.27.02-.48.13-.69.31-.2.2-.3.44-.31.69h1v3c.02.27.11.5.31.69.2.2.42.31.69.31h1c.27 0 .48-.11.69-.31.2-.19.3-.42.31-.69H8V7.98v.01zM7 2.3c-3.14 0-5.7 2.54-5.7 5.68 0 3.14 2.56 5.7 5.7 5.7s5.7-2.55 5.7-5.7c0-3.15-2.56-5.69-5.7-5.69v.01zM7 .98c3.86 0 7 3.14 7 7s-3.14 7-7 7-7-3.12-7-7 3.14-7 7-7z"/></svg>
+                <span class="v-align-middle" title="Changes made to the code must be documented.">
+                  State changes
+                </span>
+              </li>
+              <li class="text-small pl-3">
+                <svg width="13" class="octicon octicon-info text-blue ml-n3 v-align-middle" viewBox="0 0 14 16" version="1.1" height="14" aria-hidden="true"><path fill-rule="evenodd" d="M6.3 5.69a.942.942 0 01-.28-.7c0-.28.09-.52.28-.7.19-.18.42-.28.7-.28.28 0 .52.09.7.28.18.19.28.42.28.7 0 .28-.09.52-.28.7a1 1 0 01-.7.3c-.28 0-.52-.11-.7-.3zM8 7.99c-.02-.25-.11-.48-.31-.69-.2-.19-.42-.3-.69-.31H6c-.27.02-.48.13-.69.31-.2.2-.3.44-.31.69h1v3c.02.27.11.5.31.69.2.2.42.31.69.31h1c.27 0 .48-.11.69-.31.2-.19.3-.42.31-.69H8V7.98v.01zM7 2.3c-3.14 0-5.7 2.54-5.7 5.68 0 3.14 2.56 5.7 5.7 5.7s5.7-2.55 5.7-5.7c0-3.15-2.56-5.69-5.7-5.69v.01zM7 .98c3.86 0 7 3.14 7 7s-3.14 7-7 7-7-3.12-7-7 3.14-7 7-7z"/></svg>
+                <span class="v-align-middle" title="Source code must be made available when the software is distributed.">
+                  Disclose source
+                </span>
+              </li>
+              <li class="text-small pl-3">
+                <svg width="13" class="octicon octicon-info text-blue ml-n3 v-align-middle" viewBox="0 0 14 16" version="1.1" height="14" aria-hidden="true"><path fill-rule="evenodd" d="M6.3 5.69a.942.942 0 01-.28-.7c0-.28.09-.52.28-.7.19-.18.42-.28.7-.28.28 0 .52.09.7.28.18.19.28.42.28.7 0 .28-.09.52-.28.7a1 1 0 01-.7.3c-.28 0-.52-.11-.7-.3zM8 7.99c-.02-.25-.11-.48-.31-.69-.2-.19-.42-.3-.69-.31H6c-.27.02-.48.13-.69.31-.2.2-.3.44-.31.69h1v3c.02.27.11.5.31.69.2.2.42.31.69.31h1c.27 0 .48-.11.69-.31.2-.19.3-.42.31-.69H8V7.98v.01zM7 2.3c-3.14 0-5.7 2.54-5.7 5.68 0 3.14 2.56 5.7 5.7 5.7s5.7-2.55 5.7-5.7c0-3.15-2.56-5.69-5.7-5.69v.01zM7 .98c3.86 0 7 3.14 7 7s-3.14 7-7 7-7-3.12-7-7 3.14-7 7-7z"/></svg>
+                <span class="v-align-middle" title="Modifications must be released under the same license when distributing the software. In some cases a similar or related license may be used.">
+                  Same license
+                </span>
+              </li>
+          </ul>
+        </div>
+    </div>
+  </div>
+  <p class="text-gray text-small mb-0 border-top col-12 float-left p-2 px-sm-3">
+    This is not legal advice.
+    <a href="https://help.github.com/articles/licensing-a-repository/#disclaimer">Learn more about repository licenses</a>.
+  </p>
+</div>
+
+
+
+    
+  <div class="Box Box--condensed d-flex flex-column flex-shrink-0">
+      <div class="Box-body d-flex flex-justify-between bg-blue-light flex-column flex-md-row flex-items-start flex-md-items-center">
+        <span class="pr-md-4 f6">
+          <a rel="contributor" data-skip-pjax="true" data-hovercard-type="user" data-hovercard-url="/users/bonzius/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="/bonzius"><img class="avatar" src="https://avatars3.githubusercontent.com/u/15978074?s=40&amp;v=4" width="20" height="20" alt="@bonzius" /></a>
+          <a class="text-bold link-gray-dark lh-default v-align-middle" rel="contributor" data-hovercard-type="user" data-hovercard-url="/users/bonzius/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="/bonzius">bonzius</a>
+            <span class="lh-default v-align-middle">
+              <a data-pjax="true" title="Initial commit" class="link-gray" href="/wagner-tech/mmail/commit/2c2de397002996e4dbdce5c107b45b24965f27e9">Initial commit</a>
+            </span>
+        </span>
+        <span class="d-inline-block flex-shrink-0 v-align-bottom f6 mt-2 mt-md-0">
+          <a class="pr-2 text-mono link-gray" href="/wagner-tech/mmail/commit/2c2de397002996e4dbdce5c107b45b24965f27e9" data-pjax>2c2de39</a>
+          <relative-time datetime="2017-09-05T09:27:49Z" class="no-wrap">Sep 5, 2017</relative-time>
+        </span>
+      </div>
+
+    <div class="Box-body d-flex flex-items-center flex-auto f6 border-bottom-0 flex-wrap" >
+      <details class="details-reset details-overlay details-overlay-dark lh-default text-gray-dark float-left mr-2" id="blob_contributors_box">
+        <summary class="btn-link">
+          <span><strong>1</strong> contributor</span>
+        </summary>
+        <details-dialog
+          class="Box Box--overlay d-flex flex-column anim-fade-in fast"
+          aria-label="Users who have contributed to this file"
+          src="/wagner-tech/mmail/contributors-list/master/LICENSE" preload>
+          <div class="Box-header">
+            <button class="Box-btn-octicon btn-octicon float-right" type="button" aria-label="Close dialog" data-close-dialog>
+              <svg class="octicon octicon-x" viewBox="0 0 12 16" version="1.1" width="12" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M7.48 8l3.75 3.75-1.48 1.48L6 9.48l-3.75 3.75-1.48-1.48L4.52 8 .77 4.25l1.48-1.48L6 6.52l3.75-3.75 1.48 1.48L7.48 8z"/></svg>
+            </button>
+            <h3 class="Box-title">
+              Users who have contributed to this file
+            </h3>
+          </div>
+          <include-fragment class="octocat-spinner my-3" aria-label="Loading..."></include-fragment>
+        </details-dialog>
+      </details>
+    </div>
+  </div>
+
+
+
+
+
+    <div class="Box mt-3 position-relative">
+      
+<div class="Box-header py-2 d-flex flex-column flex-shrink-0 flex-md-row flex-md-items-center">
+  <div class="text-mono f6 flex-auto pr-3 flex-order-2 flex-md-order-1 mt-2 mt-md-0">
+
+      674 lines (553 sloc)
+      <span class="file-info-divider"></span>
+    34.3 KB
+  </div>
+
+  <div class="d-flex py-1 py-md-0 flex-auto flex-order-1 flex-md-order-2 flex-sm-grow-0 flex-justify-between">
+
+    <div class="BtnGroup">
+      <a id="raw-url" class="btn btn-sm BtnGroup-item" href="/wagner-tech/mmail/raw/master/LICENSE">Raw</a>
+        <a class="btn btn-sm js-update-url-with-hash BtnGroup-item" data-hotkey="b" href="/wagner-tech/mmail/blame/master/LICENSE">Blame</a>
+      <a rel="nofollow" class="btn btn-sm BtnGroup-item" href="/wagner-tech/mmail/commits/master/LICENSE">History</a>
+    </div>
+
+
+    <div>
+
+          <button type="button" class="btn-octicon disabled tooltipped tooltipped-nw"
+            aria-label="You must be signed in to make or propose changes">
+            <svg class="octicon octicon-pencil" viewBox="0 0 14 16" version="1.1" width="14" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M0 12v3h3l8-8-3-3-8 8zm3 2H1v-2h1v1h1v1zm10.3-9.3L12 6 9 3l1.3-1.3a.996.996 0 011.41 0l1.59 1.59c.39.39.39 1.02 0 1.41z"/></svg>
+          </button>
+          <button type="button" class="btn-octicon btn-octicon-danger disabled tooltipped tooltipped-nw"
+            aria-label="You must be signed in to make or propose changes">
+            <svg class="octicon octicon-trashcan" viewBox="0 0 12 16" version="1.1" width="12" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M11 2H9c0-.55-.45-1-1-1H5c-.55 0-1 .45-1 1H2c-.55 0-1 .45-1 1v1c0 .55.45 1 1 1v9c0 .55.45 1 1 1h7c.55 0 1-.45 1-1V5c.55 0 1-.45 1-1V3c0-.55-.45-1-1-1zm-1 12H3V5h1v8h1V5h1v8h1V5h1v8h1V5h1v9zm1-10H2V3h9v1z"/></svg>
+          </button>
+    </div>
+  </div>
+</div>
+
+
+
+
+      
+
+  <div itemprop="text" class="Box-body p-0 blob-wrapper data type-text ">
+      
+<table class="highlight tab-size js-file-line-container" data-tab-size="8">
+      <tr>
+        <td id="L1" class="blob-num js-line-number" data-line-number="1"></td>
+        <td id="LC1" class="blob-code blob-code-inner js-file-line">                    GNU GENERAL PUBLIC LICENSE</td>
+      </tr>
+      <tr>
+        <td id="L2" class="blob-num js-line-number" data-line-number="2"></td>
+        <td id="LC2" class="blob-code blob-code-inner js-file-line">                       Version 3, 29 June 2007</td>
+      </tr>
+      <tr>
+        <td id="L3" class="blob-num js-line-number" data-line-number="3"></td>
+        <td id="LC3" class="blob-code blob-code-inner js-file-line">
+</td>
+      </tr>
+      <tr>
+        <td id="L4" class="blob-num js-line-number" data-line-number="4"></td>
+        <td id="LC4" class="blob-code blob-code-inner js-file-line"> Copyright (C) 2007 Free Software Foundation, Inc. &lt;http://fsf.org/&gt;</td>
+      </tr>
+      <tr>
+        <td id="L5" class="blob-num js-line-number" data-line-number="5"></td>
+        <td id="LC5" class="blob-code blob-code-inner js-file-line"> Everyone is permitted to copy and distribute verbatim copies</td>
+      </tr>
+      <tr>
+        <td id="L6" class="blob-num js-line-number" data-line-number="6"></td>
+        <td id="LC6" class="blob-code blob-code-inner js-file-line"> of this license document, but changing it is not allowed.</td>
+      </tr>
+      <tr>
+        <td id="L7" class="blob-num js-line-number" data-line-number="7"></td>
+        <td id="LC7" class="blob-code blob-code-inner js-file-line">
+</td>
+      </tr>
+      <tr>
+        <td id="L8" class="blob-num js-line-number" data-line-number="8"></td>
+        <td id="LC8" class="blob-code blob-code-inner js-file-line">                            Preamble</td>
+      </tr>
+      <tr>
+        <td id="L9" class="blob-num js-line-number" data-line-number="9"></td>
+        <td id="LC9" class="blob-code blob-code-inner js-file-line">
+</td>
+      </tr>
+      <tr>
+        <td id="L10" class="blob-num js-line-number" data-line-number="10"></td>
+        <td id="LC10" class="blob-code blob-code-inner js-file-line">  The GNU General Public License is a free, copyleft license for</td>
+      </tr>
+      <tr>
+        <td id="L11" class="blob-num js-line-number" data-line-number="11"></td>
+        <td id="LC11" class="blob-code blob-code-inner js-file-line">software and other kinds of works.</td>
+      </tr>
+      <tr>
+        <td id="L12" class="blob-num js-line-number" data-line-number="12"></td>
+        <td id="LC12" class="blob-code blob-code-inner js-file-line">
+</td>
+      </tr>
+      <tr>
+        <td id="L13" class="blob-num js-line-number" data-line-number="13"></td>
+        <td id="LC13" class="blob-code blob-code-inner js-file-line">  The licenses for most software and other practical works are designed</td>
+      </tr>
+      <tr>
+        <td id="L14" class="blob-num js-line-number" data-line-number="14"></td>
+        <td id="LC14" class="blob-code blob-code-inner js-file-line">to take away your freedom to share and change the works.  By contrast,</td>
+      </tr>
+      <tr>
+        <td id="L15" class="blob-num js-line-number" data-line-number="15"></td>
+        <td id="LC15" class="blob-code blob-code-inner js-file-line">the GNU General Public License is intended to guarantee your freedom to</td>
+      </tr>
+      <tr>
+        <td id="L16" class="blob-num js-line-number" data-line-number="16"></td>
+        <td id="LC16" class="blob-code blob-code-inner js-file-line">share and change all versions of a program--to make sure it remains free</td>
+      </tr>
+      <tr>
+        <td id="L17" class="blob-num js-line-number" data-line-number="17"></td>
+        <td id="LC17" class="blob-code blob-code-inner js-file-line">software for all its users.  We, the Free Software Foundation, use the</td>
+      </tr>
+      <tr>
+        <td id="L18" class="blob-num js-line-number" data-line-number="18"></td>
+        <td id="LC18" class="blob-code blob-code-inner js-file-line">GNU General Public License for most of our software; it applies also to</td>
+      </tr>
+      <tr>
+        <td id="L19" class="blob-num js-line-number" data-line-number="19"></td>
+        <td id="LC19" class="blob-code blob-code-inner js-file-line">any other work released this way by its authors.  You can apply it to</td>
+      </tr>
+      <tr>
+        <td id="L20" class="blob-num js-line-number" data-line-number="20"></td>
+        <td id="LC20" class="blob-code blob-code-inner js-file-line">your programs, too.</td>
+      </tr>
+      <tr>
+        <td id="L21" class="blob-num js-line-number" data-line-number="21"></td>
+        <td id="LC21" class="blob-code blob-code-inner js-file-line">
+</td>
+      </tr>
+      <tr>
+        <td id="L22" class="blob-num js-line-number" data-line-number="22"></td>
+        <td id="LC22" class="blob-code blob-code-inner js-file-line">  When we speak of free software, we are referring to freedom, not</td>
+      </tr>
+      <tr>
+        <td id="L23" class="blob-num js-line-number" data-line-number="23"></td>
+        <td id="LC23" class="blob-code blob-code-inner js-file-line">price.  Our General Public Licenses are designed to make sure that you</td>
+      </tr>
+      <tr>
+        <td id="L24" class="blob-num js-line-number" data-line-number="24"></td>
+        <td id="LC24" class="blob-code blob-code-inner js-file-line">have the freedom to distribute copies of free software (and charge for</td>
+      </tr>
+      <tr>
+        <td id="L25" class="blob-num js-line-number" data-line-number="25"></td>
+        <td id="LC25" class="blob-code blob-code-inner js-file-line">them if you wish), that you receive source code or can get it if you</td>
+      </tr>
+      <tr>
+        <td id="L26" class="blob-num js-line-number" data-line-number="26"></td>
+        <td id="LC26" class="blob-code blob-code-inner js-file-line">want it, that you can change the software or use pieces of it in new</td>
+      </tr>
+      <tr>
+        <td id="L27" class="blob-num js-line-number" data-line-number="27"></td>
+        <td id="LC27" class="blob-code blob-code-inner js-file-line">free programs, and that you know you can do these things.</td>
+      </tr>
+      <tr>
+        <td id="L28" class="blob-num js-line-number" data-line-number="28"></td>
+        <td id="LC28" class="blob-code blob-code-inner js-file-line">
+</td>
+      </tr>
+      <tr>
+        <td id="L29" class="blob-num js-line-number" data-line-number="29"></td>
+        <td id="LC29" class="blob-code blob-code-inner js-file-line">  To protect your rights, we need to prevent others from denying you</td>
+      </tr>
+      <tr>
+        <td id="L30" class="blob-num js-line-number" data-line-number="30"></td>
+        <td id="LC30" class="blob-code blob-code-inner js-file-line">these rights or asking you to surrender the rights.  Therefore, you have</td>
+      </tr>
+      <tr>
+        <td id="L31" class="blob-num js-line-number" data-line-number="31"></td>
+        <td id="LC31" class="blob-code blob-code-inner js-file-line">certain responsibilities if you distribute copies of the software, or if</td>
+      </tr>
+      <tr>
+        <td id="L32" class="blob-num js-line-number" data-line-number="32"></td>
+        <td id="LC32" class="blob-code blob-code-inner js-file-line">you modify it: responsibilities to respect the freedom of others.</td>
+      </tr>
+      <tr>
+        <td id="L33" class="blob-num js-line-number" data-line-number="33"></td>
+        <td id="LC33" class="blob-code blob-code-inner js-file-line">
+</td>
+      </tr>
+      <tr>
+        <td id="L34" class="blob-num js-line-number" data-line-number="34"></td>
+        <td id="LC34" class="blob-code blob-code-inner js-file-line">  For example, if you distribute copies of such a program, whether</td>
+      </tr>
+      <tr>
+        <td id="L35" class="blob-num js-line-number" data-line-number="35"></td>
+        <td id="LC35" class="blob-code blob-code-inner js-file-line">gratis or for a fee, you must pass on to the recipients the same</td>
+      </tr>
+      <tr>
+        <td id="L36" class="blob-num js-line-number" data-line-number="36"></td>
+        <td id="LC36" class="blob-code blob-code-inner js-file-line">freedoms that you received.  You must make sure that they, too, receive</td>
+      </tr>
+      <tr>
+        <td id="L37" class="blob-num js-line-number" data-line-number="37"></td>
+        <td id="LC37" class="blob-code blob-code-inner js-file-line">or can get the source code.  And you must show them these terms so they</td>
+      </tr>
+      <tr>
+        <td id="L38" class="blob-num js-line-number" data-line-number="38"></td>
+        <td id="LC38" class="blob-code blob-code-inner js-file-line">know their rights.</td>
+      </tr>
+      <tr>
+        <td id="L39" class="blob-num js-line-number" data-line-number="39"></td>
+        <td id="LC39" class="blob-code blob-code-inner js-file-line">
+</td>
+      </tr>
+      <tr>
+        <td id="L40" class="blob-num js-line-number" data-line-number="40"></td>
+        <td id="LC40" class="blob-code blob-code-inner js-file-line">  Developers that use the GNU GPL protect your rights with two steps:</td>
+      </tr>
+      <tr>
+        <td id="L41" class="blob-num js-line-number" data-line-number="41"></td>
+        <td id="LC41" class="blob-code blob-code-inner js-file-line">(1) assert copyright on the software, and (2) offer you this License</td>
+      </tr>
+      <tr>
+        <td id="L42" class="blob-num js-line-number" data-line-number="42"></td>
+        <td id="LC42" class="blob-code blob-code-inner js-file-line">giving you legal permission to copy, distribute and/or modify it.</td>
+      </tr>
+      <tr>
+        <td id="L43" class="blob-num js-line-number" data-line-number="43"></td>
+        <td id="LC43" class="blob-code blob-code-inner js-file-line">
+</td>
+      </tr>
+      <tr>
+        <td id="L44" class="blob-num js-line-number" data-line-number="44"></td>
+        <td id="LC44" class="blob-code blob-code-inner js-file-line">  For the developers&#39; and authors&#39; protection, the GPL clearly explains</td>
+      </tr>
+      <tr>
+        <td id="L45" class="blob-num js-line-number" data-line-number="45"></td>
+        <td id="LC45" class="blob-code blob-code-inner js-file-line">that there is no warranty for this free software.  For both users&#39; and</td>
+      </tr>
+      <tr>
+        <td id="L46" class="blob-num js-line-number" data-line-number="46"></td>
+        <td id="LC46" class="blob-code blob-code-inner js-file-line">authors&#39; sake, the GPL requires that modified versions be marked as</td>
+      </tr>
+      <tr>
+        <td id="L47" class="blob-num js-line-number" data-line-number="47"></td>
+        <td id="LC47" class="blob-code blob-code-inner js-file-line">changed, so that their problems will not be attributed erroneously to</td>
+      </tr>
+      <tr>
+        <td id="L48" class="blob-num js-line-number" data-line-number="48"></td>
+        <td id="LC48" class="blob-code blob-code-inner js-file-line">authors of previous versions.</td>
+      </tr>
+      <tr>
+        <td id="L49" class="blob-num js-line-number" data-line-number="49"></td>
+        <td id="LC49" class="blob-code blob-code-inner js-file-line">
+</td>
+      </tr>
+      <tr>
+        <td id="L50" class="blob-num js-line-number" data-line-number="50"></td>
+        <td id="LC50" class="blob-code blob-code-inner js-file-line">  Some devices are designed to deny users access to install or run</td>
+      </tr>
+      <tr>
+        <td id="L51" class="blob-num js-line-number" data-line-number="51"></td>
+        <td id="LC51" class="blob-code blob-code-inner js-file-line">modified versions of the software inside them, although the manufacturer</td>
+      </tr>
+      <tr>
+        <td id="L52" class="blob-num js-line-number" data-line-number="52"></td>
+        <td id="LC52" class="blob-code blob-code-inner js-file-line">can do so.  This is fundamentally incompatible with the aim of</td>
+      </tr>
+      <tr>
+        <td id="L53" class="blob-num js-line-number" data-line-number="53"></td>
+        <td id="LC53" class="blob-code blob-code-inner js-file-line">protecting users&#39; freedom to change the software.  The systematic</td>
+      </tr>
+      <tr>
+        <td id="L54" class="blob-num js-line-number" data-line-number="54"></td>
+        <td id="LC54" class="blob-code blob-code-inner js-file-line">pattern of such abuse occurs in the area of products for individuals to</td>
+      </tr>
+      <tr>
+        <td id="L55" class="blob-num js-line-number" data-line-number="55"></td>
+        <td id="LC55" class="blob-code blob-code-inner js-file-line">use, which is precisely where it is most unacceptable.  Therefore, we</td>
+      </tr>
+      <tr>
+        <td id="L56" class="blob-num js-line-number" data-line-number="56"></td>
+        <td id="LC56" class="blob-code blob-code-inner js-file-line">have designed this version of the GPL to prohibit the practice for those</td>
+      </tr>
+      <tr>
+        <td id="L57" class="blob-num js-line-number" data-line-number="57"></td>
+        <td id="LC57" class="blob-code blob-code-inner js-file-line">products.  If such problems arise substantially in other domains, we</td>
+      </tr>
+      <tr>
+        <td id="L58" class="blob-num js-line-number" data-line-number="58"></td>
+        <td id="LC58" class="blob-code blob-code-inner js-file-line">stand ready to extend this provision to those domains in future versions</td>
+      </tr>
+      <tr>
+        <td id="L59" class="blob-num js-line-number" data-line-number="59"></td>
+        <td id="LC59" class="blob-code blob-code-inner js-file-line">of the GPL, as needed to protect the freedom of users.</td>
+      </tr>
+      <tr>
+        <td id="L60" class="blob-num js-line-number" data-line-number="60"></td>
+        <td id="LC60" class="blob-code blob-code-inner js-file-line">
+</td>
+      </tr>
+      <tr>
+        <td id="L61" class="blob-num js-line-number" data-line-number="61"></td>
+        <td id="LC61" class="blob-code blob-code-inner js-file-line">  Finally, every program is threatened constantly by software patents.</td>
+      </tr>
+      <tr>
+        <td id="L62" class="blob-num js-line-number" data-line-number="62"></td>
+        <td id="LC62" class="blob-code blob-code-inner js-file-line">States should not allow patents to restrict development and use of</td>
+      </tr>
+      <tr>
+        <td id="L63" class="blob-num js-line-number" data-line-number="63"></td>
+        <td id="LC63" class="blob-code blob-code-inner js-file-line">software on general-purpose computers, but in those that do, we wish to</td>
+      </tr>
+      <tr>
+        <td id="L64" class="blob-num js-line-number" data-line-number="64"></td>
+        <td id="LC64" class="blob-code blob-code-inner js-file-line">avoid the special danger that patents applied to a free program could</td>
+      </tr>
+      <tr>
+        <td id="L65" class="blob-num js-line-number" data-line-number="65"></td>
+        <td id="LC65" class="blob-code blob-code-inner js-file-line">make it effectively proprietary.  To prevent this, the GPL assures that</td>
+      </tr>
+      <tr>
+        <td id="L66" class="blob-num js-line-number" data-line-number="66"></td>
+        <td id="LC66" class="blob-code blob-code-inner js-file-line">patents cannot be used to render the program non-free.</td>
+      </tr>
+      <tr>
+        <td id="L67" class="blob-num js-line-number" data-line-number="67"></td>
+        <td id="LC67" class="blob-code blob-code-inner js-file-line">
+</td>
+      </tr>
+      <tr>
+        <td id="L68" class="blob-num js-line-number" data-line-number="68"></td>
+        <td id="LC68" class="blob-code blob-code-inner js-file-line">  The precise terms and conditions for copying, distribution and</td>
+      </tr>
+      <tr>
+        <td id="L69" class="blob-num js-line-number" data-line-number="69"></td>
+        <td id="LC69" class="blob-code blob-code-inner js-file-line">modification follow.</td>
+      </tr>
+      <tr>
+        <td id="L70" class="blob-num js-line-number" data-line-number="70"></td>
+        <td id="LC70" class="blob-code blob-code-inner js-file-line">
+</td>
+      </tr>
+      <tr>
+        <td id="L71" class="blob-num js-line-number" data-line-number="71"></td>
+        <td id="LC71" class="blob-code blob-code-inner js-file-line">                       TERMS AND CONDITIONS</td>
+      </tr>
+      <tr>
+        <td id="L72" class="blob-num js-line-number" data-line-number="72"></td>
+        <td id="LC72" class="blob-code blob-code-inner js-file-line">
+</td>
+      </tr>
+      <tr>
+        <td id="L73" class="blob-num js-line-number" data-line-number="73"></td>
+        <td id="LC73" class="blob-code blob-code-inner js-file-line">  0. Definitions.</td>
+      </tr>
+      <tr>
+        <td id="L74" class="blob-num js-line-number" data-line-number="74"></td>
+        <td id="LC74" class="blob-code blob-code-inner js-file-line">
+</td>
+      </tr>
+      <tr>
+        <td id="L75" class="blob-num js-line-number" data-line-number="75"></td>
+        <td id="LC75" class="blob-code blob-code-inner js-file-line">  &quot;This License&quot; refers to version 3 of the GNU General Public License.</td>
+      </tr>
+      <tr>
+        <td id="L76" class="blob-num js-line-number" data-line-number="76"></td>
+        <td id="LC76" class="blob-code blob-code-inner js-file-line">
+</td>
+      </tr>
+      <tr>
+        <td id="L77" class="blob-num js-line-number" data-line-number="77"></td>
+        <td id="LC77" class="blob-code blob-code-inner js-file-line">  &quot;Copyright&quot; also means copyright-like laws that apply to other kinds of</td>
+      </tr>
+      <tr>
+        <td id="L78" class="blob-num js-line-number" data-line-number="78"></td>
+        <td id="LC78" class="blob-code blob-code-inner js-file-line">works, such as semiconductor masks.</td>
+      </tr>
+      <tr>
+        <td id="L79" class="blob-num js-line-number" data-line-number="79"></td>
+        <td id="LC79" class="blob-code blob-code-inner js-file-line">
+</td>
+      </tr>
+      <tr>
+        <td id="L80" class="blob-num js-line-number" data-line-number="80"></td>
+        <td id="LC80" class="blob-code blob-code-inner js-file-line">  &quot;The Program&quot; refers to any copyrightable work licensed under this</td>
+      </tr>
+      <tr>
+        <td id="L81" class="blob-num js-line-number" data-line-number="81"></td>
+        <td id="LC81" class="blob-code blob-code-inner js-file-line">License.  Each licensee is addressed as &quot;you&quot;.  &quot;Licensees&quot; and</td>
+      </tr>
+      <tr>
+        <td id="L82" class="blob-num js-line-number" data-line-number="82"></td>
+        <td id="LC82" class="blob-code blob-code-inner js-file-line">&quot;recipients&quot; may be individuals or organizations.</td>
+      </tr>
+      <tr>
+        <td id="L83" class="blob-num js-line-number" data-line-number="83"></td>
+        <td id="LC83" class="blob-code blob-code-inner js-file-line">
+</td>
+      </tr>
+      <tr>
+        <td id="L84" class="blob-num js-line-number" data-line-number="84"></td>
+        <td id="LC84" class="blob-code blob-code-inner js-file-line">  To &quot;modify&quot; a work means to copy from or adapt all or part of the work</td>
+      </tr>
+      <tr>
+        <td id="L85" class="blob-num js-line-number" data-line-number="85"></td>
+        <td id="LC85" class="blob-code blob-code-inner js-file-line">in a fashion requiring copyright permission, other than the making of an</td>
+      </tr>
+      <tr>
+        <td id="L86" class="blob-num js-line-number" data-line-number="86"></td>
+        <td id="LC86" class="blob-code blob-code-inner js-file-line">exact copy.  The resulting work is called a &quot;modified version&quot; of the</td>
+      </tr>
+      <tr>
+        <td id="L87" class="blob-num js-line-number" data-line-number="87"></td>
+        <td id="LC87" class="blob-code blob-code-inner js-file-line">earlier work or a work &quot;based on&quot; the earlier work.</td>
+      </tr>
+      <tr>
+        <td id="L88" class="blob-num js-line-number" data-line-number="88"></td>
+        <td id="LC88" class="blob-code blob-code-inner js-file-line">
+</td>
+      </tr>
+      <tr>
+        <td id="L89" class="blob-num js-line-number" data-line-number="89"></td>
+        <td id="LC89" class="blob-code blob-code-inner js-file-line">  A &quot;covered work&quot; means either the unmodified Program or a work based</td>
+      </tr>
+      <tr>
+        <td id="L90" class="blob-num js-line-number" data-line-number="90"></td>
+        <td id="LC90" class="blob-code blob-code-inner js-file-line">on the Program.</td>
+      </tr>
+      <tr>
+        <td id="L91" class="blob-num js-line-number" data-line-number="91"></td>
+        <td id="LC91" class="blob-code blob-code-inner js-file-line">
+</td>
+      </tr>
+      <tr>
+        <td id="L92" class="blob-num js-line-number" data-line-number="92"></td>
+        <td id="LC92" class="blob-code blob-code-inner js-file-line">  To &quot;propagate&quot; a work means to do anything with it that, without</td>
+      </tr>
+      <tr>
+        <td id="L93" class="blob-num js-line-number" data-line-number="93"></td>
+        <td id="LC93" class="blob-code blob-code-inner js-file-line">permission, would make you directly or secondarily liable for</td>
+      </tr>
+      <tr>
+        <td id="L94" class="blob-num js-line-number" data-line-number="94"></td>
+        <td id="LC94" class="blob-code blob-code-inner js-file-line">infringement under applicable copyright law, except executing it on a</td>
+      </tr>
+      <tr>
+        <td id="L95" class="blob-num js-line-number" data-line-number="95"></td>
+        <td id="LC95" class="blob-code blob-code-inner js-file-line">computer or modifying a private copy.  Propagation includes copying,</td>
+      </tr>
+      <tr>
+        <td id="L96" class="blob-num js-line-number" data-line-number="96"></td>
+        <td id="LC96" class="blob-code blob-code-inner js-file-line">distribution (with or without modification), making available to the</td>
+      </tr>
+      <tr>
+        <td id="L97" class="blob-num js-line-number" data-line-number="97"></td>
+        <td id="LC97" class="blob-code blob-code-inner js-file-line">public, and in some countries other activities as well.</td>
+      </tr>
+      <tr>
+        <td id="L98" class="blob-num js-line-number" data-line-number="98"></td>
+        <td id="LC98" class="blob-code blob-code-inner js-file-line">
+</td>
+      </tr>
+      <tr>
+        <td id="L99" class="blob-num js-line-number" data-line-number="99"></td>
+        <td id="LC99" class="blob-code blob-code-inner js-file-line">  To &quot;convey&quot; a work means any kind of propagation that enables other</td>
+      </tr>
+      <tr>
+        <td id="L100" class="blob-num js-line-number" data-line-number="100"></td>
+        <td id="LC100" class="blob-code blob-code-inner js-file-line">parties to make or receive copies.  Mere interaction with a user through</td>
+      </tr>
+      <tr>
+        <td id="L101" class="blob-num js-line-number" data-line-number="101"></td>
+        <td id="LC101" class="blob-code blob-code-inner js-file-line">a computer network, with no transfer of a copy, is not conveying.</td>
+      </tr>
+      <tr>
+        <td id="L102" class="blob-num js-line-number" data-line-number="102"></td>
+        <td id="LC102" class="blob-code blob-code-inner js-file-line">
+</td>
+      </tr>
+      <tr>
+        <td id="L103" class="blob-num js-line-number" data-line-number="103"></td>
+        <td id="LC103" class="blob-code blob-code-inner js-file-line">  An interactive user interface displays &quot;Appropriate Legal Notices&quot;</td>
+      </tr>
+      <tr>
+        <td id="L104" class="blob-num js-line-number" data-line-number="104"></td>
+        <td id="LC104" class="blob-code blob-code-inner js-file-line">to the extent that it includes a convenient and prominently visible</td>
+      </tr>
+      <tr>
+        <td id="L105" class="blob-num js-line-number" data-line-number="105"></td>
+        <td id="LC105" class="blob-code blob-code-inner js-file-line">feature that (1) displays an appropriate copyright notice, and (2)</td>
+      </tr>
+      <tr>
+        <td id="L106" class="blob-num js-line-number" data-line-number="106"></td>
+        <td id="LC106" class="blob-code blob-code-inner js-file-line">tells the user that there is no warranty for the work (except to the</td>
+      </tr>
+      <tr>
+        <td id="L107" class="blob-num js-line-number" data-line-number="107"></td>
+        <td id="LC107" class="blob-code blob-code-inner js-file-line">extent that warranties are provided), that licensees may convey the</td>
+      </tr>
+      <tr>
+        <td id="L108" class="blob-num js-line-number" data-line-number="108"></td>
+        <td id="LC108" class="blob-code blob-code-inner js-file-line">work under this License, and how to view a copy of this License.  If</td>
+      </tr>
+      <tr>
+        <td id="L109" class="blob-num js-line-number" data-line-number="109"></td>
+        <td id="LC109" class="blob-code blob-code-inner js-file-line">the interface presents a list of user commands or options, such as a</td>
+      </tr>
+      <tr>
+        <td id="L110" class="blob-num js-line-number" data-line-number="110"></td>
+        <td id="LC110" class="blob-code blob-code-inner js-file-line">menu, a prominent item in the list meets this criterion.</td>
+      </tr>
+      <tr>
+        <td id="L111" class="blob-num js-line-number" data-line-number="111"></td>
+        <td id="LC111" class="blob-code blob-code-inner js-file-line">
+</td>
+      </tr>
+      <tr>
+        <td id="L112" class="blob-num js-line-number" data-line-number="112"></td>
+        <td id="LC112" class="blob-code blob-code-inner js-file-line">  1. Source Code.</td>
+      </tr>
+      <tr>
+        <td id="L113" class="blob-num js-line-number" data-line-number="113"></td>
+        <td id="LC113" class="blob-code blob-code-inner js-file-line">
+</td>
+      </tr>
+      <tr>
+        <td id="L114" class="blob-num js-line-number" data-line-number="114"></td>
+        <td id="LC114" class="blob-code blob-code-inner js-file-line">  The &quot;source code&quot; for a work means the preferred form of the work</td>
+      </tr>
+      <tr>
+        <td id="L115" class="blob-num js-line-number" data-line-number="115"></td>
+        <td id="LC115" class="blob-code blob-code-inner js-file-line">for making modifications to it.  &quot;Object code&quot; means any non-source</td>
+      </tr>
+      <tr>
+        <td id="L116" class="blob-num js-line-number" data-line-number="116"></td>
+        <td id="LC116" class="blob-code blob-code-inner js-file-line">form of a work.</td>
+      </tr>
+      <tr>
+        <td id="L117" class="blob-num js-line-number" data-line-number="117"></td>
+        <td id="LC117" class="blob-code blob-code-inner js-file-line">
+</td>
+      </tr>
+      <tr>
+        <td id="L118" class="blob-num js-line-number" data-line-number="118"></td>
+        <td id="LC118" class="blob-code blob-code-inner js-file-line">  A &quot;Standard Interface&quot; means an interface that either is an official</td>
+      </tr>
+      <tr>
+        <td id="L119" class="blob-num js-line-number" data-line-number="119"></td>
+        <td id="LC119" class="blob-code blob-code-inner js-file-line">standard defined by a recognized standards body, or, in the case of</td>
+      </tr>
+      <tr>
+        <td id="L120" class="blob-num js-line-number" data-line-number="120"></td>
+        <td id="LC120" class="blob-code blob-code-inner js-file-line">interfaces specified for a particular programming language, one that</td>
+      </tr>
+      <tr>
+        <td id="L121" class="blob-num js-line-number" data-line-number="121"></td>
+        <td id="LC121" class="blob-code blob-code-inner js-file-line">is widely used among developers working in that language.</td>
+      </tr>
+      <tr>
+        <td id="L122" class="blob-num js-line-number" data-line-number="122"></td>
+        <td id="LC122" class="blob-code blob-code-inner js-file-line">
+</td>
+      </tr>
+      <tr>
+        <td id="L123" class="blob-num js-line-number" data-line-number="123"></td>
+        <td id="LC123" class="blob-code blob-code-inner js-file-line">  The &quot;System Libraries&quot; of an executable work include anything, other</td>
+      </tr>
+      <tr>
+        <td id="L124" class="blob-num js-line-number" data-line-number="124"></td>
+        <td id="LC124" class="blob-code blob-code-inner js-file-line">than the work as a whole, that (a) is included in the normal form of</td>
+      </tr>
+      <tr>
+        <td id="L125" class="blob-num js-line-number" data-line-number="125"></td>
+        <td id="LC125" class="blob-code blob-code-inner js-file-line">packaging a Major Component, but which is not part of that Major</td>
+      </tr>
+      <tr>
+        <td id="L126" class="blob-num js-line-number" data-line-number="126"></td>
+        <td id="LC126" class="blob-code blob-code-inner js-file-line">Component, and (b) serves only to enable use of the work with that</td>
+      </tr>
+      <tr>
+        <td id="L127" class="blob-num js-line-number" data-line-number="127"></td>
+        <td id="LC127" class="blob-code blob-code-inner js-file-line">Major Component, or to implement a Standard Interface for which an</td>
+      </tr>
+      <tr>
+        <td id="L128" class="blob-num js-line-number" data-line-number="128"></td>
+        <td id="LC128" class="blob-code blob-code-inner js-file-line">implementation is available to the public in source code form.  A</td>
+      </tr>
+      <tr>
+        <td id="L129" class="blob-num js-line-number" data-line-number="129"></td>
+        <td id="LC129" class="blob-code blob-code-inner js-file-line">&quot;Major Component&quot;, in this context, means a major essential component</td>
+      </tr>
+      <tr>
+        <td id="L130" class="blob-num js-line-number" data-line-number="130"></td>
+        <td id="LC130" class="blob-code blob-code-inner js-file-line">(kernel, window system, and so on) of the specific operating system</td>
+      </tr>
+      <tr>
+        <td id="L131" class="blob-num js-line-number" data-line-number="131"></td>
+        <td id="LC131" class="blob-code blob-code-inner js-file-line">(if any) on which the executable work runs, or a compiler used to</td>
+      </tr>
+      <tr>
+        <td id="L132" class="blob-num js-line-number" data-line-number="132"></td>
+        <td id="LC132" class="blob-code blob-code-inner js-file-line">produce the work, or an object code interpreter used to run it.</td>
+      </tr>
+      <tr>
+        <td id="L133" class="blob-num js-line-number" data-line-number="133"></td>
+        <td id="LC133" class="blob-code blob-code-inner js-file-line">
+</td>
+      </tr>
+      <tr>
+        <td id="L134" class="blob-num js-line-number" data-line-number="134"></td>
+        <td id="LC134" class="blob-code blob-code-inner js-file-line">  The &quot;Corresponding Source&quot; for a work in object code form means all</td>
+      </tr>
+      <tr>
+        <td id="L135" class="blob-num js-line-number" data-line-number="135"></td>
+        <td id="LC135" class="blob-code blob-code-inner js-file-line">the source code needed to generate, install, and (for an executable</td>
+      </tr>
+      <tr>
+        <td id="L136" class="blob-num js-line-number" data-line-number="136"></td>
+        <td id="LC136" class="blob-code blob-code-inner js-file-line">work) run the object code and to modify the work, including scripts to</td>
+      </tr>
+      <tr>
+        <td id="L137" class="blob-num js-line-number" data-line-number="137"></td>
+        <td id="LC137" class="blob-code blob-code-inner js-file-line">control those activities.  However, it does not include the work&#39;s</td>
+      </tr>
+      <tr>
+        <td id="L138" class="blob-num js-line-number" data-line-number="138"></td>
+        <td id="LC138" class="blob-code blob-code-inner js-file-line">System Libraries, or general-purpose tools or generally available free</td>
+      </tr>
+      <tr>
+        <td id="L139" class="blob-num js-line-number" data-line-number="139"></td>
+        <td id="LC139" class="blob-code blob-code-inner js-file-line">programs which are used unmodified in performing those activities but</td>
+      </tr>
+      <tr>
+        <td id="L140" class="blob-num js-line-number" data-line-number="140"></td>
+        <td id="LC140" class="blob-code blob-code-inner js-file-line">which are not part of the work.  For example, Corresponding Source</td>
+      </tr>
+      <tr>
+        <td id="L141" class="blob-num js-line-number" data-line-number="141"></td>
+        <td id="LC141" class="blob-code blob-code-inner js-file-line">includes interface definition files associated with source files for</td>
+      </tr>
+      <tr>
+        <td id="L142" class="blob-num js-line-number" data-line-number="142"></td>
+        <td id="LC142" class="blob-code blob-code-inner js-file-line">the work, and the source code for shared libraries and dynamically</td>
+      </tr>
+      <tr>
+        <td id="L143" class="blob-num js-line-number" data-line-number="143"></td>
+        <td id="LC143" class="blob-code blob-code-inner js-file-line">linked subprograms that the work is specifically designed to require,</td>
+      </tr>
+      <tr>
+        <td id="L144" class="blob-num js-line-number" data-line-number="144"></td>
+        <td id="LC144" class="blob-code blob-code-inner js-file-line">such as by intimate data communication or control flow between those</td>
+      </tr>
+      <tr>
+        <td id="L145" class="blob-num js-line-number" data-line-number="145"></td>
+        <td id="LC145" class="blob-code blob-code-inner js-file-line">subprograms and other parts of the work.</td>
+      </tr>
+      <tr>
+        <td id="L146" class="blob-num js-line-number" data-line-number="146"></td>
+        <td id="LC146" class="blob-code blob-code-inner js-file-line">
+</td>
+      </tr>
+      <tr>
+        <td id="L147" class="blob-num js-line-number" data-line-number="147"></td>
+        <td id="LC147" class="blob-code blob-code-inner js-file-line">  The Corresponding Source need not include anything that users</td>
+      </tr>
+      <tr>
+        <td id="L148" class="blob-num js-line-number" data-line-number="148"></td>
+        <td id="LC148" class="blob-code blob-code-inner js-file-line">can regenerate automatically from other parts of the Corresponding</td>
+      </tr>
+      <tr>
+        <td id="L149" class="blob-num js-line-number" data-line-number="149"></td>
+        <td id="LC149" class="blob-code blob-code-inner js-file-line">Source.</td>
+      </tr>
+      <tr>
+        <td id="L150" class="blob-num js-line-number" data-line-number="150"></td>
+        <td id="LC150" class="blob-code blob-code-inner js-file-line">
+</td>
+      </tr>
+      <tr>
+        <td id="L151" class="blob-num js-line-number" data-line-number="151"></td>
+        <td id="LC151" class="blob-code blob-code-inner js-file-line">  The Corresponding Source for a work in source code form is that</td>
+      </tr>
+      <tr>
+        <td id="L152" class="blob-num js-line-number" data-line-number="152"></td>
+        <td id="LC152" class="blob-code blob-code-inner js-file-line">same work.</td>
+      </tr>
+      <tr>
+        <td id="L153" class="blob-num js-line-number" data-line-number="153"></td>
+        <td id="LC153" class="blob-code blob-code-inner js-file-line">
+</td>
+      </tr>
+      <tr>
+        <td id="L154" class="blob-num js-line-number" data-line-number="154"></td>
+        <td id="LC154" class="blob-code blob-code-inner js-file-line">  2. Basic Permissions.</td>
+      </tr>
+      <tr>
+        <td id="L155" class="blob-num js-line-number" data-line-number="155"></td>
+        <td id="LC155" class="blob-code blob-code-inner js-file-line">
+</td>
+      </tr>
+      <tr>
+        <td id="L156" class="blob-num js-line-number" data-line-number="156"></td>
+        <td id="LC156" class="blob-code blob-code-inner js-file-line">  All rights granted under this License are granted for the term of</td>
+      </tr>
+      <tr>
+        <td id="L157" class="blob-num js-line-number" data-line-number="157"></td>
+        <td id="LC157" class="blob-code blob-code-inner js-file-line">copyright on the Program, and are irrevocable provided the stated</td>
+      </tr>
+      <tr>
+        <td id="L158" class="blob-num js-line-number" data-line-number="158"></td>
+        <td id="LC158" class="blob-code blob-code-inner js-file-line">conditions are met.  This License explicitly affirms your unlimited</td>
+      </tr>
+      <tr>
+        <td id="L159" class="blob-num js-line-number" data-line-number="159"></td>
+        <td id="LC159" class="blob-code blob-code-inner js-file-line">permission to run the unmodified Program.  The output from running a</td>
+      </tr>
+      <tr>
+        <td id="L160" class="blob-num js-line-number" data-line-number="160"></td>
+        <td id="LC160" class="blob-code blob-code-inner js-file-line">covered work is covered by this License only if the output, given its</td>
+      </tr>
+      <tr>
+        <td id="L161" class="blob-num js-line-number" data-line-number="161"></td>
+        <td id="LC161" class="blob-code blob-code-inner js-file-line">content, constitutes a covered work.  This License acknowledges your</td>
+      </tr>
+      <tr>
+        <td id="L162" class="blob-num js-line-number" data-line-number="162"></td>
+        <td id="LC162" class="blob-code blob-code-inner js-file-line">rights of fair use or other equivalent, as provided by copyright law.</td>
+      </tr>
+      <tr>
+        <td id="L163" class="blob-num js-line-number" data-line-number="163"></td>
+        <td id="LC163" class="blob-code blob-code-inner js-file-line">
+</td>
+      </tr>
+      <tr>
+        <td id="L164" class="blob-num js-line-number" data-line-number="164"></td>
+        <td id="LC164" class="blob-code blob-code-inner js-file-line">  You may make, run and propagate covered works that you do not</td>
+      </tr>
+      <tr>
+        <td id="L165" class="blob-num js-line-number" data-line-number="165"></td>
+        <td id="LC165" class="blob-code blob-code-inner js-file-line">convey, without conditions so long as your license otherwise remains</td>
+      </tr>
+      <tr>
+        <td id="L166" class="blob-num js-line-number" data-line-number="166"></td>
+        <td id="LC166" class="blob-code blob-code-inner js-file-line">in force.  You may convey covered works to others for the sole purpose</td>
+      </tr>
+      <tr>
+        <td id="L167" class="blob-num js-line-number" data-line-number="167"></td>
+        <td id="LC167" class="blob-code blob-code-inner js-file-line">of having them make modifications exclusively for you, or provide you</td>
+      </tr>
+      <tr>
+        <td id="L168" class="blob-num js-line-number" data-line-number="168"></td>
+        <td id="LC168" class="blob-code blob-code-inner js-file-line">with facilities for running those works, provided that you comply with</td>
+      </tr>
+      <tr>
+        <td id="L169" class="blob-num js-line-number" data-line-number="169"></td>
+        <td id="LC169" class="blob-code blob-code-inner js-file-line">the terms of this License in conveying all material for which you do</td>
+      </tr>
+      <tr>
+        <td id="L170" class="blob-num js-line-number" data-line-number="170"></td>
+        <td id="LC170" class="blob-code blob-code-inner js-file-line">not control copyright.  Those thus making or running the covered works</td>
+      </tr>
+      <tr>
+        <td id="L171" class="blob-num js-line-number" data-line-number="171"></td>
+        <td id="LC171" class="blob-code blob-code-inner js-file-line">for you must do so exclusively on your behalf, under your direction</td>
+      </tr>
+      <tr>
+        <td id="L172" class="blob-num js-line-number" data-line-number="172"></td>
+        <td id="LC172" class="blob-code blob-code-inner js-file-line">and control, on terms that prohibit them from making any copies of</td>
+      </tr>
+      <tr>
+        <td id="L173" class="blob-num js-line-number" data-line-number="173"></td>
+        <td id="LC173" class="blob-code blob-code-inner js-file-line">your copyrighted material outside their relationship with you.</td>
+      </tr>
+      <tr>
+        <td id="L174" class="blob-num js-line-number" data-line-number="174"></td>
+        <td id="LC174" class="blob-code blob-code-inner js-file-line">
+</td>
+      </tr>
+      <tr>
+        <td id="L175" class="blob-num js-line-number" data-line-number="175"></td>
+        <td id="LC175" class="blob-code blob-code-inner js-file-line">  Conveying under any other circumstances is permitted solely under</td>
+      </tr>
+      <tr>
+        <td id="L176" class="blob-num js-line-number" data-line-number="176"></td>
+        <td id="LC176" class="blob-code blob-code-inner js-file-line">the conditions stated below.  Sublicensing is not allowed; section 10</td>
+      </tr>
+      <tr>
+        <td id="L177" class="blob-num js-line-number" data-line-number="177"></td>
+        <td id="LC177" class="blob-code blob-code-inner js-file-line">makes it unnecessary.</td>
+      </tr>
+      <tr>
+        <td id="L178" class="blob-num js-line-number" data-line-number="178"></td>
+        <td id="LC178" class="blob-code blob-code-inner js-file-line">
+</td>
+      </tr>
+      <tr>
+        <td id="L179" class="blob-num js-line-number" data-line-number="179"></td>
+        <td id="LC179" class="blob-code blob-code-inner js-file-line">  3. Protecting Users&#39; Legal Rights From Anti-Circumvention Law.</td>
+      </tr>
+      <tr>
+        <td id="L180" class="blob-num js-line-number" data-line-number="180"></td>
+        <td id="LC180" class="blob-code blob-code-inner js-file-line">
+</td>
+      </tr>
+      <tr>
+        <td id="L181" class="blob-num js-line-number" data-line-number="181"></td>
+        <td id="LC181" class="blob-code blob-code-inner js-file-line">  No covered work shall be deemed part of an effective technological</td>
+      </tr>
+      <tr>
+        <td id="L182" class="blob-num js-line-number" data-line-number="182"></td>
+        <td id="LC182" class="blob-code blob-code-inner js-file-line">measure under any applicable law fulfilling obligations under article</td>
+      </tr>
+      <tr>
+        <td id="L183" class="blob-num js-line-number" data-line-number="183"></td>
+        <td id="LC183" class="blob-code blob-code-inner js-file-line">11 of the WIPO copyright treaty adopted on 20 December 1996, or</td>
+      </tr>
+      <tr>
+        <td id="L184" class="blob-num js-line-number" data-line-number="184"></td>
+        <td id="LC184" class="blob-code blob-code-inner js-file-line">similar laws prohibiting or restricting circumvention of such</td>
+      </tr>
+      <tr>
+        <td id="L185" class="blob-num js-line-number" data-line-number="185"></td>
+        <td id="LC185" class="blob-code blob-code-inner js-file-line">measures.</td>
+      </tr>
+      <tr>
+        <td id="L186" class="blob-num js-line-number" data-line-number="186"></td>
+        <td id="LC186" class="blob-code blob-code-inner js-file-line">
+</td>
+      </tr>
+      <tr>
+        <td id="L187" class="blob-num js-line-number" data-line-number="187"></td>
+        <td id="LC187" class="blob-code blob-code-inner js-file-line">  When you convey a covered work, you waive any legal power to forbid</td>
+      </tr>
+      <tr>
+        <td id="L188" class="blob-num js-line-number" data-line-number="188"></td>
+        <td id="LC188" class="blob-code blob-code-inner js-file-line">circumvention of technological measures to the extent such circumvention</td>
+      </tr>
+      <tr>
+        <td id="L189" class="blob-num js-line-number" data-line-number="189"></td>
+        <td id="LC189" class="blob-code blob-code-inner js-file-line">is effected by exercising rights under this License with respect to</td>
+      </tr>
+      <tr>
+        <td id="L190" class="blob-num js-line-number" data-line-number="190"></td>
+        <td id="LC190" class="blob-code blob-code-inner js-file-line">the covered work, and you disclaim any intention to limit operation or</td>
+      </tr>
+      <tr>
+        <td id="L191" class="blob-num js-line-number" data-line-number="191"></td>
+        <td id="LC191" class="blob-code blob-code-inner js-file-line">modification of the work as a means of enforcing, against the work&#39;s</td>
+      </tr>
+      <tr>
+        <td id="L192" class="blob-num js-line-number" data-line-number="192"></td>
+        <td id="LC192" class="blob-code blob-code-inner js-file-line">users, your or third parties&#39; legal rights to forbid circumvention of</td>
+      </tr>
+      <tr>
+        <td id="L193" class="blob-num js-line-number" data-line-number="193"></td>
+        <td id="LC193" class="blob-code blob-code-inner js-file-line">technological measures.</td>
+      </tr>
+      <tr>
+        <td id="L194" class="blob-num js-line-number" data-line-number="194"></td>
+        <td id="LC194" class="blob-code blob-code-inner js-file-line">
+</td>
+      </tr>
+      <tr>
+        <td id="L195" class="blob-num js-line-number" data-line-number="195"></td>
+        <td id="LC195" class="blob-code blob-code-inner js-file-line">  4. Conveying Verbatim Copies.</td>
+      </tr>
+      <tr>
+        <td id="L196" class="blob-num js-line-number" data-line-number="196"></td>
+        <td id="LC196" class="blob-code blob-code-inner js-file-line">
+</td>
+      </tr>
+      <tr>
+        <td id="L197" class="blob-num js-line-number" data-line-number="197"></td>
+        <td id="LC197" class="blob-code blob-code-inner js-file-line">  You may convey verbatim copies of the Program&#39;s source code as you</td>
+      </tr>
+      <tr>
+        <td id="L198" class="blob-num js-line-number" data-line-number="198"></td>
+        <td id="LC198" class="blob-code blob-code-inner js-file-line">receive it, in any medium, provided that you conspicuously and</td>
+      </tr>
+      <tr>
+        <td id="L199" class="blob-num js-line-number" data-line-number="199"></td>
+        <td id="LC199" class="blob-code blob-code-inner js-file-line">appropriately publish on each copy an appropriate copyright notice;</td>
+      </tr>
+      <tr>
+        <td id="L200" class="blob-num js-line-number" data-line-number="200"></td>
+        <td id="LC200" class="blob-code blob-code-inner js-file-line">keep intact all notices stating that this License and any</td>
+      </tr>
+      <tr>
+        <td id="L201" class="blob-num js-line-number" data-line-number="201"></td>
+        <td id="LC201" class="blob-code blob-code-inner js-file-line">non-permissive terms added in accord with section 7 apply to the code;</td>
+      </tr>
+      <tr>
+        <td id="L202" class="blob-num js-line-number" data-line-number="202"></td>
+        <td id="LC202" class="blob-code blob-code-inner js-file-line">keep intact all notices of the absence of any warranty; and give all</td>
+      </tr>
+      <tr>
+        <td id="L203" class="blob-num js-line-number" data-line-number="203"></td>
+        <td id="LC203" class="blob-code blob-code-inner js-file-line">recipients a copy of this License along with the Program.</td>
+      </tr>
+      <tr>
+        <td id="L204" class="blob-num js-line-number" data-line-number="204"></td>
+        <td id="LC204" class="blob-code blob-code-inner js-file-line">
+</td>
+      </tr>
+      <tr>
+        <td id="L205" class="blob-num js-line-number" data-line-number="205"></td>
+        <td id="LC205" class="blob-code blob-code-inner js-file-line">  You may charge any price or no price for each copy that you convey,</td>
+      </tr>
+      <tr>
+        <td id="L206" class="blob-num js-line-number" data-line-number="206"></td>
+        <td id="LC206" class="blob-code blob-code-inner js-file-line">and you may offer support or warranty protection for a fee.</td>
+      </tr>
+      <tr>
+        <td id="L207" class="blob-num js-line-number" data-line-number="207"></td>
+        <td id="LC207" class="blob-code blob-code-inner js-file-line">
+</td>
+      </tr>
+      <tr>
+        <td id="L208" class="blob-num js-line-number" data-line-number="208"></td>
+        <td id="LC208" class="blob-code blob-code-inner js-file-line">  5. Conveying Modified Source Versions.</td>
+      </tr>
+      <tr>
+        <td id="L209" class="blob-num js-line-number" data-line-number="209"></td>
+        <td id="LC209" class="blob-code blob-code-inner js-file-line">
+</td>
+      </tr>
+      <tr>
+        <td id="L210" class="blob-num js-line-number" data-line-number="210"></td>
+        <td id="LC210" class="blob-code blob-code-inner js-file-line">  You may convey a work based on the Program, or the modifications to</td>
+      </tr>
+      <tr>
+        <td id="L211" class="blob-num js-line-number" data-line-number="211"></td>
+        <td id="LC211" class="blob-code blob-code-inner js-file-line">produce it from the Program, in the form of source code under the</td>
+      </tr>
+      <tr>
+        <td id="L212" class="blob-num js-line-number" data-line-number="212"></td>
+        <td id="LC212" class="blob-code blob-code-inner js-file-line">terms of section 4, provided that you also meet all of these conditions:</td>
+      </tr>
+      <tr>
+        <td id="L213" class="blob-num js-line-number" data-line-number="213"></td>
+        <td id="LC213" class="blob-code blob-code-inner js-file-line">
+</td>
+      </tr>
+      <tr>
+        <td id="L214" class="blob-num js-line-number" data-line-number="214"></td>
+        <td id="LC214" class="blob-code blob-code-inner js-file-line">    a) The work must carry prominent notices stating that you modified</td>
+      </tr>
+      <tr>
+        <td id="L215" class="blob-num js-line-number" data-line-number="215"></td>
+        <td id="LC215" class="blob-code blob-code-inner js-file-line">    it, and giving a relevant date.</td>
+      </tr>
+      <tr>
+        <td id="L216" class="blob-num js-line-number" data-line-number="216"></td>
+        <td id="LC216" class="blob-code blob-code-inner js-file-line">
+</td>
+      </tr>
+      <tr>
+        <td id="L217" class="blob-num js-line-number" data-line-number="217"></td>
+        <td id="LC217" class="blob-code blob-code-inner js-file-line">    b) The work must carry prominent notices stating that it is</td>
+      </tr>
+      <tr>
+        <td id="L218" class="blob-num js-line-number" data-line-number="218"></td>
+        <td id="LC218" class="blob-code blob-code-inner js-file-line">    released under this License and any conditions added under section</td>
+      </tr>
+      <tr>
+        <td id="L219" class="blob-num js-line-number" data-line-number="219"></td>
+        <td id="LC219" class="blob-code blob-code-inner js-file-line">    7.  This requirement modifies the requirement in section 4 to</td>
+      </tr>
+      <tr>
+        <td id="L220" class="blob-num js-line-number" data-line-number="220"></td>
+        <td id="LC220" class="blob-code blob-code-inner js-file-line">    &quot;keep intact all notices&quot;.</td>
+      </tr>
+      <tr>
+        <td id="L221" class="blob-num js-line-number" data-line-number="221"></td>
+        <td id="LC221" class="blob-code blob-code-inner js-file-line">
+</td>
+      </tr>
+      <tr>
+        <td id="L222" class="blob-num js-line-number" data-line-number="222"></td>
+        <td id="LC222" class="blob-code blob-code-inner js-file-line">    c) You must license the entire work, as a whole, under this</td>
+      </tr>
+      <tr>
+        <td id="L223" class="blob-num js-line-number" data-line-number="223"></td>
+        <td id="LC223" class="blob-code blob-code-inner js-file-line">    License to anyone who comes into possession of a copy.  This</td>
+      </tr>
+      <tr>
+        <td id="L224" class="blob-num js-line-number" data-line-number="224"></td>
+        <td id="LC224" class="blob-code blob-code-inner js-file-line">    License will therefore apply, along with any applicable section 7</td>
+      </tr>
+      <tr>
+        <td id="L225" class="blob-num js-line-number" data-line-number="225"></td>
+        <td id="LC225" class="blob-code blob-code-inner js-file-line">    additional terms, to the whole of the work, and all its parts,</td>
+      </tr>
+      <tr>
+        <td id="L226" class="blob-num js-line-number" data-line-number="226"></td>
+        <td id="LC226" class="blob-code blob-code-inner js-file-line">    regardless of how they are packaged.  This License gives no</td>
+      </tr>
+      <tr>
+        <td id="L227" class="blob-num js-line-number" data-line-number="227"></td>
+        <td id="LC227" class="blob-code blob-code-inner js-file-line">    permission to license the work in any other way, but it does not</td>
+      </tr>
+      <tr>
+        <td id="L228" class="blob-num js-line-number" data-line-number="228"></td>
+        <td id="LC228" class="blob-code blob-code-inner js-file-line">    invalidate such permission if you have separately received it.</td>
+      </tr>
+      <tr>
+        <td id="L229" class="blob-num js-line-number" data-line-number="229"></td>
+        <td id="LC229" class="blob-code blob-code-inner js-file-line">
+</td>
+      </tr>
+      <tr>
+        <td id="L230" class="blob-num js-line-number" data-line-number="230"></td>
+        <td id="LC230" class="blob-code blob-code-inner js-file-line">    d) If the work has interactive user interfaces, each must display</td>
+      </tr>
+      <tr>
+        <td id="L231" class="blob-num js-line-number" data-line-number="231"></td>
+        <td id="LC231" class="blob-code blob-code-inner js-file-line">    Appropriate Legal Notices; however, if the Program has interactive</td>
+      </tr>
+      <tr>
+        <td id="L232" class="blob-num js-line-number" data-line-number="232"></td>
+        <td id="LC232" class="blob-code blob-code-inner js-file-line">    interfaces that do not display Appropriate Legal Notices, your</td>
+      </tr>
+      <tr>
+        <td id="L233" class="blob-num js-line-number" data-line-number="233"></td>
+        <td id="LC233" class="blob-code blob-code-inner js-file-line">    work need not make them do so.</td>
+      </tr>
+      <tr>
+        <td id="L234" class="blob-num js-line-number" data-line-number="234"></td>
+        <td id="LC234" class="blob-code blob-code-inner js-file-line">
+</td>
+      </tr>
+      <tr>
+        <td id="L235" class="blob-num js-line-number" data-line-number="235"></td>
+        <td id="LC235" class="blob-code blob-code-inner js-file-line">  A compilation of a covered work with other separate and independent</td>
+      </tr>
+      <tr>
+        <td id="L236" class="blob-num js-line-number" data-line-number="236"></td>
+        <td id="LC236" class="blob-code blob-code-inner js-file-line">works, which are not by their nature extensions of the covered work,</td>
+      </tr>
+      <tr>
+        <td id="L237" class="blob-num js-line-number" data-line-number="237"></td>
+        <td id="LC237" class="blob-code blob-code-inner js-file-line">and which are not combined with it such as to form a larger program,</td>
+      </tr>
+      <tr>
+        <td id="L238" class="blob-num js-line-number" data-line-number="238"></td>
+        <td id="LC238" class="blob-code blob-code-inner js-file-line">in or on a volume of a storage or distribution medium, is called an</td>
+      </tr>
+      <tr>
+        <td id="L239" class="blob-num js-line-number" data-line-number="239"></td>
+        <td id="LC239" class="blob-code blob-code-inner js-file-line">&quot;aggregate&quot; if the compilation and its resulting copyright are not</td>
+      </tr>
+      <tr>
+        <td id="L240" class="blob-num js-line-number" data-line-number="240"></td>
+        <td id="LC240" class="blob-code blob-code-inner js-file-line">used to limit the access or legal rights of the compilation&#39;s users</td>
+      </tr>
+      <tr>
+        <td id="L241" class="blob-num js-line-number" data-line-number="241"></td>
+        <td id="LC241" class="blob-code blob-code-inner js-file-line">beyond what the individual works permit.  Inclusion of a covered work</td>
+      </tr>
+      <tr>
+        <td id="L242" class="blob-num js-line-number" data-line-number="242"></td>
+        <td id="LC242" class="blob-code blob-code-inner js-file-line">in an aggregate does not cause this License to apply to the other</td>
+      </tr>
+      <tr>
+        <td id="L243" class="blob-num js-line-number" data-line-number="243"></td>
+        <td id="LC243" class="blob-code blob-code-inner js-file-line">parts of the aggregate.</td>
+      </tr>
+      <tr>
+        <td id="L244" class="blob-num js-line-number" data-line-number="244"></td>
+        <td id="LC244" class="blob-code blob-code-inner js-file-line">
+</td>
+      </tr>
+      <tr>
+        <td id="L245" class="blob-num js-line-number" data-line-number="245"></td>
+        <td id="LC245" class="blob-code blob-code-inner js-file-line">  6. Conveying Non-Source Forms.</td>
+      </tr>
+      <tr>
+        <td id="L246" class="blob-num js-line-number" data-line-number="246"></td>
+        <td id="LC246" class="blob-code blob-code-inner js-file-line">
+</td>
+      </tr>
+      <tr>
+        <td id="L247" class="blob-num js-line-number" data-line-number="247"></td>
+        <td id="LC247" class="blob-code blob-code-inner js-file-line">  You may convey a covered work in object code form under the terms</td>
+      </tr>
+      <tr>
+        <td id="L248" class="blob-num js-line-number" data-line-number="248"></td>
+        <td id="LC248" class="blob-code blob-code-inner js-file-line">of sections 4 and 5, provided that you also convey the</td>
+      </tr>
+      <tr>
+        <td id="L249" class="blob-num js-line-number" data-line-number="249"></td>
+        <td id="LC249" class="blob-code blob-code-inner js-file-line">machine-readable Corresponding Source under the terms of this License,</td>
+      </tr>
+      <tr>
+        <td id="L250" class="blob-num js-line-number" data-line-number="250"></td>
+        <td id="LC250" class="blob-code blob-code-inner js-file-line">in one of these ways:</td>
+      </tr>
+      <tr>
+        <td id="L251" class="blob-num js-line-number" data-line-number="251"></td>
+        <td id="LC251" class="blob-code blob-code-inner js-file-line">
+</td>
+      </tr>
+      <tr>
+        <td id="L252" class="blob-num js-line-number" data-line-number="252"></td>
+        <td id="LC252" class="blob-code blob-code-inner js-file-line">    a) Convey the object code in, or embodied in, a physical product</td>
+      </tr>
+      <tr>
+        <td id="L253" class="blob-num js-line-number" data-line-number="253"></td>
+        <td id="LC253" class="blob-code blob-code-inner js-file-line">    (including a physical distribution medium), accompanied by the</td>
+      </tr>
+      <tr>
+        <td id="L254" class="blob-num js-line-number" data-line-number="254"></td>
+        <td id="LC254" class="blob-code blob-code-inner js-file-line">    Corresponding Source fixed on a durable physical medium</td>
+      </tr>
+      <tr>
+        <td id="L255" class="blob-num js-line-number" data-line-number="255"></td>
+        <td id="LC255" class="blob-code blob-code-inner js-file-line">    customarily used for software interchange.</td>
+      </tr>
+      <tr>
+        <td id="L256" class="blob-num js-line-number" data-line-number="256"></td>
+        <td id="LC256" class="blob-code blob-code-inner js-file-line">
+</td>
+      </tr>
+      <tr>
+        <td id="L257" class="blob-num js-line-number" data-line-number="257"></td>
+        <td id="LC257" class="blob-code blob-code-inner js-file-line">    b) Convey the object code in, or embodied in, a physical product</td>
+      </tr>
+      <tr>
+        <td id="L258" class="blob-num js-line-number" data-line-number="258"></td>
+        <td id="LC258" class="blob-code blob-code-inner js-file-line">    (including a physical distribution medium), accompanied by a</td>
+      </tr>
+      <tr>
+        <td id="L259" class="blob-num js-line-number" data-line-number="259"></td>
+        <td id="LC259" class="blob-code blob-code-inner js-file-line">    written offer, valid for at least three years and valid for as</td>
+      </tr>
+      <tr>
+        <td id="L260" class="blob-num js-line-number" data-line-number="260"></td>
+        <td id="LC260" class="blob-code blob-code-inner js-file-line">    long as you offer spare parts or customer support for that product</td>
+      </tr>
+      <tr>
+        <td id="L261" class="blob-num js-line-number" data-line-number="261"></td>
+        <td id="LC261" class="blob-code blob-code-inner js-file-line">    model, to give anyone who possesses the object code either (1) a</td>
+      </tr>
+      <tr>
+        <td id="L262" class="blob-num js-line-number" data-line-number="262"></td>
+        <td id="LC262" class="blob-code blob-code-inner js-file-line">    copy of the Corresponding Source for all the software in the</td>
+      </tr>
+      <tr>
+        <td id="L263" class="blob-num js-line-number" data-line-number="263"></td>
+        <td id="LC263" class="blob-code blob-code-inner js-file-line">    product that is covered by this License, on a durable physical</td>
+      </tr>
+      <tr>
+        <td id="L264" class="blob-num js-line-number" data-line-number="264"></td>
+        <td id="LC264" class="blob-code blob-code-inner js-file-line">    medium customarily used for software interchange, for a price no</td>
+      </tr>
+      <tr>
+        <td id="L265" class="blob-num js-line-number" data-line-number="265"></td>
+        <td id="LC265" class="blob-code blob-code-inner js-file-line">    more than your reasonable cost of physically performing this</td>
+      </tr>
+      <tr>
+        <td id="L266" class="blob-num js-line-number" data-line-number="266"></td>
+        <td id="LC266" class="blob-code blob-code-inner js-file-line">    conveying of source, or (2) access to copy the</td>
+      </tr>
+      <tr>
+        <td id="L267" class="blob-num js-line-number" data-line-number="267"></td>
+        <td id="LC267" class="blob-code blob-code-inner js-file-line">    Corresponding Source from a network server at no charge.</td>
+      </tr>
+      <tr>
+        <td id="L268" class="blob-num js-line-number" data-line-number="268"></td>
+        <td id="LC268" class="blob-code blob-code-inner js-file-line">
+</td>
+      </tr>
+      <tr>
+        <td id="L269" class="blob-num js-line-number" data-line-number="269"></td>
+        <td id="LC269" class="blob-code blob-code-inner js-file-line">    c) Convey individual copies of the object code with a copy of the</td>
+      </tr>
+      <tr>
+        <td id="L270" class="blob-num js-line-number" data-line-number="270"></td>
+        <td id="LC270" class="blob-code blob-code-inner js-file-line">    written offer to provide the Corresponding Source.  This</td>
+      </tr>
+      <tr>
+        <td id="L271" class="blob-num js-line-number" data-line-number="271"></td>
+        <td id="LC271" class="blob-code blob-code-inner js-file-line">    alternative is allowed only occasionally and noncommercially, and</td>
+      </tr>
+      <tr>
+        <td id="L272" class="blob-num js-line-number" data-line-number="272"></td>
+        <td id="LC272" class="blob-code blob-code-inner js-file-line">    only if you received the object code with such an offer, in accord</td>
+      </tr>
+      <tr>
+        <td id="L273" class="blob-num js-line-number" data-line-number="273"></td>
+        <td id="LC273" class="blob-code blob-code-inner js-file-line">    with subsection 6b.</td>
+      </tr>
+      <tr>
+        <td id="L274" class="blob-num js-line-number" data-line-number="274"></td>
+        <td id="LC274" class="blob-code blob-code-inner js-file-line">
+</td>
+      </tr>
+      <tr>
+        <td id="L275" class="blob-num js-line-number" data-line-number="275"></td>
+        <td id="LC275" class="blob-code blob-code-inner js-file-line">    d) Convey the object code by offering access from a designated</td>
+      </tr>
+      <tr>
+        <td id="L276" class="blob-num js-line-number" data-line-number="276"></td>
+        <td id="LC276" class="blob-code blob-code-inner js-file-line">    place (gratis or for a charge), and offer equivalent access to the</td>
+      </tr>
+      <tr>
+        <td id="L277" class="blob-num js-line-number" data-line-number="277"></td>
+        <td id="LC277" class="blob-code blob-code-inner js-file-line">    Corresponding Source in the same way through the same place at no</td>
+      </tr>
+      <tr>
+        <td id="L278" class="blob-num js-line-number" data-line-number="278"></td>
+        <td id="LC278" class="blob-code blob-code-inner js-file-line">    further charge.  You need not require recipients to copy the</td>
+      </tr>
+      <tr>
+        <td id="L279" class="blob-num js-line-number" data-line-number="279"></td>
+        <td id="LC279" class="blob-code blob-code-inner js-file-line">    Corresponding Source along with the object code.  If the place to</td>
+      </tr>
+      <tr>
+        <td id="L280" class="blob-num js-line-number" data-line-number="280"></td>
+        <td id="LC280" class="blob-code blob-code-inner js-file-line">    copy the object code is a network server, the Corresponding Source</td>
+      </tr>
+      <tr>
+        <td id="L281" class="blob-num js-line-number" data-line-number="281"></td>
+        <td id="LC281" class="blob-code blob-code-inner js-file-line">    may be on a different server (operated by you or a third party)</td>
+      </tr>
+      <tr>
+        <td id="L282" class="blob-num js-line-number" data-line-number="282"></td>
+        <td id="LC282" class="blob-code blob-code-inner js-file-line">    that supports equivalent copying facilities, provided you maintain</td>
+      </tr>
+      <tr>
+        <td id="L283" class="blob-num js-line-number" data-line-number="283"></td>
+        <td id="LC283" class="blob-code blob-code-inner js-file-line">    clear directions next to the object code saying where to find the</td>
+      </tr>
+      <tr>
+        <td id="L284" class="blob-num js-line-number" data-line-number="284"></td>
+        <td id="LC284" class="blob-code blob-code-inner js-file-line">    Corresponding Source.  Regardless of what server hosts the</td>
+      </tr>
+      <tr>
+        <td id="L285" class="blob-num js-line-number" data-line-number="285"></td>
+        <td id="LC285" class="blob-code blob-code-inner js-file-line">    Corresponding Source, you remain obligated to ensure that it is</td>
+      </tr>
+      <tr>
+        <td id="L286" class="blob-num js-line-number" data-line-number="286"></td>
+        <td id="LC286" class="blob-code blob-code-inner js-file-line">    available for as long as needed to satisfy these requirements.</td>
+      </tr>
+      <tr>
+        <td id="L287" class="blob-num js-line-number" data-line-number="287"></td>
+        <td id="LC287" class="blob-code blob-code-inner js-file-line">
+</td>
+      </tr>
+      <tr>
+        <td id="L288" class="blob-num js-line-number" data-line-number="288"></td>
+        <td id="LC288" class="blob-code blob-code-inner js-file-line">    e) Convey the object code using peer-to-peer transmission, provided</td>
+      </tr>
+      <tr>
+        <td id="L289" class="blob-num js-line-number" data-line-number="289"></td>
+        <td id="LC289" class="blob-code blob-code-inner js-file-line">    you inform other peers where the object code and Corresponding</td>
+      </tr>
+      <tr>
+        <td id="L290" class="blob-num js-line-number" data-line-number="290"></td>
+        <td id="LC290" class="blob-code blob-code-inner js-file-line">    Source of the work are being offered to the general public at no</td>
+      </tr>
+      <tr>
+        <td id="L291" class="blob-num js-line-number" data-line-number="291"></td>
+        <td id="LC291" class="blob-code blob-code-inner js-file-line">    charge under subsection 6d.</td>
+      </tr>
+      <tr>
+        <td id="L292" class="blob-num js-line-number" data-line-number="292"></td>
+        <td id="LC292" class="blob-code blob-code-inner js-file-line">
+</td>
+      </tr>
+      <tr>
+        <td id="L293" class="blob-num js-line-number" data-line-number="293"></td>
+        <td id="LC293" class="blob-code blob-code-inner js-file-line">  A separable portion of the object code, whose source code is excluded</td>
+      </tr>
+      <tr>
+        <td id="L294" class="blob-num js-line-number" data-line-number="294"></td>
+        <td id="LC294" class="blob-code blob-code-inner js-file-line">from the Corresponding Source as a System Library, need not be</td>
+      </tr>
+      <tr>
+        <td id="L295" class="blob-num js-line-number" data-line-number="295"></td>
+        <td id="LC295" class="blob-code blob-code-inner js-file-line">included in conveying the object code work.</td>
+      </tr>
+      <tr>
+        <td id="L296" class="blob-num js-line-number" data-line-number="296"></td>
+        <td id="LC296" class="blob-code blob-code-inner js-file-line">
+</td>
+      </tr>
+      <tr>
+        <td id="L297" class="blob-num js-line-number" data-line-number="297"></td>
+        <td id="LC297" class="blob-code blob-code-inner js-file-line">  A &quot;User Product&quot; is either (1) a &quot;consumer product&quot;, which means any</td>
+      </tr>
+      <tr>
+        <td id="L298" class="blob-num js-line-number" data-line-number="298"></td>
+        <td id="LC298" class="blob-code blob-code-inner js-file-line">tangible personal property which is normally used for personal, family,</td>
+      </tr>
+      <tr>
+        <td id="L299" class="blob-num js-line-number" data-line-number="299"></td>
+        <td id="LC299" class="blob-code blob-code-inner js-file-line">or household purposes, or (2) anything designed or sold for incorporation</td>
+      </tr>
+      <tr>
+        <td id="L300" class="blob-num js-line-number" data-line-number="300"></td>
+        <td id="LC300" class="blob-code blob-code-inner js-file-line">into a dwelling.  In determining whether a product is a consumer product,</td>
+      </tr>
+      <tr>
+        <td id="L301" class="blob-num js-line-number" data-line-number="301"></td>
+        <td id="LC301" class="blob-code blob-code-inner js-file-line">doubtful cases shall be resolved in favor of coverage.  For a particular</td>
+      </tr>
+      <tr>
+        <td id="L302" class="blob-num js-line-number" data-line-number="302"></td>
+        <td id="LC302" class="blob-code blob-code-inner js-file-line">product received by a particular user, &quot;normally used&quot; refers to a</td>
+      </tr>
+      <tr>
+        <td id="L303" class="blob-num js-line-number" data-line-number="303"></td>
+        <td id="LC303" class="blob-code blob-code-inner js-file-line">typical or common use of that class of product, regardless of the status</td>
+      </tr>
+      <tr>
+        <td id="L304" class="blob-num js-line-number" data-line-number="304"></td>
+        <td id="LC304" class="blob-code blob-code-inner js-file-line">of the particular user or of the way in which the particular user</td>
+      </tr>
+      <tr>
+        <td id="L305" class="blob-num js-line-number" data-line-number="305"></td>
+        <td id="LC305" class="blob-code blob-code-inner js-file-line">actually uses, or expects or is expected to use, the product.  A product</td>
+      </tr>
+      <tr>
+        <td id="L306" class="blob-num js-line-number" data-line-number="306"></td>
+        <td id="LC306" class="blob-code blob-code-inner js-file-line">is a consumer product regardless of whether the product has substantial</td>
+      </tr>
+      <tr>
+        <td id="L307" class="blob-num js-line-number" data-line-number="307"></td>
+        <td id="LC307" class="blob-code blob-code-inner js-file-line">commercial, industrial or non-consumer uses, unless such uses represent</td>
+      </tr>
+      <tr>
+        <td id="L308" class="blob-num js-line-number" data-line-number="308"></td>
+        <td id="LC308" class="blob-code blob-code-inner js-file-line">the only significant mode of use of the product.</td>
+      </tr>
+      <tr>
+        <td id="L309" class="blob-num js-line-number" data-line-number="309"></td>
+        <td id="LC309" class="blob-code blob-code-inner js-file-line">
+</td>
+      </tr>
+      <tr>
+        <td id="L310" class="blob-num js-line-number" data-line-number="310"></td>
+        <td id="LC310" class="blob-code blob-code-inner js-file-line">  &quot;Installation Information&quot; for a User Product means any methods,</td>
+      </tr>
+      <tr>
+        <td id="L311" class="blob-num js-line-number" data-line-number="311"></td>
+        <td id="LC311" class="blob-code blob-code-inner js-file-line">procedures, authorization keys, or other information required to install</td>
+      </tr>
+      <tr>
+        <td id="L312" class="blob-num js-line-number" data-line-number="312"></td>
+        <td id="LC312" class="blob-code blob-code-inner js-file-line">and execute modified versions of a covered work in that User Product from</td>
+      </tr>
+      <tr>
+        <td id="L313" class="blob-num js-line-number" data-line-number="313"></td>
+        <td id="LC313" class="blob-code blob-code-inner js-file-line">a modified version of its Corresponding Source.  The information must</td>
+      </tr>
+      <tr>
+        <td id="L314" class="blob-num js-line-number" data-line-number="314"></td>
+        <td id="LC314" class="blob-code blob-code-inner js-file-line">suffice to ensure that the continued functioning of the modified object</td>
+      </tr>
+      <tr>
+        <td id="L315" class="blob-num js-line-number" data-line-number="315"></td>
+        <td id="LC315" class="blob-code blob-code-inner js-file-line">code is in no case prevented or interfered with solely because</td>
+      </tr>
+      <tr>
+        <td id="L316" class="blob-num js-line-number" data-line-number="316"></td>
+        <td id="LC316" class="blob-code blob-code-inner js-file-line">modification has been made.</td>
+      </tr>
+      <tr>
+        <td id="L317" class="blob-num js-line-number" data-line-number="317"></td>
+        <td id="LC317" class="blob-code blob-code-inner js-file-line">
+</td>
+      </tr>
+      <tr>
+        <td id="L318" class="blob-num js-line-number" data-line-number="318"></td>
+        <td id="LC318" class="blob-code blob-code-inner js-file-line">  If you convey an object code work under this section in, or with, or</td>
+      </tr>
+      <tr>
+        <td id="L319" class="blob-num js-line-number" data-line-number="319"></td>
+        <td id="LC319" class="blob-code blob-code-inner js-file-line">specifically for use in, a User Product, and the conveying occurs as</td>
+      </tr>
+      <tr>
+        <td id="L320" class="blob-num js-line-number" data-line-number="320"></td>
+        <td id="LC320" class="blob-code blob-code-inner js-file-line">part of a transaction in which the right of possession and use of the</td>
+      </tr>
+      <tr>
+        <td id="L321" class="blob-num js-line-number" data-line-number="321"></td>
+        <td id="LC321" class="blob-code blob-code-inner js-file-line">User Product is transferred to the recipient in perpetuity or for a</td>
+      </tr>
+      <tr>
+        <td id="L322" class="blob-num js-line-number" data-line-number="322"></td>
+        <td id="LC322" class="blob-code blob-code-inner js-file-line">fixed term (regardless of how the transaction is characterized), the</td>
+      </tr>
+      <tr>
+        <td id="L323" class="blob-num js-line-number" data-line-number="323"></td>
+        <td id="LC323" class="blob-code blob-code-inner js-file-line">Corresponding Source conveyed under this section must be accompanied</td>
+      </tr>
+      <tr>
+        <td id="L324" class="blob-num js-line-number" data-line-number="324"></td>
+        <td id="LC324" class="blob-code blob-code-inner js-file-line">by the Installation Information.  But this requirement does not apply</td>
+      </tr>
+      <tr>
+        <td id="L325" class="blob-num js-line-number" data-line-number="325"></td>
+        <td id="LC325" class="blob-code blob-code-inner js-file-line">if neither you nor any third party retains the ability to install</td>
+      </tr>
+      <tr>
+        <td id="L326" class="blob-num js-line-number" data-line-number="326"></td>
+        <td id="LC326" class="blob-code blob-code-inner js-file-line">modified object code on the User Product (for example, the work has</td>
+      </tr>
+      <tr>
+        <td id="L327" class="blob-num js-line-number" data-line-number="327"></td>
+        <td id="LC327" class="blob-code blob-code-inner js-file-line">been installed in ROM).</td>
+      </tr>
+      <tr>
+        <td id="L328" class="blob-num js-line-number" data-line-number="328"></td>
+        <td id="LC328" class="blob-code blob-code-inner js-file-line">
+</td>
+      </tr>
+      <tr>
+        <td id="L329" class="blob-num js-line-number" data-line-number="329"></td>
+        <td id="LC329" class="blob-code blob-code-inner js-file-line">  The requirement to provide Installation Information does not include a</td>
+      </tr>
+      <tr>
+        <td id="L330" class="blob-num js-line-number" data-line-number="330"></td>
+        <td id="LC330" class="blob-code blob-code-inner js-file-line">requirement to continue to provide support service, warranty, or updates</td>
+      </tr>
+      <tr>
+        <td id="L331" class="blob-num js-line-number" data-line-number="331"></td>
+        <td id="LC331" class="blob-code blob-code-inner js-file-line">for a work that has been modified or installed by the recipient, or for</td>
+      </tr>
+      <tr>
+        <td id="L332" class="blob-num js-line-number" data-line-number="332"></td>
+        <td id="LC332" class="blob-code blob-code-inner js-file-line">the User Product in which it has been modified or installed.  Access to a</td>
+      </tr>
+      <tr>
+        <td id="L333" class="blob-num js-line-number" data-line-number="333"></td>
+        <td id="LC333" class="blob-code blob-code-inner js-file-line">network may be denied when the modification itself materially and</td>
+      </tr>
+      <tr>
+        <td id="L334" class="blob-num js-line-number" data-line-number="334"></td>
+        <td id="LC334" class="blob-code blob-code-inner js-file-line">adversely affects the operation of the network or violates the rules and</td>
+      </tr>
+      <tr>
+        <td id="L335" class="blob-num js-line-number" data-line-number="335"></td>
+        <td id="LC335" class="blob-code blob-code-inner js-file-line">protocols for communication across the network.</td>
+      </tr>
+      <tr>
+        <td id="L336" class="blob-num js-line-number" data-line-number="336"></td>
+        <td id="LC336" class="blob-code blob-code-inner js-file-line">
+</td>
+      </tr>
+      <tr>
+        <td id="L337" class="blob-num js-line-number" data-line-number="337"></td>
+        <td id="LC337" class="blob-code blob-code-inner js-file-line">  Corresponding Source conveyed, and Installation Information provided,</td>
+      </tr>
+      <tr>
+        <td id="L338" class="blob-num js-line-number" data-line-number="338"></td>
+        <td id="LC338" class="blob-code blob-code-inner js-file-line">in accord with this section must be in a format that is publicly</td>
+      </tr>
+      <tr>
+        <td id="L339" class="blob-num js-line-number" data-line-number="339"></td>
+        <td id="LC339" class="blob-code blob-code-inner js-file-line">documented (and with an implementation available to the public in</td>
+      </tr>
+      <tr>
+        <td id="L340" class="blob-num js-line-number" data-line-number="340"></td>
+        <td id="LC340" class="blob-code blob-code-inner js-file-line">source code form), and must require no special password or key for</td>
+      </tr>
+      <tr>
+        <td id="L341" class="blob-num js-line-number" data-line-number="341"></td>
+        <td id="LC341" class="blob-code blob-code-inner js-file-line">unpacking, reading or copying.</td>
+      </tr>
+      <tr>
+        <td id="L342" class="blob-num js-line-number" data-line-number="342"></td>
+        <td id="LC342" class="blob-code blob-code-inner js-file-line">
+</td>
+      </tr>
+      <tr>
+        <td id="L343" class="blob-num js-line-number" data-line-number="343"></td>
+        <td id="LC343" class="blob-code blob-code-inner js-file-line">  7. Additional Terms.</td>
+      </tr>
+      <tr>
+        <td id="L344" class="blob-num js-line-number" data-line-number="344"></td>
+        <td id="LC344" class="blob-code blob-code-inner js-file-line">
+</td>
+      </tr>
+      <tr>
+        <td id="L345" class="blob-num js-line-number" data-line-number="345"></td>
+        <td id="LC345" class="blob-code blob-code-inner js-file-line">  &quot;Additional permissions&quot; are terms that supplement the terms of this</td>
+      </tr>
+      <tr>
+        <td id="L346" class="blob-num js-line-number" data-line-number="346"></td>
+        <td id="LC346" class="blob-code blob-code-inner js-file-line">License by making exceptions from one or more of its conditions.</td>
+      </tr>
+      <tr>
+        <td id="L347" class="blob-num js-line-number" data-line-number="347"></td>
+        <td id="LC347" class="blob-code blob-code-inner js-file-line">Additional permissions that are applicable to the entire Program shall</td>
+      </tr>
+      <tr>
+        <td id="L348" class="blob-num js-line-number" data-line-number="348"></td>
+        <td id="LC348" class="blob-code blob-code-inner js-file-line">be treated as though they were included in this License, to the extent</td>
+      </tr>
+      <tr>
+        <td id="L349" class="blob-num js-line-number" data-line-number="349"></td>
+        <td id="LC349" class="blob-code blob-code-inner js-file-line">that they are valid under applicable law.  If additional permissions</td>
+      </tr>
+      <tr>
+        <td id="L350" class="blob-num js-line-number" data-line-number="350"></td>
+        <td id="LC350" class="blob-code blob-code-inner js-file-line">apply only to part of the Program, that part may be used separately</td>
+      </tr>
+      <tr>
+        <td id="L351" class="blob-num js-line-number" data-line-number="351"></td>
+        <td id="LC351" class="blob-code blob-code-inner js-file-line">under those permissions, but the entire Program remains governed by</td>
+      </tr>
+      <tr>
+        <td id="L352" class="blob-num js-line-number" data-line-number="352"></td>
+        <td id="LC352" class="blob-code blob-code-inner js-file-line">this License without regard to the additional permissions.</td>
+      </tr>
+      <tr>
+        <td id="L353" class="blob-num js-line-number" data-line-number="353"></td>
+        <td id="LC353" class="blob-code blob-code-inner js-file-line">
+</td>
+      </tr>
+      <tr>
+        <td id="L354" class="blob-num js-line-number" data-line-number="354"></td>
+        <td id="LC354" class="blob-code blob-code-inner js-file-line">  When you convey a copy of a covered work, you may at your option</td>
+      </tr>
+      <tr>
+        <td id="L355" class="blob-num js-line-number" data-line-number="355"></td>
+        <td id="LC355" class="blob-code blob-code-inner js-file-line">remove any additional permissions from that copy, or from any part of</td>
+      </tr>
+      <tr>
+        <td id="L356" class="blob-num js-line-number" data-line-number="356"></td>
+        <td id="LC356" class="blob-code blob-code-inner js-file-line">it.  (Additional permissions may be written to require their own</td>
+      </tr>
+      <tr>
+        <td id="L357" class="blob-num js-line-number" data-line-number="357"></td>
+        <td id="LC357" class="blob-code blob-code-inner js-file-line">removal in certain cases when you modify the work.)  You may place</td>
+      </tr>
+      <tr>
+        <td id="L358" class="blob-num js-line-number" data-line-number="358"></td>
+        <td id="LC358" class="blob-code blob-code-inner js-file-line">additional permissions on material, added by you to a covered work,</td>
+      </tr>
+      <tr>
+        <td id="L359" class="blob-num js-line-number" data-line-number="359"></td>
+        <td id="LC359" class="blob-code blob-code-inner js-file-line">for which you have or can give appropriate copyright permission.</td>
+      </tr>
+      <tr>
+        <td id="L360" class="blob-num js-line-number" data-line-number="360"></td>
+        <td id="LC360" class="blob-code blob-code-inner js-file-line">
+</td>
+      </tr>
+      <tr>
+        <td id="L361" class="blob-num js-line-number" data-line-number="361"></td>
+        <td id="LC361" class="blob-code blob-code-inner js-file-line">  Notwithstanding any other provision of this License, for material you</td>
+      </tr>
+      <tr>
+        <td id="L362" class="blob-num js-line-number" data-line-number="362"></td>
+        <td id="LC362" class="blob-code blob-code-inner js-file-line">add to a covered work, you may (if authorized by the copyright holders of</td>
+      </tr>
+      <tr>
+        <td id="L363" class="blob-num js-line-number" data-line-number="363"></td>
+        <td id="LC363" class="blob-code blob-code-inner js-file-line">that material) supplement the terms of this License with terms:</td>
+      </tr>
+      <tr>
+        <td id="L364" class="blob-num js-line-number" data-line-number="364"></td>
+        <td id="LC364" class="blob-code blob-code-inner js-file-line">
+</td>
+      </tr>
+      <tr>
+        <td id="L365" class="blob-num js-line-number" data-line-number="365"></td>
+        <td id="LC365" class="blob-code blob-code-inner js-file-line">    a) Disclaiming warranty or limiting liability differently from the</td>
+      </tr>
+      <tr>
+        <td id="L366" class="blob-num js-line-number" data-line-number="366"></td>
+        <td id="LC366" class="blob-code blob-code-inner js-file-line">    terms of sections 15 and 16 of this License; or</td>
+      </tr>
+      <tr>
+        <td id="L367" class="blob-num js-line-number" data-line-number="367"></td>
+        <td id="LC367" class="blob-code blob-code-inner js-file-line">
+</td>
+      </tr>
+      <tr>
+        <td id="L368" class="blob-num js-line-number" data-line-number="368"></td>
+        <td id="LC368" class="blob-code blob-code-inner js-file-line">    b) Requiring preservation of specified reasonable legal notices or</td>
+      </tr>
+      <tr>
+        <td id="L369" class="blob-num js-line-number" data-line-number="369"></td>
+        <td id="LC369" class="blob-code blob-code-inner js-file-line">    author attributions in that material or in the Appropriate Legal</td>
+      </tr>
+      <tr>
+        <td id="L370" class="blob-num js-line-number" data-line-number="370"></td>
+        <td id="LC370" class="blob-code blob-code-inner js-file-line">    Notices displayed by works containing it; or</td>
+      </tr>
+      <tr>
+        <td id="L371" class="blob-num js-line-number" data-line-number="371"></td>
+        <td id="LC371" class="blob-code blob-code-inner js-file-line">
+</td>
+      </tr>
+      <tr>
+        <td id="L372" class="blob-num js-line-number" data-line-number="372"></td>
+        <td id="LC372" class="blob-code blob-code-inner js-file-line">    c) Prohibiting misrepresentation of the origin of that material, or</td>
+      </tr>
+      <tr>
+        <td id="L373" class="blob-num js-line-number" data-line-number="373"></td>
+        <td id="LC373" class="blob-code blob-code-inner js-file-line">    requiring that modified versions of such material be marked in</td>
+      </tr>
+      <tr>
+        <td id="L374" class="blob-num js-line-number" data-line-number="374"></td>
+        <td id="LC374" class="blob-code blob-code-inner js-file-line">    reasonable ways as different from the original version; or</td>
+      </tr>
+      <tr>
+        <td id="L375" class="blob-num js-line-number" data-line-number="375"></td>
+        <td id="LC375" class="blob-code blob-code-inner js-file-line">
+</td>
+      </tr>
+      <tr>
+        <td id="L376" class="blob-num js-line-number" data-line-number="376"></td>
+        <td id="LC376" class="blob-code blob-code-inner js-file-line">    d) Limiting the use for publicity purposes of names of licensors or</td>
+      </tr>
+      <tr>
+        <td id="L377" class="blob-num js-line-number" data-line-number="377"></td>
+        <td id="LC377" class="blob-code blob-code-inner js-file-line">    authors of the material; or</td>
+      </tr>
+      <tr>
+        <td id="L378" class="blob-num js-line-number" data-line-number="378"></td>
+        <td id="LC378" class="blob-code blob-code-inner js-file-line">
+</td>
+      </tr>
+      <tr>
+        <td id="L379" class="blob-num js-line-number" data-line-number="379"></td>
+        <td id="LC379" class="blob-code blob-code-inner js-file-line">    e) Declining to grant rights under trademark law for use of some</td>
+      </tr>
+      <tr>
+        <td id="L380" class="blob-num js-line-number" data-line-number="380"></td>
+        <td id="LC380" class="blob-code blob-code-inner js-file-line">    trade names, trademarks, or service marks; or</td>
+      </tr>
+      <tr>
+        <td id="L381" class="blob-num js-line-number" data-line-number="381"></td>
+        <td id="LC381" class="blob-code blob-code-inner js-file-line">
+</td>
+      </tr>
+      <tr>
+        <td id="L382" class="blob-num js-line-number" data-line-number="382"></td>
+        <td id="LC382" class="blob-code blob-code-inner js-file-line">    f) Requiring indemnification of licensors and authors of that</td>
+      </tr>
+      <tr>
+        <td id="L383" class="blob-num js-line-number" data-line-number="383"></td>
+        <td id="LC383" class="blob-code blob-code-inner js-file-line">    material by anyone who conveys the material (or modified versions of</td>
+      </tr>
+      <tr>
+        <td id="L384" class="blob-num js-line-number" data-line-number="384"></td>
+        <td id="LC384" class="blob-code blob-code-inner js-file-line">    it) with contractual assumptions of liability to the recipient, for</td>
+      </tr>
+      <tr>
+        <td id="L385" class="blob-num js-line-number" data-line-number="385"></td>
+        <td id="LC385" class="blob-code blob-code-inner js-file-line">    any liability that these contractual assumptions directly impose on</td>
+      </tr>
+      <tr>
+        <td id="L386" class="blob-num js-line-number" data-line-number="386"></td>
+        <td id="LC386" class="blob-code blob-code-inner js-file-line">    those licensors and authors.</td>
+      </tr>
+      <tr>
+        <td id="L387" class="blob-num js-line-number" data-line-number="387"></td>
+        <td id="LC387" class="blob-code blob-code-inner js-file-line">
+</td>
+      </tr>
+      <tr>
+        <td id="L388" class="blob-num js-line-number" data-line-number="388"></td>
+        <td id="LC388" class="blob-code blob-code-inner js-file-line">  All other non-permissive additional terms are considered &quot;further</td>
+      </tr>
+      <tr>
+        <td id="L389" class="blob-num js-line-number" data-line-number="389"></td>
+        <td id="LC389" class="blob-code blob-code-inner js-file-line">restrictions&quot; within the meaning of section 10.  If the Program as you</td>
+      </tr>
+      <tr>
+        <td id="L390" class="blob-num js-line-number" data-line-number="390"></td>
+        <td id="LC390" class="blob-code blob-code-inner js-file-line">received it, or any part of it, contains a notice stating that it is</td>
+      </tr>
+      <tr>
+        <td id="L391" class="blob-num js-line-number" data-line-number="391"></td>
+        <td id="LC391" class="blob-code blob-code-inner js-file-line">governed by this License along with a term that is a further</td>
+      </tr>
+      <tr>
+        <td id="L392" class="blob-num js-line-number" data-line-number="392"></td>
+        <td id="LC392" class="blob-code blob-code-inner js-file-line">restriction, you may remove that term.  If a license document contains</td>
+      </tr>
+      <tr>
+        <td id="L393" class="blob-num js-line-number" data-line-number="393"></td>
+        <td id="LC393" class="blob-code blob-code-inner js-file-line">a further restriction but permits relicensing or conveying under this</td>
+      </tr>
+      <tr>
+        <td id="L394" class="blob-num js-line-number" data-line-number="394"></td>
+        <td id="LC394" class="blob-code blob-code-inner js-file-line">License, you may add to a covered work material governed by the terms</td>
+      </tr>
+      <tr>
+        <td id="L395" class="blob-num js-line-number" data-line-number="395"></td>
+        <td id="LC395" class="blob-code blob-code-inner js-file-line">of that license document, provided that the further restriction does</td>
+      </tr>
+      <tr>
+        <td id="L396" class="blob-num js-line-number" data-line-number="396"></td>
+        <td id="LC396" class="blob-code blob-code-inner js-file-line">not survive such relicensing or conveying.</td>
+      </tr>
+      <tr>
+        <td id="L397" class="blob-num js-line-number" data-line-number="397"></td>
+        <td id="LC397" class="blob-code blob-code-inner js-file-line">
+</td>
+      </tr>
+      <tr>
+        <td id="L398" class="blob-num js-line-number" data-line-number="398"></td>
+        <td id="LC398" class="blob-code blob-code-inner js-file-line">  If you add terms to a covered work in accord with this section, you</td>
+      </tr>
+      <tr>
+        <td id="L399" class="blob-num js-line-number" data-line-number="399"></td>
+        <td id="LC399" class="blob-code blob-code-inner js-file-line">must place, in the relevant source files, a statement of the</td>
+      </tr>
+      <tr>
+        <td id="L400" class="blob-num js-line-number" data-line-number="400"></td>
+        <td id="LC400" class="blob-code blob-code-inner js-file-line">additional terms that apply to those files, or a notice indicating</td>
+      </tr>
+      <tr>
+        <td id="L401" class="blob-num js-line-number" data-line-number="401"></td>
+        <td id="LC401" class="blob-code blob-code-inner js-file-line">where to find the applicable terms.</td>
+      </tr>
+      <tr>
+        <td id="L402" class="blob-num js-line-number" data-line-number="402"></td>
+        <td id="LC402" class="blob-code blob-code-inner js-file-line">
+</td>
+      </tr>
+      <tr>
+        <td id="L403" class="blob-num js-line-number" data-line-number="403"></td>
+        <td id="LC403" class="blob-code blob-code-inner js-file-line">  Additional terms, permissive or non-permissive, may be stated in the</td>
+      </tr>
+      <tr>
+        <td id="L404" class="blob-num js-line-number" data-line-number="404"></td>
+        <td id="LC404" class="blob-code blob-code-inner js-file-line">form of a separately written license, or stated as exceptions;</td>
+      </tr>
+      <tr>
+        <td id="L405" class="blob-num js-line-number" data-line-number="405"></td>
+        <td id="LC405" class="blob-code blob-code-inner js-file-line">the above requirements apply either way.</td>
+      </tr>
+      <tr>
+        <td id="L406" class="blob-num js-line-number" data-line-number="406"></td>
+        <td id="LC406" class="blob-code blob-code-inner js-file-line">
+</td>
+      </tr>
+      <tr>
+        <td id="L407" class="blob-num js-line-number" data-line-number="407"></td>
+        <td id="LC407" class="blob-code blob-code-inner js-file-line">  8. Termination.</td>
+      </tr>
+      <tr>
+        <td id="L408" class="blob-num js-line-number" data-line-number="408"></td>
+        <td id="LC408" class="blob-code blob-code-inner js-file-line">
+</td>
+      </tr>
+      <tr>
+        <td id="L409" class="blob-num js-line-number" data-line-number="409"></td>
+        <td id="LC409" class="blob-code blob-code-inner js-file-line">  You may not propagate or modify a covered work except as expressly</td>
+      </tr>
+      <tr>
+        <td id="L410" class="blob-num js-line-number" data-line-number="410"></td>
+        <td id="LC410" class="blob-code blob-code-inner js-file-line">provided under this License.  Any attempt otherwise to propagate or</td>
+      </tr>
+      <tr>
+        <td id="L411" class="blob-num js-line-number" data-line-number="411"></td>
+        <td id="LC411" class="blob-code blob-code-inner js-file-line">modify it is void, and will automatically terminate your rights under</td>
+      </tr>
+      <tr>
+        <td id="L412" class="blob-num js-line-number" data-line-number="412"></td>
+        <td id="LC412" class="blob-code blob-code-inner js-file-line">this License (including any patent licenses granted under the third</td>
+      </tr>
+      <tr>
+        <td id="L413" class="blob-num js-line-number" data-line-number="413"></td>
+        <td id="LC413" class="blob-code blob-code-inner js-file-line">paragraph of section 11).</td>
+      </tr>
+      <tr>
+        <td id="L414" class="blob-num js-line-number" data-line-number="414"></td>
+        <td id="LC414" class="blob-code blob-code-inner js-file-line">
+</td>
+      </tr>
+      <tr>
+        <td id="L415" class="blob-num js-line-number" data-line-number="415"></td>
+        <td id="LC415" class="blob-code blob-code-inner js-file-line">  However, if you cease all violation of this License, then your</td>
+      </tr>
+      <tr>
+        <td id="L416" class="blob-num js-line-number" data-line-number="416"></td>
+        <td id="LC416" class="blob-code blob-code-inner js-file-line">license from a particular copyright holder is reinstated (a)</td>
+      </tr>
+      <tr>
+        <td id="L417" class="blob-num js-line-number" data-line-number="417"></td>
+        <td id="LC417" class="blob-code blob-code-inner js-file-line">provisionally, unless and until the copyright holder explicitly and</td>
+      </tr>
+      <tr>
+        <td id="L418" class="blob-num js-line-number" data-line-number="418"></td>
+        <td id="LC418" class="blob-code blob-code-inner js-file-line">finally terminates your license, and (b) permanently, if the copyright</td>
+      </tr>
+      <tr>
+        <td id="L419" class="blob-num js-line-number" data-line-number="419"></td>
+        <td id="LC419" class="blob-code blob-code-inner js-file-line">holder fails to notify you of the violation by some reasonable means</td>
+      </tr>
+      <tr>
+        <td id="L420" class="blob-num js-line-number" data-line-number="420"></td>
+        <td id="LC420" class="blob-code blob-code-inner js-file-line">prior to 60 days after the cessation.</td>
+      </tr>
+      <tr>
+        <td id="L421" class="blob-num js-line-number" data-line-number="421"></td>
+        <td id="LC421" class="blob-code blob-code-inner js-file-line">
+</td>
+      </tr>
+      <tr>
+        <td id="L422" class="blob-num js-line-number" data-line-number="422"></td>
+        <td id="LC422" class="blob-code blob-code-inner js-file-line">  Moreover, your license from a particular copyright holder is</td>
+      </tr>
+      <tr>
+        <td id="L423" class="blob-num js-line-number" data-line-number="423"></td>
+        <td id="LC423" class="blob-code blob-code-inner js-file-line">reinstated permanently if the copyright holder notifies you of the</td>
+      </tr>
+      <tr>
+        <td id="L424" class="blob-num js-line-number" data-line-number="424"></td>
+        <td id="LC424" class="blob-code blob-code-inner js-file-line">violation by some reasonable means, this is the first time you have</td>
+      </tr>
+      <tr>
+        <td id="L425" class="blob-num js-line-number" data-line-number="425"></td>
+        <td id="LC425" class="blob-code blob-code-inner js-file-line">received notice of violation of this License (for any work) from that</td>
+      </tr>
+      <tr>
+        <td id="L426" class="blob-num js-line-number" data-line-number="426"></td>
+        <td id="LC426" class="blob-code blob-code-inner js-file-line">copyright holder, and you cure the violation prior to 30 days after</td>
+      </tr>
+      <tr>
+        <td id="L427" class="blob-num js-line-number" data-line-number="427"></td>
+        <td id="LC427" class="blob-code blob-code-inner js-file-line">your receipt of the notice.</td>
+      </tr>
+      <tr>
+        <td id="L428" class="blob-num js-line-number" data-line-number="428"></td>
+        <td id="LC428" class="blob-code blob-code-inner js-file-line">
+</td>
+      </tr>
+      <tr>
+        <td id="L429" class="blob-num js-line-number" data-line-number="429"></td>
+        <td id="LC429" class="blob-code blob-code-inner js-file-line">  Termination of your rights under this section does not terminate the</td>
+      </tr>
+      <tr>
+        <td id="L430" class="blob-num js-line-number" data-line-number="430"></td>
+        <td id="LC430" class="blob-code blob-code-inner js-file-line">licenses of parties who have received copies or rights from you under</td>
+      </tr>
+      <tr>
+        <td id="L431" class="blob-num js-line-number" data-line-number="431"></td>
+        <td id="LC431" class="blob-code blob-code-inner js-file-line">this License.  If your rights have been terminated and not permanently</td>
+      </tr>
+      <tr>
+        <td id="L432" class="blob-num js-line-number" data-line-number="432"></td>
+        <td id="LC432" class="blob-code blob-code-inner js-file-line">reinstated, you do not qualify to receive new licenses for the same</td>
+      </tr>
+      <tr>
+        <td id="L433" class="blob-num js-line-number" data-line-number="433"></td>
+        <td id="LC433" class="blob-code blob-code-inner js-file-line">material under section 10.</td>
+      </tr>
+      <tr>
+        <td id="L434" class="blob-num js-line-number" data-line-number="434"></td>
+        <td id="LC434" class="blob-code blob-code-inner js-file-line">
+</td>
+      </tr>
+      <tr>
+        <td id="L435" class="blob-num js-line-number" data-line-number="435"></td>
+        <td id="LC435" class="blob-code blob-code-inner js-file-line">  9. Acceptance Not Required for Having Copies.</td>
+      </tr>
+      <tr>
+        <td id="L436" class="blob-num js-line-number" data-line-number="436"></td>
+        <td id="LC436" class="blob-code blob-code-inner js-file-line">
+</td>
+      </tr>
+      <tr>
+        <td id="L437" class="blob-num js-line-number" data-line-number="437"></td>
+        <td id="LC437" class="blob-code blob-code-inner js-file-line">  You are not required to accept this License in order to receive or</td>
+      </tr>
+      <tr>
+        <td id="L438" class="blob-num js-line-number" data-line-number="438"></td>
+        <td id="LC438" class="blob-code blob-code-inner js-file-line">run a copy of the Program.  Ancillary propagation of a covered work</td>
+      </tr>
+      <tr>
+        <td id="L439" class="blob-num js-line-number" data-line-number="439"></td>
+        <td id="LC439" class="blob-code blob-code-inner js-file-line">occurring solely as a consequence of using peer-to-peer transmission</td>
+      </tr>
+      <tr>
+        <td id="L440" class="blob-num js-line-number" data-line-number="440"></td>
+        <td id="LC440" class="blob-code blob-code-inner js-file-line">to receive a copy likewise does not require acceptance.  However,</td>
+      </tr>
+      <tr>
+        <td id="L441" class="blob-num js-line-number" data-line-number="441"></td>
+        <td id="LC441" class="blob-code blob-code-inner js-file-line">nothing other than this License grants you permission to propagate or</td>
+      </tr>
+      <tr>
+        <td id="L442" class="blob-num js-line-number" data-line-number="442"></td>
+        <td id="LC442" class="blob-code blob-code-inner js-file-line">modify any covered work.  These actions infringe copyright if you do</td>
+      </tr>
+      <tr>
+        <td id="L443" class="blob-num js-line-number" data-line-number="443"></td>
+        <td id="LC443" class="blob-code blob-code-inner js-file-line">not accept this License.  Therefore, by modifying or propagating a</td>
+      </tr>
+      <tr>
+        <td id="L444" class="blob-num js-line-number" data-line-number="444"></td>
+        <td id="LC444" class="blob-code blob-code-inner js-file-line">covered work, you indicate your acceptance of this License to do so.</td>
+      </tr>
+      <tr>
+        <td id="L445" class="blob-num js-line-number" data-line-number="445"></td>
+        <td id="LC445" class="blob-code blob-code-inner js-file-line">
+</td>
+      </tr>
+      <tr>
+        <td id="L446" class="blob-num js-line-number" data-line-number="446"></td>
+        <td id="LC446" class="blob-code blob-code-inner js-file-line">  10. Automatic Licensing of Downstream Recipients.</td>
+      </tr>
+      <tr>
+        <td id="L447" class="blob-num js-line-number" data-line-number="447"></td>
+        <td id="LC447" class="blob-code blob-code-inner js-file-line">
+</td>
+      </tr>
+      <tr>
+        <td id="L448" class="blob-num js-line-number" data-line-number="448"></td>
+        <td id="LC448" class="blob-code blob-code-inner js-file-line">  Each time you convey a covered work, the recipient automatically</td>
+      </tr>
+      <tr>
+        <td id="L449" class="blob-num js-line-number" data-line-number="449"></td>
+        <td id="LC449" class="blob-code blob-code-inner js-file-line">receives a license from the original licensors, to run, modify and</td>
+      </tr>
+      <tr>
+        <td id="L450" class="blob-num js-line-number" data-line-number="450"></td>
+        <td id="LC450" class="blob-code blob-code-inner js-file-line">propagate that work, subject to this License.  You are not responsible</td>
+      </tr>
+      <tr>
+        <td id="L451" class="blob-num js-line-number" data-line-number="451"></td>
+        <td id="LC451" class="blob-code blob-code-inner js-file-line">for enforcing compliance by third parties with this License.</td>
+      </tr>
+      <tr>
+        <td id="L452" class="blob-num js-line-number" data-line-number="452"></td>
+        <td id="LC452" class="blob-code blob-code-inner js-file-line">
+</td>
+      </tr>
+      <tr>
+        <td id="L453" class="blob-num js-line-number" data-line-number="453"></td>
+        <td id="LC453" class="blob-code blob-code-inner js-file-line">  An &quot;entity transaction&quot; is a transaction transferring control of an</td>
+      </tr>
+      <tr>
+        <td id="L454" class="blob-num js-line-number" data-line-number="454"></td>
+        <td id="LC454" class="blob-code blob-code-inner js-file-line">organization, or substantially all assets of one, or subdividing an</td>
+      </tr>
+      <tr>
+        <td id="L455" class="blob-num js-line-number" data-line-number="455"></td>
+        <td id="LC455" class="blob-code blob-code-inner js-file-line">organization, or merging organizations.  If propagation of a covered</td>
+      </tr>
+      <tr>
+        <td id="L456" class="blob-num js-line-number" data-line-number="456"></td>
+        <td id="LC456" class="blob-code blob-code-inner js-file-line">work results from an entity transaction, each party to that</td>
+      </tr>
+      <tr>
+        <td id="L457" class="blob-num js-line-number" data-line-number="457"></td>
+        <td id="LC457" class="blob-code blob-code-inner js-file-line">transaction who receives a copy of the work also receives whatever</td>
+      </tr>
+      <tr>
+        <td id="L458" class="blob-num js-line-number" data-line-number="458"></td>
+        <td id="LC458" class="blob-code blob-code-inner js-file-line">licenses to the work the party&#39;s predecessor in interest had or could</td>
+      </tr>
+      <tr>
+        <td id="L459" class="blob-num js-line-number" data-line-number="459"></td>
+        <td id="LC459" class="blob-code blob-code-inner js-file-line">give under the previous paragraph, plus a right to possession of the</td>
+      </tr>
+      <tr>
+        <td id="L460" class="blob-num js-line-number" data-line-number="460"></td>
+        <td id="LC460" class="blob-code blob-code-inner js-file-line">Corresponding Source of the work from the predecessor in interest, if</td>
+      </tr>
+      <tr>
+        <td id="L461" class="blob-num js-line-number" data-line-number="461"></td>
+        <td id="LC461" class="blob-code blob-code-inner js-file-line">the predecessor has it or can get it with reasonable efforts.</td>
+      </tr>
+      <tr>
+        <td id="L462" class="blob-num js-line-number" data-line-number="462"></td>
+        <td id="LC462" class="blob-code blob-code-inner js-file-line">
+</td>
+      </tr>
+      <tr>
+        <td id="L463" class="blob-num js-line-number" data-line-number="463"></td>
+        <td id="LC463" class="blob-code blob-code-inner js-file-line">  You may not impose any further restrictions on the exercise of the</td>
+      </tr>
+      <tr>
+        <td id="L464" class="blob-num js-line-number" data-line-number="464"></td>
+        <td id="LC464" class="blob-code blob-code-inner js-file-line">rights granted or affirmed under this License.  For example, you may</td>
+      </tr>
+      <tr>
+        <td id="L465" class="blob-num js-line-number" data-line-number="465"></td>
+        <td id="LC465" class="blob-code blob-code-inner js-file-line">not impose a license fee, royalty, or other charge for exercise of</td>
+      </tr>
+      <tr>
+        <td id="L466" class="blob-num js-line-number" data-line-number="466"></td>
+        <td id="LC466" class="blob-code blob-code-inner js-file-line">rights granted under this License, and you may not initiate litigation</td>
+      </tr>
+      <tr>
+        <td id="L467" class="blob-num js-line-number" data-line-number="467"></td>
+        <td id="LC467" class="blob-code blob-code-inner js-file-line">(including a cross-claim or counterclaim in a lawsuit) alleging that</td>
+      </tr>
+      <tr>
+        <td id="L468" class="blob-num js-line-number" data-line-number="468"></td>
+        <td id="LC468" class="blob-code blob-code-inner js-file-line">any patent claim is infringed by making, using, selling, offering for</td>
+      </tr>
+      <tr>
+        <td id="L469" class="blob-num js-line-number" data-line-number="469"></td>
+        <td id="LC469" class="blob-code blob-code-inner js-file-line">sale, or importing the Program or any portion of it.</td>
+      </tr>
+      <tr>
+        <td id="L470" class="blob-num js-line-number" data-line-number="470"></td>
+        <td id="LC470" class="blob-code blob-code-inner js-file-line">
+</td>
+      </tr>
+      <tr>
+        <td id="L471" class="blob-num js-line-number" data-line-number="471"></td>
+        <td id="LC471" class="blob-code blob-code-inner js-file-line">  11. Patents.</td>
+      </tr>
+      <tr>
+        <td id="L472" class="blob-num js-line-number" data-line-number="472"></td>
+        <td id="LC472" class="blob-code blob-code-inner js-file-line">
+</td>
+      </tr>
+      <tr>
+        <td id="L473" class="blob-num js-line-number" data-line-number="473"></td>
+        <td id="LC473" class="blob-code blob-code-inner js-file-line">  A &quot;contributor&quot; is a copyright holder who authorizes use under this</td>
+      </tr>
+      <tr>
+        <td id="L474" class="blob-num js-line-number" data-line-number="474"></td>
+        <td id="LC474" class="blob-code blob-code-inner js-file-line">License of the Program or a work on which the Program is based.  The</td>
+      </tr>
+      <tr>
+        <td id="L475" class="blob-num js-line-number" data-line-number="475"></td>
+        <td id="LC475" class="blob-code blob-code-inner js-file-line">work thus licensed is called the contributor&#39;s &quot;contributor version&quot;.</td>
+      </tr>
+      <tr>
+        <td id="L476" class="blob-num js-line-number" data-line-number="476"></td>
+        <td id="LC476" class="blob-code blob-code-inner js-file-line">
+</td>
+      </tr>
+      <tr>
+        <td id="L477" class="blob-num js-line-number" data-line-number="477"></td>
+        <td id="LC477" class="blob-code blob-code-inner js-file-line">  A contributor&#39;s &quot;essential patent claims&quot; are all patent claims</td>
+      </tr>
+      <tr>
+        <td id="L478" class="blob-num js-line-number" data-line-number="478"></td>
+        <td id="LC478" class="blob-code blob-code-inner js-file-line">owned or controlled by the contributor, whether already acquired or</td>
+      </tr>
+      <tr>
+        <td id="L479" class="blob-num js-line-number" data-line-number="479"></td>
+        <td id="LC479" class="blob-code blob-code-inner js-file-line">hereafter acquired, that would be infringed by some manner, permitted</td>
+      </tr>
+      <tr>
+        <td id="L480" class="blob-num js-line-number" data-line-number="480"></td>
+        <td id="LC480" class="blob-code blob-code-inner js-file-line">by this License, of making, using, or selling its contributor version,</td>
+      </tr>
+      <tr>
+        <td id="L481" class="blob-num js-line-number" data-line-number="481"></td>
+        <td id="LC481" class="blob-code blob-code-inner js-file-line">but do not include claims that would be infringed only as a</td>
+      </tr>
+      <tr>
+        <td id="L482" class="blob-num js-line-number" data-line-number="482"></td>
+        <td id="LC482" class="blob-code blob-code-inner js-file-line">consequence of further modification of the contributor version.  For</td>
+      </tr>
+      <tr>
+        <td id="L483" class="blob-num js-line-number" data-line-number="483"></td>
+        <td id="LC483" class="blob-code blob-code-inner js-file-line">purposes of this definition, &quot;control&quot; includes the right to grant</td>
+      </tr>
+      <tr>
+        <td id="L484" class="blob-num js-line-number" data-line-number="484"></td>
+        <td id="LC484" class="blob-code blob-code-inner js-file-line">patent sublicenses in a manner consistent with the requirements of</td>
+      </tr>
+      <tr>
+        <td id="L485" class="blob-num js-line-number" data-line-number="485"></td>
+        <td id="LC485" class="blob-code blob-code-inner js-file-line">this License.</td>
+      </tr>
+      <tr>
+        <td id="L486" class="blob-num js-line-number" data-line-number="486"></td>
+        <td id="LC486" class="blob-code blob-code-inner js-file-line">
+</td>
+      </tr>
+      <tr>
+        <td id="L487" class="blob-num js-line-number" data-line-number="487"></td>
+        <td id="LC487" class="blob-code blob-code-inner js-file-line">  Each contributor grants you a non-exclusive, worldwide, royalty-free</td>
+      </tr>
+      <tr>
+        <td id="L488" class="blob-num js-line-number" data-line-number="488"></td>
+        <td id="LC488" class="blob-code blob-code-inner js-file-line">patent license under the contributor&#39;s essential patent claims, to</td>
+      </tr>
+      <tr>
+        <td id="L489" class="blob-num js-line-number" data-line-number="489"></td>
+        <td id="LC489" class="blob-code blob-code-inner js-file-line">make, use, sell, offer for sale, import and otherwise run, modify and</td>
+      </tr>
+      <tr>
+        <td id="L490" class="blob-num js-line-number" data-line-number="490"></td>
+        <td id="LC490" class="blob-code blob-code-inner js-file-line">propagate the contents of its contributor version.</td>
+      </tr>
+      <tr>
+        <td id="L491" class="blob-num js-line-number" data-line-number="491"></td>
+        <td id="LC491" class="blob-code blob-code-inner js-file-line">
+</td>
+      </tr>
+      <tr>
+        <td id="L492" class="blob-num js-line-number" data-line-number="492"></td>
+        <td id="LC492" class="blob-code blob-code-inner js-file-line">  In the following three paragraphs, a &quot;patent license&quot; is any express</td>
+      </tr>
+      <tr>
+        <td id="L493" class="blob-num js-line-number" data-line-number="493"></td>
+        <td id="LC493" class="blob-code blob-code-inner js-file-line">agreement or commitment, however denominated, not to enforce a patent</td>
+      </tr>
+      <tr>
+        <td id="L494" class="blob-num js-line-number" data-line-number="494"></td>
+        <td id="LC494" class="blob-code blob-code-inner js-file-line">(such as an express permission to practice a patent or covenant not to</td>
+      </tr>
+      <tr>
+        <td id="L495" class="blob-num js-line-number" data-line-number="495"></td>
+        <td id="LC495" class="blob-code blob-code-inner js-file-line">sue for patent infringement).  To &quot;grant&quot; such a patent license to a</td>
+      </tr>
+      <tr>
+        <td id="L496" class="blob-num js-line-number" data-line-number="496"></td>
+        <td id="LC496" class="blob-code blob-code-inner js-file-line">party means to make such an agreement or commitment not to enforce a</td>
+      </tr>
+      <tr>
+        <td id="L497" class="blob-num js-line-number" data-line-number="497"></td>
+        <td id="LC497" class="blob-code blob-code-inner js-file-line">patent against the party.</td>
+      </tr>
+      <tr>
+        <td id="L498" class="blob-num js-line-number" data-line-number="498"></td>
+        <td id="LC498" class="blob-code blob-code-inner js-file-line">
+</td>
+      </tr>
+      <tr>
+        <td id="L499" class="blob-num js-line-number" data-line-number="499"></td>
+        <td id="LC499" class="blob-code blob-code-inner js-file-line">  If you convey a covered work, knowingly relying on a patent license,</td>
+      </tr>
+      <tr>
+        <td id="L500" class="blob-num js-line-number" data-line-number="500"></td>
+        <td id="LC500" class="blob-code blob-code-inner js-file-line">and the Corresponding Source of the work is not available for anyone</td>
+      </tr>
+      <tr>
+        <td id="L501" class="blob-num js-line-number" data-line-number="501"></td>
+        <td id="LC501" class="blob-code blob-code-inner js-file-line">to copy, free of charge and under the terms of this License, through a</td>
+      </tr>
+      <tr>
+        <td id="L502" class="blob-num js-line-number" data-line-number="502"></td>
+        <td id="LC502" class="blob-code blob-code-inner js-file-line">publicly available network server or other readily accessible means,</td>
+      </tr>
+      <tr>
+        <td id="L503" class="blob-num js-line-number" data-line-number="503"></td>
+        <td id="LC503" class="blob-code blob-code-inner js-file-line">then you must either (1) cause the Corresponding Source to be so</td>
+      </tr>
+      <tr>
+        <td id="L504" class="blob-num js-line-number" data-line-number="504"></td>
+        <td id="LC504" class="blob-code blob-code-inner js-file-line">available, or (2) arrange to deprive yourself of the benefit of the</td>
+      </tr>
+      <tr>
+        <td id="L505" class="blob-num js-line-number" data-line-number="505"></td>
+        <td id="LC505" class="blob-code blob-code-inner js-file-line">patent license for this particular work, or (3) arrange, in a manner</td>
+      </tr>
+      <tr>
+        <td id="L506" class="blob-num js-line-number" data-line-number="506"></td>
+        <td id="LC506" class="blob-code blob-code-inner js-file-line">consistent with the requirements of this License, to extend the patent</td>
+      </tr>
+      <tr>
+        <td id="L507" class="blob-num js-line-number" data-line-number="507"></td>
+        <td id="LC507" class="blob-code blob-code-inner js-file-line">license to downstream recipients.  &quot;Knowingly relying&quot; means you have</td>
+      </tr>
+      <tr>
+        <td id="L508" class="blob-num js-line-number" data-line-number="508"></td>
+        <td id="LC508" class="blob-code blob-code-inner js-file-line">actual knowledge that, but for the patent license, your conveying the</td>
+      </tr>
+      <tr>
+        <td id="L509" class="blob-num js-line-number" data-line-number="509"></td>
+        <td id="LC509" class="blob-code blob-code-inner js-file-line">covered work in a country, or your recipient&#39;s use of the covered work</td>
+      </tr>
+      <tr>
+        <td id="L510" class="blob-num js-line-number" data-line-number="510"></td>
+        <td id="LC510" class="blob-code blob-code-inner js-file-line">in a country, would infringe one or more identifiable patents in that</td>
+      </tr>
+      <tr>
+        <td id="L511" class="blob-num js-line-number" data-line-number="511"></td>
+        <td id="LC511" class="blob-code blob-code-inner js-file-line">country that you have reason to believe are valid.</td>
+      </tr>
+      <tr>
+        <td id="L512" class="blob-num js-line-number" data-line-number="512"></td>
+        <td id="LC512" class="blob-code blob-code-inner js-file-line">
+</td>
+      </tr>
+      <tr>
+        <td id="L513" class="blob-num js-line-number" data-line-number="513"></td>
+        <td id="LC513" class="blob-code blob-code-inner js-file-line">  If, pursuant to or in connection with a single transaction or</td>
+      </tr>
+      <tr>
+        <td id="L514" class="blob-num js-line-number" data-line-number="514"></td>
+        <td id="LC514" class="blob-code blob-code-inner js-file-line">arrangement, you convey, or propagate by procuring conveyance of, a</td>
+      </tr>
+      <tr>
+        <td id="L515" class="blob-num js-line-number" data-line-number="515"></td>
+        <td id="LC515" class="blob-code blob-code-inner js-file-line">covered work, and grant a patent license to some of the parties</td>
+      </tr>
+      <tr>
+        <td id="L516" class="blob-num js-line-number" data-line-number="516"></td>
+        <td id="LC516" class="blob-code blob-code-inner js-file-line">receiving the covered work authorizing them to use, propagate, modify</td>
+      </tr>
+      <tr>
+        <td id="L517" class="blob-num js-line-number" data-line-number="517"></td>
+        <td id="LC517" class="blob-code blob-code-inner js-file-line">or convey a specific copy of the covered work, then the patent license</td>
+      </tr>
+      <tr>
+        <td id="L518" class="blob-num js-line-number" data-line-number="518"></td>
+        <td id="LC518" class="blob-code blob-code-inner js-file-line">you grant is automatically extended to all recipients of the covered</td>
+      </tr>
+      <tr>
+        <td id="L519" class="blob-num js-line-number" data-line-number="519"></td>
+        <td id="LC519" class="blob-code blob-code-inner js-file-line">work and works based on it.</td>
+      </tr>
+      <tr>
+        <td id="L520" class="blob-num js-line-number" data-line-number="520"></td>
+        <td id="LC520" class="blob-code blob-code-inner js-file-line">
+</td>
+      </tr>
+      <tr>
+        <td id="L521" class="blob-num js-line-number" data-line-number="521"></td>
+        <td id="LC521" class="blob-code blob-code-inner js-file-line">  A patent license is &quot;discriminatory&quot; if it does not include within</td>
+      </tr>
+      <tr>
+        <td id="L522" class="blob-num js-line-number" data-line-number="522"></td>
+        <td id="LC522" class="blob-code blob-code-inner js-file-line">the scope of its coverage, prohibits the exercise of, or is</td>
+      </tr>
+      <tr>
+        <td id="L523" class="blob-num js-line-number" data-line-number="523"></td>
+        <td id="LC523" class="blob-code blob-code-inner js-file-line">conditioned on the non-exercise of one or more of the rights that are</td>
+      </tr>
+      <tr>
+        <td id="L524" class="blob-num js-line-number" data-line-number="524"></td>
+        <td id="LC524" class="blob-code blob-code-inner js-file-line">specifically granted under this License.  You may not convey a covered</td>
+      </tr>
+      <tr>
+        <td id="L525" class="blob-num js-line-number" data-line-number="525"></td>
+        <td id="LC525" class="blob-code blob-code-inner js-file-line">work if you are a party to an arrangement with a third party that is</td>
+      </tr>
+      <tr>
+        <td id="L526" class="blob-num js-line-number" data-line-number="526"></td>
+        <td id="LC526" class="blob-code blob-code-inner js-file-line">in the business of distributing software, under which you make payment</td>
+      </tr>
+      <tr>
+        <td id="L527" class="blob-num js-line-number" data-line-number="527"></td>
+        <td id="LC527" class="blob-code blob-code-inner js-file-line">to the third party based on the extent of your activity of conveying</td>
+      </tr>
+      <tr>
+        <td id="L528" class="blob-num js-line-number" data-line-number="528"></td>
+        <td id="LC528" class="blob-code blob-code-inner js-file-line">the work, and under which the third party grants, to any of the</td>
+      </tr>
+      <tr>
+        <td id="L529" class="blob-num js-line-number" data-line-number="529"></td>
+        <td id="LC529" class="blob-code blob-code-inner js-file-line">parties who would receive the covered work from you, a discriminatory</td>
+      </tr>
+      <tr>
+        <td id="L530" class="blob-num js-line-number" data-line-number="530"></td>
+        <td id="LC530" class="blob-code blob-code-inner js-file-line">patent license (a) in connection with copies of the covered work</td>
+      </tr>
+      <tr>
+        <td id="L531" class="blob-num js-line-number" data-line-number="531"></td>
+        <td id="LC531" class="blob-code blob-code-inner js-file-line">conveyed by you (or copies made from those copies), or (b) primarily</td>
+      </tr>
+      <tr>
+        <td id="L532" class="blob-num js-line-number" data-line-number="532"></td>
+        <td id="LC532" class="blob-code blob-code-inner js-file-line">for and in connection with specific products or compilations that</td>
+      </tr>
+      <tr>
+        <td id="L533" class="blob-num js-line-number" data-line-number="533"></td>
+        <td id="LC533" class="blob-code blob-code-inner js-file-line">contain the covered work, unless you entered into that arrangement,</td>
+      </tr>
+      <tr>
+        <td id="L534" class="blob-num js-line-number" data-line-number="534"></td>
+        <td id="LC534" class="blob-code blob-code-inner js-file-line">or that patent license was granted, prior to 28 March 2007.</td>
+      </tr>
+      <tr>
+        <td id="L535" class="blob-num js-line-number" data-line-number="535"></td>
+        <td id="LC535" class="blob-code blob-code-inner js-file-line">
+</td>
+      </tr>
+      <tr>
+        <td id="L536" class="blob-num js-line-number" data-line-number="536"></td>
+        <td id="LC536" class="blob-code blob-code-inner js-file-line">  Nothing in this License shall be construed as excluding or limiting</td>
+      </tr>
+      <tr>
+        <td id="L537" class="blob-num js-line-number" data-line-number="537"></td>
+        <td id="LC537" class="blob-code blob-code-inner js-file-line">any implied license or other defenses to infringement that may</td>
+      </tr>
+      <tr>
+        <td id="L538" class="blob-num js-line-number" data-line-number="538"></td>
+        <td id="LC538" class="blob-code blob-code-inner js-file-line">otherwise be available to you under applicable patent law.</td>
+      </tr>
+      <tr>
+        <td id="L539" class="blob-num js-line-number" data-line-number="539"></td>
+        <td id="LC539" class="blob-code blob-code-inner js-file-line">
+</td>
+      </tr>
+      <tr>
+        <td id="L540" class="blob-num js-line-number" data-line-number="540"></td>
+        <td id="LC540" class="blob-code blob-code-inner js-file-line">  12. No Surrender of Others&#39; Freedom.</td>
+      </tr>
+      <tr>
+        <td id="L541" class="blob-num js-line-number" data-line-number="541"></td>
+        <td id="LC541" class="blob-code blob-code-inner js-file-line">
+</td>
+      </tr>
+      <tr>
+        <td id="L542" class="blob-num js-line-number" data-line-number="542"></td>
+        <td id="LC542" class="blob-code blob-code-inner js-file-line">  If conditions are imposed on you (whether by court order, agreement or</td>
+      </tr>
+      <tr>
+        <td id="L543" class="blob-num js-line-number" data-line-number="543"></td>
+        <td id="LC543" class="blob-code blob-code-inner js-file-line">otherwise) that contradict the conditions of this License, they do not</td>
+      </tr>
+      <tr>
+        <td id="L544" class="blob-num js-line-number" data-line-number="544"></td>
+        <td id="LC544" class="blob-code blob-code-inner js-file-line">excuse you from the conditions of this License.  If you cannot convey a</td>
+      </tr>
+      <tr>
+        <td id="L545" class="blob-num js-line-number" data-line-number="545"></td>
+        <td id="LC545" class="blob-code blob-code-inner js-file-line">covered work so as to satisfy simultaneously your obligations under this</td>
+      </tr>
+      <tr>
+        <td id="L546" class="blob-num js-line-number" data-line-number="546"></td>
+        <td id="LC546" class="blob-code blob-code-inner js-file-line">License and any other pertinent obligations, then as a consequence you may</td>
+      </tr>
+      <tr>
+        <td id="L547" class="blob-num js-line-number" data-line-number="547"></td>
+        <td id="LC547" class="blob-code blob-code-inner js-file-line">not convey it at all.  For example, if you agree to terms that obligate you</td>
+      </tr>
+      <tr>
+        <td id="L548" class="blob-num js-line-number" data-line-number="548"></td>
+        <td id="LC548" class="blob-code blob-code-inner js-file-line">to collect a royalty for further conveying from those to whom you convey</td>
+      </tr>
+      <tr>
+        <td id="L549" class="blob-num js-line-number" data-line-number="549"></td>
+        <td id="LC549" class="blob-code blob-code-inner js-file-line">the Program, the only way you could satisfy both those terms and this</td>
+      </tr>
+      <tr>
+        <td id="L550" class="blob-num js-line-number" data-line-number="550"></td>
+        <td id="LC550" class="blob-code blob-code-inner js-file-line">License would be to refrain entirely from conveying the Program.</td>
+      </tr>
+      <tr>
+        <td id="L551" class="blob-num js-line-number" data-line-number="551"></td>
+        <td id="LC551" class="blob-code blob-code-inner js-file-line">
+</td>
+      </tr>
+      <tr>
+        <td id="L552" class="blob-num js-line-number" data-line-number="552"></td>
+        <td id="LC552" class="blob-code blob-code-inner js-file-line">  13. Use with the GNU Affero General Public License.</td>
+      </tr>
+      <tr>
+        <td id="L553" class="blob-num js-line-number" data-line-number="553"></td>
+        <td id="LC553" class="blob-code blob-code-inner js-file-line">
+</td>
+      </tr>
+      <tr>
+        <td id="L554" class="blob-num js-line-number" data-line-number="554"></td>
+        <td id="LC554" class="blob-code blob-code-inner js-file-line">  Notwithstanding any other provision of this License, you have</td>
+      </tr>
+      <tr>
+        <td id="L555" class="blob-num js-line-number" data-line-number="555"></td>
+        <td id="LC555" class="blob-code blob-code-inner js-file-line">permission to link or combine any covered work with a work licensed</td>
+      </tr>
+      <tr>
+        <td id="L556" class="blob-num js-line-number" data-line-number="556"></td>
+        <td id="LC556" class="blob-code blob-code-inner js-file-line">under version 3 of the GNU Affero General Public License into a single</td>
+      </tr>
+      <tr>
+        <td id="L557" class="blob-num js-line-number" data-line-number="557"></td>
+        <td id="LC557" class="blob-code blob-code-inner js-file-line">combined work, and to convey the resulting work.  The terms of this</td>
+      </tr>
+      <tr>
+        <td id="L558" class="blob-num js-line-number" data-line-number="558"></td>
+        <td id="LC558" class="blob-code blob-code-inner js-file-line">License will continue to apply to the part which is the covered work,</td>
+      </tr>
+      <tr>
+        <td id="L559" class="blob-num js-line-number" data-line-number="559"></td>
+        <td id="LC559" class="blob-code blob-code-inner js-file-line">but the special requirements of the GNU Affero General Public License,</td>
+      </tr>
+      <tr>
+        <td id="L560" class="blob-num js-line-number" data-line-number="560"></td>
+        <td id="LC560" class="blob-code blob-code-inner js-file-line">section 13, concerning interaction through a network will apply to the</td>
+      </tr>
+      <tr>
+        <td id="L561" class="blob-num js-line-number" data-line-number="561"></td>
+        <td id="LC561" class="blob-code blob-code-inner js-file-line">combination as such.</td>
+      </tr>
+      <tr>
+        <td id="L562" class="blob-num js-line-number" data-line-number="562"></td>
+        <td id="LC562" class="blob-code blob-code-inner js-file-line">
+</td>
+      </tr>
+      <tr>
+        <td id="L563" class="blob-num js-line-number" data-line-number="563"></td>
+        <td id="LC563" class="blob-code blob-code-inner js-file-line">  14. Revised Versions of this License.</td>
+      </tr>
+      <tr>
+        <td id="L564" class="blob-num js-line-number" data-line-number="564"></td>
+        <td id="LC564" class="blob-code blob-code-inner js-file-line">
+</td>
+      </tr>
+      <tr>
+        <td id="L565" class="blob-num js-line-number" data-line-number="565"></td>
+        <td id="LC565" class="blob-code blob-code-inner js-file-line">  The Free Software Foundation may publish revised and/or new versions of</td>
+      </tr>
+      <tr>
+        <td id="L566" class="blob-num js-line-number" data-line-number="566"></td>
+        <td id="LC566" class="blob-code blob-code-inner js-file-line">the GNU General Public License from time to time.  Such new versions will</td>
+      </tr>
+      <tr>
+        <td id="L567" class="blob-num js-line-number" data-line-number="567"></td>
+        <td id="LC567" class="blob-code blob-code-inner js-file-line">be similar in spirit to the present version, but may differ in detail to</td>
+      </tr>
+      <tr>
+        <td id="L568" class="blob-num js-line-number" data-line-number="568"></td>
+        <td id="LC568" class="blob-code blob-code-inner js-file-line">address new problems or concerns.</td>
+      </tr>
+      <tr>
+        <td id="L569" class="blob-num js-line-number" data-line-number="569"></td>
+        <td id="LC569" class="blob-code blob-code-inner js-file-line">
+</td>
+      </tr>
+      <tr>
+        <td id="L570" class="blob-num js-line-number" data-line-number="570"></td>
+        <td id="LC570" class="blob-code blob-code-inner js-file-line">  Each version is given a distinguishing version number.  If the</td>
+      </tr>
+      <tr>
+        <td id="L571" class="blob-num js-line-number" data-line-number="571"></td>
+        <td id="LC571" class="blob-code blob-code-inner js-file-line">Program specifies that a certain numbered version of the GNU General</td>
+      </tr>
+      <tr>
+        <td id="L572" class="blob-num js-line-number" data-line-number="572"></td>
+        <td id="LC572" class="blob-code blob-code-inner js-file-line">Public License &quot;or any later version&quot; applies to it, you have the</td>
+      </tr>
+      <tr>
+        <td id="L573" class="blob-num js-line-number" data-line-number="573"></td>
+        <td id="LC573" class="blob-code blob-code-inner js-file-line">option of following the terms and conditions either of that numbered</td>
+      </tr>
+      <tr>
+        <td id="L574" class="blob-num js-line-number" data-line-number="574"></td>
+        <td id="LC574" class="blob-code blob-code-inner js-file-line">version or of any later version published by the Free Software</td>
+      </tr>
+      <tr>
+        <td id="L575" class="blob-num js-line-number" data-line-number="575"></td>
+        <td id="LC575" class="blob-code blob-code-inner js-file-line">Foundation.  If the Program does not specify a version number of the</td>
+      </tr>
+      <tr>
+        <td id="L576" class="blob-num js-line-number" data-line-number="576"></td>
+        <td id="LC576" class="blob-code blob-code-inner js-file-line">GNU General Public License, you may choose any version ever published</td>
+      </tr>
+      <tr>
+        <td id="L577" class="blob-num js-line-number" data-line-number="577"></td>
+        <td id="LC577" class="blob-code blob-code-inner js-file-line">by the Free Software Foundation.</td>
+      </tr>
+      <tr>
+        <td id="L578" class="blob-num js-line-number" data-line-number="578"></td>
+        <td id="LC578" class="blob-code blob-code-inner js-file-line">
+</td>
+      </tr>
+      <tr>
+        <td id="L579" class="blob-num js-line-number" data-line-number="579"></td>
+        <td id="LC579" class="blob-code blob-code-inner js-file-line">  If the Program specifies that a proxy can decide which future</td>
+      </tr>
+      <tr>
+        <td id="L580" class="blob-num js-line-number" data-line-number="580"></td>
+        <td id="LC580" class="blob-code blob-code-inner js-file-line">versions of the GNU General Public License can be used, that proxy&#39;s</td>
+      </tr>
+      <tr>
+        <td id="L581" class="blob-num js-line-number" data-line-number="581"></td>
+        <td id="LC581" class="blob-code blob-code-inner js-file-line">public statement of acceptance of a version permanently authorizes you</td>
+      </tr>
+      <tr>
+        <td id="L582" class="blob-num js-line-number" data-line-number="582"></td>
+        <td id="LC582" class="blob-code blob-code-inner js-file-line">to choose that version for the Program.</td>
+      </tr>
+      <tr>
+        <td id="L583" class="blob-num js-line-number" data-line-number="583"></td>
+        <td id="LC583" class="blob-code blob-code-inner js-file-line">
+</td>
+      </tr>
+      <tr>
+        <td id="L584" class="blob-num js-line-number" data-line-number="584"></td>
+        <td id="LC584" class="blob-code blob-code-inner js-file-line">  Later license versions may give you additional or different</td>
+      </tr>
+      <tr>
+        <td id="L585" class="blob-num js-line-number" data-line-number="585"></td>
+        <td id="LC585" class="blob-code blob-code-inner js-file-line">permissions.  However, no additional obligations are imposed on any</td>
+      </tr>
+      <tr>
+        <td id="L586" class="blob-num js-line-number" data-line-number="586"></td>
+        <td id="LC586" class="blob-code blob-code-inner js-file-line">author or copyright holder as a result of your choosing to follow a</td>
+      </tr>
+      <tr>
+        <td id="L587" class="blob-num js-line-number" data-line-number="587"></td>
+        <td id="LC587" class="blob-code blob-code-inner js-file-line">later version.</td>
+      </tr>
+      <tr>
+        <td id="L588" class="blob-num js-line-number" data-line-number="588"></td>
+        <td id="LC588" class="blob-code blob-code-inner js-file-line">
+</td>
+      </tr>
+      <tr>
+        <td id="L589" class="blob-num js-line-number" data-line-number="589"></td>
+        <td id="LC589" class="blob-code blob-code-inner js-file-line">  15. Disclaimer of Warranty.</td>
+      </tr>
+      <tr>
+        <td id="L590" class="blob-num js-line-number" data-line-number="590"></td>
+        <td id="LC590" class="blob-code blob-code-inner js-file-line">
+</td>
+      </tr>
+      <tr>
+        <td id="L591" class="blob-num js-line-number" data-line-number="591"></td>
+        <td id="LC591" class="blob-code blob-code-inner js-file-line">  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY</td>
+      </tr>
+      <tr>
+        <td id="L592" class="blob-num js-line-number" data-line-number="592"></td>
+        <td id="LC592" class="blob-code blob-code-inner js-file-line">APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT</td>
+      </tr>
+      <tr>
+        <td id="L593" class="blob-num js-line-number" data-line-number="593"></td>
+        <td id="LC593" class="blob-code blob-code-inner js-file-line">HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM &quot;AS IS&quot; WITHOUT WARRANTY</td>
+      </tr>
+      <tr>
+        <td id="L594" class="blob-num js-line-number" data-line-number="594"></td>
+        <td id="LC594" class="blob-code blob-code-inner js-file-line">OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,</td>
+      </tr>
+      <tr>
+        <td id="L595" class="blob-num js-line-number" data-line-number="595"></td>
+        <td id="LC595" class="blob-code blob-code-inner js-file-line">THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR</td>
+      </tr>
+      <tr>
+        <td id="L596" class="blob-num js-line-number" data-line-number="596"></td>
+        <td id="LC596" class="blob-code blob-code-inner js-file-line">PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM</td>
+      </tr>
+      <tr>
+        <td id="L597" class="blob-num js-line-number" data-line-number="597"></td>
+        <td id="LC597" class="blob-code blob-code-inner js-file-line">IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF</td>
+      </tr>
+      <tr>
+        <td id="L598" class="blob-num js-line-number" data-line-number="598"></td>
+        <td id="LC598" class="blob-code blob-code-inner js-file-line">ALL NECESSARY SERVICING, REPAIR OR CORRECTION.</td>
+      </tr>
+      <tr>
+        <td id="L599" class="blob-num js-line-number" data-line-number="599"></td>
+        <td id="LC599" class="blob-code blob-code-inner js-file-line">
+</td>
+      </tr>
+      <tr>
+        <td id="L600" class="blob-num js-line-number" data-line-number="600"></td>
+        <td id="LC600" class="blob-code blob-code-inner js-file-line">  16. Limitation of Liability.</td>
+      </tr>
+      <tr>
+        <td id="L601" class="blob-num js-line-number" data-line-number="601"></td>
+        <td id="LC601" class="blob-code blob-code-inner js-file-line">
+</td>
+      </tr>
+      <tr>
+        <td id="L602" class="blob-num js-line-number" data-line-number="602"></td>
+        <td id="LC602" class="blob-code blob-code-inner js-file-line">  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING</td>
+      </tr>
+      <tr>
+        <td id="L603" class="blob-num js-line-number" data-line-number="603"></td>
+        <td id="LC603" class="blob-code blob-code-inner js-file-line">WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS</td>
+      </tr>
+      <tr>
+        <td id="L604" class="blob-num js-line-number" data-line-number="604"></td>
+        <td id="LC604" class="blob-code blob-code-inner js-file-line">THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY</td>
+      </tr>
+      <tr>
+        <td id="L605" class="blob-num js-line-number" data-line-number="605"></td>
+        <td id="LC605" class="blob-code blob-code-inner js-file-line">GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE</td>
+      </tr>
+      <tr>
+        <td id="L606" class="blob-num js-line-number" data-line-number="606"></td>
+        <td id="LC606" class="blob-code blob-code-inner js-file-line">USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF</td>
+      </tr>
+      <tr>
+        <td id="L607" class="blob-num js-line-number" data-line-number="607"></td>
+        <td id="LC607" class="blob-code blob-code-inner js-file-line">DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD</td>
+      </tr>
+      <tr>
+        <td id="L608" class="blob-num js-line-number" data-line-number="608"></td>
+        <td id="LC608" class="blob-code blob-code-inner js-file-line">PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),</td>
+      </tr>
+      <tr>
+        <td id="L609" class="blob-num js-line-number" data-line-number="609"></td>
+        <td id="LC609" class="blob-code blob-code-inner js-file-line">EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF</td>
+      </tr>
+      <tr>
+        <td id="L610" class="blob-num js-line-number" data-line-number="610"></td>
+        <td id="LC610" class="blob-code blob-code-inner js-file-line">SUCH DAMAGES.</td>
+      </tr>
+      <tr>
+        <td id="L611" class="blob-num js-line-number" data-line-number="611"></td>
+        <td id="LC611" class="blob-code blob-code-inner js-file-line">
+</td>
+      </tr>
+      <tr>
+        <td id="L612" class="blob-num js-line-number" data-line-number="612"></td>
+        <td id="LC612" class="blob-code blob-code-inner js-file-line">  17. Interpretation of Sections 15 and 16.</td>
+      </tr>
+      <tr>
+        <td id="L613" class="blob-num js-line-number" data-line-number="613"></td>
+        <td id="LC613" class="blob-code blob-code-inner js-file-line">
+</td>
+      </tr>
+      <tr>
+        <td id="L614" class="blob-num js-line-number" data-line-number="614"></td>
+        <td id="LC614" class="blob-code blob-code-inner js-file-line">  If the disclaimer of warranty and limitation of liability provided</td>
+      </tr>
+      <tr>
+        <td id="L615" class="blob-num js-line-number" data-line-number="615"></td>
+        <td id="LC615" class="blob-code blob-code-inner js-file-line">above cannot be given local legal effect according to their terms,</td>
+      </tr>
+      <tr>
+        <td id="L616" class="blob-num js-line-number" data-line-number="616"></td>
+        <td id="LC616" class="blob-code blob-code-inner js-file-line">reviewing courts shall apply local law that most closely approximates</td>
+      </tr>
+      <tr>
+        <td id="L617" class="blob-num js-line-number" data-line-number="617"></td>
+        <td id="LC617" class="blob-code blob-code-inner js-file-line">an absolute waiver of all civil liability in connection with the</td>
+      </tr>
+      <tr>
+        <td id="L618" class="blob-num js-line-number" data-line-number="618"></td>
+        <td id="LC618" class="blob-code blob-code-inner js-file-line">Program, unless a warranty or assumption of liability accompanies a</td>
+      </tr>
+      <tr>
+        <td id="L619" class="blob-num js-line-number" data-line-number="619"></td>
+        <td id="LC619" class="blob-code blob-code-inner js-file-line">copy of the Program in return for a fee.</td>
+      </tr>
+      <tr>
+        <td id="L620" class="blob-num js-line-number" data-line-number="620"></td>
+        <td id="LC620" class="blob-code blob-code-inner js-file-line">
+</td>
+      </tr>
+      <tr>
+        <td id="L621" class="blob-num js-line-number" data-line-number="621"></td>
+        <td id="LC621" class="blob-code blob-code-inner js-file-line">                     END OF TERMS AND CONDITIONS</td>
+      </tr>
+      <tr>
+        <td id="L622" class="blob-num js-line-number" data-line-number="622"></td>
+        <td id="LC622" class="blob-code blob-code-inner js-file-line">
+</td>
+      </tr>
+      <tr>
+        <td id="L623" class="blob-num js-line-number" data-line-number="623"></td>
+        <td id="LC623" class="blob-code blob-code-inner js-file-line">            How to Apply These Terms to Your New Programs</td>
+      </tr>
+      <tr>
+        <td id="L624" class="blob-num js-line-number" data-line-number="624"></td>
+        <td id="LC624" class="blob-code blob-code-inner js-file-line">
+</td>
+      </tr>
+      <tr>
+        <td id="L625" class="blob-num js-line-number" data-line-number="625"></td>
+        <td id="LC625" class="blob-code blob-code-inner js-file-line">  If you develop a new program, and you want it to be of the greatest</td>
+      </tr>
+      <tr>
+        <td id="L626" class="blob-num js-line-number" data-line-number="626"></td>
+        <td id="LC626" class="blob-code blob-code-inner js-file-line">possible use to the public, the best way to achieve this is to make it</td>
+      </tr>
+      <tr>
+        <td id="L627" class="blob-num js-line-number" data-line-number="627"></td>
+        <td id="LC627" class="blob-code blob-code-inner js-file-line">free software which everyone can redistribute and change under these terms.</td>
+      </tr>
+      <tr>
+        <td id="L628" class="blob-num js-line-number" data-line-number="628"></td>
+        <td id="LC628" class="blob-code blob-code-inner js-file-line">
+</td>
+      </tr>
+      <tr>
+        <td id="L629" class="blob-num js-line-number" data-line-number="629"></td>
+        <td id="LC629" class="blob-code blob-code-inner js-file-line">  To do so, attach the following notices to the program.  It is safest</td>
+      </tr>
+      <tr>
+        <td id="L630" class="blob-num js-line-number" data-line-number="630"></td>
+        <td id="LC630" class="blob-code blob-code-inner js-file-line">to attach them to the start of each source file to most effectively</td>
+      </tr>
+      <tr>
+        <td id="L631" class="blob-num js-line-number" data-line-number="631"></td>
+        <td id="LC631" class="blob-code blob-code-inner js-file-line">state the exclusion of warranty; and each file should have at least</td>
+      </tr>
+      <tr>
+        <td id="L632" class="blob-num js-line-number" data-line-number="632"></td>
+        <td id="LC632" class="blob-code blob-code-inner js-file-line">the &quot;copyright&quot; line and a pointer to where the full notice is found.</td>
+      </tr>
+      <tr>
+        <td id="L633" class="blob-num js-line-number" data-line-number="633"></td>
+        <td id="LC633" class="blob-code blob-code-inner js-file-line">
+</td>
+      </tr>
+      <tr>
+        <td id="L634" class="blob-num js-line-number" data-line-number="634"></td>
+        <td id="LC634" class="blob-code blob-code-inner js-file-line">    {one line to give the program&#39;s name and a brief idea of what it does.}</td>
+      </tr>
+      <tr>
+        <td id="L635" class="blob-num js-line-number" data-line-number="635"></td>
+        <td id="LC635" class="blob-code blob-code-inner js-file-line">    Copyright (C) {year}  {name of author}</td>
+      </tr>
+      <tr>
+        <td id="L636" class="blob-num js-line-number" data-line-number="636"></td>
+        <td id="LC636" class="blob-code blob-code-inner js-file-line">
+</td>
+      </tr>
+      <tr>
+        <td id="L637" class="blob-num js-line-number" data-line-number="637"></td>
+        <td id="LC637" class="blob-code blob-code-inner js-file-line">    This program is free software: you can redistribute it and/or modify</td>
+      </tr>
+      <tr>
+        <td id="L638" class="blob-num js-line-number" data-line-number="638"></td>
+        <td id="LC638" class="blob-code blob-code-inner js-file-line">    it under the terms of the GNU General Public License as published by</td>
+      </tr>
+      <tr>
+        <td id="L639" class="blob-num js-line-number" data-line-number="639"></td>
+        <td id="LC639" class="blob-code blob-code-inner js-file-line">    the Free Software Foundation, either version 3 of the License, or</td>
+      </tr>
+      <tr>
+        <td id="L640" class="blob-num js-line-number" data-line-number="640"></td>
+        <td id="LC640" class="blob-code blob-code-inner js-file-line">    (at your option) any later version.</td>
+      </tr>
+      <tr>
+        <td id="L641" class="blob-num js-line-number" data-line-number="641"></td>
+        <td id="LC641" class="blob-code blob-code-inner js-file-line">
+</td>
+      </tr>
+      <tr>
+        <td id="L642" class="blob-num js-line-number" data-line-number="642"></td>
+        <td id="LC642" class="blob-code blob-code-inner js-file-line">    This program is distributed in the hope that it will be useful,</td>
+      </tr>
+      <tr>
+        <td id="L643" class="blob-num js-line-number" data-line-number="643"></td>
+        <td id="LC643" class="blob-code blob-code-inner js-file-line">    but WITHOUT ANY WARRANTY; without even the implied warranty of</td>
+      </tr>
+      <tr>
+        <td id="L644" class="blob-num js-line-number" data-line-number="644"></td>
+        <td id="LC644" class="blob-code blob-code-inner js-file-line">    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</td>
+      </tr>
+      <tr>
+        <td id="L645" class="blob-num js-line-number" data-line-number="645"></td>
+        <td id="LC645" class="blob-code blob-code-inner js-file-line">    GNU General Public License for more details.</td>
+      </tr>
+      <tr>
+        <td id="L646" class="blob-num js-line-number" data-line-number="646"></td>
+        <td id="LC646" class="blob-code blob-code-inner js-file-line">
+</td>
+      </tr>
+      <tr>
+        <td id="L647" class="blob-num js-line-number" data-line-number="647"></td>
+        <td id="LC647" class="blob-code blob-code-inner js-file-line">    You should have received a copy of the GNU General Public License</td>
+      </tr>
+      <tr>
+        <td id="L648" class="blob-num js-line-number" data-line-number="648"></td>
+        <td id="LC648" class="blob-code blob-code-inner js-file-line">    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</td>
+      </tr>
+      <tr>
+        <td id="L649" class="blob-num js-line-number" data-line-number="649"></td>
+        <td id="LC649" class="blob-code blob-code-inner js-file-line">
+</td>
+      </tr>
+      <tr>
+        <td id="L650" class="blob-num js-line-number" data-line-number="650"></td>
+        <td id="LC650" class="blob-code blob-code-inner js-file-line">Also add information on how to contact you by electronic and paper mail.</td>
+      </tr>
+      <tr>
+        <td id="L651" class="blob-num js-line-number" data-line-number="651"></td>
+        <td id="LC651" class="blob-code blob-code-inner js-file-line">
+</td>
+      </tr>
+      <tr>
+        <td id="L652" class="blob-num js-line-number" data-line-number="652"></td>
+        <td id="LC652" class="blob-code blob-code-inner js-file-line">  If the program does terminal interaction, make it output a short</td>
+      </tr>
+      <tr>
+        <td id="L653" class="blob-num js-line-number" data-line-number="653"></td>
+        <td id="LC653" class="blob-code blob-code-inner js-file-line">notice like this when it starts in an interactive mode:</td>
+      </tr>
+      <tr>
+        <td id="L654" class="blob-num js-line-number" data-line-number="654"></td>
+        <td id="LC654" class="blob-code blob-code-inner js-file-line">
+</td>
+      </tr>
+      <tr>
+        <td id="L655" class="blob-num js-line-number" data-line-number="655"></td>
+        <td id="LC655" class="blob-code blob-code-inner js-file-line">    {project}  Copyright (C) {year}  {fullname}</td>
+      </tr>
+      <tr>
+        <td id="L656" class="blob-num js-line-number" data-line-number="656"></td>
+        <td id="LC656" class="blob-code blob-code-inner js-file-line">    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w&#39;.</td>
+      </tr>
+      <tr>
+        <td id="L657" class="blob-num js-line-number" data-line-number="657"></td>
+        <td id="LC657" class="blob-code blob-code-inner js-file-line">    This is free software, and you are welcome to redistribute it</td>
+      </tr>
+      <tr>
+        <td id="L658" class="blob-num js-line-number" data-line-number="658"></td>
+        <td id="LC658" class="blob-code blob-code-inner js-file-line">    under certain conditions; type `show c&#39; for details.</td>
+      </tr>
+      <tr>
+        <td id="L659" class="blob-num js-line-number" data-line-number="659"></td>
+        <td id="LC659" class="blob-code blob-code-inner js-file-line">
+</td>
+      </tr>
+      <tr>
+        <td id="L660" class="blob-num js-line-number" data-line-number="660"></td>
+        <td id="LC660" class="blob-code blob-code-inner js-file-line">The hypothetical commands `show w&#39; and `show c&#39; should show the appropriate</td>
+      </tr>
+      <tr>
+        <td id="L661" class="blob-num js-line-number" data-line-number="661"></td>
+        <td id="LC661" class="blob-code blob-code-inner js-file-line">parts of the General Public License.  Of course, your program&#39;s commands</td>
+      </tr>
+      <tr>
+        <td id="L662" class="blob-num js-line-number" data-line-number="662"></td>
+        <td id="LC662" class="blob-code blob-code-inner js-file-line">might be different; for a GUI interface, you would use an &quot;about box&quot;.</td>
+      </tr>
+      <tr>
+        <td id="L663" class="blob-num js-line-number" data-line-number="663"></td>
+        <td id="LC663" class="blob-code blob-code-inner js-file-line">
+</td>
+      </tr>
+      <tr>
+        <td id="L664" class="blob-num js-line-number" data-line-number="664"></td>
+        <td id="LC664" class="blob-code blob-code-inner js-file-line">  You should also get your employer (if you work as a programmer) or school,</td>
+      </tr>
+      <tr>
+        <td id="L665" class="blob-num js-line-number" data-line-number="665"></td>
+        <td id="LC665" class="blob-code blob-code-inner js-file-line">if any, to sign a &quot;copyright disclaimer&quot; for the program, if necessary.</td>
+      </tr>
+      <tr>
+        <td id="L666" class="blob-num js-line-number" data-line-number="666"></td>
+        <td id="LC666" class="blob-code blob-code-inner js-file-line">For more information on this, and how to apply and follow the GNU GPL, see</td>
+      </tr>
+      <tr>
+        <td id="L667" class="blob-num js-line-number" data-line-number="667"></td>
+        <td id="LC667" class="blob-code blob-code-inner js-file-line">&lt;http://www.gnu.org/licenses/&gt;.</td>
+      </tr>
+      <tr>
+        <td id="L668" class="blob-num js-line-number" data-line-number="668"></td>
+        <td id="LC668" class="blob-code blob-code-inner js-file-line">
+</td>
+      </tr>
+      <tr>
+        <td id="L669" class="blob-num js-line-number" data-line-number="669"></td>
+        <td id="LC669" class="blob-code blob-code-inner js-file-line">  The GNU General Public License does not permit incorporating your program</td>
+      </tr>
+      <tr>
+        <td id="L670" class="blob-num js-line-number" data-line-number="670"></td>
+        <td id="LC670" class="blob-code blob-code-inner js-file-line">into proprietary programs.  If your program is a subroutine library, you</td>
+      </tr>
+      <tr>
+        <td id="L671" class="blob-num js-line-number" data-line-number="671"></td>
+        <td id="LC671" class="blob-code blob-code-inner js-file-line">may consider it more useful to permit linking proprietary applications with</td>
+      </tr>
+      <tr>
+        <td id="L672" class="blob-num js-line-number" data-line-number="672"></td>
+        <td id="LC672" class="blob-code blob-code-inner js-file-line">the library.  If this is what you want to do, use the GNU Lesser General</td>
+      </tr>
+      <tr>
+        <td id="L673" class="blob-num js-line-number" data-line-number="673"></td>
+        <td id="LC673" class="blob-code blob-code-inner js-file-line">Public License instead of this License.  But first, please read</td>
+      </tr>
+      <tr>
+        <td id="L674" class="blob-num js-line-number" data-line-number="674"></td>
+        <td id="LC674" class="blob-code blob-code-inner js-file-line">&lt;http://www.gnu.org/philosophy/why-not-lgpl.html&gt;.</td>
+      </tr>
+</table>
+
+  <details class="details-reset details-overlay BlobToolbar position-absolute js-file-line-actions dropdown d-none" aria-hidden="true">
+    <summary class="btn-octicon ml-0 px-2 p-0 bg-white border border-gray-dark rounded-1" aria-label="Inline file action toolbar">
+      <svg class="octicon octicon-kebab-horizontal" viewBox="0 0 13 16" version="1.1" width="13" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M1.5 9a1.5 1.5 0 100-3 1.5 1.5 0 000 3zm5 0a1.5 1.5 0 100-3 1.5 1.5 0 000 3zM13 7.5a1.5 1.5 0 11-3 0 1.5 1.5 0 013 0z"/></svg>
+    </summary>
+    <details-menu>
+      <ul class="BlobToolbar-dropdown dropdown-menu dropdown-menu-se mt-2" style="width:185px">
+        <li>
+          <clipboard-copy role="menuitem" class="dropdown-item" id="js-copy-lines" style="cursor:pointer;">
+            Copy lines
+          </clipboard-copy>
+        </li>
+        <li>
+          <clipboard-copy role="menuitem" class="dropdown-item" id="js-copy-permalink" style="cursor:pointer;">
+            Copy permalink
+          </clipboard-copy>
+        </li>
+        <li><a class="dropdown-item js-update-url-with-hash" id="js-view-git-blame" role="menuitem" href="/wagner-tech/mmail/blame/79a63adf5dc1780a1460a3fd1f24aa52b7721957/LICENSE">View git blame</a></li>
+          <li><a class="dropdown-item" id="js-new-issue" role="menuitem" href="/wagner-tech/mmail/issues/new">Reference in new issue</a></li>
+      </ul>
+    </details-menu>
+  </details>
+
+  </div>
+
+    </div>
+
+  
+
+  <details class="details-reset details-overlay details-overlay-dark">
+    <summary data-hotkey="l" aria-label="Jump to line"></summary>
+    <details-dialog class="Box Box--overlay d-flex flex-column anim-fade-in fast linejump" aria-label="Jump to line">
+      <!-- '"` --><!-- </textarea></xmp> --></option></form><form class="js-jump-to-line-form Box-body d-flex" action="" accept-charset="UTF-8" method="get"><input name="utf8" type="hidden" value="&#x2713;" />
+        <input class="form-control flex-auto mr-3 linejump-input js-jump-to-line-field" type="text" placeholder="Jump to line&hellip;" aria-label="Jump to line" autofocus>
+        <button type="submit" class="btn" data-close-dialog>Go</button>
+</form>    </details-dialog>
+  </details>
+
+
+
+  </div>
+</div>
+
+    </main>
+  </div>
+  
+
+  </div>
+
+        
+<div class="footer container-lg width-full p-responsive" role="contentinfo">
+  <div class="position-relative d-flex flex-row-reverse flex-lg-row flex-wrap flex-lg-nowrap flex-justify-center flex-lg-justify-between pt-6 pb-2 mt-6 f6 text-gray border-top border-gray-light ">
+    <ul class="list-style-none d-flex flex-wrap col-12 col-lg-5 flex-justify-center flex-lg-justify-between mb-2 mb-lg-0">
+      <li class="mr-3 mr-lg-0">&copy; 2019 GitHub, Inc.</li>
+        <li class="mr-3 mr-lg-0"><a data-ga-click="Footer, go to terms, text:terms" href="https://github.com/site/terms">Terms</a></li>
+        <li class="mr-3 mr-lg-0"><a data-ga-click="Footer, go to privacy, text:privacy" href="https://github.com/site/privacy">Privacy</a></li>
+        <li class="mr-3 mr-lg-0"><a data-ga-click="Footer, go to security, text:security" href="https://github.com/security">Security</a></li>
+        <li class="mr-3 mr-lg-0"><a href="https://githubstatus.com/" data-ga-click="Footer, go to status, text:status">Status</a></li>
+        <li><a data-ga-click="Footer, go to help, text:help" href="https://help.github.com">Help</a></li>
+    </ul>
+
+    <a aria-label="Homepage" title="GitHub" class="footer-octicon d-none d-lg-block mx-lg-4" href="https://github.com">
+      <svg height="24" class="octicon octicon-mark-github" viewBox="0 0 16 16" version="1.1" width="24" aria-hidden="true"><path fill-rule="evenodd" d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.013 8.013 0 0016 8c0-4.42-3.58-8-8-8z"/></svg>
+</a>
+   <ul class="list-style-none d-flex flex-wrap col-12 col-lg-5 flex-justify-center flex-lg-justify-between mb-2 mb-lg-0">
+        <li class="mr-3 mr-lg-0"><a data-ga-click="Footer, go to contact, text:contact" href="https://github.com/contact">Contact GitHub</a></li>
+        <li class="mr-3 mr-lg-0"><a href="https://github.com/pricing" data-ga-click="Footer, go to Pricing, text:Pricing">Pricing</a></li>
+      <li class="mr-3 mr-lg-0"><a href="https://developer.github.com" data-ga-click="Footer, go to api, text:api">API</a></li>
+      <li class="mr-3 mr-lg-0"><a href="https://training.github.com" data-ga-click="Footer, go to training, text:training">Training</a></li>
+        <li class="mr-3 mr-lg-0"><a href="https://github.blog" data-ga-click="Footer, go to blog, text:blog">Blog</a></li>
+        <li><a data-ga-click="Footer, go to about, text:about" href="https://github.com/about">About</a></li>
+
+    </ul>
+  </div>
+  <div class="d-flex flex-justify-center pb-6">
+    <span class="f6 text-gray-light"></span>
+  </div>
+</div>
+
+
+
+  <div id="ajax-error-message" class="ajax-error-message flash flash-error">
+    <svg class="octicon octicon-alert" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M8.893 1.5c-.183-.31-.52-.5-.887-.5s-.703.19-.886.5L.138 13.499a.98.98 0 000 1.001c.193.31.53.501.886.501h13.964c.367 0 .704-.19.877-.5a1.03 1.03 0 00.01-1.002L8.893 1.5zm.133 11.497H6.987v-2.003h2.039v2.003zm0-3.004H6.987V5.987h2.039v4.006z"/></svg>
+    <button type="button" class="flash-close js-ajax-error-dismiss" aria-label="Dismiss error">
+      <svg class="octicon octicon-x" viewBox="0 0 12 16" version="1.1" width="12" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M7.48 8l3.75 3.75-1.48 1.48L6 9.48l-3.75 3.75-1.48-1.48L4.52 8 .77 4.25l1.48-1.48L6 6.52l3.75-3.75 1.48 1.48L7.48 8z"/></svg>
+    </button>
+    You can’t perform that action at this time.
+  </div>
+
+
+    <script crossorigin="anonymous" integrity="sha512-+HrX8ahxgj74CUPPmM6Z3OU9WEiCyL7ZNdFDi1qwf32rgamIx9tGkQuWb4dFkMHthTaCuRbi3x2Zu8qtC88+6A==" type="application/javascript" src="https://github.githubassets.com/assets/compat-bootstrap-f87ad7f1.js"></script>
+    <script crossorigin="anonymous" integrity="sha512-5KoX4P/b8KhUNxooQhWIxRhCSnSw7EES28pOUYsNnqBMWDDUp6W7cPBV1MTAudwSwofIkpGapbXCgVTgn563Lg==" type="application/javascript" src="https://github.githubassets.com/assets/frameworks-e4aa17e0.js"></script>
+    
+    <script crossorigin="anonymous" async="async" integrity="sha512-0Igj5XKVaZAYxfH8dn/Vb0uoHCOGYqxJh2pXL3DHrgVOMa1ETDHd6ZMm4C+U4fKv8TiaHP7htak2hJOHwYGDoA==" type="application/javascript" src="https://github.githubassets.com/assets/github-bootstrap-d08823e5.js"></script>
+    
+    
+    
+  <div class="js-stale-session-flash flash flash-warn flash-banner" hidden
+    >
+    <svg class="octicon octicon-alert" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M8.893 1.5c-.183-.31-.52-.5-.887-.5s-.703.19-.886.5L.138 13.499a.98.98 0 000 1.001c.193.31.53.501.886.501h13.964c.367 0 .704-.19.877-.5a1.03 1.03 0 00.01-1.002L8.893 1.5zm.133 11.497H6.987v-2.003h2.039v2.003zm0-3.004H6.987V5.987h2.039v4.006z"/></svg>
+    <span class="js-stale-session-flash-signed-in" hidden>You signed in with another tab or window. <a href="">Reload</a> to refresh your session.</span>
+    <span class="js-stale-session-flash-signed-out" hidden>You signed out in another tab or window. <a href="">Reload</a> to refresh your session.</span>
+  </div>
+  <template id="site-details-dialog">
+  <details class="details-reset details-overlay details-overlay-dark lh-default text-gray-dark hx_rsm" open>
+    <summary role="button" aria-label="Close dialog"></summary>
+    <details-dialog class="Box Box--overlay d-flex flex-column anim-fade-in fast hx_rsm-dialog hx_rsm-modal">
+      <button class="Box-btn-octicon m-0 btn-octicon position-absolute right-0 top-0" type="button" aria-label="Close dialog" data-close-dialog>
+        <svg class="octicon octicon-x" viewBox="0 0 12 16" version="1.1" width="12" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M7.48 8l3.75 3.75-1.48 1.48L6 9.48l-3.75 3.75-1.48-1.48L4.52 8 .77 4.25l1.48-1.48L6 6.52l3.75-3.75 1.48 1.48L7.48 8z"/></svg>
+      </button>
+      <div class="octocat-spinner my-6 js-details-dialog-spinner"></div>
+    </details-dialog>
+  </details>
+</template>
+
+  <div class="Popover js-hovercard-content position-absolute" style="display: none; outline: none;" tabindex="0">
+  <div class="Popover-message Popover-message--bottom-left Popover-message--large Box box-shadow-large" style="width:360px;">
+  </div>
+</div>
+
+  <div aria-live="polite" class="js-global-screen-reader-notice sr-only"></div>
+
+  </body>
+</html>
+
diff --git a/doc/mbuild.8 b/doc/mbuild.8
new file mode 100644 (file)
index 0000000..7b26cfc
--- /dev/null
@@ -0,0 +1,89 @@
+.\" Manpage for mbuild.
+.\" Contact mail@wagnertech.de to correct errors or typos.
+.TH mbuild 8 "Jul 2018" GNU "WagnerTech Utilities"
+.SH NAME
+mbuild \- build system of WagnerTech UG
+.SH SYNOPSIS
+.B mbuild
+.SH DESCRIPTION
+.PP
+mbuild provides a simple build system based on make, git, subversion. The build process
+consists of 3 phases: configuration - compile - pack
+.TP
+configuration
+is done by the
+.B mconfigure
+script. It determins the verion number from the git/subversion status. A
+.B PAKET.changelog
+file is needed. Per 
+default this script also performs compile and pack step.
+
+If a
+.B PAKET.prepare
+file is present in the debian directory, it is called.
+
+If a
+.B PAKET.build
+file is present in the debian directory, it is called with a -prepare parameter (deprecated).
+The current tree is rsync_ed to ~/build.
+
+If a
+.B PAKET.prebuild
+file is present in the debian directory, it is called in the ~/build directory.
+
+.TP
+compile
+To perform the compile step a
+.B PAKET.build
+script is needed in the 
+.B debian 
+directory.
+.TP
+pack
+To perform the pack step a
+.B PAKET.cp
+script and a
+.B PAKET.control
+file are needed in the debian directory. If pre/post installation scripts
+are needed, these files must be also placed in the
+.B debian 
+directory.
+.SH FILES
+.TP
+PAKET.changelog
+Example:
+.br
+projects (0.2-%BUILD%) unstable; urgency=medium
+  * Build in svn-Umgebung
+ -- Michael Wagner <michael@wagnertech.de>  Fr 10. Aug 22:54:48 CEST 2018
+.TP
+PAKET.prepare
+Any executable script file executed in configure step
+.TP
+PAKET.prebuild
+Any executable script file executed in configure step in the ../build directory
+.TP
+PAKET.build
+Any executable script file executing the build in the ../build directory
+.TP
+PAKET.cp
+An executable script file copying the artefacts to target paths preposed by $1:
+.br
+cp ../build/my_artefact $1/usr/bin/
+.TP
+PAKET.preinst PAKET.postint PAKET.prerm PAKET.postrm
+Optional pre/post installation scripts
+.TP
+PAKET.control
+Debian control file
+.PP
+These files are expected in a
+.B debian
+directory, placed below the projects main directory.
+.SH SEE ALSO
+make(1), mconfigure(1)
+.SH BUGS
+No known bugs.
+.SH AUTHOR
+Michael Wagner (michael@wagnertech.de)
+
diff --git a/doc/mconfigure.1 b/doc/mconfigure.1
new file mode 100644 (file)
index 0000000..47ac178
--- /dev/null
@@ -0,0 +1,38 @@
+.\" Manpage for mconfigure.
+.\" Contact mail@wagnertech.de to correct errors or typos.
+.TH mconfigure 1 "Aug 2018" "GNU" "WagnerTech Utilities"
+.SH NAME
+mconfigure \- interface to build system of WagnerTech UG
+.SH SYNOPSIS
+.B mconfigure
+.I paket 
+.B [-cdp]
+.SH DESCRIPTION
+mconfigure builds the package 
+.I paket.
+mconfigure has to be called in the projects base directory containing a directoty named
+.B debian,
+that contains the files described in
+.B mbuild(8).
+.SH OPTIONS
+.TP
+-c
+select configuration step
+.TP
+-d
+select compile step
+.TP
+-p
+select pack step
+.TP
+-o
+support old Debian 7 format
+.PP
+If no steps are selected all steps are performed.
+.SH SEE ALSO
+mbuild(8): Overview description
+.SH BUGS
+No known bugs.
+.SH AUTHOR
+Michael Wagner (michael@wagnertech.de)
+
diff --git a/doc/sysd2sysv.8 b/doc/sysd2sysv.8
new file mode 100644 (file)
index 0000000..d7bb403
--- /dev/null
@@ -0,0 +1,16 @@
+.\" Manpage for sysd2sysv.
+.\" Contact mail@wagnertech.de to correct errors or typos.
+.TH man 8 "18.7.2018" "1.0" "sysd2sysv man page"
+.SH NAME
+sysd2sysv \- wrapper to run an old SystemV-init environments
+.SH SYNOPSIS
+.B sysd2sysv
+COMMAND SERVICE
+.SH DESCRIPTION
+.PP
+sysd2sysv checks, if the service is present in /etc/init.d. If not
+it builds one from /etc/init.d/sysd2sysv.tpl.
+.PP
+Do not install in a Systemd environment!
+.SH AUTHOR
+Michael Wagner (michael@wagnertech.de)
diff --git a/etc/.dummy b/etc/.dummy
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/etc/sysd2sysv.tpl b/etc/sysd2sysv.tpl
new file mode 100644 (file)
index 0000000..8e61839
--- /dev/null
@@ -0,0 +1,123 @@
+#!/bin/bash
+set -e # end if anything fails
+
+# tag: if the next line is changed/removed a reinstall of sysd2sysv will keep this file
+# sysd2sysv-template #
+
+PROG=%PROG%
+PROG_PATH=$(which $PROG) || { echo "$PROG missing"; exit 1; }
+
+syslog=/dev/null
+syserr=/tmp/%PROG%.err
+
+RETVAL=0
+
+. /lib/lsb/init-functions
+
+usage() {
+       echo "$0 [options] start|restart|stop"
+       echo "  -l <syslog>     DEFAULT: $syslog"
+       echo "  -e <errlog>     DEFAULT: $syserr"
+}
+
+start () {
+
+       # check, if process is already running
+       if [ `ps -ef | grep $PROG_PATH | grep -v grep | grep -v bash | wc -l` -gt 0 ]
+       then
+               log_end_msg 1
+               exit 1
+       fi
+       
+       log_daemon_msg $PROG || true
+       ($PROG &) 1>>$syslog 2>>$syserr
+       sleep 2
+       if status_of_proc $PROG
+       then
+               log_end_msg 0 || true
+       else
+           log_end_msg 1 || true
+       fi
+}
+
+status() {
+       if [ `ps -ef | grep $PROG_PATH | grep -v grep | grep -v bash | wc -l` -gt 0 ]
+       then
+               echo -n $PROG" is running..."
+               echo ""
+       else
+               echo -n $PROG" is stopped"
+               echo ""
+       fi
+}
+
+stop () {
+       log_daemon_msg "Stopping $PROG"
+       kill $(ps aux |grep $PROG_PATH |grep -v grep | awk '{print $2}') || true
+       return 0
+}
+
+# evaluate parameters
+
+operation="NOP"
+
+while [ -n "$1" ]
+do
+       case "$1" in
+       start)
+               operation=start
+               shift
+               ;;
+       restart)
+               operation=restart
+               shift
+               ;;
+       stop)
+               operation=stop
+               shift
+               ;;
+       -c)
+               configfile=$2
+               shift 2
+               ;;
+       -l)
+               syslog=$2
+               if [ -f $syslog ]; then rm $syslog; fi
+               shift 2
+               ;;
+       -e)
+               syserr=$2
+               shift 2
+               ;;
+       -h)
+               usage
+               exit 0
+               ;;
+       *)
+               usage
+               exit 1
+               ;;
+       esac
+done
+
+if [ -f $syserr ]; then rm $syserr; fi
+
+case $operation in
+start)
+       start
+       ;;
+stop)
+       stop
+       ;;
+restart)
+       stop
+       start
+       ;;
+*)
+       usage
+       exit 1
+       ;;
+esac
+
+exit 0
+
diff --git a/sh/sysd2sysv b/sh/sysd2sysv
new file mode 100755 (executable)
index 0000000..d1dec0d
--- /dev/null
@@ -0,0 +1,26 @@
+#!/bin/bash
+set -e
+
+if [ $# -ne 2 ]
+then
+       echo "usage: sysd2sysv <command> <deamon>"
+       exit 1
+fi
+
+if [ ! -f /etc/init.d/$2 ]
+then
+       sed "s/%PROG%/$2/" /var/sysd2sysv/sysd2sysv.tpl > /etc/init.d/$2
+       chmod 755 /etc/init.d/$2
+fi
+
+if [ $1 = "enable" ]
+then
+       update-rc.d $2 defaults 99
+elif [ $1 = "disable" ]
+then
+       update-rc.d -f $2 remove
+else
+       /etc/init.d/$2 $1
+fi
+
+
diff --git a/tools/cpan2deb b/tools/cpan2deb
new file mode 100755 (executable)
index 0000000..8d43bf8
--- /dev/null
@@ -0,0 +1,105 @@
+#!/bin/bash
+set -e
+
+function process_lib {
+       pushd ~/locallib 1>/dev/null
+               if [ $(ls lib/p*/ |wc -w) -eq 1 ]
+               then
+                       # seems to be arichtecturalsub dir
+                       arch_dir=$(ls lib/p*/)
+                       cd lib/p*/
+                       mv $arch_dir/* .
+                       rmdir $arch_dir
+                       cd ../..
+               fi
+               
+               # check, if there is a real archtecturel depandence
+               shared_lib=$(find . -name "*.so")
+               if [ -n "$shared_lib" ]
+               then
+                       arch=$(arch)
+               fi                      
+       popd 1>/dev/null
+       mv ~/locallib/lib $name/usr/
+}
+
+usage="cpan2deb <module>"
+
+if [ $# -ne 1 ]; then
+       echo $usage
+       exit 1
+fi
+
+#cd $HOME
+if [ -d locallib ]; then
+       rm -rf locallib
+fi
+#if [ -d build ]; then
+#      rm -rf build
+#fi
+
+start_dir=$(pwd)
+
+echo "call CPAN ..."
+cpan -m $1 1>$start_dir/cpan.out 2>&1 || (echo "cpan failed"; exit 1)
+
+# find build directory
+mname=$1
+name=lib${mname/::/-}-perl
+name=${name,,*}
+builddir=$(ls -rtd ~/.cpan/build/*/ |tail -1)
+
+pushd $builddir 1>/dev/null
+       perl Makefile.PL INSTALL_BASE="~/locallib"
+       make
+       make install 1>>~/cpan.out 2>&1
+       echo "Module $1 installed to ~/locallib, output written to $start_dir/cpan.out"
+popd 1>/dev/null
+
+arch=all
+
+# move locallib content
+mkdir -p $name/usr/
+
+for dir in $(ls ~/locallib); do
+       case $dir in
+       lib) process_lib
+       ;;
+       share) mv ~/locallib/share $name/usr/
+       ;;
+       man) mv ~/locallib/man $name/usr/
+       ;;
+       esac
+done
+
+# check version
+export PERL5LIB="$start_dir/$name/usr/lib/perl5:$PERL5LIB"
+version=$(perl -M$mname -e 'print $ARGV[0]->VERSION' $mname)
+
+arch_name=""
+if [ "$arch" != "all" ]
+then
+       arch_name="_$arch"
+       if [ "$arch" = "i686" ]
+       then
+               # i686-Paketarchitektur gibt es nicht
+               arch="i386"
+       fi
+fi
+
+mkdir -p $name/DEBIAN
+cat << EOF >$name/DEBIAN/control
+Package: $name
+Version: $version
+Section: base
+Priority: optional
+Architecture: $arch
+Depends:
+Maintainer: WagnerTech UG <mail@wagnertech.de>
+Description: $1 perl modul
+EOF
+
+fakeroot dpkg-deb --build $name
+cp $name.deb ${name}_$version$arch_name.deb
+echo "${name}_$version$arch_name.deb erstellt."
+
diff --git a/tools/make/c_configure.sh b/tools/make/c_configure.sh
new file mode 100755 (executable)
index 0000000..57b395e
--- /dev/null
@@ -0,0 +1,131 @@
+#!/bin/bash
+
+# util routines for a C/C++ - build
+
+function check_arch {
+       case $1 in
+       armel) ;;
+       i386) ;;
+       *)      echo "unknown architecture $1"
+               exit 1
+       esac
+}
+
+function install_cpp_make {
+# $1: dir to install
+# $2 (opt): if set to "lib" the fPIC flag is added
+
+       # find makefile
+       if [ -f /usr/share/mbuild/cpp.make ]
+       then
+               makefile=/usr/share/mbuild/cpp.make
+       elif [ -f $cwd/projects/tools/make/cpp.make ]
+       then
+               makefile=$cwd/projects/tools/make/cpp.make
+       else
+               echo "cannot find cpp makefile." >&2
+               exit 1
+       fi
+       src=$(pwd);
+       pushd $1
+       if [ -f makefile ]; then rm makefile; fi
+       if [ -L makefile ]; then rm makefile; fi
+       if [ -f make.post ]; then rm make.post; fi
+       ln -s $makefile makefile
+       echo "SOURCE = \\" > make.pre
+       for file in $(ls *.cpp)
+       do
+               echo "  $file \\" >> make.pre
+       done
+       echo >> make.pre
+       if [ "$DEB_HOST_ARCH" != "$DEB_BUILD_ARCH" ]
+       then
+               #cross compiling
+               echo "PREFIX = $DEB_HOST_GNU_TYPE-" >> make.pre
+               echo "SYSROOT = --sysroot=$HOME/cross" >> make.pre
+       fi
+
+       if [ "$ARCH" = "armel" ]
+       then
+               echo "CXX = arm-linux-gnueabi-g++" >> make.pre
+               echo "CC = arm-linux-gnueabi-g++" >> make.pre
+               echo "CXXFLAGS += -D_ARMEL" >> make.pre
+               echo 'export PATH := /opt/eldk-5.0/armv5te/sysroots/i686-oesdk-linux/usr/bin/armv5te-linux-gnueabi/:/opt/eldk-5.0/armv5te/sysroots/i686-oesdk-linux/bin/armv5te-linux-gnueabi/:$(PATH)' >> make.pre
+       else
+               echo "CXXFLAGS += -std=c++0x" >> make.pre
+       fi
+       
+       # compilation of libraries need fPIC flag
+       if [ "$2" == "lib" ]
+       then
+               echo "CXXFLAGS += -fPIC" >> make.pre
+       fi
+
+       popd
+}
+
+function append_dependency_common {
+# common part of append_dependency and append_library
+# parameter:
+# $1: main directory
+# $2: dependency directory
+# $3: dependency artefact
+
+       src=$(pwd)
+       echo "DEPS += $3" >> $1/make.pre
+       echo "$3:" >> $1/make.post
+       echo "  cd $src/$2 && make TARGET=$3" >> $1/make.post
+}
+
+function append_dependency {
+# adds another drectory, where a c++ compile is performed
+       append_dependency_common $*
+       echo "" >> $1/make.post
+}
+
+function add_include {
+# adds a include directory
+# parameter:
+# $1: main directory
+# $2: include dir
+
+       src=$(pwd)
+       echo "CXXFLAGS += -I$src/$2" >> $1/make.pre
+}
+
+function add_library {
+# adds a extern library
+# parameter:
+# $1: main directory
+# $2: library name (without l or lib )
+# $3: library path (optional)
+
+       src=$(pwd)
+       echo "EXTLIB += -l$2" >> $1/make.pre
+       if [ -n "$3" ]
+       then
+               lib_path=$3
+               if [ ${lib_path:0:1} != "/" ]
+               then
+                       lib_path="$src/$lib_path"
+               fi
+               echo "LDFLAGS += -L$lib_path" >> $1/make.pre
+       fi
+}
+
+function append_library {
+# same as append_dependency. In addition a include statement + a link to the library is added to "main directory"
+# parameter:
+# $1: main directory
+# $2: dependency directory
+# $3: dependency artefact
+
+       append_dependency_common $*
+       echo "  ln -sf $src/$2/$3 ." >> $1/make.post
+       echo "" >> $1/make.post
+
+       echo "LDLIBS += $3" >> $1/make.pre
+       echo "CXXFLAGS += -I$src/$2" >> $1/make.pre
+
+}
+
diff --git a/tools/make/configure b/tools/make/configure
new file mode 100755 (executable)
index 0000000..a92ecbd
--- /dev/null
@@ -0,0 +1,144 @@
+#!/bin/bash
+set -e
+
+function echo_usage {
+       echo "usage: configure <package> <revision> [options]"
+       echo "  -b <branch-rev>"
+       echo "  -a <arch>"
+       echo "  -g <alternative repository>"
+       echo "  -n : do not delete src dir"
+}
+
+# to build a package you need ...
+# <package>.co: checkout commands
+# <package>.cp (optional): copy step for package production
+# <package>.cpp.sh (optional): commands to setup the C++ compile environment
+
+if [ $# -lt 2 ]
+then
+       echo_usage
+       exit 1
+fi
+
+paket=$1
+build=$2
+shift 2
+ARCH=""
+cpp_build=0
+alt_repos=""
+delete_src=1
+
+while getopts ":a:b:g:n" opt; do
+       case $opt in
+               a) ARCH=$OPTARG
+                       ;;
+               b) branch=$OPTARG
+                       ;;
+               g) alt_repos="-g $OPTARG"
+                       ;;
+               n) delete_src=0
+                       ;;
+               \?) echo "Invalid option: -$OPTARG"
+                       echo_usage
+                       exit 1
+                       ;;
+               :) echo "Option -$OPTARG requires an argument."
+                       echo_usage
+                       exit 1
+                       ;;
+       esac
+done
+
+ln -sf projects/tools/make/makefile .
+
+# check standard files
+if [ ! -x $paket.co ]
+then
+       echo "file $paket.co missing or not executable."
+       exit 1
+fi
+
+# clean dirs and check out
+if [ -d src -a $delete_src -eq 1 ]
+then
+       rm -rf src
+fi
+
+if [ -e $paket ]
+then
+       rm -rf $paket
+fi
+rm *.stamp || true
+rm make.pre || true
+
+mkdir -p src
+cwd=$(pwd)
+
+# checkout
+pushd src >/dev/null
+       ../$paket.co $alt_repos $build 
+popd >/dev/null
+
+# load util functions for C/C++ - build
+if [ -f $paket.cpp.sh ]
+then
+       cpp_build=1
+       . projects/tools/make/c_configure.sh
+       . $paket.cpp.sh
+fi
+
+# copy package control
+control=$(find -L src -name $paket.control)
+build_number=${build#*_}
+if [ -z "$control" ]
+then
+       echo "warning: control file not found"
+       echo "  this file is necessary for any package production."
+else   
+       sed "s/%BUILD%/$build_number/" $control |sed "s/%ARCH%/$ARCH/" >$paket.control
+       echo "$paket.control written."
+
+       # extract version
+       version=$(grep Version $paket.control |sed "s/Version: //")
+fi
+
+# check for copy file
+copy=$(find -L src -name $paket.cp)
+if [ -n "$copy" ]
+then
+       ln -sf $copy .
+else
+       echo "warning: file $paket.cp missing or not executable:"
+       echo "  this file is necessary for any package production."
+fi
+
+# check for installation scripts
+files=$(find -L src -name $paket.preinst)
+files="$files $(find -L src -name $paket.postinst)"
+files="$files $(find -L src -name $paket.prerm)"
+files="$files $(find -L src -name $paket.postrm)"
+for file in $files
+do
+       ln -sf $file .
+done
+
+# create generic make.pre, if not existing
+if [ ! -f make.pre ]
+then
+       cat  >>make.pre <<MAKE_PRE
+# mBuild make.pre script (auto generated)
+project = $paket
+COPY = ./$paket.cp
+MAKE_PRE
+       if [ -n "$ARCH" ]
+       then
+               echo "arch = $ARCH" >>make.pre
+               echo "_arch = _${ARCH}" >>make.pre
+       fi
+       echo "make.pre written."
+fi
+
+# append version to make.pre
+echo "version = $version" >> make.pre
+echo "build = $build" >> make.pre
+
diff --git a/tools/make/cpp.make b/tools/make/cpp.make
new file mode 100644 (file)
index 0000000..7f318af
--- /dev/null
@@ -0,0 +1,25 @@
+# Generic cpp makefile for mBuild build process
+
+# default parameters
+CC = $(PREFIX)g++
+CXX = $(PREFIX)g++
+
+include make.pre
+
+# All Target
+all: $(DEPS) $(SOURCE:%.cpp=%.o) $(TARGET)
+
+# Other Targets
+clean:
+       -rm *.o
+       -rm $(TARGET)
+
+.PHONY: all make.post
+
+%.a: $(SOURCE:%.cpp=%.o)
+       ar r $(TARGET) *.o
+
+%.so: $(SOURCE:%.cpp=%.o) $(LDLIBS)
+       echo $(PATH)
+       $(CXX) -shared $(SYSROOT) -o $(TARGET) *.o $(LDFLAGS) $(LDLIBS) $(EXTLIB)
+-include make.post
diff --git a/tools/make/insert_build.sh b/tools/make/insert_build.sh
new file mode 100755 (executable)
index 0000000..00a90b0
--- /dev/null
@@ -0,0 +1,18 @@
+#!/bin/bash
+set -e
+
+usage="insert_build.sh <file> <build>"
+
+# inserts _<build> before last dot of filename
+# example: "insert_build.sh 45 foo.pdf" leads to "foo_45.pdf"
+
+if [ $# -ne 2 ]; then
+       echo $usage
+       exit 1
+fi
+
+stem=${1%.*}
+ext=${1##*.}
+
+cp $1 ${stem}_$2.$ext
+
diff --git a/tools/make/mMakefile b/tools/make/mMakefile
new file mode 100644 (file)
index 0000000..d6da7bb
--- /dev/null
@@ -0,0 +1,39 @@
+# Generic makefile for mBuild build process
+
+
+# default parameters
+CC = g++
+INSERT_BUILD = /usr/share/mbuild/insert_build.sh
+
+include make.pre
+
+# All Target
+all: $(DEPS) $(SOURCE:%.cpp=%.o) $(TARGET)
+
+# Other Targets
+clean:
+       -rm *.o
+       -rm $(TARGET)
+
+
+.PHONY: all make.post
+
+%.a: $(SOURCE:%.cpp=%.o)
+       ar r $(TARGET) *.o
+
+%.so: $(SOURCE:%.cpp=%.o) $(LDLIBS)
+       $(CXX) -shared -o $(TARGET) *.o $(LDLIBS) $(EXTLIB)
+
+make.pre: ~/build/debian/rules.pre
+       cp ~/build/debian/rules.pre make.pre
+
+-include make.post
+# defile default operations
+
+#-----------------------------------------------------------------
+# Build-Regeln
+#-----------------------------------------------------------------
+%.pdf : %.tex $(SOURCES)
+       pdflatex $< && pdflatex $<
+       cp $*.pdf ~/build
+
diff --git a/tools/make/makefile b/tools/make/makefile
new file mode 100644 (file)
index 0000000..1bee6f4
--- /dev/null
@@ -0,0 +1,90 @@
+# Generic makefile for mBuild build process
+
+# defile default operations
+
+NOP = @echo "No operation for target $@"
+COMPILE = $(NOP)
+COMPILE_TARGET = compile.stamp
+COPY = $(NOP)
+ZIP = zip -r $(project).zip $(project)
+DEB = fakeroot dpkg-deb --build $(project)
+INSERT_BUILD = projects/tools/make/insert_build.sh
+
+#default parameters
+project = default
+SOURCES =
+COPY_PRE =
+
+# Load project specification
+include make.pre
+
+.SUFFIXES: .stamp .zip
+
+
+#-----------------------------------------------------------------
+# Hauptziele:
+#
+#               : ohne Parameter wird compiliert
+# - zip         : packt ZIP file
+# - deb         : packt Debian package
+#
+#-----------------------------------------------------------------
+
+compile: $(COMPILE_TARGET)
+       # compile ist fertig
+
+zip: $(project).zip
+       # ZIP file ready
+
+deb: $(project).deb
+       # Debian package ready
+
+version: $(COMPILE_TARGET)
+       $(INSERT_BUILD) $(COMPILE_TARGET) $(build)
+
+#-----------------------------------------------------------------
+# compile steps
+#-----------------------------------------------------------------
+compile.stamp: $(SOURCES)
+       $(COMPILE)
+       @touch compile.stamp
+
+#-----------------------------------------------------------------
+# pack steps
+#-----------------------------------------------------------------
+
+copy.stamp: $(COPY_PRE)
+       $(COPY) $(project) $(version) ${arch}
+       @touch copy.stamp
+
+control.stamp: $(project).control
+       mkdir -p $(project)/DEBIAN
+       cp $(project).control $(project)/DEBIAN/control
+       if [ -f $(project).preinst ]; then cp $(project).preinst $(project)/DEBIAN/preinst; fi
+       if [ -f $(project).postinst ]; then cp $(project).postinst $(project)/DEBIAN/postinst; fi
+       if [ -f $(project).prerm ]; then cp $(project).prerm $(project)/DEBIAN/prerm; fi
+       if [ -f $(project).postrm ]; then cp $(project).postrm $(project)/DEBIAN/postrm; fi
+       @touch control.stamp
+
+$(project).zip: copy.stamp $(project)
+       $(ZIP)
+
+$(project).deb: copy.stamp control.stamp
+       $(DEB)
+       cp $(project).deb $(project)_$(version)$(_arch).deb
+
+#-----------------------------------------------------------------
+# utilities
+#-----------------------------------------------------------------
+clean:
+       -rm *.stamp 2>/dev/null
+       if [ -e $(project).zip ]; then rm $(project).zip; fi
+       if [ -e $(project) ]; then rm -rf $(project); fi
+
+#-----------------------------------------------------------------
+# Build-Regeln
+#-----------------------------------------------------------------
+%.pdf : %.tex $(SOURCES)
+       pdflatex $< && pdflatex $<
+
+
diff --git a/tools/make/mconfigure b/tools/make/mconfigure
new file mode 100755 (executable)
index 0000000..95e0006
--- /dev/null
@@ -0,0 +1,285 @@
+#!/bin/bash
+set -e
+
+function echo_usage {
+       echo "usage: mconfigure [options] <package>"
+       echo "  -a <arch>"
+       echo "  -c : configure"
+       echo "  -d : compile"
+       echo "  -p : pack default: do all"
+       echo "  -o : support old Debian 7 format"
+}
+
+function check_unversioned {
+       # has to be called in the projects base directory
+       # result: "M" in stdout or nothing
+       set -e
+       
+       # check if build is running in a sandbox
+       if ! [ -f .cm.ignore ]
+       then
+               # we create one
+               echo ".cm.ignore" > .cm.ignore
+               echo "debian.*" >> .cm.ignore
+               echo "up.*" >> .cm.ignore
+       fi
+       
+       project=$(pwd)
+       project=${project##*/}
+       pushd .. >/dev/null
+               mCM $project -b -an > /dev/null
+               wc=$(wc $project.batch)
+               rm $project.batch
+               if [ "${wc:0:5}" != "0 0 0" ]
+               then
+                       echo "M"
+               fi
+       popd >/dev/null
+}
+
+function set_build {
+       set -e
+       if [ -e .svn ]
+       then
+               version="0.0"
+               build=$(svnversion)
+               build=${build/:/-}
+               build="$build$(check_unversioned)"
+       elif [ -e .git ]
+       then
+               tag=$(git describe --tags --match "${paket}_*" 2>/dev/null) || true
+               if test -z "$tag"
+               then
+                       tag="0.0-0TOP"
+               fi
+               changes=$(check_unversioned)
+               tag="$tag$changes"
+               version=${tag%-*}
+               version=${version##*_}
+               build=${tag##*-}
+       else
+               echo "No configuration system found. Cannot determine version."
+               exit 1
+       fi
+}
+
+function check_version {
+       set -e
+       
+       vline=$(head -1 debian/$paket.changelog)
+       vline=${vline%-*}
+       clversion=${vline#*(}
+       if [ $version = "0.0" ]
+       then
+               version=$clversion
+               return
+       fi
+
+       # do no check on a modified git repos
+       if [ "${build: -1}" == "M" ]
+       then
+               return
+       fi
+
+       if [ "$clversion" != $version ]
+       then
+               echo "version mismatch: git: $version, changelog: $clversion"
+               exit 1
+       fi
+}
+
+if [ ! -d debian ]
+then
+       echo "run mconfigure in the project base directory with a debian directory in it!"
+       exit 2
+fi
+
+configure=0
+compile=0
+pack=0
+while getopts "a:cdpo" opt; do
+       case $opt in
+               a) ARCH=$OPTARG
+                       ;;
+               c) configure=1
+                       ;;
+               d)      compile=1
+                       ;;
+               p)      pack=1
+                       ;;
+               o)      oldpack="-Zgzip"
+                       ;;
+               \?) echo "Invalid option: -$OPTARG"
+                       echo_usage
+                       exit 1
+                       ;;
+               :) echo "Option -$OPTARG requires an argument."
+                       echo_usage
+                       exit 1
+                       ;;
+       esac
+done
+shift $((OPTIND -1))
+
+if [ $# -lt 1 ]
+then
+       echo_usage
+       exit 1
+fi
+
+paket=$1
+
+# if nothing is selected, select all
+if [ $configure -eq 0 -a $compile -eq 0 -a $pack -eq 0 ]
+then
+       configure=1
+       compile=1
+       pack=1
+fi
+
+if [ $configure -eq 1 ]
+then
+       # delete changelog and control
+       rm debian/changelog debian/control 2>/dev/null || true
+       
+       # mconfigure builds 2 environment files: setenv.sh + rules.pre
+       
+       if [ -n "$ARCH" ]
+       then
+               arch_opt="-a $ARCH"
+       fi
+       dpkg-architecture $arch_opt > debian/setenv.sh
+       echo "" > debian/rules.pre
+       
+       echo "paket=$paket" >> debian/setenv.sh
+       echo "oldpack=\"$oldpack\"" >> debian/setenv.sh
+
+       set_build
+       check_version
+       echo "version=$version" >> debian/setenv.sh
+       echo "build=$build" >> debian/setenv.sh
+
+       # get repository name
+#      tmp=$(pwd)
+#      pwd=${tmp##*/}
+#      pwd=${pwd,,*}
+#      echo "pwd=$pwd" >> debian/rules.pre
+
+       echo "building $paket with build $version-$build"
+
+       pushd debian >/dev/null
+       # ./debian -------------------------------------
+
+       ln -sf /usr/share/mbuild/rules .
+
+       if [ -e tmp ]
+       then
+               rm -rf tmp
+       fi
+
+       # check for pre/post installation scripts
+       if [ -f $paket.preinst ]
+       then
+               echo "add_inst_tgt += debian/tmp/DEBIAN/preinst" >> rules.pre
+       fi
+       if [ -f $paket.postinst ]
+       then
+                   echo "add_inst_tgt += debian/tmp/DEBIAN/postinst" >> rules.pre
+       fi
+       if [ -f $paket.prerm ]
+       then
+                   echo "add_inst_tgt += debian/tmp/DEBIAN/prerm" >> rules.pre
+       fi
+       if [ -f $paket.postrm ]
+       then
+                   echo "add_inst_tgt += debian/tmp/DEBIAN/postrm" >> rules.pre
+       fi
+       
+       mkdir -p tmp/DEBIAN
+
+       # add export to setenv.sh
+       sed -i "s/^/export /" setenv.sh
+
+       popd >/dev/null
+       # ./. ---------------------------------------------
+
+       # copy package control
+       if [ -f debian/$paket.control ]
+       then
+               # proceed
+               echo
+       else
+               echo "warning: control file not found"
+               echo "  this file is necessary for any package production."
+       fi
+       
+       # build prepare
+       if [ -x debian/$paket.prepare ]
+       then
+               . debian/setenv.sh
+               debian/$paket.prepare
+       fi
+       if [ -e debian/$paket.build ]
+       then
+               if [ -e ../build ]
+               then
+                       rm -rf ../build
+                       mkdir ../build
+               fi
+               if grep -- "-prepare" debian/$paket.build >/dev/null
+               then
+                       debian/rules sync
+                       debian/$paket.build -prepare
+               fi
+               # sync build dir
+               . debian/setenv.sh
+               debian/rules sync
+               
+               # executing prebuild
+               if [ -x debian/$paket.prebuild ]
+               then
+                       pushd ~/build >/dev/null
+                       debian/$paket.prebuild
+                       popd >/dev/null
+               fi
+       fi
+       
+       # pack prepare
+       if [ -f debian/$paket.cp -a -f debian/$paket.control ]
+       then
+               echo "PACK=binary" >> debian/rules.pre
+               if grep "^Architecture: *all" debian/$paket.control >/dev/null
+               then
+                       echo "arch = all" >> debian/rules.pre
+                       echo "BINARY_INDEP = copy ../${paket}_$version-${build}_all.deb" >> debian/rules.pre
+               else
+                       echo 'arch = ${DEB_HOST_ARCH}' >> debian/rules.pre
+                       echo "BINARY_ARCH = copy ../${paket}_$version-${build}_"'$(arch).deb' >> debian/rules.pre
+               fi
+       elif [ -f debian/$paket.cp ]
+       then
+               echo "PACK=zip" >> debian/rules.pre
+       else
+               echo "PACK=version" >> debian/rules.pre
+       fi
+fi
+
+if [ $compile -eq 1 -a ! -e debian/$paket.build ]
+then
+       echo "no debian/$paket.build: skipping build step"
+       compile=0
+fi
+if [ $compile -eq 1 ]
+then
+       # build artefacts
+       . debian/setenv.sh
+       debian/rules build
+fi
+
+if [ $pack -eq 1 ]
+then
+       # build package
+       . debian/setenv.sh
+       debian/rules pack
+fi
+
diff --git a/tools/make/rules b/tools/make/rules
new file mode 100755 (executable)
index 0000000..e446d53
--- /dev/null
@@ -0,0 +1,96 @@
+#!/usr/bin/make -f
+
+# Generic rules for mBuild build process
+
+# defile default operations
+NOP = @echo "No operation for target $@"
+DEB = fakeroot dpkg-deb --build $(oldpack) debian/tmp
+INSERT_BUILD = /usr/share/mbuild/insert_build.sh
+RSYNC_OPT = -av --exclude="build" --exclude="debian/tmp" --exclude="Packages" --exclude=".*"
+
+include debian/rules.pre
+
+default:
+       echo "no default rule available"
+
+# Löschen aller kompilierten, erzeugten und nicht benötigten Dateien im Bauverzeichnis
+clean:
+       -rm -rf debian/tmp
+
+# Bauen der kompilierten Programme und formatierten Dokumente aus den Quellen im Bauverzeichnis
+build: debian/$(paket).build sync
+       cd ../build ; debian/$(paket).build
+       # Build succeeded
+
+pack: $(PACK)
+       # packing succeeded
+
+# Bauen der kompilierten architekturabhängigen Programme aus den Quellen im Bauverzeichnis
+build-arch:
+
+# Bauen der architekturunabhängigen formatierten Dokumente aus den Quellen im Bauverzeichnis
+build-indep:
+
+# Installieren der Dateien in einen Verzeichnisbaum unterhalb des Verzeichnisses debian für jedes Binärpaket. Falls sie festgelegt wurden, hängen binary*-Ziele effektiv von diesem Ziel ab (optional)
+install: 
+
+# Erstellen aller Binärpakete (effektiv ist dies die Kombination der binary-arch- und binary-indep-Ziele)
+binary: binary-arch binary-indep 
+
+# Erstellen Architektur-abhängiger (Architecture: any) Binärpakete im übergeordneten Verzeichnis
+binary-arch: $(BINARY_ARCH)
+
+# Erstellen Architektur-unabhängiger (Architecture: all) Binärpakete im übergeordneten Verzeichnis
+binary-indep: $(BINARY_INDEP)
+
+#copy ../$(paket)_$(version)-$(build)_all.deb
+
+version: ~/build/$(TARGET)
+       $(INSERT_BUILD) ~/build/$(TARGET) $(build)
+       cp ~/build/*$(build)* ../
+
+../build:
+       mkdir ../build
+
+sync: ../build
+       rsync $(RSYNC_OPT) ./ ../build/
+
+copy: debian/$(paket).cp
+       debian/$(paket).cp debian/tmp
+
+../$(paket)_$(version)-$(build)_$(arch).deb:debian/tmp/DEBIAN/control $(add_inst_tgt)
+       $(DEB)
+       mv debian/tmp.deb ../$(paket)_$(version)-$(build)_$(arch).deb
+
+debian/tmp/DEBIAN/control: debian/control debian/changelog
+       dpkg-gencontrol
+
+debian/control: debian/$(paket).control
+       sed "s/_DEB_HOST_ARCH/${DEB_HOST_ARCH}/" debian/$(paket).control >> debian/control
+
+debian/changelog: debian/$(paket).changelog debian/rules.pre
+       sed "s/%BUILD%/$(build)/" debian/$(paket).changelog > debian/changelog
+#      echo "${pwd} (${build}) unstable; urgency=medium" > debian/changelog
+#      echo "  * generated by mbuild" >> debian/changelog
+#      echo " -- Michael Wagner <info@wagnertech.de>  Sun, 11 Feb 2018 20:03:04 +0100" >> debian/changelog
+#      mb_create_changelog
+
+debian/tmp/DEBIAN/preinst: debian/$(paket).preinst
+       cp debian/$(paket).preinst debian/tmp/DEBIAN/preinst
+
+debian/tmp/DEBIAN/postinst: debian/$(paket).postinst
+       cp debian/$(paket).postinst debian/tmp/DEBIAN/postinst
+
+debian/tmp/DEBIAN/prerm: debian/$(paket).prerm
+       cp debian/$(paket).prerm debian/tmp/DEBIAN/prerm
+
+debian/tmp/DEBIAN/postrm: debian/$(paket).postrm
+       cp debian/$(paket).postrm debian/tmp/DEBIAN/postrm
+
+# Load project specification
+-include rules.post
+
+# if debian/control is missing, try old mbuild way
+#debian/control:
+#      if [ -e  debian/$(paket).control ]; then echo "trallala"; fi
+
diff --git a/tools/make/treecopy b/tools/make/treecopy
new file mode 100755 (executable)
index 0000000..761bd87
--- /dev/null
@@ -0,0 +1,34 @@
+#!/bin/bash
+
+# copy all files below <from> ($1), that match <filepattern> ($3)
+# into target <to> ($2)
+
+function fcp
+{
+       rel_path=${3#$1}
+       
+       # create target dir, if necessary
+       rel_dir=${rel_path%/*}
+       mkdir -p $2/$rel_dir
+       cp -a $1/$rel_path $2/$rel_dir
+}
+       
+usage="usage: treecopy <from> <to> <filepattern>|-e"
+
+if [ $# -ne 3 ]
+then
+       echo $usage
+       exit 1
+fi
+if [ $3 == "-e" ]
+then
+       for file in $(find $1 \( -type f -o -type l \) -executable)
+       do
+               fcp $1 $2 $file
+       done
+else   
+       for file in $(find $1 \( -type f -o -type l \) -name "$3")
+       do
+               fcp $1 $2 $file
+       done
+fi
diff --git a/tools/tex/framed.sty b/tools/tex/framed.sty
new file mode 100644 (file)
index 0000000..b044e96
--- /dev/null
@@ -0,0 +1,548 @@
+% framed.sty   v 0.96    2011/10/22
+% Copyright (C) 1992-2011 by Donald Arseneau  (asnd@triumf.ca)
+% These macros may be freely transmitted, reproduced, or modified
+% for any purpose provided that this notice is left intact.
+% 
+%====================== Begin Instructions =======================
+%
+%                       framed.sty
+%                       ~~~~~~~~~~
+% Create framed, shaded, or differently highlighted regions that can 
+% break across pages.  The environments defined are 
+%   framed     - ordinary frame box (\fbox) with edge at margin
+%   oframed    - framed with open top/bottom at page breaks
+%   shaded     - shaded background (\colorbox) bleeding into margin
+%   shaded*    - shaded background (\colorbox) with edge at margin
+%   snugshade  - shaded with tight fit around text (esp. in lists)
+%   snugshade* - like snugshade with shading edge at margin
+%   leftbar    - thick vertical line in left margin
+% 
+% to be used like
+% \begin{framed}
+%  copious text
+% \end{framed}
+%
+% But the more general purpose of this package is to facilitate the
+% definition of new environments that take multi-line material,
+% wrap it with some non-breakable formatting (some kind of box or
+% decoration) and allow page breaks in the material.  Such environments
+% are defined to declare (or use) \FrameCommand for applying the boxy 
+% decoration, and \MakeFramed{settings} ... \endMakeFramed wrapped
+% around the main text argument (environment body).
+%
+% The "framed" environment uses "\fbox", by default, as its "\FrameCommand"
+% with the additional settings "\fboxrule=\FrameRule" and "\fboxsep=\FrameSep".
+% You can change these lengths (using "\setlength") and you can change 
+% the definition of "\FrameCommand" to use much fancier boxes.  
+%
+% In fact, the "shaded" environment just redefines \FrameCommand to be
+% "\colorbox{shadecolor}" (and you have to define the color `"shadecolor"':
+% "\definecolor{shadecolor}...").
+%
+% Although the intention is for other packages to define the varieties
+% of decoration, a command "\OpenFbox" is defined for frames with open 
+% tops or bottoms, and used for the "oframed" environment.  This facility
+% is based on a more complex and capable command "\CustomFBox" which can
+% be used for a wider range of frame styles.  One such style of a title-bar
+% frame with continuation marks is provided as an example.  It is used by
+% the "titled-frame" environment.  To make use of "titled-frame" in your
+% document, or the "\TitleBarFrame" command in your own environment
+% definitions, you must define the colors TFFrameColor (for the frame)
+% and a contrasting TFTitleColor (for the title text).
+%
+% A page break is allowed, and even encouraged, before the framed
+% environment.  If you want to attach some text (a box title) to the
+% frame, then the text should be inserted by \FrameCommand so it cannot
+% be separated from the body.
+%
+% The contents of the framed regions are restricted: 
+% Floats, footnotes, marginpars and head-line entries will be lost.
+% (Some of these may be handled in a later version.)
+% This package will not work with the page breaking of multicol.sty,
+% or other systems that perform column-balancing.
+%
+% The MakeFramed environment does the work.  Its `settings' argument
+% should contain any adjustments to the text width (via a setting of
+% "\hsize"). Here, the parameter "\width" gives the measured extra width
+% added by the frame, so a common setting is "\advance\hsize-\width"
+% which reduces the width of the text just enough that the outer edge
+% of the frame aligns with the margins.  The `settings' should also
+% include a `restore' command -- "\@parboxrestore" or "\FrameRestore"
+% or something similar; for instance, the snugshade environment uses
+% settings to eliminate list indents and vertical space, but uses
+% "\hspace" in "\FrameCommand" to reproduce the list margin ouside the
+% shading.
+%
+% There are actually four variants of "\FrameCommand" to allow different
+% formatting for each part of an environment broken over pages.  Unbroken
+% text is adorned by "\FrameCommand", whereas split text first uses 
+% "\FirstFrameCommand", possibly followed by "\MidFrameCommand", and
+% finishing with "\LastFrameCommand".  The default definitions for 
+% these three just invokes "\FrameCommand", so that all portions are
+% framed the same way.  See the oframe environment for use of distinct
+% First/Mid/Last frames.
+%
+% Expert commands:
+% \MakeFramed, \endMakeFramed: the "MakeFramed" environment
+% \FrameCommand: command to draw the frame around its argument
+% \FirstFrameCommand: the frame for the first part of a split environment
+% \LastFrameCommand: for the last portion
+% \MidFrameCommand: for any intermediate segments
+% \FrameRestore: restore some text settings, but fewer than \@parboxrestore
+% \FrameRule: length register; \fboxrule for default "framed".
+% \FrameSep: length register; \fboxsep for default "framed".
+% \FrameHeightAdjust: macro; height of frame above baseline at top of page
+% \OuterFrameSep: vertical space before and after the framed env. Defaults to "\topsep"
+%
+% This is still a `pre-production' version because I can think of many
+% features/improvements that should be made.  Also, a detailed manual needs
+% to be written.  Nevertheless, starting with version 0.5 it should be bug-free.
+%
+% ToDo: 
+% Test more varieties of list 
+% Improve and correct documentation
+% Propagation of \marks
+% Handle footnotes (how??) floats (?) and marginpars.
+% Stretchability modification.
+% Make inner contents height/depth influence placement.
+%======================== End Instructions ========================
+
+\ProvidesPackage{framed}[2011/10/22 v 0.96: 
+   framed or shaded text with page breaks]
+
+\newenvironment{framed}% using default \FrameCommand
+  {\MakeFramed {\advance\hsize-\width \FrameRestore}}%
+  {\endMakeFramed}
+
+\newenvironment{shaded}{%
+  \def\FrameCommand{\fboxsep=\FrameSep \colorbox{shadecolor}}%
+  \MakeFramed {\FrameRestore}}%
+ {\endMakeFramed}
+
+\newenvironment{shaded*}{%
+  \def\FrameCommand{\fboxsep=\FrameSep \colorbox{shadecolor}}%
+  \MakeFramed {\advance\hsize-\width \FrameRestore}}%
+ {\endMakeFramed}
+
+\newenvironment{leftbar}{%
+  \def\FrameCommand{\vrule width 3pt \hspace{10pt}}%
+  \MakeFramed {\advance\hsize-\width \FrameRestore}}%
+ {\endMakeFramed}
+
+% snugshde:  Shaded environment that 
+%  -- uses the default \fboxsep instead of \FrameSep
+%  -- leaves the text indent unchanged (shading bleeds out)
+%  -- eliminates possible internal \topsep glue (\@setminipage)
+%  -- shrinks inside the margins for lists
+%  An \item label will tend to hang outside the shading, thanks to
+%  the small \fboxsep.
+
+\newenvironment{snugshade}{%
+  \def\FrameCommand##1{\hskip\@totalleftmargin \hskip-\fboxsep
+  \colorbox{shadecolor}{##1}\hskip-\fboxsep
+      % There is no \@totalrightmargin, so:
+      \hskip-\linewidth \hskip-\@totalleftmargin \hskip\columnwidth}%
+  \MakeFramed {\advance\hsize-\width 
+    \@totalleftmargin\z@ \linewidth\hsize
+    \@setminipage}%
+ }{\par\unskip\@minipagefalse\endMakeFramed}
+
+\newenvironment{snugshade*}{%
+  \def\FrameCommand##1{\hskip\@totalleftmargin 
+  \colorbox{shadecolor}{##1}%
+      % There is no \@totalrightmargin, so:
+      \hskip-\linewidth \hskip-\@totalleftmargin \hskip\columnwidth}%
+  \MakeFramed {\advance\hsize-\width 
+    \@totalleftmargin\z@ \linewidth\hsize
+    \advance\labelsep\fboxsep
+    \@setminipage}%
+ }{\par\unskip\@minipagefalse\endMakeFramed}
+
+\newenvironment{oframed}{% open (top or bottom) framed
+  \def\FrameCommand{\OpenFBox\FrameRule\FrameRule}%
+  \def\FirstFrameCommand{\OpenFBox\FrameRule\z@}%
+  \def\MidFrameCommand{\OpenFBox\z@\z@}%
+  \def\LastFrameCommand{\OpenFBox\z@\FrameRule}%
+  \MakeFramed {\advance\hsize-\width \FrameRestore}%
+  }{\endMakeFramed}
+
+% A simplified entry to \CustomFBox with two customized parameters:
+% the thicknesses of the top and bottom rules.  Perhaps we want to
+% use less \fboxsep on the open edges?
+
+\def\OpenFBox#1#2{\fboxsep\FrameSep
+   \CustomFBox{}{}{#1}{#2}\FrameRule\FrameRule}
+
+% \CustomFBox is like an amalgamation of \fbox and \@frameb@x,
+% so it can be used by an alternate to \fbox or \fcolorbox, but
+% it has more parameters for various customizations.
+% Parameter #1 is inserted (in vmode) right after the top rule 
+% (useful for a title or assignments), and #2 is similar, but
+% inserted right above the bottom rule.
+% The thicknesses of the top, bottom, left, and right rules are
+% given as parameters #3,#4,#5,#6 respectively.  They should be
+% \fboxrule or \z@ (or some other thickness).
+% The text argument is #7.
+% An instance of this can be used for the frame of \fcolorbox by
+% locally defining \fbox before \fcolorbox; e.g.,
+% \def\fbox{\CustomFBox{}{}\z@\z@\fboxrule\fboxrule}\fcolorbox
+%
+% Do we need to use different \fboxsep on different sides too?
+%
+\long\def\CustomFBox#1#2#3#4#5#6#7{%
+  \leavevmode\begingroup
+  \setbox\@tempboxa\hbox{%
+    \color@begingroup
+      \kern\fboxsep{#7}\kern\fboxsep
+    \color@endgroup}%
+  \hbox{%
+    % Here we calculate and shift for the depth.  Done in
+    % a group because one of the arguments might be \@tempdima
+    % (we could use \dimexpr instead without grouping).
+    \begingroup
+      \@tempdima#4\relax
+      \advance\@tempdima\fboxsep
+      \advance\@tempdima\dp\@tempboxa
+    \expandafter\endgroup\expandafter
+    \lower\the\@tempdima\hbox{%
+      \vbox{%
+        \hrule\@height#3\relax
+        #1%
+        \hbox{%
+          \vrule\@width#5\relax
+          \vbox{%
+            \vskip\fboxsep % maybe these should be parameters too
+            \copy\@tempboxa
+            \vskip\fboxsep}%
+          \vrule\@width#6\relax}%
+        #2%
+        \hrule\@height#4\relax}%
+    }%
+  }%
+  \endgroup
+}
+
+
+% A particular type of titled frame with continuation marks.  
+% Parameter #1 is the title, repeated on each page.
+\newenvironment{titled-frame}[1]{%
+  \def\FrameCommand{\fboxsep8pt\fboxrule2pt
+     \TitleBarFrame{\textbf{#1}}}%
+  \def\FirstFrameCommand{\fboxsep8pt\fboxrule2pt
+     \TitleBarFrame[$\blacktriangleright$]{\textbf{#1}}}%
+  \def\MidFrameCommand{\fboxsep8pt\fboxrule2pt
+     \TitleBarFrame[$\blacktriangleright$]{\textbf{#1\ (cont)}}}%
+  \def\LastFrameCommand{\fboxsep8pt\fboxrule2pt
+     \TitleBarFrame{\textbf{#1\ (cont)}}}%
+  \MakeFramed{\advance\hsize-20pt \FrameRestore}}%
+%  note: 8 + 2 + 8 + 2 = 20.  Don't use \width because the frame title
+%  could interfere with the width measurement.
+ {\endMakeFramed}
+
+% \TitleBarFrame[marker]{title}{contents}
+% Frame with a label at top, optional continuation marker at bottom right.
+% Frame color is TFFrameColor and title color is a contrasting TFTitleColor; 
+% both need to be defined before use.  The frame itself use \fboxrule and
+% \fboxsep.  If the title is omitted entirely, the title bar is omitted
+% (use a blank space to force a blank title bar).
+% 
+\newcommand\TitleBarFrame[3][]{\begingroup
+  \ifx\delimiter#1\delimiter
+    \let\TF@conlab\@empty
+  \else
+    \def\TF@conlab{% continuation label
+     \nointerlineskip
+     \smash{\rlap{\kern\wd\@tempboxa\kern\fboxrule\kern\fboxsep #1}}}%
+  \fi
+  \let\TF@savecolor\current@color
+  \textcolor{TFFrameColor}{%
+  \CustomFBox
+    {\TF@Title{#2}}{\TF@conlab}%
+    \fboxrule\fboxrule\fboxrule\fboxrule
+    {\let\current@color\TF@savecolor\set@color #3}%
+  }\endgroup
+}
+
+% The title bar for \TitleBarFrame
+\newcommand\TF@Title[1]{%
+  \ifx\delimiter#1\delimiter\else
+  \kern-0.04pt\relax
+  \begingroup
+  \setbox\@tempboxa\vbox{%
+   \kern0.8ex
+   \hbox{\kern\fboxsep\textcolor{TFTitleColor}{#1}\vphantom{Tj)}}%
+   \kern0.8ex}%
+  \hrule\@height\ht\@tempboxa
+  \kern-\ht\@tempboxa
+  \box\@tempboxa
+  \endgroup
+  \nointerlineskip 
+  \kern-0.04pt\relax
+  \fi
+}
+
+\chardef\FrameRestore=\catcode`\| % for debug
+\catcode`\|=\catcode`\% % (debug: insert space after backslash)
+
+\newlength\OuterFrameSep \OuterFrameSep=\maxdimen \relax
+
+\def\MakeFramed#1{\par
+ % apply default \OuterFrameSep = \topsep
+ \ifdim\OuterFrameSep=\maxdimen \OuterFrameSep\topsep \fi
+ % measure added width and height; call result \width and \height
+ \fb@sizeofframe\FrameCommand
+ \let\width\fb@frw \let\height\fb@frh
+ % insert pre-penalties and skips
+ \begingroup
+ \skip@\lastskip
+ \if@nobreak\else 
+    \penalty9999 % updates \page parameters
+    \ifdim\pagefilstretch=\z@ \ifdim\pagefillstretch=\z@
+       % not infinitely stretchable, so encourage a page break here
+       \edef\@tempa{\the\skip@}%
+       \ifx\@tempa\zero@glue \penalty-30
+       \else \vskip-\skip@ \penalty-30 \vskip\skip@
+    \fi\fi\fi
+    \penalty\z@
+    % Give a stretchy breakpoint that will always be taken in preference
+    % to the \penalty 9999 used to update page parameters.  The cube root
+    % of 10000/100 indicates a multiplier of 0.21545, but the maximum 
+    % calculated badness is really 8192, not 10000, so the multiplier
+    % is 0.2301. 
+    \advance\skip@ \z@ plus-.5\baselineskip
+    \advance\skip@ \z@ plus-.231\height
+    \advance\skip@ \z@ plus-.231\skip@
+    \advance\skip@ \z@ plus-.231\OuterFrameSep
+    \vskip-\skip@ \penalty 1800 \vskip\skip@
+ \fi
+ \addvspace{\OuterFrameSep}%
+ \endgroup
+ % clear out pending page break
+ \penalty\@M \vskip 2\baselineskip \vskip\height
+ \penalty9999 \vskip -2\baselineskip \vskip-\height
+ \penalty9999 % updates \pagetotal
+|\message{After clearout, \pagetotal=\the\pagetotal, \pagegoal=\the\pagegoal. }%
+ \fb@adjheight 
+ \setbox\@tempboxa\vbox\bgroup
+   #1% Modifications to \hsize (can use \width and \height)
+   \textwidth\hsize \columnwidth\hsize
+}
+
+\def\endMakeFramed{\par
+     \kern\z@
+     \hrule\@width\hsize\@height\z@ % possibly bad
+     \penalty-100 % (\hrule moves depth into height)
+ \egroup
+%%%   {\showoutput\showbox\@tempboxa}%
+ \begingroup 
+   \fb@put@frame\FrameCommand\FirstFrameCommand
+ \endgroup
+ \@minipagefalse % In case it was set and not cleared
+}
+
+% \fb@put@frame takes the contents of \@tempboxa and puts all, or a piece,
+% of it on the page with a frame (\FrameCommand, \FirstFrameCommand,
+% \MidFrameCommand, or \LastFrameCommand).  It recurses until all of 
+% \@tempboxa has been used up. (\@tempboxa must have zero depth.)
+% #1 = attempted framing command, if no split
+% #2 = framing command if split
+% First iteration: Try to fit with \FrameCommand. If it does not fit,
+% split for \FirstFrameCommand.
+% Later iteration: Try to fit with \LastFrameCommand. If it does not
+% fit, split for \MidFrameCommand.
+\def\fb@put@frame#1#2{\relax
+ \ifdim\pagegoal=\maxdimen \pagegoal\vsize \fi
+|   \message{=============== Entering putframe ====================^^J
+|     \pagegoal=\the\pagegoal,  \pagetotal=\the\pagetotal. }%
+ \ifinner
+   \fb@putboxa#1%
+   \fb@afterframe
+ \else
+  \dimen@\pagegoal \advance\dimen@-\pagetotal % natural space left on page
+  \ifdim\dimen@<2\baselineskip % Too little room on page
+|   \message{Page has only \the\dimen@\space room left; eject. }%
+    \eject \fb@adjheight \fb@put@frame#1#2%
+  \else % there's appreciable room left on the page
+     \fb@sizeofframe#1%
+|    \message{\string\pagetotal=\the\pagetotal,
+|        \string\pagegoal=\the\pagegoal,
+|        \string\pagestretch=\the\pagestretch,
+|        \string\pageshrink=\the\pageshrink,
+|        \string\fb@frh=\the\fb@frh. \space}
+|    \message{^^JBox of size \the\ht\@tempboxa\space}%
+     \begingroup % temporarily set \dimen@ to be...
+     \advance\dimen@.8\pageshrink  % maximum space available on page
+     \advance\dimen@-\fb@frh\relax % max space available for frame's contents
+%%% LOOKS SUBTRACTED AND ADDED, SO DOUBLE ACCOUNTING!
+     \expandafter\endgroup
+     % expand \ifdim, then restore \dimen@ to real room left on page
+     \ifdim\dimen@>\ht\@tempboxa % whole box does fit
+|       \message{fits in \the\dimen@. }%
+        % ToDo: Change this to use vsplit anyway to capture the marks
+        % MERGE THIS WITH THE else CLAUSE!!!
+        \fb@putboxa#1%
+        \fb@afterframe
+     \else % box must be split
+|       \message{must be split to fit in \the\dimen@. }%
+        % update frame measurement to use \FirstFrameCommand or \MidFrameCommand
+        \fb@sizeofframe#2%
+        \setbox\@tempboxa\vbox{% simulate frame and flexiblity of the page:
+           \vskip \fb@frh \@plus\pagestretch \@minus.8\pageshrink
+           \kern137sp\kern-137sp\penalty-30
+           \unvbox\@tempboxa}%
+        \edef\fb@resto@set{\boxmaxdepth\the\boxmaxdepth 
+                           \splittopskip\the\splittopskip}%
+        \boxmaxdepth\z@ \splittopskip\z@
+|       \message{^^JPadded box of size \the\ht\@tempboxa\space split to \the\dimen@}%
+        % Split box here
+        \setbox\tw@\vsplit\@tempboxa to\dimen@
+|       \toks99\expandafter{\splitfirstmark}%
+|       \toks98\expandafter{\splitbotmark}%
+|       \message{Marks are: \the\toks99, \the\toks98. }%
+        \setbox\tw@\vbox{\unvbox\tw@}% natural-sized
+|       \message{Natural height of split box is \the\ht\tw@, leaving 
+|          \the\ht\@tempboxa\space remainder. }%
+        % If the split-to size > (\vsize-\topskip), then set box to full size.
+        \begingroup
+        \advance\dimen@\topskip
+        \expandafter\endgroup
+        \ifdim\dimen@>\pagegoal
+|         \message{Frame is big -- Use up the full column. }%
+          \dimen@ii\pagegoal
+          \advance\dimen@ii -\topskip
+          \advance\dimen@ii \FrameHeightAdjust\relax
+        \else  % suspect this is implemented incorrectly:
+          % If the split-to size > feasible room_on_page, rebox it smaller.
+          \advance\dimen@.8\pageshrink
+          \ifdim\ht\tw@>\dimen@
+|           \message{Box too tall; rebox it to \the\dimen@. }%
+            \dimen@ii\dimen@
+          \else % use natural size
+            \dimen@ii\ht\tw@
+          \fi
+        \fi
+        % Re-box contents to desired size \dimen@ii
+        \advance\dimen@ii -\fb@frh
+        \setbox\tw@\vbox to\dimen@ii \bgroup
+        % remove simulated frame and page flexibility:
+        \vskip -\fb@frh \@plus-\pagestretch \@minus-.8\pageshrink
+        \unvbox\tw@ \unpenalty\unpenalty
+        \ifdim\lastkern=-137sp % whole box went to next page
+|          \message{box split at beginning! }%
+           % need work here???
+           \egroup \fb@resto@set \eject % (\vskip for frame size was discarded) 
+           \fb@adjheight
+           \fb@put@frame#1#2% INSERTED ???
+        \else % Got material split off at the head
+           \egroup \fb@resto@set
+           \ifvoid\@tempboxa % it all fit after all
+|             \message{box split at end! }%
+              \setbox\@tempboxa\box\tw@
+              \fb@putboxa#1%
+              \fb@afterframe
+           \else % it really did split
+|             \message{box split as expected. Its reboxed height is \the\ht\tw@. }%
+              \ifdim\wd\tw@>\z@
+                \wd\tw@\wd\@tempboxa
+                \centerline{#2{\box\tw@}}%  ??? \centerline bad idea
+              \else
+|               \message{Zero width means likely blank. Don't frame it (guess)}%
+                \box\tw@
+              \fi
+              \hrule \@height\z@ \@width\hsize
+              \eject
+              \fb@adjheight
+              \fb@put@frame\LastFrameCommand\MidFrameCommand
+  \fi\fi\fi\fi\fi
+}
+
+\def\fb@putboxa#1{%
+  \ifvoid\@tempboxa
+    \PackageWarning{framed}{Boxa is void -- discard it. }%
+  \else
+|   \message{Frame and place boxa. }%
+|   %{\showoutput\showbox\@tempboxa}%
+    \centerline{#1{\box\@tempboxa}}%
+  \fi
+}
+
+\def\fb@afterframe{%
+    \nointerlineskip \null %{\showoutput \showlists}
+    \penalty-30 \vskip\OuterFrameSep \relax
+}
+
+% measure width and height added by frame (#1 = frame command)
+% call results \fb@frw and \fb@frh
+% todo: a mechanism to handle wide frame titles 
+\newdimen\fb@frw
+\newdimen\fb@frh
+\def\fb@sizeofframe#1{\begingroup
+ \setbox\z@\vbox{\vskip-5in \hbox{\hskip-5in 
+   #1{\hbox{\vrule \@height 4.7in \@depth.3in \@width 5in}}}%
+   \vskip\z@skip}%
+|  \message{Measuring frame addition for \string#1 in \@currenvir\space 
+|    gives ht \the\ht\z@\space and wd \the\wd\z@. }%
+|  %{\showoutput\showbox\z@}%
+ \global\fb@frw\wd\z@ \global\fb@frh\ht\z@
+ \endgroup
+}
+
+\def\fb@adjheight{%
+  \vbox to\FrameHeightAdjust{}% get proper baseline skip from above.
+  \penalty\@M \nointerlineskip
+  \vskip-\FrameHeightAdjust
+  \penalty\@M} % useful for tops of pages
+
+\edef\zero@glue{\the\z@skip}
+
+\catcode`\|=\FrameRestore
+
+% Provide configuration commands:
+\providecommand\FrameCommand{%
+ \setlength\fboxrule{\FrameRule}\setlength\fboxsep{\FrameSep}%
+ \fbox}
+\@ifundefined{FrameRule}{\newdimen\FrameRule \FrameRule=\fboxrule}{}
+\@ifundefined{FrameSep} {\newdimen\FrameSep  \FrameSep =3\fboxsep}{}
+\providecommand\FirstFrameCommand{\FrameCommand}
+\providecommand\MidFrameCommand{\FrameCommand}
+\providecommand\LastFrameCommand{\FrameCommand}
+
+% Height of frame above first baseline when frame starts a page:
+\providecommand\FrameHeightAdjust{6pt}
+
+% \FrameRestore has parts of \@parboxrestore, performing a similar but 
+% less complete restoration of the default layout.  See how it is used in
+% the "settings" argument of \MakeFrame.  Though not a parameter, \hsize 
+% should be set to the desired total line width available inside the
+% frame before invoking \FrameRestore.  
+\def\FrameRestore{%
+   \let\if@nobreak\iffalse
+   \let\if@noskipsec\iffalse
+   \let\-\@dischyph
+   \let\'\@acci\let\`\@accii\let\=\@acciii
+   %  \message{FrameRestore:
+   %    \@totalleftmargin=\the \@totalleftmargin,
+   %    \rightmargin=\the\rightmargin, 
+   %    \@listdepth=\the\@listdepth.  }%
+   % Test if we are in a list (or list-like paragraph)
+   \ifnum \ifdim\@totalleftmargin>\z@ 1\fi  
+          \ifdim\rightmargin>\z@ 1\fi
+          \ifnum\@listdepth>\z@ 1\fi 0>\z@
+     %     \message{In a list: \linewidth=\the\linewidth, \@totalleftmargin=\the\@totalleftmargin,
+     %       \parshape=\the\parshape, \columnwidth=\the\columnwidth, \hsize=\the\hsize, 
+     %       \labelwidth=\the\labelwidth. }%
+     \@setminipage % snug fit around the item.  I would like this to be non-global.
+     % Now try to propageate changes of width from \hsize to list parameters.
+     % This is deficient, but a more advanced way to indicate modification to text 
+     % dimensions is not (yet) provided; in particular, no separate left/right
+     % adjustment.
+     \advance\linewidth-\columnwidth \advance\linewidth\hsize
+     \parshape\@ne \@totalleftmargin \linewidth
+   \else % Not in list
+     \linewidth=\hsize
+     %\message{No list, set \string\linewidth=\the\hsize. }%
+   \fi
+   \sloppy
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
diff --git a/tools/tex/titling.sty b/tools/tex/titling.sty
new file mode 100644 (file)
index 0000000..ed2eb33
--- /dev/null
@@ -0,0 +1,270 @@
+%%
+%% This is file `titling.sty',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% titling.dtx  (with options: `usc')
+%% 
+%% -----------------------------------------------------------------
+%%   Author: Peter Wilson (Herries Press)
+%%   Maintainer: Will Robertson (will dot robertson at latex-project dot org)
+%%   Copyright 2000--2004 Peter R. Wilson
+%% 
+%%   This work may be distributed and/or modified under the
+%%   conditions of the LaTeX Project Public License, either
+%%   version 1.3c of this license or (at your option) any
+%%   later version: <http://www.latex-project.org/lppl.txt>
+%% 
+%%   This work has the LPPL maintenance status "maintained".
+%%   The Current Maintainer of this work is Will Robertson.
+%% 
+%%   This work consists of the files listed in the README file.
+%% -----------------------------------------------------------------
+%% 
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{titling}[2009/09/04 v2.1d maketitle typesetting]
+
+\newcommand{\pretitle}[1]{\def\@bspretitle{#1}}
+\newcommand{\posttitle}[1]{\def\@bsposttitle{#1}}
+\newcommand{\preauthor}[1]{\def\@bspreauthor{#1}}
+\newcommand{\postauthor}[1]{\def\@bspostauthor{#1}}
+\newcommand{\predate}[1]{\def\@bspredate{#1}}
+\newcommand{\postdate}[1]{\def\@bspostdate{#1}}
+
+\if@titlepage
+  \pretitle{\begin{center}\LARGE}
+  \posttitle{\par\end{center}\vskip 2em}
+  \preauthor{\begin{center}
+    \large \lineskip .75em%
+    \begin{tabular}[t]{c}}
+  \postauthor{\end{tabular}\par\end{center}}
+  \predate{\begin{center}\large}
+  \postdate{\par\end{center}}
+\else
+  \pretitle{\begin{center}\LARGE}
+  \posttitle{\par\end{center}\vskip 0.5em}
+  \preauthor{\begin{center}
+    \large \lineskip .5em%
+    \begin{tabular}[t]{c}}
+  \postauthor{\end{tabular}\par\end{center}}
+  \predate{\begin{center}\large}
+  \postdate{\par\end{center}}
+\fi
+
+\newcommand{\maketitlehooka}{}
+\newcommand{\maketitlehookb}{}
+\newcommand{\maketitlehookc}{}
+\newcommand{\maketitlehookd}{}
+
+\newcommand{\thanksmarkseries}[1]{%
+  \def\@bsmarkseries{\renewcommand{\thefootnote}{\@nameuse{#1}{footnote}}}}
+\newcommand{\symbolthanksmark}{\thanksmarkseries{\fnsymbol}}
+\newcommand{\@bscontmark}{\setcounter{footnote}{0}}
+\newcommand{\continuousmarks}{\def\@bscontmark{}}
+\newcommand{\thanksheadextra}[2]{%
+  \def\@bsthanksheadpre{#1}%
+  \def\@bsthanksheadpost{#2}}
+\newcommand{\thanksfootextra}[2]{%
+  \def\thanksfootpre{#1}%
+  \def\thanksfootpost{#2}}
+
+\DeclareRobustCommand{\thanksmark}[1]{\footnotemark[#1]}
+\newcommand{\thanksgap}[1]{\hspace{#1}}
+\newcommand{\tamark}{\@thefnmark}
+
+\newlength{\thanksmarkwidth}
+\newlength{\thanksmargin}
+\newcommand{\thanksscript}[1]{\textsuperscript{#1}}
+\newcommand{\makethanksmarkhook}{}
+
+\newcommand{\thanksfootmark}{%
+  \hb@xt@\thanksmarkwidth{\hfil\normalfont\thanksscript{%
+    \thanksfootpre \tamark \thanksfootpost}}}
+
+\newcommand{\makethanksmark}{%
+  \leavevmode%
+  \makethanksmarkhook\relax
+  \parindent 1em\noindent
+  \leftskip\thanksmargin\relax
+  \advance\leftskip \thanksmarkwidth \null\nobreak\hskip -\leftskip
+  \thanksfootmark
+}
+
+\newcommand{\usethanksrule}{\let\footnoterule\thanksrule}
+\newcommand{\cancelthanksrule}{\let\footnoterule\@bsfootnoterule}
+
+\if@titlepage
+  \thanksmarkseries{arabic}    % normal footnote numbers
+\else
+  \thanksmarkseries{fnsymbol}
+\fi
+\thanksheadextra{}{}
+\thanksfootextra{}{}
+\setlength{\thanksmarkwidth}{1.8em}
+\setlength{\thanksmargin}{-\thanksmarkwidth}
+
+\AtBeginDocument{%
+  \let\thanksrule\footnoterule
+  \let\@bsfootnoterule\footnoterule
+}
+
+\newlength{\droptitle}
+\setlength{\droptitle}{0pt}
+
+\providecommand{\maketitle}{}
+\if@titlepage
+  \renewcommand{\maketitle}{\begin{titlepage}%
+    \let\footnotesize\small
+    \let\footnoterule\relax
+    \let \footnote \thanks
+    \@bsmarkseries
+      \def\@makefnmark{\rlap{\@textsuperscript{%
+         \normalfont\@bsthanksheadpre \tamark \@bsthanksheadpost}}}%
+      \long\def\@makefntext##1{\makethanksmark ##1}
+    \null\vfil
+    \vskip 60\p@
+    \vspace*{\droptitle}
+    \maketitlehooka
+    {\@bspretitle \@title \@bsposttitle}
+    \maketitlehookb
+    {\@bspreauthor \@author \@bspostauthor}
+    \maketitlehookc
+    {\@bspredate \@date \@bspostdate}
+    \maketitlehookd
+    \par
+    \@thanks
+    \vfil\null
+    \end{titlepage}%
+    \@bscontmark  %  \setcounter{footnote}{0}%
+%%%    \@bsmtitlempty
+  } % end titlepage defs
+\else
+  \renewcommand{\maketitle}{\par
+    \begingroup
+      \@bsmarkseries
+      \def\@makefnmark{\rlap{\@textsuperscript{%
+         \normalfont\@bsthanksheadpre \tamark \@bsthanksheadpost}}}%
+      \long\def\@makefntext##1{\makethanksmark ##1}
+      \if@twocolumn
+        \ifnum \col@number=\@ne
+          \@maketitle
+        \else
+          \twocolumn[\@maketitle]%
+        \fi
+      \else
+        \newpage
+        \global\@topnum\z@
+        \@maketitle
+      \fi
+      \thispagestyle{plain}\@thanks
+    \endgroup
+    \@bscontmark  %  \setcounter{footnote}{0}%
+%%%    \@bsmtitlempty
+  } % end non-titlepage
+
+  \def\@maketitle{%
+    \newpage
+    \null
+    \vskip 2em%
+          \vspace*{\droptitle}
+    \maketitlehooka
+    {\@bspretitle \@title \@bsposttitle}
+    \maketitlehookb
+    {\@bspreauthor \@author \@bspostauthor}
+    \maketitlehookc
+    {\@bspredate \@date \@bspostdate}
+    \maketitlehookd
+    \par
+    \vskip 1.5em}
+\fi
+
+\newenvironment{titlingpage}%
+  {%
+   \let\footnoterule\relax
+   \let\footnotesize\small
+   \if@twocolumn
+     \@restonecoltrue\onecolumn
+   \else
+     \@restonecolfalse
+   \fi
+   \thispagestyle{empty}
+   \setcounter{page}\@ne
+  }{%
+   \thispagestyle{empty}
+   \if@restonecol\twocolumn \else \newpage \fi
+   \if@twoside\else \setcounter{page}\@ne\fi}
+
+\newcommand{\calccentering}[2]{
+  #1 = \paperwidth
+  \advance #1 by -\textwidth
+  \divide #1 by \tw@
+  \advance #1 by -#2
+  \advance #1 by -\hoffset
+  \advance #1 by -1in
+}
+
+\newcommand{\emptythanks}{\global\let\@thanks\@empty}
+
+\newcommand{\@bsmtitlempty}{%
+  \global\let\maketitle\relax
+  \global\let\@maketitle\relax
+  \global\let\title\relax
+  \global\let\author\relax
+  \global\let\date\relax
+  \global\let\thanksmarkseries\relax
+  \global\let\thanksheadextra\relax
+  \global\let\thanksfootextra\relax
+  \global\let\thanksmark\relax
+  \global\let\thanksgap\relax
+}
+
+\newcommand{\keepthetitle}{%
+  \@bsmtitlempty
+  \global\let\thanks\relax
+  \global\let\and\relax
+  \global\let\@thanks\@empty
+  \global\let\@title\@empty
+  \global\let\@author\@empty
+  \global\let\@date\@empty
+}
+
+\providecommand{\killtitle}{}
+\renewcommand{\killtitle}{%
+  \keepthetitle
+  \global\let\thetitle\relax
+  \global\let\theauthor\relax
+  \global\let\thedate\relax
+}
+
+\providecommand{\appendiargdef}[2]{\begingroup
+  \toks@\expandafter{#1{##1}#2}%
+  \edef\@bsx{\endgroup \def\noexpand#1####1{\the\toks@}}%
+  \@bsx}
+
+\appendiargdef{\title}{%
+  \begingroup
+    \renewcommand{\thanks}[1]{}
+    \renewcommand{\thanksmark}[1]{}
+    \renewcommand{\thanksgap}[1]{}
+    \protected@xdef\thetitle{#1}
+  \endgroup}
+\appendiargdef{\author}{%
+  \begingroup
+    \renewcommand{\thanks}[1]{}
+    \renewcommand{\and}{\unskip, }
+    \renewcommand{\thanksmark}[1]{}
+    \renewcommand{\thanksgap}[1]{}
+    \protected@xdef\theauthor{#1}
+  \endgroup}
+\appendiargdef{\date}{%
+  \begingroup
+    \renewcommand{\thanks}[1]{}
+    \renewcommand{\thanksmark}[1]{}
+    \renewcommand{\thanksgap}[1]{}
+    \protected@xdef\thedate{#1}
+  \endgroup}
+
+\endinput
+%%
+%% End of file `titling.sty'.
diff --git a/tools/tex/wallpaper.sty b/tools/tex/wallpaper.sty
new file mode 100644 (file)
index 0000000..c64e8c6
--- /dev/null
@@ -0,0 +1,250 @@
+%% 
+%% This is file `wallpaper.sty' v 1.10
+%%
+%% Author Michael H.F. Wilkinson 
+%%   April 21, 2006
+%% 
+%% Create background, either centered, tiled, or in any corner   
+%% relies heavily on eso-pic.sty, corrects for changes in \hoffset 
+%% by classes such as sciposter.cls
+%% Problems, bugs and comments to 
+%%        michael@cs.rug.nl
+%% version 1.10, 2006/04/21:
+%%               - Commands added for corner wallpapers 
+%%
+%% version 1.01, 2005/01/18:
+%%               - \providecommand{\LenToUnit} included to be compatible
+%%                  with earlier versions of eso-pic.sty
+%%
+%% version 1.00, 2004/12/22:
+%%               - first release
+%%
+%%
+\ProvidesPackage{wallpaper}[2005/01/18, v1.01 easy wallpaper formatting (MHFW)]
+\NeedsTeXFormat{LaTeX2e}[1995/06/01]
+
+\RequirePackage{ifthen}
+\RequirePackage{calc}
+\RequirePackage{eso-pic}
+\RequirePackage{graphicx}
+
+\providecommand{\LenToUnit}[1]{#1\@gobble}
+
+
+\newlength{\wpXoffset}
+\setlength{\wpXoffset}{-\hoffset}
+\newlength{\wpYoffset}
+\setlength{\wpYoffset}{0pt}
+\newlength{\tileXoffset}
+\newlength{\tileYoffset}
+\newlength{\tilewidth}
+\newlength{\tileheight}
+\newlength{\tileX}
+\newlength{\tileY}
+
+\newcommand{\LLCornerWallPaper}[2]{%
+\AddToShipoutPicture{%
+  \AtPageLowerLeft{%
+    \includegraphics[width=#1\paperwidth,height=#1\paperheight,%
+                     keepaspectratio]{#2}%
+    }
+  }
+}
+
+\newcommand{\ThisLLCornerWallPaper}[2]{%
+\AddToShipoutPicture*{%
+  \AtPageLowerLeft{%
+    \includegraphics[width=#1\paperwidth,height=#1\paperheight,%
+                     keepaspectratio]{#2}%
+    }
+  }
+}
+
+\newcommand{\ULCornerWallPaper}[2]{%
+  \AddToShipoutPicture{%
+    \AtPageLowerLeft{%
+      \parbox[b][\paperheight]{#1\paperwidth}{%       
+        \includegraphics[width=#1\paperwidth,height=#1\paperheight,%
+        keepaspectratio]{#2}%
+        \vfill%
+      }
+    }
+  }
+}
+
+\newcommand{\ThisULCornerWallPaper}[2]{%
+  \AddToShipoutPicture*{%
+    \AtPageLowerLeft{%
+      \parbox[b][\paperheight]{#1\paperwidth}{%       
+        \includegraphics[width=#1\paperwidth,height=#1\paperheight,%
+        keepaspectratio]{#2}%
+        \vfill%
+      }
+    }
+  }
+}
+
+\newcommand{\LRCornerWallPaper}[2]{%
+  \AddToShipoutPicture{%
+    \AtPageLowerLeft{%
+      \parbox[b]{\paperwidth}{%       
+        \hfill \includegraphics[width=#1\paperwidth,height=#1\paperheight,%
+        keepaspectratio]{#2}%
+      }
+    }
+  }
+}
+
+\newcommand{\ThisLRCornerWallPaper}[2]{%
+  \AddToShipoutPicture*{%
+    \AtPageLowerLeft{%
+      \parbox[b]{\paperwidth}{%       
+        \hfill \includegraphics[width=#1\paperwidth,height=#1\paperheight,%
+        keepaspectratio]{#2}%
+      }
+    }
+  }
+}
+
+\newcommand{\URCornerWallPaper}[2]{%
+  \AddToShipoutPicture{%
+    \AtPageLowerLeft{%
+      \parbox[b][\paperheight]{\paperwidth}{%       
+        \hfill \includegraphics[width=#1\paperwidth,height=#1\paperheight,%
+        keepaspectratio]{#2}%
+        \vfill%
+      }
+    }
+  }
+}
+\newcommand{\ThisURCornerWallPaper}[2]{%
+  \AddToShipoutPicture*{%
+    \AtPageLowerLeft{%
+      \parbox[b][\paperheight]{\paperwidth}{%       
+        \hfill \includegraphics[width=#1\paperwidth,height=#1\paperheight,%
+        keepaspectratio]{#2}%
+        \vfill%
+      }
+    }
+  }
+}
+
+\newcommand{\CenterWallPaper}[2]{%
+\AddToShipoutPicture{\put(\LenToUnit{\wpXoffset},\LenToUnit{\wpYoffset}){%
+     \parbox[b][\paperheight]{\paperwidth}{%       
+       \vfill
+       \centering
+       \includegraphics[width=#1\paperwidth,height=#1\paperheight,%
+                        keepaspectratio]{#2}%
+       \vfill
+     }}
+  }
+}  
+
+\newcommand{\ThisCenterWallPaper}[2]{%
+\AddToShipoutPicture*{\put(\LenToUnit{\wpXoffset},\LenToUnit{\wpYoffset}){%
+     \parbox[b][\paperheight]{\paperwidth}{%       
+       \vfill
+       \centering
+       \includegraphics[width=#1\paperwidth,height=#1\paperheight,%
+                        keepaspectratio]{#2}%
+       \vfill
+     }}}
+}  
+
+
+
+\newcommand{\TileSquareWallPaper}[2]{%
+\AddToShipoutPicture{%
+  \begingroup
+    \setlength{\tileYoffset}{\wpYoffset}
+    \setlength{\tilewidth}{\paperwidth/#1}%
+    \setlength{\tileheight}{\tilewidth}%
+    \setlength{\tileY}{0pt}%
+    \whiledo{\lengthtest{\tileY < \paperheight}}{% 
+      \setlength{\tileX}{0pt}%
+      \setlength{\tileXoffset}{\wpXoffset}%
+      \whiledo{\lengthtest{\tileX < \paperwidth}}{% 
+        \put(\LenToUnit{\tileXoffset},\LenToUnit{\tileYoffset}){%
+          \includegraphics[height=\tileheight,width=\tilewidth]{#2}}%
+        \addtolength{\tileX}{\tilewidth}
+        \addtolength{\tileXoffset}{\tilewidth}
+      }%
+      \addtolength{\tileY}{\tileheight}
+      \addtolength{\tileYoffset}{\tileheight}
+    }%
+  \endgroup  
+}%
+}
+
+\newcommand{\ThisTileSquareWallPaper}[2]{%
+\AddToShipoutPicture*{%
+  \begingroup
+    \setlength{\tileYoffset}{\wpYoffset}
+    \setlength{\tilewidth}{\paperwidth/#1}%
+    \setlength{\tileheight}{\tilewidth}%
+    \setlength{\tileY}{0pt}%
+    \whiledo{\lengthtest{\tileY < \paperheight}}{% 
+      \setlength{\tileX}{0pt}%
+      \setlength{\tileXoffset}{\wpXoffset}%
+      \whiledo{\lengthtest{\tileX < \paperwidth}}{% 
+        \put(\LenToUnit{\tileXoffset},\LenToUnit{\tileYoffset}){%
+          \includegraphics[height=\tileheight,width=\tilewidth]{#2}}%
+        \addtolength{\tileX}{\tilewidth}
+        \addtolength{\tileXoffset}{\tilewidth}
+      }%
+      \addtolength{\tileY}{\tileheight}
+      \addtolength{\tileYoffset}{\tileheight}
+    }%
+  \endgroup  
+}%
+}
+
+
+\newcommand{\TileWallPaper}[3]{%
+\AddToShipoutPicture{%
+  \begingroup
+    \setlength{\tileYoffset}{\wpYoffset}
+    \setlength{\tilewidth}{#1}%
+    \setlength{\tileheight}{#2}%
+    \setlength{\tileY}{0pt}%
+    \whiledo{\lengthtest{\tileY < \paperheight}}{% 
+      \setlength{\tileX}{0pt}%
+      \setlength{\tileXoffset}{\wpXoffset}%
+      \whiledo{\lengthtest{\tileX < \paperwidth}}{% 
+        \put(\LenToUnit{\tileXoffset},\LenToUnit{\tileYoffset}){%
+          \includegraphics[height=\tileheight,width=\tilewidth]{#3}}%
+        \addtolength{\tileX}{\tilewidth}
+        \addtolength{\tileXoffset}{\tilewidth}
+      }%
+      \addtolength{\tileY}{\tileheight}
+      \addtolength{\tileYoffset}{\tileheight}
+    }%
+  \endgroup  
+}%
+}
+
+\newcommand{\ThisTileWallPaper}[3]{%
+\AddToShipoutPicture*{%
+  \begingroup
+    \setlength{\tileYoffset}{\wpYoffset}
+    \setlength{\tilewidth}{#1}%
+    \setlength{\tileheight}{#2}%
+    \setlength{\tileY}{0pt}%
+    \whiledo{\lengthtest{\tileY < \paperheight}}{% 
+      \setlength{\tileX}{0pt}%
+      \setlength{\tileXoffset}{\wpXoffset}%
+      \whiledo{\lengthtest{\tileX < \paperwidth}}{% 
+        \put(\LenToUnit{\tileXoffset},\LenToUnit{\tileYoffset}){%
+          \includegraphics[height=\tileheight,width=\tilewidth]{#3}}%
+        \addtolength{\tileX}{\tilewidth}
+        \addtolength{\tileXoffset}{\tilewidth}
+      }%
+      \addtolength{\tileY}{\tileheight}
+      \addtolength{\tileYoffset}{\tileheight}
+    }%
+  \endgroup  
+}%
+}
+
+\newcommand{\ClearWallPaper}{\ClearShipoutPicture}
\ No newline at end of file
diff --git a/verleihnix/.dummy b/verleihnix/.dummy
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/verleihnix/Verleihnix/.dummy b/verleihnix/Verleihnix/.dummy
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/verleihnix/Verleihnix/VNAdministration.php b/verleihnix/Verleihnix/VNAdministration.php
new file mode 100644 (file)
index 0000000..458edc2
--- /dev/null
@@ -0,0 +1,14 @@
+<?php
+
+// imports
+require_once 'GenericAdmin/GenericAdmin.php';
+require_once 'util/Config.php';
+
+class VNAdministration extends GenericAdmin {
+
+       function VNAdministration() {
+               // Generic Administration configuration data
+               include 'Verleihnix/impl/GenadData.php';
+               parent::setDscrData($mocd_tab, $atdc_tab);
+       }
+}
diff --git a/verleihnix/Verleihnix/impl/.dummy b/verleihnix/Verleihnix/impl/.dummy
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/verleihnix/Verleihnix/impl/GenadData.php b/verleihnix/Verleihnix/impl/GenadData.php
new file mode 100644 (file)
index 0000000..f158f50
--- /dev/null
@@ -0,0 +1,128 @@
+<?php
+
+// imports
+require_once 'GenericAdmin/DataTypes/AttrProperty.php';
+
+       // Generic Administration configuration data
+       $mocd_tab = array (
+               1 => array (
+                       'intern' => 'Krimi',
+                       'extern' => 'Krimi'),
+               2 => array (
+                       'intern' => 'Horbuch',
+                       'extern' => 'Hörbuch'),
+               3 => array (
+                       'intern' => 'Roman',
+                       'extern' => 'Roman'),
+               4 => array (
+                       'intern' => 'Werkzeug',
+                       'extern' => 'Werkzeug')
+               );
+
+       $atdc_tab = array (
+
+               // Krimi
+               array (
+                       'intern'  => 'autor',
+                       'extern'  => 'Autor',
+                       'moc'     => 'Krimi',
+                       'props'   => array (AttrProperty::AP_GET)),
+               array (
+                       'intern'  => 'titel',
+                       'extern'  => 'Titel',
+                       'moc'     => 'Krimi',
+                       'props'   => array (AttrProperty::AP_GET)),
+               array (
+                       'intern'  => 'eigentumer',
+                       'extern'  => 'Eigentümer',
+                       'moc'     => 'Krimi',
+                       'props'   => array (AttrProperty::AP_GET)),
+               array (
+                       'intern'  => 'zz_bei',
+                       'extern'  => 'zur_Zeit_bei',
+                       'moc'     => 'Krimi',
+                       'props'   => array (AttrProperty::AP_GET, AttrProperty::AP_SET)),
+               array (
+                       'intern'  => 'kommentar',
+                       'extern'  => 'Kommentar',
+                       'moc'     => 'Krimi',
+                       'props'   => array (AttrProperty::AP_GET, AttrProperty::AP_SET)),
+
+               // Hörbuch
+               array (
+                       'intern'  => 'autor',
+                       'extern'  => 'Autor',
+                       'moc'     => 'Horbuch',
+                       'props'   => array (AttrProperty::AP_GET)),
+               array (
+                       'intern'  => 'titel',
+                       'extern'  => 'Titel',
+                       'moc'     => 'Horbuch',
+                       'props'   => array (AttrProperty::AP_GET)),
+               array (
+                       'intern'  => 'eigentumer',
+                       'extern'  => 'Eigentümer',
+                       'moc'     => 'Horbuch',
+                       'props'   => array (AttrProperty::AP_GET)),
+               array (
+                       'intern'  => 'zz_bei',
+                       'extern'  => 'zur_Zeit_bei',
+                       'moc'     => 'Horbuch',
+                       'props'   => array (AttrProperty::AP_GET, AttrProperty::AP_SET)),
+               array (
+                       'intern'  => 'kommentar',
+                       'extern'  => 'Kommentar',
+                       'moc'     => 'Horbuch',
+                       'props'   => array (AttrProperty::AP_GET, AttrProperty::AP_SET)),
+
+               // Roman
+               array (
+                       'intern'  => 'autor',
+                       'extern'  => 'Autor',
+                       'moc'     => 'Roman',
+                       'props'   => array (AttrProperty::AP_GET)),
+               array (
+                       'intern'  => 'titel',
+                       'extern'  => 'Titel',
+                       'moc'     => 'Roman',
+                       'props'   => array (AttrProperty::AP_GET)),
+               array (
+                       'intern'  => 'eigentumer',
+                       'extern'  => 'Eigentümer',
+                       'moc'     => 'Roman',
+                       'props'   => array (AttrProperty::AP_GET)),
+               array (
+                       'intern'  => 'zz_bei',
+                       'extern'  => 'zur_Zeit_bei',
+                       'moc'     => 'Roman',
+                       'props'   => array (AttrProperty::AP_GET, AttrProperty::AP_SET)),
+               array (
+                       'intern'  => 'kommentar',
+                       'extern'  => 'Kommentar',
+                       'moc'     => 'Roman',
+                       'props'   => array (AttrProperty::AP_GET, AttrProperty::AP_SET)),
+
+               // Werkzeug
+               array (
+                       'intern'  => 'typ',
+                       'extern'  => 'Typ',
+                       'moc'     => 'Werkzeug',
+                       'props'   => array (AttrProperty::AP_GET)),
+               array (
+                       'intern'  => 'beschreibung',
+                       'extern'  => 'Beschreibung',
+                       'moc'     => 'Werkzeug',
+                       'props'   => array (AttrProperty::AP_GET)),
+               array (
+                       'intern'  => 'eigentumer',
+                       'extern'  => 'Eigentümer',
+                       'moc'     => 'Werkzeug',
+                       'props'   => array (AttrProperty::AP_GET)),
+               array (
+                       'intern'  => 'zz_bei',
+                       'extern'  => 'zur_Zeit_bei',
+                       'moc'     => 'Werkzeug',
+                       'props'   => array (AttrProperty::AP_GET, AttrProperty::AP_SET))
+               );
+
+?>
diff --git a/verleihnix/Verleihnix/impl/data/.dummy b/verleihnix/Verleihnix/impl/data/.dummy
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/verleihnix/Verleihnix/impl/data/build.properties b/verleihnix/Verleihnix/impl/data/build.properties
new file mode 100644 (file)
index 0000000..82cc9ed
--- /dev/null
@@ -0,0 +1,5 @@
+# Database driver
+propel.database = mysql
+
+# Project name
+propel.project = propel
diff --git a/verleihnix/Verleihnix/impl/data/runtime-conf.xml b/verleihnix/Verleihnix/impl/data/runtime-conf.xml
new file mode 100644 (file)
index 0000000..25eec8f
--- /dev/null
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<config>
+  <!-- Uncomment this if you have PEAR Log installed -->
+  <!--log>
+    <type>file</type>
+    <name>/tmp/propel.log</name>
+    <ident>AlarmManagement</ident>
+    <level>7</level>
+  </log-->
+  <propel>
+    <datasources default="mkrimi">
+      <datasource id="mkrimi">
+        <adapter>mysql</adapter> <!-- sqlite, mysql, myssql, oracle, or pgsql -->
+        <connection>
+          <dsn>mysql:host=localhost;dbname=mkrimi</dsn>
+          <user>mkrimi</user>
+          <password>mkrimi</password>
+          <settings>
+            <setting id="charset">utf8</setting>
+          </settings>
+        </connection>
+      </datasource>
+    </datasources>
+  </propel>
+</config>
diff --git a/verleihnix/Verleihnix/impl/data/schema.xml b/verleihnix/Verleihnix/impl/data/schema.xml
new file mode 100644 (file)
index 0000000..07d47c0
--- /dev/null
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<database name="mkrimi" defaultIdMethod="native">
+       <table name="medium">
+               <column name="id" type="integer" required="true" primaryKey="true" autoIncrement="true"/>
+               <column name="mod" type="integer" required="true"/>
+               <column name="autor" type="varchar" size="100" required="true"/>
+               <column name="titel" type="varchar" size="100" required="true"/>
+               <column name="eigentumer" type="varchar" size="100" required="true"/>
+               <column name="zz_bei" type="varchar" size="100" required="true"/>
+               <column name="kommentar" type="varchar" size="100" required="true"/>
+               <column name="buch_typ" type="integer" required="true"/>
+       </table>
+       <table name="werkzeug">
+               <column name="id" type="integer" required="true" primaryKey="true" autoIncrement="true"/>
+               <column name="mod" type="integer" required="true"/>
+               <column name="typ" type="varchar" size="100" required="true"/>
+               <column name="beschreibung" type="varchar" size="100" required="true"/>
+               <column name="eigentumer" type="varchar" size="100" required="true"/>
+               <column name="zz_bei" type="varchar" size="100" required="true"/>
+       </table>
+</database>
diff --git a/verleihnix/etc/.dummy b/verleihnix/etc/.dummy
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/verleihnix/etc/verleihnix.conf b/verleihnix/etc/verleihnix.conf
new file mode 100644 (file)
index 0000000..cd8cc69
--- /dev/null
@@ -0,0 +1,9 @@
+# Configuration for mKrimi Verleihnix Gui
+   Alias /verleihnix "/usr/share/php/verleihnix/gui"
+   <Directory /usr/share/php/verleihnix/gui>
+      Options +FollowSymlinks
+      RewriteEngine On
+      RewriteBase /verleihnix/
+      RewriteRule ^.*php$ index.php
+   </Directory>
+
diff --git a/verleihnix/gui/.dummy b/verleihnix/gui/.dummy
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/verleihnix/gui/ConfigurationData.php b/verleihnix/gui/ConfigurationData.php
new file mode 100644 (file)
index 0000000..d9249d5
--- /dev/null
@@ -0,0 +1,8 @@
+<?php
+$configurationData = array (
+
+       "gui::applications" => array ("Verleihnix"), 
+       "autoloader" => array ("ClassLoader", "autoload"),
+       "Verleihnix::InterfaceClass" => "VNAdministration",
+       "PropelClassPath"       => "Verleihnix/impl/data/build"
+       );
diff --git a/verleihnix/gui/index.php b/verleihnix/gui/index.php
new file mode 120000 (symlink)
index 0000000..4469e92
--- /dev/null
@@ -0,0 +1 @@
+mKrimiGui.php
\ No newline at end of file
diff --git a/verleihnix/gui/mKrimiGui.php b/verleihnix/gui/mKrimiGui.php
new file mode 100644 (file)
index 0000000..3cc01a7
--- /dev/null
@@ -0,0 +1,42 @@
+<?php
+//phpinfo();
+
+// define user
+$user = getenv("USER");
+if ($user == "") putenv("USER=gui");
+
+// includes
+$path = preg_replace("/verleihnix.*/", "verleihnix", __FILE__);
+set_include_path($path . PATH_SEPARATOR . get_include_path());
+require_once 'util/Logger.php';
+require_once 'util/Config.php';
+require_once 'GenericAdmin/gui/control/GenadControl.php';
+
+// load configuration + class loader
+include 'gui/ConfigurationData.php';
+Config::setConfiguration($configurationData);
+
+// Logging
+$logger = Logger::getInstance();
+$requestMethod = $_SERVER["REQUEST_METHOD"];
+$logger->log(__FILE__, $requestMethod);
+$logger->log(__FILE__, "GET-Variabeles:");
+while ( list($key, $value) = each($_GET) ) {
+       $logger->log(__FILE__, $key . " : " . $value);;
+}
+$logger->log(__FILE__, "POST-Variabeles:");
+while ( list($key, $value) = each($_POST) ) {
+       $logger->log(__FILE__, $key . " : " . $value);;
+}
+$logger->log(__FILE__,"Redirect-URL:".$_SERVER["REDIRECT_URL"]);
+
+// call implementation
+try {
+       $control = new GenadControl();
+       $control->doIt();
+}
+catch (Exception $e) {
+       $logger->logException(__FILE__, $e);    
+       echo "<html><body>Error occurred!</body></html>";
+}
+
diff --git a/verleihnix/gui/name_map.php b/verleihnix/gui/name_map.php
new file mode 100644 (file)
index 0000000..54afac8
--- /dev/null
@@ -0,0 +1,10 @@
+<?php
+$this->nameMap = array (
+       "Back" => "Zurück",
+       "Class Selection" => "Typ",
+       "Create" => "Anlegen",
+       "List" => "Liste",
+       "Select" => "Auswählen",
+       "Submit changes" => "Änderungen speichern",
+       "zur_Zeit_bei" => "zur Zeit bei"
+);
diff --git a/verleihnix/gui/view/.dummy b/verleihnix/gui/view/.dummy
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/verleihnix/gui/view/admin.css b/verleihnix/gui/view/admin.css
new file mode 120000 (symlink)
index 0000000..e0f1667
--- /dev/null
@@ -0,0 +1 @@
+/usr/share/php/GenericAdmin/gui/view/admin.css
\ No newline at end of file
diff --git a/verleihnix/gui/view/gfx b/verleihnix/gui/view/gfx
new file mode 120000 (symlink)
index 0000000..ac9994b
--- /dev/null
@@ -0,0 +1 @@
+/usr/share/php/mLohn/gui/view/gfx/
\ No newline at end of file
diff --git a/verleihnix/gui/view/gfx.dummy b/verleihnix/gui/view/gfx.dummy
new file mode 100644 (file)
index 0000000..e69de29