From 3ec3193faef4e208dfae65e9f863b7264e1e40e8 Mon Sep 17 00:00:00 2001
From: Jonathan Weth <git@jonathanweth.de>
Date: Sat, 14 Dec 2019 19:52:21 +0100
Subject: [PATCH] Remove docs

---
 docs/_build/doctrees/api/aub.doctree          |   Bin 15233 -> 0 bytes
 docs/_build/doctrees/api/dashboard.doctree    |   Bin 82272 -> 0 bytes
 docs/_build/doctrees/dev/dev.doctree          |   Bin 17385 -> 0 bytes
 docs/_build/doctrees/dev/doc.doctree          |   Bin 5749 -> 0 bytes
 docs/_build/doctrees/dev/git.doctree          |   Bin 30920 -> 0 bytes
 docs/_build/doctrees/dev/index.doctree        |   Bin 16506 -> 0 bytes
 docs/_build/doctrees/environment.pickle       |   Bin 33523 -> 0 bytes
 docs/_build/doctrees/index.doctree            |   Bin 16699 -> 0 bytes
 docs/_build/html/.buildinfo                   |     4 -
 docs/_build/html/_sources/api/aub.rst.txt     |    27 -
 .../html/_sources/api/dashboard.rst.txt       |   101 -
 docs/_build/html/_sources/dev/dev.rst.txt     |    55 -
 docs/_build/html/_sources/dev/doc.rst.txt     |    41 -
 docs/_build/html/_sources/dev/git.rst.txt     |   105 -
 docs/_build/html/_sources/dev/index.rst.txt   |    51 -
 docs/_build/html/_sources/index.rst.txt       |    26 -
 docs/_build/html/_static/_stemmer.js          |  2506 ----
 docs/_build/html/_static/alabaster.css        |   701 -
 docs/_build/html/_static/basic.css            |   764 --
 docs/_build/html/_static/custom.css           |     1 -
 docs/_build/html/_static/doctools.js          |   314 -
 .../html/_static/documentation_options.js     |    10 -
 docs/_build/html/_static/file.png             |   Bin 286 -> 0 bytes
 docs/_build/html/_static/jquery-3.4.1.js      | 10598 ----------------
 docs/_build/html/_static/jquery.js            |     2 -
 docs/_build/html/_static/language_data.js     |   118 -
 docs/_build/html/_static/minus.png            |   Bin 90 -> 0 bytes
 docs/_build/html/_static/plus.png             |   Bin 90 -> 0 bytes
 docs/_build/html/_static/pygments.css         |    77 -
 docs/_build/html/_static/searchtools.js       |   506 -
 docs/_build/html/_static/translations.js      |     1 -
 docs/_build/html/_static/underscore-1.3.1.js  |   999 --
 docs/_build/html/_static/underscore.js        |    31 -
 docs/_build/html/api/aub.html                 |   177 -
 docs/_build/html/api/dashboard.html           |   466 -
 docs/_build/html/dev/dev.html                 |   164 -
 docs/_build/html/dev/doc.html                 |   148 -
 docs/_build/html/dev/git.html                 |   228 -
 docs/_build/html/dev/index.html               |   155 -
 docs/_build/html/genindex.html                |   345 -
 docs/_build/html/index.html                   |   213 -
 docs/_build/html/objects.inv                  |   Bin 877 -> 0 bytes
 docs/_build/html/py-modindex.html             |   164 -
 docs/_build/html/search.html                  |   116 -
 docs/_build/html/searchindex.js               |     1 -
 docs/_build/latex/LICRcyr2utf8.xdy            |   101 -
 docs/_build/latex/LICRlatin2utf8.xdy          |   239 -
 docs/_build/latex/LatinRules.xdy              |   607 -
 docs/_build/latex/Makefile                    |    68 -
 docs/_build/latex/footnotehyper-sphinx.sty    |   269 -
 docs/_build/latex/latexmkjarc                 |    22 -
 docs/_build/latex/latexmkrc                   |     9 -
 docs/_build/latex/make.bat                    |    31 -
 docs/_build/latex/python.ist                  |    16 -
 docs/_build/latex/schoolapps.fdb_latexmk      |   168 -
 docs/_build/latex/schoolapps.fls              |   293 -
 docs/_build/latex/schoolapps.idx              |     7 -
 docs/_build/latex/schoolapps.ilg              |     7 -
 docs/_build/latex/schoolapps.ind              |    29 -
 docs/_build/latex/schoolapps.out              |    18 -
 docs/_build/latex/schoolapps.pdf              |   Bin 127726 -> 0 bytes
 docs/_build/latex/schoolapps.tex              |   425 -
 docs/_build/latex/schoolapps.toc              |    22 -
 docs/_build/latex/sphinx.sty                  |  1859 ---
 docs/_build/latex/sphinx.xdy                  |   228 -
 docs/_build/latex/sphinxcyrillic.sty          |    53 -
 docs/_build/latex/sphinxhighlight.sty         |   105 -
 docs/_build/latex/sphinxhowto.cls             |    91 -
 docs/_build/latex/sphinxmanual.cls            |   117 -
 docs/_build/latex/sphinxmessages.sty          |    21 -
 docs/_build/latex/sphinxmulticell.sty         |   317 -
 71 files changed, 24337 deletions(-)
 delete mode 100644 docs/_build/doctrees/api/aub.doctree
 delete mode 100644 docs/_build/doctrees/api/dashboard.doctree
 delete mode 100644 docs/_build/doctrees/dev/dev.doctree
 delete mode 100644 docs/_build/doctrees/dev/doc.doctree
 delete mode 100644 docs/_build/doctrees/dev/git.doctree
 delete mode 100644 docs/_build/doctrees/dev/index.doctree
 delete mode 100644 docs/_build/doctrees/environment.pickle
 delete mode 100644 docs/_build/doctrees/index.doctree
 delete mode 100644 docs/_build/html/.buildinfo
 delete mode 100644 docs/_build/html/_sources/api/aub.rst.txt
 delete mode 100644 docs/_build/html/_sources/api/dashboard.rst.txt
 delete mode 100644 docs/_build/html/_sources/dev/dev.rst.txt
 delete mode 100644 docs/_build/html/_sources/dev/doc.rst.txt
 delete mode 100644 docs/_build/html/_sources/dev/git.rst.txt
 delete mode 100644 docs/_build/html/_sources/dev/index.rst.txt
 delete mode 100644 docs/_build/html/_sources/index.rst.txt
 delete mode 100644 docs/_build/html/_static/_stemmer.js
 delete mode 100644 docs/_build/html/_static/alabaster.css
 delete mode 100644 docs/_build/html/_static/basic.css
 delete mode 100644 docs/_build/html/_static/custom.css
 delete mode 100644 docs/_build/html/_static/doctools.js
 delete mode 100644 docs/_build/html/_static/documentation_options.js
 delete mode 100644 docs/_build/html/_static/file.png
 delete mode 100644 docs/_build/html/_static/jquery-3.4.1.js
 delete mode 100644 docs/_build/html/_static/jquery.js
 delete mode 100644 docs/_build/html/_static/language_data.js
 delete mode 100644 docs/_build/html/_static/minus.png
 delete mode 100644 docs/_build/html/_static/plus.png
 delete mode 100644 docs/_build/html/_static/pygments.css
 delete mode 100644 docs/_build/html/_static/searchtools.js
 delete mode 100644 docs/_build/html/_static/translations.js
 delete mode 100644 docs/_build/html/_static/underscore-1.3.1.js
 delete mode 100644 docs/_build/html/_static/underscore.js
 delete mode 100644 docs/_build/html/api/aub.html
 delete mode 100644 docs/_build/html/api/dashboard.html
 delete mode 100644 docs/_build/html/dev/dev.html
 delete mode 100644 docs/_build/html/dev/doc.html
 delete mode 100644 docs/_build/html/dev/git.html
 delete mode 100644 docs/_build/html/dev/index.html
 delete mode 100644 docs/_build/html/genindex.html
 delete mode 100644 docs/_build/html/index.html
 delete mode 100644 docs/_build/html/objects.inv
 delete mode 100644 docs/_build/html/py-modindex.html
 delete mode 100644 docs/_build/html/search.html
 delete mode 100644 docs/_build/html/searchindex.js
 delete mode 100644 docs/_build/latex/LICRcyr2utf8.xdy
 delete mode 100644 docs/_build/latex/LICRlatin2utf8.xdy
 delete mode 100644 docs/_build/latex/LatinRules.xdy
 delete mode 100644 docs/_build/latex/Makefile
 delete mode 100644 docs/_build/latex/footnotehyper-sphinx.sty
 delete mode 100644 docs/_build/latex/latexmkjarc
 delete mode 100644 docs/_build/latex/latexmkrc
 delete mode 100644 docs/_build/latex/make.bat
 delete mode 100644 docs/_build/latex/python.ist
 delete mode 100644 docs/_build/latex/schoolapps.fdb_latexmk
 delete mode 100644 docs/_build/latex/schoolapps.fls
 delete mode 100644 docs/_build/latex/schoolapps.idx
 delete mode 100644 docs/_build/latex/schoolapps.ilg
 delete mode 100644 docs/_build/latex/schoolapps.ind
 delete mode 100644 docs/_build/latex/schoolapps.out
 delete mode 100644 docs/_build/latex/schoolapps.pdf
 delete mode 100644 docs/_build/latex/schoolapps.tex
 delete mode 100644 docs/_build/latex/schoolapps.toc
 delete mode 100644 docs/_build/latex/sphinx.sty
 delete mode 100644 docs/_build/latex/sphinx.xdy
 delete mode 100644 docs/_build/latex/sphinxcyrillic.sty
 delete mode 100644 docs/_build/latex/sphinxhighlight.sty
 delete mode 100644 docs/_build/latex/sphinxhowto.cls
 delete mode 100644 docs/_build/latex/sphinxmanual.cls
 delete mode 100644 docs/_build/latex/sphinxmessages.sty
 delete mode 100644 docs/_build/latex/sphinxmulticell.sty

diff --git a/docs/_build/doctrees/api/aub.doctree b/docs/_build/doctrees/api/aub.doctree
deleted file mode 100644
index a6569e738d12c9cf9ce06446a89d3c3057d98651..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 15233
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

diff --git a/docs/_build/doctrees/api/dashboard.doctree b/docs/_build/doctrees/api/dashboard.doctree
deleted file mode 100644
index 745da864cac80b9d02fc762a03f1874a2bfcb4ad..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 82272
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
EzXRbQRR910

diff --git a/docs/_build/doctrees/dev/dev.doctree b/docs/_build/doctrees/dev/dev.doctree
deleted file mode 100644
index ead9d37665966aa224a884c134401493b3abd28d..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 17385
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
UQLI@2Ns&-%nFb(hi)7IM18zsrX8-^I

diff --git a/docs/_build/doctrees/dev/doc.doctree b/docs/_build/doctrees/dev/doc.doctree
deleted file mode 100644
index 2bd13b50a57bf05bcfb6569ca842d57f54caa23a..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 5749
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
Y$e#kQlwe~xycr-F<#DU;$fV!-H_2~COaK4?

diff --git a/docs/_build/doctrees/dev/git.doctree b/docs/_build/doctrees/dev/git.doctree
deleted file mode 100644
index c7ba5db07234098a8ba2553a9f403631b3863c6f..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 30920
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
VN{hLk!IMz1ozl#ZONR$Y{}*yD)-(VB

diff --git a/docs/_build/doctrees/dev/index.doctree b/docs/_build/doctrees/dev/index.doctree
deleted file mode 100644
index e5e4bac5cdaa70a704ea56b1e80d93c9eead4a72..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 16506
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
A`v3p{

diff --git a/docs/_build/doctrees/environment.pickle b/docs/_build/doctrees/environment.pickle
deleted file mode 100644
index b54d4b86cbb3089b556b2b2aa4fe038d8add54e2..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 33523
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
AP5=M^

diff --git a/docs/_build/doctrees/index.doctree b/docs/_build/doctrees/index.doctree
deleted file mode 100644
index b0ac79d41e23150a885b883230c200f9eba97bb9..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 16699
zcmd^GYm6P&UH5w5Ywxb(bkk&QH-l5tYuCGLP=I=ywpgJ_Evrjar&MYiP3GP?chAhu
zow=EryAMH-TTyF`PFtZ&K!QSfltPgzgoFs7luAWHNQiGBKs@DEE#f1^JcJPZ{^!h@
z*PZ)Vr-?tX(%pOK%z6CZk8{rd*3>Ikt{szqV#y9#z1Z=hbw99Kl!!TM=rBJ{UQRB4
zGI=R!i22aki-KO*Vu?709xd*8cF6qX`J};*iP?y?Vkhvk0eqUz@LBb8I(A}@6<&$6
zKN9T71uPn5?Ba8?#e=}R*6l_Kjl-N%&#`@iU_|dvClW#|cv{SKEx;5f{1l(ylVT=?
zcuP!qj?a><Uegi_Rvd>;vljzX!fev9BVZwBTb>m~XvFVn-|DDeb9S$rKQyh@PRQES
zrzd7(Ynxsre2K5}6SN{fBi^~egAUu+V=;Gw4V&$5L=v+#3#e^?u+fI&+iZV5i~#4^
z8^?Q1;5yd|I^Ce>+XX5q0*d9R%N>7z-LmbJJ+pDpibGbUsOrnl0U`c4sP{eiJb}*z
zeBOc2s+g9m0!`2-bR=?(EwN~IoekTHcr&m<JGq@~iCJp0dQJ5}2;h@HY&&uO0Ce!c
z#7W0*c|Du89Z${7-^Z`<r}_K&vrNo&tbLnxW1ieN4k}w+DJWw0y3Z{y-b}>Qwih&$
zJ7R`AwhfWGBNo&7vW7Xo*J-kl*~yJ#VnNDN6!_i&`Yu2+^`!iRJ${jYA3wt{fwWU#
z%Nkf-B8yl~skgQlf+Z|WtRkgo{5x}Y(maqFaA+pB!flpogck5@a`DzqVD~(>*7IX0
zY6ZRzl~@Ncu|S0#U`B+_$sw)w@q9JGhYF7pBq>M5H8!xudiP+HWDBhIw~e4}6gv<Q
z>+K-ySh1;v9ORh*URShSXhrWss}J^~071jB9&}qgT3yg+e2~a-F&Ru3KC=}k7SX`T
zX~203nyW0&(E#GR;&K_&#zmvybPNehA5{R|<5j@>C{+jLmJ*9AVhRSc)u*%#5O#^)
zn2`e;5%<EPvWmA>Kuno(QCdD4ds2=ijVJq(^F}<>2d%P}D|K&j%Qyr2zM>42g1oE~
zMFkM^`yFpH>RM#!=ei+_Sh&j);?m2Q<#VZ-dov}K6!40emo%voWT{L_O^s@EnH0Y{
z9x3>*@h=kIU&`_3zpfd7T7m<A0}jP3^c<M;0;4i-BAuC*hOGPGt}D4CDg*sTRZCXn
zng;bXfcpF6bo{+OoLFYb`0d<c;b-bY#B|#sp9MRu3|%5lRizQ0Q_6C}XT)5)=XuIM
z{uWX3Gg$Gb72$I#DnW;_jEm8R)_IC7=80z8Fx9+BvnQXC<}5NSgD6iH?`d-1M$mL&
zb|WJW@Cr_~3BPX}$}Vc*xWB<UH@*c-zB!%<5#o0d6}*}1a$^GU{UgB#z4?Z=qT&bG
zzSZe^%m^9mk-ur2ziKsG_IU#uWTY0zxN2QCt~T*$8J2GwS8YwRtJTqWZ~c-SfA`ks
zN6e5D?j8X9&XEYm{}tX~vVae~f7@Z6ZB`Vn5N*o$1!2iwr9-PWWd1{1i#4`|mK=H*
zQFn3T*s)>i1%A6H&<9=T=<5uL`V9<$B&Vx41N)#4x&oh8G%wcHQkj;hs$d$1#B*S7
zEYE~Y2mW?prrdByn={CexZgVh2XTTz+%9W5ZKow;6!+~4B}0znD`MKXd+TK*Dbpr<
zyP#B2f}M2{#a57qdKX2ZV16pmlG347_uL4$iS}m{phWv#bLf=rjOscmySlUZ(yEdQ
zjC-=sCgwl<$FH?^wyh@OeacT(iY*zI7`p1-lv56Nu>~Rd5W40<;+`$6sGuka#_|Aj
z*4LgvBl=zeI-8c1xyq<eKoi~?1D}-egwK%(Kb%Js1Z!%{_!$N7&=LIa(Y@?t2KN^;
zcF?gLKM}{f2gr=zJK}>bg+1+_uhLnh!ieHztD68AG3y5^k-9_FIh2H?<Szw|f1)fz
znNO{cf+M6^xv$L}?SSmSyRYm3YYfj0sKYk%VN_yf;=zoqCPMnx8HSe=0!%w1AwUmA
z4K)dY`>P}bDqXqXoZw17euMJ@K!UvBiBfEXwptq10i5Orcgm8`;GfkE;)xn?utId%
zV7rKeqW66Kd7TTS`!9UD65ta++7OkK0{JF00n#A-2~lt?mDh13LVfq^*(mX5OCCl1
zzmbvabU(Q?>UFQmxc_B_#VB*9aYwjcz}@`|DSiaes~JSg6>dpz8vLtShbiiyfm9D=
zu)d91hXoQE7zFh0H)P+!?DLtJ=p_m*<#p~Id7Z)bQp1GYp_V}TNcXE)HZyGLlirK^
z>pT2!DyajgmGHlXtp1(*R|K$17u>Jmx02fe7ydyLSvkl?!9%_qfn3B4qCK{Vu%#LJ
z$Pf_6B8^2F!Hk$&zKm9FC+d3E0d1BzzJZ^<rsV6IBcr{$a-2Mu`!IctrFqKPo_W(%
zjj{#zR0?LV=^h8oD-<3hI2u2KZeXclf)6_A2>Jp+btYv!1<`f!(J^tNiA0mdgENA8
zibPF>&7DHD+!tQGjl{-4(0#KcK1d`XI+2R{8t#PxdBjL9e|7}2?vt2~b^&#S{j?k~
zD8kO(J~9BtO#Z~69$+@jQk2PDZL52IN+ws`A0B}QA@E+Bb=7^h?CQP`Uu7vOsOj64
z`661sU-~=B*3%tdQpYs@pwojgy=T-wt*ZJl!&*AK7e@fwNAr#xFo@>a+tnekW)O&B
zy+9tC?P#=jN1)S3`=RV~uMz;O?hlSJYZ}s%7LFOxpO;<7Fc;(JQePee&@|!x61t8w
z7x{k3qt~*nBWTlygFU@>q{VA+hn(Gm`+&%QNB|wd_^-OJj)85;7Q*&OY#A;WD$~jw
zfzD@!4x(hM)<+K><^Bu|o=msgm+4oYX}Pc9+5Kl=<^C*w4M?x<HvxDOM>i&Cmd!%b
z@ztI&qJvRMz&mP^fVz3=GZ)c)BNMiIIOJ*7kkn&s03pcvT{di_fNxY1^1owigN`#P
z3Hk4A)B~eto`^hBPdsff2EESAh4fELljB+iO$SOyayqz+G=b!Eo{+56@=pSGq_o7q
z+{2<X4HBg#XJy|)S~5lAqluv&%BZiup4kg2j^2P%;Q+Gb%1-1{M_y;J#nKp4(o@HT
ze5891vYID7>S?^B=M({)CO!X|Nqm9Rm87Q-O#R!lEH;#7L+q4UHu$z3W?1buPD5}2
z5;LpCSr~2T&1K4pI!;8#xBV~aM8Gn(9Rz36BrI$q1hzWz_one2XY!X}Me;j#IxO{_
zx+6*Brg6>lWG*H%t{9_=GwM@_4@jeYy#Tp7!ZG%om>U+R*ujPy9q<&e(?a(D6ZuT3
z+)qGmAeSGbuOkE+XWaiFA;X>;27fdiJWTCLHp$u7$!4wq)%0PMv+rT$T4$evM|&>!
z>+pX_CT%9|+?qk#lz!Z7d)9U|%I9C|^Z5g(8sPS$H_q)30cDiuS7~f5MI>Fmt2>Tj
zY>CwNm7M)yHcC7|8s`4~u_5GEXFx-GWLhe{{x4*x9c3FbCy4v=G(pAdPfNxrW0>zf
z7F%&tr}~tk`3fc*rtg|5<mSITW?yoUb@1l)!Tl7b${nP78qY!gA_0*)$WP<9vUUZc
z40ez|Ne+_i0QnGdOnPh3XdXzNAQ$+Nt>>=aG$g6C50ej@#WzMn-6OcTu&KS5oVVfl
z@nu{#@T1tm?!7@fjomQVb!=uUt-|KQg9alL0Qb*{eyi@EWn>&Bkwkc0VsL+oMkuH8
zr|IBfLZqEW9lvs+II7e57FMoz8VbDE<21g%C?1g+1tE^wNBN5jeg2|umI1E9f8$(5
zJrtw7#A9{C8fg5kx`+Q6TlTaiBKPoL*(mW~=$3nix73kIN2T>IGX<3X;N+AxVxzQA
zQ-HF-oC59%nxNtjCIMB|8{};(LjEqp@it5|Oo{dC<Ox>C>`R`Y4$@rd-S2>vxhGIh
z<9UK50wVPU|DFj%fgFQ9L3k4iP1c?>4;O!7&hc#Mv;K=RO)2qJy8<+BmW~Bz!<q)?
zj^J8)$4pI<uG2iwBJm)W&KT{!mt<wteTu%0lqTFG0xOGuH61)mShU5j<4ex`qgwor
zV&!^^ufT)F&nFjW?P6)c8cGY+@_W<yWs6EbS%OgNmr5g{G><zalZtTiUO8RaUnrk$
zH2AV^5YyM`e!u2?`jj(+DQ2{e#0*pzxG!WQBovR}JZuwboL(1ZMV^=xk6y$wB9->$
z3phZRw^m+IP-UCo?k>$qp)BqkcbRWPJIs9yDIApLeQ*ih@ns=J;iBuDo?9cFH)J?V
zi}xukRTZ9wn3Ai(GQ~D-;Nbrnt<H*fTfqYN7QwmdzEm?uv8$NDXevtJPoZLke#-kj
z?q@Mh%%VZw<Pnp!hP>v+_Pd_bLP^6N`FhU^{p3&%O|Scl936t=#|aKqUGOO2*&hK9
zNe?0?$uH_3kM6Gz(q5#Mq_U<p2&FSM%~;&Tt!M0S({M1>{R#ZgBI0JPpDeVZKqH+c
zV`0`%X5p(C)yG2jGiV)`fxlZb!#E85I;}A_1KlrB_Z+PX=N<zmerE(AMb1(GuZ-?L
zCg&EFN=D2ITf9#p?_!;PzGbZ?zRjpPG}rWFnP>k}19;;|Jo|Rd4CC<Z9>yJ&XBvkJ
z$5z3CZ;k+?$T8~wPow(}<XG-cs?JKxsM`jKn7Bkm5$ZrS*Klp5OFk*By~+X}U38P(
zttZ&4UIzAk7#L}38^1(jC&W^#7gFgPk``H{w<S*M7FGHt<{}nT^n?1ohhQRA!CxD9
zh;j8Ews+>oEU$;+t<1D9ZHf8x;#Cl$E^MB5_mSatx_CIDmcgA1e+Q2X>0>YS@U(~u
zE0ap)=q;9;rjj#Uusq!kg4hpm%P@a=V?r!a?I7yA%zfIuPSCPMd3M*teOD?%j4<UH
z)xta`TTI#<&T5&kVmctL-~;lw@Pi=C^l(JrQQg@B)tc!?T&83D4rmplG$+bir)}2k
zZDYA5as=cHF)y<^Xqk^gRKyV6@DEFl-|fXF^IK#%w-Yhni`#4OT0^l9sujyGO%{eh
zXyW3L?V;EV6;r^i6(?dj=*8t(rsXV&I9GX7nZkW$8j7`~=FMT4{>XFBti22CmtRx{
zi&KO{1VV9;$dgq*i@5%@-LtkCC~o8W>v8(`aL8IgXq%|qgM45asu|o8GuY;615HrG
zu}$2oYC8yZX2g=!ivu%n62~0~)uP?&bj?igKv>y;{Sp@XmPZpV%N9`AkBI$wQ#WEg
zJ1|j=gkGoMsDp^%>^2`MrKA;`yH4c9Qbd<c-0Pytt3V`$a#kw@za&lq8SMU`9t%gm
zm~=7iX6mv<vD9T<6F8yL&~Hh65fybIu2`C6TNpf!yV2&x#@^l@Zq>#-@YjQITh@7^
zXS9)s6&gV^(g+imjzDD`i=mc^b=NLjc@kt<3fry9GSreUb5<`Cqb4?5cUat(%ka44
zVTpO%kbw%=R8l!7&Ox9$W~N&i_@*l2x+5Nu&^SISxd?N}Ezt<&hX{eJz3dT+cPcvY
zV{6~!&Nlb(ftXHtRAnGeMjZ?K^kNU{8)4+b@>xBaUeK~s;iov);y5b8nNz6L3LGQ*
zV`B79uZu8?ij8IcW~%Ne_CyPv?d1A@nk)j6u5!Oq3?-m8RPq38afVvVI|9WLfwf~Y
zgn6EcdO4J<Q3>y%m}LGg)%%J$WeK2qkRrrN4&*w<6=y2ul(oJO6;nP)2&#Kuf~_jG
zQpJdD#%%5Efr3pc9!B?BYE-`)?(^_G?#J+t-{!aF<wy08P6Xv4q1*^n|0wm9*|2Ls
ztKD<>*Aw$J8-=Q}LRrqY#cv<VSq|k4hjR3x9C;{*ZuR)%sQy*!p5RUXJXZgl`+2%m
z@pJT#u4Kw<n+gOv%TyrHrmX^jl6DD#%r$yqu_#m$&qc(_Qhi8#RSPM;?xzS^Y*GDC
zQVr4SGy^Y_Q`z+`mBy_1d}+pcy{a5^x->s*co>t@SgFpHzCj=evy^pPQhWN~X9SC<
zCd{mlS!kx>v!&=Df(Gm6+&QMz?fE&Z%D%AA`<@SgZzu=!cW{r5gv>av%H{g%g3lXH
zWWXJwAS*RE_Il+Y`->zFl>+8s=%r$wRrgm$^b^ymBb*RZDg~OlzV*zHk~dP}0_SOo
zJgR~b)O<nC=l(LjbncKMn5B+KMHu=t2Etz(frv)<wGsXL5O)6nBQkVlO+gLDOq|GM
TL0XIjo4jD^Fen|vwfp}A`F?jm

diff --git a/docs/_build/html/.buildinfo b/docs/_build/html/.buildinfo
deleted file mode 100644
index cc9363ac5..000000000
--- a/docs/_build/html/.buildinfo
+++ /dev/null
@@ -1,4 +0,0 @@
-# Sphinx build info version 1
-# This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done.
-config: 32ad6cb8e26e956c14746f5b9b7d3500
-tags: 645f666f9bcd5a90fca523b33c5a78b7
diff --git a/docs/_build/html/_sources/api/aub.rst.txt b/docs/_build/html/_sources/api/aub.rst.txt
deleted file mode 100644
index 57cafef95..000000000
--- a/docs/_build/html/_sources/api/aub.rst.txt
+++ /dev/null
@@ -1,27 +0,0 @@
-AUB (Antrag auf Unterrichtbefreiung)
-====================================
-
-Stichworte
-----------
-
-Workflow
-^^^^^^^^
-
-1.  Lehrer füllt Antragsformular aus
-
-    - Beginn Datum (DateField)
-    - Beginn Stunde oder Uhrzeit (Int 1..9 / Time)
-    - Ende Datum (DateField)
-    - Ende Stunde oder Uhrzeit (Int 1..9 / Time)
-    - Beschreibung/Begründung (TextField)
-    - Antragsteller (Lehrerkürzel) wird automatisch aus angemeldetem Benutzer generiert
-
-2. Schulleiter erhält Anträge und a. bewilligt oder b. lehnt ab
-    a. Stellvertreter prüft Antrag und i. bewilligt oder ii. lehnt ab
-        i. Lehrkraft erhält Benachrichtigung über Bewilligung
-        ii. Lehrkraft erhält Benachrichtigung über Ablehnung
-    b. Lehrkraft erhält Benachrichtigung über Ablehnung
-
-
-.. automodule:: aub.models
-    :members:
\ No newline at end of file
diff --git a/docs/_build/html/_sources/api/dashboard.rst.txt b/docs/_build/html/_sources/api/dashboard.rst.txt
deleted file mode 100644
index 430ac6939..000000000
--- a/docs/_build/html/_sources/api/dashboard.rst.txt
+++ /dev/null
@@ -1,101 +0,0 @@
-App: Dashboard
-==============
-
-Das Dashboard dient dazu, den Benutzer zu begrüßen (Startseite)
-und seine letzten Aktivitäten anzuzeigen.
-
-Außerdem zeigt das Dashboard aktuelle Nachrichten für den Benutzer an.
-
-Aktivitäten
------------
-
-Definition einer Aktivität
-    Als Aktivität gilt alles, was der Nutzer selbst macht, d.h., aktiv.
-
-.. autoclass:: dashboard.models.Activity
-    :members:
-
-Benachrichtigungen
-------------------
-
-Definition einer Benachrichtigung
-    Eine Benachrichtigung für einen Nutzer wird erstellt, wenn eine Aktion, die diesen betrifft,
-    die er aber nicht selbst durchgeführt hat, passiert ist, um den Nutzer zu informieren.
-
-.. autoclass:: dashboard.models.Notification
-    :members:
-
-Hinweis zum Erstellen von absoluten URLs auf der Basis relativer URLs
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-Dies wird durch übergabe eines dynamischen Linkes (z. B. /aub/1) an die Methode :func:`request.build_absolute_uri()` [1]_ erreicht.
-
-Um einen dynamischen Link durch den Namen einer Django-URL zu "errechnen", dient die Funktion :func:`reverse()` [2]_.
-
-.. seealso::
-    .. [1] https://docs.djangoproject.com/en/2.1/ref/request-response/#django.http.HttpRequest.build_absolute_uri
-    .. [2] https://docs.djangoproject.com/en/2.1/ref/urlresolvers/#reverse
-
-
-Caches
-------
-
-SchoolApps benutzt eine angepasste Version des Django-Cache-Systems, welches dabei um eine Verwaltungsfunktion für verschiedene Caches ergänzt wurde.
-
-Sitecache
-    Ein Seitencache basiert auf dem Django-Decorator :func:`@cache_page`  und cacht die HTML-Ausgabe des entsprechenden Views.
-
-Variablencache
-    Ein Variablencache nutzt die Low-Level-Cache-API von Django und speichert den Inhalt einer Variable.
-
-Verwaltung
-^^^^^^^^^^
-
-Jedes gecachte Objekt (ob Sitecache oder Variablencache) benötigt ein Cache-Objekt in der DB. Bei Cacheinhalten für die nur eine Variable gespeichert werden muss oder ein View, wird die Datei `caches.py` verwendet, wo der Cache als Konstante gespeichert ist:
-
-
-.. code-block::
-
-    <EXAMPLE_CACHE>, _ = Cache.objects.get_or_create(id="<example_cache>",
-                                                     defaults={
-                                                         "site_cache": <True/False>,
-                                                         "name": "<Readable name>",
-                                                         "expiration_time": <10>}) # in seconds
-
-Verwendung
-^^^^^^^^^^
-
-Variablencache
-..............
-
-
-Für Variablencaches kann mit der Funktion :func:`get()` eines Cache-Objektes der aktuelle Inhalt des Caches abgefragt werden.
-Bei abgelaufenen Caches wird ``False`` zurückgeben, dann ist der Wert neu zu berechnen
-und mit :func:`update()` zu aktualisieren, wobei die Aktualisierungszeit automatisch zurückgesetzt wird.
-
-
-Sitecache
-.........
-
-Für einen Sitecache kann folgender Decorator zum entsprechenden View hinzugefügt werden:
-
-.. code-block::
-
-    @cache_page(<EXAMPLE_CACHE>.expiration_time)
-
-Hintergrundaktualisierung
-^^^^^^^^^^^^^^^^^^^^^^^^^
-
-API
-^^^
-.. autoclass:: dashboard.models.Cache
-    :members:
-
-Verschiedene Caches
-^^^^^^^^^^^^^^^^^^^
-
-.. automodule:: dashboard.caches
-    :members:
-
-.. seealso::
-    - https://docs.djangoproject.com/en/2.2/topics/cache/
\ No newline at end of file
diff --git a/docs/_build/html/_sources/dev/dev.rst.txt b/docs/_build/html/_sources/dev/dev.rst.txt
deleted file mode 100644
index 29c9e88d9..000000000
--- a/docs/_build/html/_sources/dev/dev.rst.txt
+++ /dev/null
@@ -1,55 +0,0 @@
-Development Guide
-=================
-
-Diese Anleitung soll für einen einheitliches Development und einheitlichen Code in SchoolApps sorgen.
-
-Versionsverwaltung – Einsatz von Git
-------------------------------------
-
-Es wird mit **Git** gearbeitet. Die Verwendung ist Pflicht, die Regelungen im Git-Management Guide sind zu beachten. Alle Veränderungen sollten nach Beendigung der Arbeit an SchoolApps direkt im entsprechenden Featurebranch committed und gepusht werden, auch wenn sie noch nicht fertig oder lauffähig sind, um Datenverlust vorzubeugen (hierbei unbedingt den Bereich Branches im Git-Management Guide beachten).
-
-Codestyle
----------
-
-Grundsätzlich wird **auf englisch gecodet**: Englische Variablen, englische Kommentare und englische Commits. Die Oberfläche wird natürlich auf deutsch lokalisiert. Lediglich Issues auf GitHub und die Dokumentation werden auf deutsch verfasst.
-
-Weiterhin gilt es, die **PEP-8-Richtlinien** der Python Foundation einzuhalten, sie sorgen für einen sauberen, einheitlichen und übersichtlichen Stil.
-
-**Tipp:** Viele Editoren können die Pythonskripte auch automatisch nach PEP8 formatieren – meistens klappt das sehr gut (siehe auch „Editoren/IDEs“).
-
-Editoren/IDEs
--------------
-
-Natürlich kann man auch im Texteditor des jeweiligen Betriebssystemes oder in der IDLE von Python programmieren.
-Allerdings empfiehlt es sich gerade bei so großen (Django-)Projekten wie SchoolApps einen vernünftigen **Editor** oder eine **IDE** (Integrated Development Environment) zu benutzen.
-Folgende Software ist sehr empfehlenswert:
-
-    Atom
-        Ein Opensource-Editor von GitHub. Einfache Bedienung, gute Syntaxhervorhebung, mit Plugins auch Autovervollständigung und Codeformatierung
-    Visual Code
-        Ein Opensource-Projekt von Microsoft. Sehr ähnlich zu Atom.
-    PyCharm Community/Professional Edition
-        Kommerzielles Programm, gibt es in einer OpenSource-Version (Community) sowie einer Bezahlversion (Professional). Alle Funktionen von VisualCode und Atom enthalten, zudem wird in der Professional Edition Django von Haus aus unterstützt. TIPP: Die Professional Edition gibt es für den Bildungsbereich kostenlos.
-
-Dokumentation
--------------
-
-    „It was hard to write, it should be hard to read.“
-
-Alle Programmierer hassen es – dennoch ist **Kommentieren** die beste Dokumentationsmöglichkeit, damit andere Leute den eigenen Quellcode lesen können.
-
-Alle Funktionen (Klassen, etc.) sollten mit Docstrings versehen sein.
-Docstrings werden nach dem folgenden Schema aufgebaut: https://sphinx-rtd-tutorial.readthedocs.io/en/latest/docstrings.html
-
-Jede App, die sich in ihrer Funktion bzw. Funktionsweise nicht selbst erklärt, sollte einen Eintrag in der Dokumentation besitzen,
-die den Programmierer über Sinn und Zweck aufklärt. Dies gilt insbesondere, wenn diese App auch Funktionen für andere Apps bereitstellt.
-Diese sollten in der Dokumentation gesondert erwähnt und sauber dokumentiert werden. Weitere Informationen zur Dokumentation gibt es unter :doc:`doc`.
-
-In der **Install.md** (im Wurzelverzeichnis) sollten alle Schritte zur Installation dokumentiert werden.
-Insbesondere gilt das, wenn man eine neue Bibliothek für eine bestimmte Funktionalität benötigt. Diese muss sofort aufgeführt werden, damit andere Entwickler den Code ohne großes Basteln zum Laufen bekommen.
-
-Problem, Bug, Idee? – Issues verwenden!
----------------------------------------
-
-
-Hier sei nochmal auf den Bereich „Issues“ im :doc:`git` hingewiesen – unbedingt beachten!
\ No newline at end of file
diff --git a/docs/_build/html/_sources/dev/doc.rst.txt b/docs/_build/html/_sources/dev/doc.rst.txt
deleted file mode 100644
index 7d03280c1..000000000
--- a/docs/_build/html/_sources/dev/doc.rst.txt
+++ /dev/null
@@ -1,41 +0,0 @@
-Dokumentation
-=============
-
-Zur Dokumentation wird das Tool sphinx eingesetzt. Die gesamte Dokumentation liegt im Unterordner ``docs``.
-
-- Formatierung in reStructuredText
-- Erstellen der HTML-Ausgabe
-    ``make html``, Ergebnis in ``docs/_build/html``
-
-
-Docstrings
-----------
-
-Struktur bei Funktionen
-
-.. code-block::
-
-    """ [Summary]
-
-    :param [ParamName]: [ParamDescription], defaults to [DefaultParamVal]
-    :type [ParamName]: [ParamType](, optional)
-    ...
-    :raises [ErrorType]: [ErrorDescription]
-    ...
-    :return: [ReturnDescription]
-    :rtype: [ReturnType]
-    """
-
-Struktur bei Klassen
-
-.. code-block::
-
-    """ [Summary]
-
-    """
-
-Struktur bei Variablen
-
-.. code-block::
-
-    #: [Summary]
\ No newline at end of file
diff --git a/docs/_build/html/_sources/dev/git.rst.txt b/docs/_build/html/_sources/dev/git.rst.txt
deleted file mode 100644
index d2e5735b8..000000000
--- a/docs/_build/html/_sources/dev/git.rst.txt
+++ /dev/null
@@ -1,105 +0,0 @@
-Git Management Guide
-====================
-
-Diese Anleitung soll bei der Benutzung von Git im Projekt SchoolApps helfen.
-
-Hinweis
--------
-
-Hilfe und Informationen zu Git allgemein gibt es u. a. bei dieser Anleitung:
-
-    https://rogerdudler.github.io/git-guide/index.de.html
-
-Git-Hosting von SchoolApps
---------------------------
-
-Die aktuelle Version von SchoolApps ist auf GitHub in der Organisation Katharineum gehosted:
-
-    https://github.com/Katharineum/school-apps
-
-Das Cloning sowie Pullen und Pushen kann wahlweise mittels SSH oder HTTPS erfolgen (genaueres in der obigen Anleitung).
-
-.. note::
-    Der Zugriff auf das Repository wird von Herrn Poetzsch-Heffter (@poetzsch, p-h@katharineum.de) geregelt.
-
-Clonen und Ersteinrichtung
---------------------------
-
-Clonen:
-    ``git clone https://github.com/Katharineum/school-apps``
-
-    oder ``git clone git@github.com:Katharineum/school-apps.git``
-
-Um sich eine Entwicklungsumgebung für SchoolApps einzurichten, wird die Anleitung auf
-
-    https://github.com/Katharineum/school-apps/blob/dev/README.md
-
-unter dem Reiter Installation empfohlen.
-
-Was gibt es zu tun? – Issues
-----------------------------
-
-Issues anlegen
-^^^^^^^^^^^^^^
-Wenn einem in der SchoolApps etwas auffällt was getan werden sollte (Bug, Rechtschreibfehler, Zusätzliche Funktionen, etc.), dann muss ein Issue auf GitHub erstellt werden. Dies gilt auch, wenn man sich sicher ist, das Problem lösen zu können.
-
-Wichtig beim Erstellen eines Issues:
-""""""""""""""""""""""""""""""""""""
-
-* Aussagekräftigen Titel verwenden (deutsch)
-* Problem detailliert beschreiben, falls vorhanden, Lösungsmöglichkeit(en) nennen (deutsch)
-* **Assignees (Zuständigkeit)** → Wenn man das Problem selbst lösen will bzw. sich darum kümmern will, empfiehlt es sich, sich selbst einzutragen. Damit ist man auch für die Lösung verantwortlich. Wenn man weiß, dass dieses Problem genau von einer bestimmten Person gelöst werden kann bzw. diese dafür zuständig ist, wird diese eingetragen. Es können auch mehrere Personen eingetragen werden.
-* **Labels (Kategorisierung)**  →  Es gibt zwei Arten von Labels:
-
-  * **Bereichslabel** → Hier wird der Teil der Software genannt, der von dem Issue betroffen ist (im Regelfall eine Django-App, manchmal auch *whole project*)
-  * **Kategorisierungslabel** → Hier wird die Art des Issue festgelegt.
-
-    * *bug* → Ein eindeutiger Fehler. (Sicherheits-/ Funktionsbeinträchtigend)
-    * *beauty mistake* → Schönheitsfehler. (Meist Designtechnisch)
-    * *refactoring* → Code(-style) verbessern, umprogrammieren.
-    * *it works but it is wrong* → Unsauber gelöste Probleme, fehlende Komponenten.
-    * *new feature* → Neue Funktionen.
-    * *discussion* → Zu diskussieren. Diese Issues *sollen nicht* umgesetzt werden, bis dieses Label entfernt wurde.
-
-  Es können auch mehrere Bereichs- bzw. Kategorisierungslabel gleichzeitig verwendet werden.
-
-* **Projects** → Die passende Zuordnung eines GitHub-Projekts für das Kanbansystem.
-* **Milestones** → Die Version der Software, zu der dieses Problem gelöst werden muss.
-
-Issues bearbeiten/lösen
-^^^^^^^^^^^^^^^^^^^^^^^
-
-In der Issue-Liste auf GitHub kann jeder sehen, was es aktuell zu tun gibt.
-Vorzugsweise kümmert man sich um Issues auf dem eigenen Spezial- bzw. Aufgabengebiet. Wenn einem Issue bereits jemand zugeteilt ist, ist unbedingt Rücksprache zur betreffenden Person zu halten (Assignees).
-Das eigentliche Lösen (im Regelfall Programmieren) erfolgt als feature-Branch  (siehe unten).
-
-Am Code arbeiten – Die Branches
--------------------------------
-
-Der Hauptbranch ist der **dev**. In ihm ist immer die aktuelle Entwicklung von SchoolApps gespeichert. Er wird bei jeder stabilen Version im **server-Branch** veröffentlicht. Dieser stellt den aktuellen Stand auf dem Server da.
-
-In keinem dieser Branches wird aktiv commited (Ausnahmen bestätigen die Regel), sie werden nur über **Pull Requests** „gefüttert“.
-
-Alle Arbeiten am Code werden in vom dev-Branch abgezweigten Arbeits-Branches durchgeführt. Ein Branch entspricht dabei einer Funktion bzw. einem Issue. Wenn jemand gleichzeitig an mehreren, nicht zusammenhängend Issues arbeitet, wechselt dieser auch die Branches.
-
-Die **Namenskonvention** für diesen Arbeits-Branch ist wie folgt:
-
-* Ist die Änderung, die programmiert wird, ein neues Feature, so wird der Branch so benannt:
-    ``feature/<der-name-des-feature-auf-englisch>`` (Bindestriche, kleingeschrieben)
-* Ist die Änderung, die programmiert wird, ein Bugfix, so wird der Branch so benannt:
-    ``bugfix/<beschreibung-des-bugs-auf-englisch>`` (Bindestriche, kleingeschrieben)
-* Ist die Änderung, die programmiert wird, ein Code-Refactoring, so wird der Branch so benannt:
-    ``refactor/<der-name-des-feature-auf-englisch>`` (Bindestriche, kleingeschrieben)
-
-Am Code arbeiten – Committen
-----------------------------
-Nochmal zur Erinnerung: Es wird nur in feature-Branches direkt committed.
-Die Commits erfolgen im Gegensatz zu Issues auf **englisch**, bei Bezug zu einem Issue wird das **Issue mit Hashtag** genannt.
-
-Beispiel: ``Solve LDAP connection problems (issue #10)``
-
-Am Code arbeiten – Mergen/Pull Requests
----------------------------------------
-
-Ist man der Meinung, dass die Arbeiten am feature-Branch abgeschlossen sind, stellt man auf GitHub ein **Pull Request** und lässt die Arbeiten vom Rest des Entwicklerteams absegnen.
-Dies ist unbedingt zu befolgen.
\ No newline at end of file
diff --git a/docs/_build/html/_sources/dev/index.rst.txt b/docs/_build/html/_sources/dev/index.rst.txt
deleted file mode 100644
index 002e49b08..000000000
--- a/docs/_build/html/_sources/dev/index.rst.txt
+++ /dev/null
@@ -1,51 +0,0 @@
-Development Guide
-=================
-
-Diese Anleitung soll für einen einheitliches Development und einheitlichen Code in SchoolApps sorgen.
-
-Versionsverwaltung – Einsatz von Git
-------------------------------------
-
-Es wird mit **Git** gearbeitet. Die Verwendung ist Pflicht, die Regelungen im Git-Management Guide sind zu beachten. Alle Veränderungen sollten nach Beendigung der Arbeit an SchoolApps direkt im entsprechenden Featurebranch committed und gepusht werden, auch wenn sie noch nicht fertig oder lauffähig sind, um Datenverlust vorzubeugen (hierbei unbedingt den Bereich Branches im Git-Management Guide beachten).
-
-Codestyle
----------
-
-Grundsätzlich wird **auf englisch gecodet**: Englische Variablen, englische Kommentare und englische Commits. Die Oberfläche wird natürlich auf deutsch lokalisiert. Lediglich Issues auf GitHub und die Dokumentation werden auf deutsch verfasst.
-
-Weiterhin gilt es, die **PEP-8-Richtlinien** der Python Foundation einzuhalten, sie sorgen für einen sauberen, einheitlichen und übersichtlichen Stil.
-
-**Tipp:** Viele Editoren können die Pythonskripte auch automatisch nach PEP8 formatieren – meistens klappt das sehr gut (siehe auch „Editoren/IDEs“).
-
-Editoren/IDEs
--------------
-
-Natürlich kann man auch im Texteditor des jeweiligen Betriebssystemes oder in der IDLE von Python programmieren.
-Allerdings empfiehlt es sich gerade bei so großen (Django-)Projekten wie SchoolApps einen vernünftigen **Editor** oder eine **IDE** (Integrated Development Environment) zu benutzen.
-Folgende Software ist sehr empfehlenswert:
-
-    Atom
-        Ein Opensource-Editor von GitHub. Einfache Bedienung, gute Syntaxhervorhebung, mit Plugins auch Autovervollständigung und Codeformatierung
-    Visual Code
-        Ein Opensource-Projekt von Microsoft. Sehr ähnlich zu Atom.
-    PyCharm Community/Professional Edition
-        Kommerzielles Programm, gibt es in einer OpenSource-Version (Community) sowie einer Bezahlversion (Professional). Alle Funktionen von VisualCode und Atom enthalten, zudem wird in der Professional Edition Django von Haus aus unterstützt. TIPP: Die Professional Edition gibt es für den Bildungsbereich kostenlos.
-
-Dokumentation
--------------
-
-    „It was hard to write, it should be hard to read.“
-
-Alle Programmierer hassen es – dennoch ist **Kommentieren** die beste Dokumentationsmöglichkeit, damit andere Leute den eigenen Quellcode lesen können.
-
-Alle Funktionen (Klassen, etc.) sollten mit Docstrings versehen sein. Docstrings werden nach dem folgenden Schema aufgebaut: https://sphinx-rtd-tutorial.readthedocs.io/en/latest/docstrings.html
-
-Jede App, die sich in ihrer Funktion bzw. Funktionsweise nicht selbst erklärt, sollte eine **README** besitzen, die den Programmierer über Sinn und Zweck aufklärt. Dies gilt insbesondere, wenn diese App auch Funktionen für andere Apps bereitstellt. Diese sollten in der README gesondert erwähnt und sauber dokumentiert werden.
-
-In der **Install.md** (im Wurzelverzeichnis) sollten alle Schritte zur Installation dokumentiert werden. Insbesondere gilt das, wenn man eine neue Bibliothek für eine bestimmte Funktionalität benötigt. Diese muss sofort aufgeführt werden, damit andere Entwickler den Code ohne großes Basteln zum Laufen bekommen.
-
-Problem, Bug, Idee? – Issues verwenden!
----------------------------------------
-
-
-Hier sei nochmal auf den Bereich „Issues“ im Git-Management Guide hingewiesen – unbedingt beachten!
\ No newline at end of file
diff --git a/docs/_build/html/_sources/index.rst.txt b/docs/_build/html/_sources/index.rst.txt
deleted file mode 100644
index b5292efad..000000000
--- a/docs/_build/html/_sources/index.rst.txt
+++ /dev/null
@@ -1,26 +0,0 @@
-Dokumentation von SchoolApps
-======================================
-
-.. toctree::
-   :maxdepth: 2
-   :caption: Inhalt:
-
-   api/dashboard
-   api/aub
-
-   dev/dev
-   dev/git
-   dev/doc
-
-.. automodule:: untisconnect.api
-   :members:
-
-.. automodule:: untisconnect.sub
-   :members:
-
-Index
-==================
-
-* :ref:`genindex`
-* :ref:`modindex`
-* :ref:`search`
diff --git a/docs/_build/html/_static/_stemmer.js b/docs/_build/html/_static/_stemmer.js
deleted file mode 100644
index 4f1dc1cf3..000000000
--- a/docs/_build/html/_static/_stemmer.js
+++ /dev/null
@@ -1,2506 +0,0 @@
-// generatedy by JSX compiler 0.9.89 (2014-05-20 06:01:03 +0900; 8e8c6105f36f3dfe440ea026a3c93a3444977102)
-var JSX = {};
-(function (JSX) {
-/**
- * extends the class
- */
-function $__jsx_extend(derivations, base) {
-	var ctor = function () {};
-	ctor.prototype = base.prototype;
-	var proto = new ctor();
-	for (var i in derivations) {
-		derivations[i].prototype = proto;
-	}
-}
-
-/**
- * copies the implementations from source interface to target
- */
-function $__jsx_merge_interface(target, source) {
-	for (var k in source.prototype)
-		if (source.prototype.hasOwnProperty(k))
-			target.prototype[k] = source.prototype[k];
-}
-
-/**
- * defers the initialization of the property
- */
-function $__jsx_lazy_init(obj, prop, func) {
-	function reset(obj, prop, value) {
-		delete obj[prop];
-		obj[prop] = value;
-		return value;
-	}
-
-	Object.defineProperty(obj, prop, {
-		get: function () {
-			return reset(obj, prop, func());
-		},
-		set: function (v) {
-			reset(obj, prop, v);
-		},
-		enumerable: true,
-		configurable: true
-	});
-}
-
-var $__jsx_imul = Math.imul;
-if (typeof $__jsx_imul === "undefined") {
-	$__jsx_imul = function (a, b) {
-		var ah  = (a >>> 16) & 0xffff;
-		var al = a & 0xffff;
-		var bh  = (b >>> 16) & 0xffff;
-		var bl = b & 0xffff;
-		return ((al * bl) + (((ah * bl + al * bh) << 16) >>> 0)|0);
-	};
-}
-
-/**
- * fused int-ops with side-effects
- */
-function $__jsx_ipadd(o, p, r) {
-	return o[p] = (o[p] + r) | 0;
-}
-function $__jsx_ipsub(o, p, r) {
-	return o[p] = (o[p] - r) | 0;
-}
-function $__jsx_ipmul(o, p, r) {
-	return o[p] = $__jsx_imul(o[p], r);
-}
-function $__jsx_ipdiv(o, p, r) {
-	return o[p] = (o[p] / r) | 0;
-}
-function $__jsx_ipmod(o, p, r) {
-	return o[p] = (o[p] % r) | 0;
-}
-function $__jsx_ippostinc(o, p) {
-	var v = o[p];
-	o[p] = (v + 1) | 0;
-	return v;
-}
-function $__jsx_ippostdec(o, p) {
-	var v = o[p];
-	o[p] = (v - 1) | 0;
-	return v;
-}
-
-/**
- * non-inlined version of Array#each
- */
-function $__jsx_forEach(o, f) {
-	var l = o.length;
-	for (var i = 0; i < l; ++i)
-		f(o[i]);
-}
-
-/*
- * global functions, renamed to avoid conflict with local variable names
- */
-var $__jsx_parseInt = parseInt;
-var $__jsx_parseFloat = parseFloat;
-function $__jsx_isNaN(n) { return n !== n; }
-var $__jsx_isFinite = isFinite;
-
-var $__jsx_encodeURIComponent = encodeURIComponent;
-var $__jsx_decodeURIComponent = decodeURIComponent;
-var $__jsx_encodeURI = encodeURI;
-var $__jsx_decodeURI = decodeURI;
-
-var $__jsx_ObjectToString = Object.prototype.toString;
-var $__jsx_ObjectHasOwnProperty = Object.prototype.hasOwnProperty;
-
-/*
- * profiler object, initialized afterwards
- */
-function $__jsx_profiler() {
-}
-
-/*
- * public interface to JSX code
- */
-JSX.require = function (path) {
-	var m = $__jsx_classMap[path];
-	return m !== undefined ? m : null;
-};
-
-JSX.profilerIsRunning = function () {
-	return $__jsx_profiler.getResults != null;
-};
-
-JSX.getProfileResults = function () {
-	return ($__jsx_profiler.getResults || function () { return {}; })();
-};
-
-JSX.postProfileResults = function (url, cb) {
-	if ($__jsx_profiler.postResults == null)
-		throw new Error("profiler has not been turned on");
-	return $__jsx_profiler.postResults(url, cb);
-};
-
-JSX.resetProfileResults = function () {
-	if ($__jsx_profiler.resetResults == null)
-		throw new Error("profiler has not been turned on");
-	return $__jsx_profiler.resetResults();
-};
-JSX.DEBUG = false;
-var GeneratorFunction$0 = 
-(function () {
-  try {
-    return Function('import {GeneratorFunction} from "std:iteration"; return GeneratorFunction')();
-  } catch (e) {
-    return function GeneratorFunction () {};
-  }
-})();
-var __jsx_generator_object$0 = 
-(function () {
-  function __jsx_generator_object() {
-  	this.__next = 0;
-  	this.__loop = null;
-	this.__seed = null;
-  	this.__value = undefined;
-  	this.__status = 0;	// SUSPENDED: 0, ACTIVE: 1, DEAD: 2
-  }
-
-  __jsx_generator_object.prototype.next = function (seed) {
-  	switch (this.__status) {
-  	case 0:
-  		this.__status = 1;
-  		this.__seed = seed;
-
-  		// go next!
-  		this.__loop(this.__next);
-
-  		var done = false;
-  		if (this.__next != -1) {
-  			this.__status = 0;
-  		} else {
-  			this.__status = 2;
-  			done = true;
-  		}
-  		return { value: this.__value, done: done };
-  	case 1:
-  		throw new Error("Generator is already running");
-  	case 2:
-  		throw new Error("Generator is already finished");
-  	default:
-  		throw new Error("Unexpected generator internal state");
-  	}
-  };
-
-  return __jsx_generator_object;
-}());
-function Among(s, substring_i, result) {
-	this.s_size = s.length;
-	this.s = s;
-	this.substring_i = substring_i;
-	this.result = result;
-	this.method = null;
-	this.instance = null;
-};
-
-function Among$0(s, substring_i, result, method, instance) {
-	this.s_size = s.length;
-	this.s = s;
-	this.substring_i = substring_i;
-	this.result = result;
-	this.method = method;
-	this.instance = instance;
-};
-
-$__jsx_extend([Among, Among$0], Object);
-function Stemmer() {
-};
-
-$__jsx_extend([Stemmer], Object);
-function BaseStemmer() {
-	var current$0;
-	var cursor$0;
-	var limit$0;
-	this.cache = ({  });
-	current$0 = this.current = "";
-	cursor$0 = this.cursor = 0;
-	limit$0 = this.limit = current$0.length;
-	this.limit_backward = 0;
-	this.bra = cursor$0;
-	this.ket = limit$0;
-};
-
-$__jsx_extend([BaseStemmer], Stemmer);
-BaseStemmer.prototype.setCurrent$S = function (value) {
-	var current$0;
-	var cursor$0;
-	var limit$0;
-	current$0 = this.current = value;
-	cursor$0 = this.cursor = 0;
-	limit$0 = this.limit = current$0.length;
-	this.limit_backward = 0;
-	this.bra = cursor$0;
-	this.ket = limit$0;
-};
-
-
-function BaseStemmer$setCurrent$LBaseStemmer$S($this, value) {
-	var current$0;
-	var cursor$0;
-	var limit$0;
-	current$0 = $this.current = value;
-	cursor$0 = $this.cursor = 0;
-	limit$0 = $this.limit = current$0.length;
-	$this.limit_backward = 0;
-	$this.bra = cursor$0;
-	$this.ket = limit$0;
-};
-
-BaseStemmer.setCurrent$LBaseStemmer$S = BaseStemmer$setCurrent$LBaseStemmer$S;
-
-BaseStemmer.prototype.getCurrent$ = function () {
-	return this.current;
-};
-
-
-function BaseStemmer$getCurrent$LBaseStemmer$($this) {
-	return $this.current;
-};
-
-BaseStemmer.getCurrent$LBaseStemmer$ = BaseStemmer$getCurrent$LBaseStemmer$;
-
-BaseStemmer.prototype.copy_from$LBaseStemmer$ = function (other) {
-	this.current = other.current;
-	this.cursor = other.cursor;
-	this.limit = other.limit;
-	this.limit_backward = other.limit_backward;
-	this.bra = other.bra;
-	this.ket = other.ket;
-};
-
-
-function BaseStemmer$copy_from$LBaseStemmer$LBaseStemmer$($this, other) {
-	$this.current = other.current;
-	$this.cursor = other.cursor;
-	$this.limit = other.limit;
-	$this.limit_backward = other.limit_backward;
-	$this.bra = other.bra;
-	$this.ket = other.ket;
-};
-
-BaseStemmer.copy_from$LBaseStemmer$LBaseStemmer$ = BaseStemmer$copy_from$LBaseStemmer$LBaseStemmer$;
-
-BaseStemmer.prototype.in_grouping$AIII = function (s, min, max) {
-	var ch;
-	var $__jsx_postinc_t;
-	if (this.cursor >= this.limit) {
-		return false;
-	}
-	ch = this.current.charCodeAt(this.cursor);
-	if (ch > max || ch < min) {
-		return false;
-	}
-	ch -= min;
-	if ((s[ch >>> 3] & 0x1 << (ch & 0x7)) === 0) {
-		return false;
-	}
-	($__jsx_postinc_t = this.cursor, this.cursor = ($__jsx_postinc_t + 1) | 0, $__jsx_postinc_t);
-	return true;
-};
-
-
-function BaseStemmer$in_grouping$LBaseStemmer$AIII($this, s, min, max) {
-	var ch;
-	var $__jsx_postinc_t;
-	if ($this.cursor >= $this.limit) {
-		return false;
-	}
-	ch = $this.current.charCodeAt($this.cursor);
-	if (ch > max || ch < min) {
-		return false;
-	}
-	ch -= min;
-	if ((s[ch >>> 3] & 0x1 << (ch & 0x7)) === 0) {
-		return false;
-	}
-	($__jsx_postinc_t = $this.cursor, $this.cursor = ($__jsx_postinc_t + 1) | 0, $__jsx_postinc_t);
-	return true;
-};
-
-BaseStemmer.in_grouping$LBaseStemmer$AIII = BaseStemmer$in_grouping$LBaseStemmer$AIII;
-
-BaseStemmer.prototype.in_grouping_b$AIII = function (s, min, max) {
-	var ch;
-	var $__jsx_postinc_t;
-	if (this.cursor <= this.limit_backward) {
-		return false;
-	}
-	ch = this.current.charCodeAt(this.cursor - 1);
-	if (ch > max || ch < min) {
-		return false;
-	}
-	ch -= min;
-	if ((s[ch >>> 3] & 0x1 << (ch & 0x7)) === 0) {
-		return false;
-	}
-	($__jsx_postinc_t = this.cursor, this.cursor = ($__jsx_postinc_t - 1) | 0, $__jsx_postinc_t);
-	return true;
-};
-
-
-function BaseStemmer$in_grouping_b$LBaseStemmer$AIII($this, s, min, max) {
-	var ch;
-	var $__jsx_postinc_t;
-	if ($this.cursor <= $this.limit_backward) {
-		return false;
-	}
-	ch = $this.current.charCodeAt($this.cursor - 1);
-	if (ch > max || ch < min) {
-		return false;
-	}
-	ch -= min;
-	if ((s[ch >>> 3] & 0x1 << (ch & 0x7)) === 0) {
-		return false;
-	}
-	($__jsx_postinc_t = $this.cursor, $this.cursor = ($__jsx_postinc_t - 1) | 0, $__jsx_postinc_t);
-	return true;
-};
-
-BaseStemmer.in_grouping_b$LBaseStemmer$AIII = BaseStemmer$in_grouping_b$LBaseStemmer$AIII;
-
-BaseStemmer.prototype.out_grouping$AIII = function (s, min, max) {
-	var ch;
-	var $__jsx_postinc_t;
-	if (this.cursor >= this.limit) {
-		return false;
-	}
-	ch = this.current.charCodeAt(this.cursor);
-	if (ch > max || ch < min) {
-		($__jsx_postinc_t = this.cursor, this.cursor = ($__jsx_postinc_t + 1) | 0, $__jsx_postinc_t);
-		return true;
-	}
-	ch -= min;
-	if ((s[ch >>> 3] & 0X1 << (ch & 0x7)) === 0) {
-		($__jsx_postinc_t = this.cursor, this.cursor = ($__jsx_postinc_t + 1) | 0, $__jsx_postinc_t);
-		return true;
-	}
-	return false;
-};
-
-
-function BaseStemmer$out_grouping$LBaseStemmer$AIII($this, s, min, max) {
-	var ch;
-	var $__jsx_postinc_t;
-	if ($this.cursor >= $this.limit) {
-		return false;
-	}
-	ch = $this.current.charCodeAt($this.cursor);
-	if (ch > max || ch < min) {
-		($__jsx_postinc_t = $this.cursor, $this.cursor = ($__jsx_postinc_t + 1) | 0, $__jsx_postinc_t);
-		return true;
-	}
-	ch -= min;
-	if ((s[ch >>> 3] & 0X1 << (ch & 0x7)) === 0) {
-		($__jsx_postinc_t = $this.cursor, $this.cursor = ($__jsx_postinc_t + 1) | 0, $__jsx_postinc_t);
-		return true;
-	}
-	return false;
-};
-
-BaseStemmer.out_grouping$LBaseStemmer$AIII = BaseStemmer$out_grouping$LBaseStemmer$AIII;
-
-BaseStemmer.prototype.out_grouping_b$AIII = function (s, min, max) {
-	var ch;
-	var $__jsx_postinc_t;
-	if (this.cursor <= this.limit_backward) {
-		return false;
-	}
-	ch = this.current.charCodeAt(this.cursor - 1);
-	if (ch > max || ch < min) {
-		($__jsx_postinc_t = this.cursor, this.cursor = ($__jsx_postinc_t - 1) | 0, $__jsx_postinc_t);
-		return true;
-	}
-	ch -= min;
-	if ((s[ch >>> 3] & 0x1 << (ch & 0x7)) === 0) {
-		($__jsx_postinc_t = this.cursor, this.cursor = ($__jsx_postinc_t - 1) | 0, $__jsx_postinc_t);
-		return true;
-	}
-	return false;
-};
-
-
-function BaseStemmer$out_grouping_b$LBaseStemmer$AIII($this, s, min, max) {
-	var ch;
-	var $__jsx_postinc_t;
-	if ($this.cursor <= $this.limit_backward) {
-		return false;
-	}
-	ch = $this.current.charCodeAt($this.cursor - 1);
-	if (ch > max || ch < min) {
-		($__jsx_postinc_t = $this.cursor, $this.cursor = ($__jsx_postinc_t - 1) | 0, $__jsx_postinc_t);
-		return true;
-	}
-	ch -= min;
-	if ((s[ch >>> 3] & 0x1 << (ch & 0x7)) === 0) {
-		($__jsx_postinc_t = $this.cursor, $this.cursor = ($__jsx_postinc_t - 1) | 0, $__jsx_postinc_t);
-		return true;
-	}
-	return false;
-};
-
-BaseStemmer.out_grouping_b$LBaseStemmer$AIII = BaseStemmer$out_grouping_b$LBaseStemmer$AIII;
-
-BaseStemmer.prototype.in_range$II = function (min, max) {
-	var ch;
-	var $__jsx_postinc_t;
-	if (this.cursor >= this.limit) {
-		return false;
-	}
-	ch = this.current.charCodeAt(this.cursor);
-	if (ch > max || ch < min) {
-		return false;
-	}
-	($__jsx_postinc_t = this.cursor, this.cursor = ($__jsx_postinc_t + 1) | 0, $__jsx_postinc_t);
-	return true;
-};
-
-
-function BaseStemmer$in_range$LBaseStemmer$II($this, min, max) {
-	var ch;
-	var $__jsx_postinc_t;
-	if ($this.cursor >= $this.limit) {
-		return false;
-	}
-	ch = $this.current.charCodeAt($this.cursor);
-	if (ch > max || ch < min) {
-		return false;
-	}
-	($__jsx_postinc_t = $this.cursor, $this.cursor = ($__jsx_postinc_t + 1) | 0, $__jsx_postinc_t);
-	return true;
-};
-
-BaseStemmer.in_range$LBaseStemmer$II = BaseStemmer$in_range$LBaseStemmer$II;
-
-BaseStemmer.prototype.in_range_b$II = function (min, max) {
-	var ch;
-	var $__jsx_postinc_t;
-	if (this.cursor <= this.limit_backward) {
-		return false;
-	}
-	ch = this.current.charCodeAt(this.cursor - 1);
-	if (ch > max || ch < min) {
-		return false;
-	}
-	($__jsx_postinc_t = this.cursor, this.cursor = ($__jsx_postinc_t - 1) | 0, $__jsx_postinc_t);
-	return true;
-};
-
-
-function BaseStemmer$in_range_b$LBaseStemmer$II($this, min, max) {
-	var ch;
-	var $__jsx_postinc_t;
-	if ($this.cursor <= $this.limit_backward) {
-		return false;
-	}
-	ch = $this.current.charCodeAt($this.cursor - 1);
-	if (ch > max || ch < min) {
-		return false;
-	}
-	($__jsx_postinc_t = $this.cursor, $this.cursor = ($__jsx_postinc_t - 1) | 0, $__jsx_postinc_t);
-	return true;
-};
-
-BaseStemmer.in_range_b$LBaseStemmer$II = BaseStemmer$in_range_b$LBaseStemmer$II;
-
-BaseStemmer.prototype.out_range$II = function (min, max) {
-	var ch;
-	var $__jsx_postinc_t;
-	if (this.cursor >= this.limit) {
-		return false;
-	}
-	ch = this.current.charCodeAt(this.cursor);
-	if (! (ch > max || ch < min)) {
-		return false;
-	}
-	($__jsx_postinc_t = this.cursor, this.cursor = ($__jsx_postinc_t + 1) | 0, $__jsx_postinc_t);
-	return true;
-};
-
-
-function BaseStemmer$out_range$LBaseStemmer$II($this, min, max) {
-	var ch;
-	var $__jsx_postinc_t;
-	if ($this.cursor >= $this.limit) {
-		return false;
-	}
-	ch = $this.current.charCodeAt($this.cursor);
-	if (! (ch > max || ch < min)) {
-		return false;
-	}
-	($__jsx_postinc_t = $this.cursor, $this.cursor = ($__jsx_postinc_t + 1) | 0, $__jsx_postinc_t);
-	return true;
-};
-
-BaseStemmer.out_range$LBaseStemmer$II = BaseStemmer$out_range$LBaseStemmer$II;
-
-BaseStemmer.prototype.out_range_b$II = function (min, max) {
-	var ch;
-	var $__jsx_postinc_t;
-	if (this.cursor <= this.limit_backward) {
-		return false;
-	}
-	ch = this.current.charCodeAt(this.cursor - 1);
-	if (! (ch > max || ch < min)) {
-		return false;
-	}
-	($__jsx_postinc_t = this.cursor, this.cursor = ($__jsx_postinc_t - 1) | 0, $__jsx_postinc_t);
-	return true;
-};
-
-
-function BaseStemmer$out_range_b$LBaseStemmer$II($this, min, max) {
-	var ch;
-	var $__jsx_postinc_t;
-	if ($this.cursor <= $this.limit_backward) {
-		return false;
-	}
-	ch = $this.current.charCodeAt($this.cursor - 1);
-	if (! (ch > max || ch < min)) {
-		return false;
-	}
-	($__jsx_postinc_t = $this.cursor, $this.cursor = ($__jsx_postinc_t - 1) | 0, $__jsx_postinc_t);
-	return true;
-};
-
-BaseStemmer.out_range_b$LBaseStemmer$II = BaseStemmer$out_range_b$LBaseStemmer$II;
-
-BaseStemmer.prototype.eq_s$IS = function (s_size, s) {
-	var cursor$0;
-	if (((this.limit - this.cursor) | 0) < s_size) {
-		return false;
-	}
-	if (this.current.slice(cursor$0 = this.cursor, ((cursor$0 + s_size) | 0)) !== s) {
-		return false;
-	}
-	this.cursor = (this.cursor + s_size) | 0;
-	return true;
-};
-
-
-function BaseStemmer$eq_s$LBaseStemmer$IS($this, s_size, s) {
-	var cursor$0;
-	if ((($this.limit - $this.cursor) | 0) < s_size) {
-		return false;
-	}
-	if ($this.current.slice(cursor$0 = $this.cursor, ((cursor$0 + s_size) | 0)) !== s) {
-		return false;
-	}
-	$this.cursor = ($this.cursor + s_size) | 0;
-	return true;
-};
-
-BaseStemmer.eq_s$LBaseStemmer$IS = BaseStemmer$eq_s$LBaseStemmer$IS;
-
-BaseStemmer.prototype.eq_s_b$IS = function (s_size, s) {
-	var cursor$0;
-	if (((this.cursor - this.limit_backward) | 0) < s_size) {
-		return false;
-	}
-	if (this.current.slice((((cursor$0 = this.cursor) - s_size) | 0), cursor$0) !== s) {
-		return false;
-	}
-	this.cursor = (this.cursor - s_size) | 0;
-	return true;
-};
-
-
-function BaseStemmer$eq_s_b$LBaseStemmer$IS($this, s_size, s) {
-	var cursor$0;
-	if ((($this.cursor - $this.limit_backward) | 0) < s_size) {
-		return false;
-	}
-	if ($this.current.slice((((cursor$0 = $this.cursor) - s_size) | 0), cursor$0) !== s) {
-		return false;
-	}
-	$this.cursor = ($this.cursor - s_size) | 0;
-	return true;
-};
-
-BaseStemmer.eq_s_b$LBaseStemmer$IS = BaseStemmer$eq_s_b$LBaseStemmer$IS;
-
-BaseStemmer.prototype.eq_v$S = function (s) {
-	return BaseStemmer$eq_s$LBaseStemmer$IS(this, s.length, s);
-};
-
-
-function BaseStemmer$eq_v$LBaseStemmer$S($this, s) {
-	return BaseStemmer$eq_s$LBaseStemmer$IS($this, s.length, s);
-};
-
-BaseStemmer.eq_v$LBaseStemmer$S = BaseStemmer$eq_v$LBaseStemmer$S;
-
-BaseStemmer.prototype.eq_v_b$S = function (s) {
-	return BaseStemmer$eq_s_b$LBaseStemmer$IS(this, s.length, s);
-};
-
-
-function BaseStemmer$eq_v_b$LBaseStemmer$S($this, s) {
-	return BaseStemmer$eq_s_b$LBaseStemmer$IS($this, s.length, s);
-};
-
-BaseStemmer.eq_v_b$LBaseStemmer$S = BaseStemmer$eq_v_b$LBaseStemmer$S;
-
-BaseStemmer.prototype.find_among$ALAmong$I = function (v, v_size) {
-	var i;
-	var j;
-	var c;
-	var l;
-	var common_i;
-	var common_j;
-	var first_key_inspected;
-	var k;
-	var diff;
-	var common;
-	var w;
-	var i2;
-	var res;
-	i = 0;
-	j = v_size;
-	c = this.cursor;
-	l = this.limit;
-	common_i = 0;
-	common_j = 0;
-	first_key_inspected = false;
-	while (true) {
-		k = i + (j - i >>> 1);
-		diff = 0;
-		common = (common_i < common_j ? common_i : common_j);
-		w = v[k];
-		for (i2 = common; i2 < w.s_size; i2++) {
-			if (c + common === l) {
-				diff = -1;
-				break;
-			}
-			diff = this.current.charCodeAt(c + common) - w.s.charCodeAt(i2);
-			if (diff !== 0) {
-				break;
-			}
-			common++;
-		}
-		if (diff < 0) {
-			j = k;
-			common_j = common;
-		} else {
-			i = k;
-			common_i = common;
-		}
-		if (j - i <= 1) {
-			if (i > 0) {
-				break;
-			}
-			if (j === i) {
-				break;
-			}
-			if (first_key_inspected) {
-				break;
-			}
-			first_key_inspected = true;
-		}
-	}
-	while (true) {
-		w = v[i];
-		if (common_i >= w.s_size) {
-			this.cursor = (c + w.s_size | 0);
-			if (w.method == null) {
-				return w.result;
-			}
-			res = w.method(w.instance);
-			this.cursor = (c + w.s_size | 0);
-			if (res) {
-				return w.result;
-			}
-		}
-		i = w.substring_i;
-		if (i < 0) {
-			return 0;
-		}
-	}
-	return -1;
-};
-
-
-function BaseStemmer$find_among$LBaseStemmer$ALAmong$I($this, v, v_size) {
-	var i;
-	var j;
-	var c;
-	var l;
-	var common_i;
-	var common_j;
-	var first_key_inspected;
-	var k;
-	var diff;
-	var common;
-	var w;
-	var i2;
-	var res;
-	i = 0;
-	j = v_size;
-	c = $this.cursor;
-	l = $this.limit;
-	common_i = 0;
-	common_j = 0;
-	first_key_inspected = false;
-	while (true) {
-		k = i + (j - i >>> 1);
-		diff = 0;
-		common = (common_i < common_j ? common_i : common_j);
-		w = v[k];
-		for (i2 = common; i2 < w.s_size; i2++) {
-			if (c + common === l) {
-				diff = -1;
-				break;
-			}
-			diff = $this.current.charCodeAt(c + common) - w.s.charCodeAt(i2);
-			if (diff !== 0) {
-				break;
-			}
-			common++;
-		}
-		if (diff < 0) {
-			j = k;
-			common_j = common;
-		} else {
-			i = k;
-			common_i = common;
-		}
-		if (j - i <= 1) {
-			if (i > 0) {
-				break;
-			}
-			if (j === i) {
-				break;
-			}
-			if (first_key_inspected) {
-				break;
-			}
-			first_key_inspected = true;
-		}
-	}
-	while (true) {
-		w = v[i];
-		if (common_i >= w.s_size) {
-			$this.cursor = (c + w.s_size | 0);
-			if (w.method == null) {
-				return w.result;
-			}
-			res = w.method(w.instance);
-			$this.cursor = (c + w.s_size | 0);
-			if (res) {
-				return w.result;
-			}
-		}
-		i = w.substring_i;
-		if (i < 0) {
-			return 0;
-		}
-	}
-	return -1;
-};
-
-BaseStemmer.find_among$LBaseStemmer$ALAmong$I = BaseStemmer$find_among$LBaseStemmer$ALAmong$I;
-
-BaseStemmer.prototype.find_among_b$ALAmong$I = function (v, v_size) {
-	var i;
-	var j;
-	var c;
-	var lb;
-	var common_i;
-	var common_j;
-	var first_key_inspected;
-	var k;
-	var diff;
-	var common;
-	var w;
-	var i2;
-	var res;
-	i = 0;
-	j = v_size;
-	c = this.cursor;
-	lb = this.limit_backward;
-	common_i = 0;
-	common_j = 0;
-	first_key_inspected = false;
-	while (true) {
-		k = i + (j - i >> 1);
-		diff = 0;
-		common = (common_i < common_j ? common_i : common_j);
-		w = v[k];
-		for (i2 = w.s_size - 1 - common; i2 >= 0; i2--) {
-			if (c - common === lb) {
-				diff = -1;
-				break;
-			}
-			diff = this.current.charCodeAt(c - 1 - common) - w.s.charCodeAt(i2);
-			if (diff !== 0) {
-				break;
-			}
-			common++;
-		}
-		if (diff < 0) {
-			j = k;
-			common_j = common;
-		} else {
-			i = k;
-			common_i = common;
-		}
-		if (j - i <= 1) {
-			if (i > 0) {
-				break;
-			}
-			if (j === i) {
-				break;
-			}
-			if (first_key_inspected) {
-				break;
-			}
-			first_key_inspected = true;
-		}
-	}
-	while (true) {
-		w = v[i];
-		if (common_i >= w.s_size) {
-			this.cursor = (c - w.s_size | 0);
-			if (w.method == null) {
-				return w.result;
-			}
-			res = w.method(this);
-			this.cursor = (c - w.s_size | 0);
-			if (res) {
-				return w.result;
-			}
-		}
-		i = w.substring_i;
-		if (i < 0) {
-			return 0;
-		}
-	}
-	return -1;
-};
-
-
-function BaseStemmer$find_among_b$LBaseStemmer$ALAmong$I($this, v, v_size) {
-	var i;
-	var j;
-	var c;
-	var lb;
-	var common_i;
-	var common_j;
-	var first_key_inspected;
-	var k;
-	var diff;
-	var common;
-	var w;
-	var i2;
-	var res;
-	i = 0;
-	j = v_size;
-	c = $this.cursor;
-	lb = $this.limit_backward;
-	common_i = 0;
-	common_j = 0;
-	first_key_inspected = false;
-	while (true) {
-		k = i + (j - i >> 1);
-		diff = 0;
-		common = (common_i < common_j ? common_i : common_j);
-		w = v[k];
-		for (i2 = w.s_size - 1 - common; i2 >= 0; i2--) {
-			if (c - common === lb) {
-				diff = -1;
-				break;
-			}
-			diff = $this.current.charCodeAt(c - 1 - common) - w.s.charCodeAt(i2);
-			if (diff !== 0) {
-				break;
-			}
-			common++;
-		}
-		if (diff < 0) {
-			j = k;
-			common_j = common;
-		} else {
-			i = k;
-			common_i = common;
-		}
-		if (j - i <= 1) {
-			if (i > 0) {
-				break;
-			}
-			if (j === i) {
-				break;
-			}
-			if (first_key_inspected) {
-				break;
-			}
-			first_key_inspected = true;
-		}
-	}
-	while (true) {
-		w = v[i];
-		if (common_i >= w.s_size) {
-			$this.cursor = (c - w.s_size | 0);
-			if (w.method == null) {
-				return w.result;
-			}
-			res = w.method($this);
-			$this.cursor = (c - w.s_size | 0);
-			if (res) {
-				return w.result;
-			}
-		}
-		i = w.substring_i;
-		if (i < 0) {
-			return 0;
-		}
-	}
-	return -1;
-};
-
-BaseStemmer.find_among_b$LBaseStemmer$ALAmong$I = BaseStemmer$find_among_b$LBaseStemmer$ALAmong$I;
-
-BaseStemmer.prototype.replace_s$IIS = function (c_bra, c_ket, s) {
-	var adjustment;
-	adjustment = ((s.length - (((c_ket - c_bra) | 0))) | 0);
-	this.current = this.current.slice(0, c_bra) + s + this.current.slice(c_ket);
-	this.limit = (this.limit + adjustment) | 0;
-	if (this.cursor >= c_ket) {
-		this.cursor = (this.cursor + adjustment) | 0;
-	} else if (this.cursor > c_bra) {
-		this.cursor = c_bra;
-	}
-	return (adjustment | 0);
-};
-
-
-function BaseStemmer$replace_s$LBaseStemmer$IIS($this, c_bra, c_ket, s) {
-	var adjustment;
-	adjustment = ((s.length - (((c_ket - c_bra) | 0))) | 0);
-	$this.current = $this.current.slice(0, c_bra) + s + $this.current.slice(c_ket);
-	$this.limit = ($this.limit + adjustment) | 0;
-	if ($this.cursor >= c_ket) {
-		$this.cursor = ($this.cursor + adjustment) | 0;
-	} else if ($this.cursor > c_bra) {
-		$this.cursor = c_bra;
-	}
-	return (adjustment | 0);
-};
-
-BaseStemmer.replace_s$LBaseStemmer$IIS = BaseStemmer$replace_s$LBaseStemmer$IIS;
-
-BaseStemmer.prototype.slice_check$ = function () {
-	var bra$0;
-	var ket$0;
-	var limit$0;
-	return ((bra$0 = this.bra) < 0 || bra$0 > (ket$0 = this.ket) || ket$0 > (limit$0 = this.limit) || limit$0 > this.current.length ? false : true);
-};
-
-
-function BaseStemmer$slice_check$LBaseStemmer$($this) {
-	var bra$0;
-	var ket$0;
-	var limit$0;
-	return ((bra$0 = $this.bra) < 0 || bra$0 > (ket$0 = $this.ket) || ket$0 > (limit$0 = $this.limit) || limit$0 > $this.current.length ? false : true);
-};
-
-BaseStemmer.slice_check$LBaseStemmer$ = BaseStemmer$slice_check$LBaseStemmer$;
-
-BaseStemmer.prototype.slice_from$S = function (s) {
-	var result;
-	var bra$0;
-	var ket$0;
-	var limit$0;
-	result = false;
-	if ((bra$0 = this.bra) < 0 || bra$0 > (ket$0 = this.ket) || ket$0 > (limit$0 = this.limit) || limit$0 > this.current.length ? false : true) {
-		BaseStemmer$replace_s$LBaseStemmer$IIS(this, this.bra, this.ket, s);
-		result = true;
-	}
-	return result;
-};
-
-
-function BaseStemmer$slice_from$LBaseStemmer$S($this, s) {
-	var result;
-	var bra$0;
-	var ket$0;
-	var limit$0;
-	result = false;
-	if ((bra$0 = $this.bra) < 0 || bra$0 > (ket$0 = $this.ket) || ket$0 > (limit$0 = $this.limit) || limit$0 > $this.current.length ? false : true) {
-		BaseStemmer$replace_s$LBaseStemmer$IIS($this, $this.bra, $this.ket, s);
-		result = true;
-	}
-	return result;
-};
-
-BaseStemmer.slice_from$LBaseStemmer$S = BaseStemmer$slice_from$LBaseStemmer$S;
-
-BaseStemmer.prototype.slice_del$ = function () {
-	return BaseStemmer$slice_from$LBaseStemmer$S(this, "");
-};
-
-
-function BaseStemmer$slice_del$LBaseStemmer$($this) {
-	return BaseStemmer$slice_from$LBaseStemmer$S($this, "");
-};
-
-BaseStemmer.slice_del$LBaseStemmer$ = BaseStemmer$slice_del$LBaseStemmer$;
-
-BaseStemmer.prototype.insert$IIS = function (c_bra, c_ket, s) {
-	var adjustment;
-	adjustment = BaseStemmer$replace_s$LBaseStemmer$IIS(this, c_bra, c_ket, s);
-	if (c_bra <= this.bra) {
-		this.bra = (this.bra + adjustment) | 0;
-	}
-	if (c_bra <= this.ket) {
-		this.ket = (this.ket + adjustment) | 0;
-	}
-};
-
-
-function BaseStemmer$insert$LBaseStemmer$IIS($this, c_bra, c_ket, s) {
-	var adjustment;
-	adjustment = BaseStemmer$replace_s$LBaseStemmer$IIS($this, c_bra, c_ket, s);
-	if (c_bra <= $this.bra) {
-		$this.bra = ($this.bra + adjustment) | 0;
-	}
-	if (c_bra <= $this.ket) {
-		$this.ket = ($this.ket + adjustment) | 0;
-	}
-};
-
-BaseStemmer.insert$LBaseStemmer$IIS = BaseStemmer$insert$LBaseStemmer$IIS;
-
-BaseStemmer.prototype.slice_to$S = function (s) {
-	var result;
-	var bra$0;
-	var ket$0;
-	var limit$0;
-	result = '';
-	if ((bra$0 = this.bra) < 0 || bra$0 > (ket$0 = this.ket) || ket$0 > (limit$0 = this.limit) || limit$0 > this.current.length ? false : true) {
-		result = this.current.slice(this.bra, this.ket);
-	}
-	return result;
-};
-
-
-function BaseStemmer$slice_to$LBaseStemmer$S($this, s) {
-	var result;
-	var bra$0;
-	var ket$0;
-	var limit$0;
-	result = '';
-	if ((bra$0 = $this.bra) < 0 || bra$0 > (ket$0 = $this.ket) || ket$0 > (limit$0 = $this.limit) || limit$0 > $this.current.length ? false : true) {
-		result = $this.current.slice($this.bra, $this.ket);
-	}
-	return result;
-};
-
-BaseStemmer.slice_to$LBaseStemmer$S = BaseStemmer$slice_to$LBaseStemmer$S;
-
-BaseStemmer.prototype.assign_to$S = function (s) {
-	return this.current.slice(0, this.limit);
-};
-
-
-function BaseStemmer$assign_to$LBaseStemmer$S($this, s) {
-	return $this.current.slice(0, $this.limit);
-};
-
-BaseStemmer.assign_to$LBaseStemmer$S = BaseStemmer$assign_to$LBaseStemmer$S;
-
-BaseStemmer.prototype.stem$ = function () {
-	return false;
-};
-
-
-BaseStemmer.prototype.stemWord$S = function (word) {
-	var result;
-	var current$0;
-	var cursor$0;
-	var limit$0;
-	result = this.cache['.' + word];
-	if (result == null) {
-		current$0 = this.current = word;
-		cursor$0 = this.cursor = 0;
-		limit$0 = this.limit = current$0.length;
-		this.limit_backward = 0;
-		this.bra = cursor$0;
-		this.ket = limit$0;
-		this.stem$();
-		result = this.current;
-		this.cache['.' + word] = result;
-	}
-	return result;
-};
-
-BaseStemmer.prototype.stemWord = BaseStemmer.prototype.stemWord$S;
-
-BaseStemmer.prototype.stemWords$AS = function (words) {
-	var results;
-	var i;
-	var word;
-	var result;
-	var current$0;
-	var cursor$0;
-	var limit$0;
-	results = [  ];
-	for (i = 0; i < words.length; i++) {
-		word = words[i];
-		result = this.cache['.' + word];
-		if (result == null) {
-			current$0 = this.current = word;
-			cursor$0 = this.cursor = 0;
-			limit$0 = this.limit = current$0.length;
-			this.limit_backward = 0;
-			this.bra = cursor$0;
-			this.ket = limit$0;
-			this.stem$();
-			result = this.current;
-			this.cache['.' + word] = result;
-		}
-		results.push(result);
-	}
-	return results;
-};
-
-BaseStemmer.prototype.stemWords = BaseStemmer.prototype.stemWords$AS;
-
-function GermanStemmer() {
-	BaseStemmer.call(this);
-	this.I_x = 0;
-	this.I_p2 = 0;
-	this.I_p1 = 0;
-};
-
-$__jsx_extend([GermanStemmer], BaseStemmer);
-GermanStemmer.prototype.copy_from$LGermanStemmer$ = function (other) {
-	this.I_x = other.I_x;
-	this.I_p2 = other.I_p2;
-	this.I_p1 = other.I_p1;
-	BaseStemmer$copy_from$LBaseStemmer$LBaseStemmer$(this, other);
-};
-
-GermanStemmer.prototype.copy_from = GermanStemmer.prototype.copy_from$LGermanStemmer$;
-
-GermanStemmer.prototype.r_prelude$ = function () {
-	var v_1;
-	var v_2;
-	var v_3;
-	var v_4;
-	var v_5;
-	var v_6;
-	var lab1;
-	var lab2;
-	var lab3;
-	var lab5;
-	var lab7;
-	var lab8;
-	var lab9;
-	var cursor$0;
-	var cursor$1;
-	var $__jsx_postinc_t;
-	v_1 = this.cursor;
-replab0:
-	while (true) {
-		v_2 = this.cursor;
-		lab1 = true;
-	lab1:
-		while (lab1 === true) {
-			lab1 = false;
-			lab2 = true;
-		lab2:
-			while (lab2 === true) {
-				lab2 = false;
-				v_3 = this.cursor;
-				lab3 = true;
-			lab3:
-				while (lab3 === true) {
-					lab3 = false;
-					this.bra = this.cursor;
-					if (! BaseStemmer$eq_s$LBaseStemmer$IS(this, 1, "\u00DF")) {
-						break lab3;
-					}
-					this.ket = this.cursor;
-					if (! BaseStemmer$slice_from$LBaseStemmer$S(this, "ss")) {
-						return false;
-					}
-					break lab2;
-				}
-				cursor$0 = this.cursor = v_3;
-				if (cursor$0 >= this.limit) {
-					break lab1;
-				}
-				($__jsx_postinc_t = this.cursor, this.cursor = ($__jsx_postinc_t + 1) | 0, $__jsx_postinc_t);
-			}
-			continue replab0;
-		}
-		this.cursor = v_2;
-		break replab0;
-	}
-	this.cursor = v_1;
-replab4:
-	while (true) {
-		v_4 = this.cursor;
-		lab5 = true;
-	lab5:
-		while (lab5 === true) {
-			lab5 = false;
-		golab6:
-			while (true) {
-				v_5 = this.cursor;
-				lab7 = true;
-			lab7:
-				while (lab7 === true) {
-					lab7 = false;
-					if (! BaseStemmer$in_grouping$LBaseStemmer$AIII(this, GermanStemmer.g_v, 97, 252)) {
-						break lab7;
-					}
-					this.bra = this.cursor;
-					lab8 = true;
-				lab8:
-					while (lab8 === true) {
-						lab8 = false;
-						v_6 = this.cursor;
-						lab9 = true;
-					lab9:
-						while (lab9 === true) {
-							lab9 = false;
-							if (! BaseStemmer$eq_s$LBaseStemmer$IS(this, 1, "u")) {
-								break lab9;
-							}
-							this.ket = this.cursor;
-							if (! BaseStemmer$in_grouping$LBaseStemmer$AIII(this, GermanStemmer.g_v, 97, 252)) {
-								break lab9;
-							}
-							if (! BaseStemmer$slice_from$LBaseStemmer$S(this, "U")) {
-								return false;
-							}
-							break lab8;
-						}
-						this.cursor = v_6;
-						if (! BaseStemmer$eq_s$LBaseStemmer$IS(this, 1, "y")) {
-							break lab7;
-						}
-						this.ket = this.cursor;
-						if (! BaseStemmer$in_grouping$LBaseStemmer$AIII(this, GermanStemmer.g_v, 97, 252)) {
-							break lab7;
-						}
-						if (! BaseStemmer$slice_from$LBaseStemmer$S(this, "Y")) {
-							return false;
-						}
-					}
-					this.cursor = v_5;
-					break golab6;
-				}
-				cursor$1 = this.cursor = v_5;
-				if (cursor$1 >= this.limit) {
-					break lab5;
-				}
-				($__jsx_postinc_t = this.cursor, this.cursor = ($__jsx_postinc_t + 1) | 0, $__jsx_postinc_t);
-			}
-			continue replab4;
-		}
-		this.cursor = v_4;
-		break replab4;
-	}
-	return true;
-};
-
-GermanStemmer.prototype.r_prelude = GermanStemmer.prototype.r_prelude$;
-
-function GermanStemmer$r_prelude$LGermanStemmer$($this) {
-	var v_1;
-	var v_2;
-	var v_3;
-	var v_4;
-	var v_5;
-	var v_6;
-	var lab1;
-	var lab2;
-	var lab3;
-	var lab5;
-	var lab7;
-	var lab8;
-	var lab9;
-	var cursor$0;
-	var cursor$1;
-	var $__jsx_postinc_t;
-	v_1 = $this.cursor;
-replab0:
-	while (true) {
-		v_2 = $this.cursor;
-		lab1 = true;
-	lab1:
-		while (lab1 === true) {
-			lab1 = false;
-			lab2 = true;
-		lab2:
-			while (lab2 === true) {
-				lab2 = false;
-				v_3 = $this.cursor;
-				lab3 = true;
-			lab3:
-				while (lab3 === true) {
-					lab3 = false;
-					$this.bra = $this.cursor;
-					if (! BaseStemmer$eq_s$LBaseStemmer$IS($this, 1, "\u00DF")) {
-						break lab3;
-					}
-					$this.ket = $this.cursor;
-					if (! BaseStemmer$slice_from$LBaseStemmer$S($this, "ss")) {
-						return false;
-					}
-					break lab2;
-				}
-				cursor$0 = $this.cursor = v_3;
-				if (cursor$0 >= $this.limit) {
-					break lab1;
-				}
-				($__jsx_postinc_t = $this.cursor, $this.cursor = ($__jsx_postinc_t + 1) | 0, $__jsx_postinc_t);
-			}
-			continue replab0;
-		}
-		$this.cursor = v_2;
-		break replab0;
-	}
-	$this.cursor = v_1;
-replab4:
-	while (true) {
-		v_4 = $this.cursor;
-		lab5 = true;
-	lab5:
-		while (lab5 === true) {
-			lab5 = false;
-		golab6:
-			while (true) {
-				v_5 = $this.cursor;
-				lab7 = true;
-			lab7:
-				while (lab7 === true) {
-					lab7 = false;
-					if (! BaseStemmer$in_grouping$LBaseStemmer$AIII($this, GermanStemmer.g_v, 97, 252)) {
-						break lab7;
-					}
-					$this.bra = $this.cursor;
-					lab8 = true;
-				lab8:
-					while (lab8 === true) {
-						lab8 = false;
-						v_6 = $this.cursor;
-						lab9 = true;
-					lab9:
-						while (lab9 === true) {
-							lab9 = false;
-							if (! BaseStemmer$eq_s$LBaseStemmer$IS($this, 1, "u")) {
-								break lab9;
-							}
-							$this.ket = $this.cursor;
-							if (! BaseStemmer$in_grouping$LBaseStemmer$AIII($this, GermanStemmer.g_v, 97, 252)) {
-								break lab9;
-							}
-							if (! BaseStemmer$slice_from$LBaseStemmer$S($this, "U")) {
-								return false;
-							}
-							break lab8;
-						}
-						$this.cursor = v_6;
-						if (! BaseStemmer$eq_s$LBaseStemmer$IS($this, 1, "y")) {
-							break lab7;
-						}
-						$this.ket = $this.cursor;
-						if (! BaseStemmer$in_grouping$LBaseStemmer$AIII($this, GermanStemmer.g_v, 97, 252)) {
-							break lab7;
-						}
-						if (! BaseStemmer$slice_from$LBaseStemmer$S($this, "Y")) {
-							return false;
-						}
-					}
-					$this.cursor = v_5;
-					break golab6;
-				}
-				cursor$1 = $this.cursor = v_5;
-				if (cursor$1 >= $this.limit) {
-					break lab5;
-				}
-				($__jsx_postinc_t = $this.cursor, $this.cursor = ($__jsx_postinc_t + 1) | 0, $__jsx_postinc_t);
-			}
-			continue replab4;
-		}
-		$this.cursor = v_4;
-		break replab4;
-	}
-	return true;
-};
-
-GermanStemmer.r_prelude$LGermanStemmer$ = GermanStemmer$r_prelude$LGermanStemmer$;
-
-GermanStemmer.prototype.r_mark_regions$ = function () {
-	var v_1;
-	var c;
-	var lab1;
-	var lab3;
-	var lab4;
-	var lab6;
-	var lab8;
-	var limit$0;
-	var cursor$0;
-	var cursor$1;
-	var $__jsx_postinc_t;
-	this.I_p1 = limit$0 = this.limit;
-	this.I_p2 = limit$0;
-	v_1 = cursor$0 = this.cursor;
-	c = (cursor$0 + 3 | 0);
-	if (0 > c || c > limit$0) {
-		return false;
-	}
-	cursor$1 = this.cursor = c;
-	this.I_x = cursor$1;
-	this.cursor = v_1;
-golab0:
-	while (true) {
-		lab1 = true;
-	lab1:
-		while (lab1 === true) {
-			lab1 = false;
-			if (! BaseStemmer$in_grouping$LBaseStemmer$AIII(this, GermanStemmer.g_v, 97, 252)) {
-				break lab1;
-			}
-			break golab0;
-		}
-		if (this.cursor >= this.limit) {
-			return false;
-		}
-		($__jsx_postinc_t = this.cursor, this.cursor = ($__jsx_postinc_t + 1) | 0, $__jsx_postinc_t);
-	}
-golab2:
-	while (true) {
-		lab3 = true;
-	lab3:
-		while (lab3 === true) {
-			lab3 = false;
-			if (! BaseStemmer$out_grouping$LBaseStemmer$AIII(this, GermanStemmer.g_v, 97, 252)) {
-				break lab3;
-			}
-			break golab2;
-		}
-		if (this.cursor >= this.limit) {
-			return false;
-		}
-		($__jsx_postinc_t = this.cursor, this.cursor = ($__jsx_postinc_t + 1) | 0, $__jsx_postinc_t);
-	}
-	this.I_p1 = this.cursor;
-	lab4 = true;
-lab4:
-	while (lab4 === true) {
-		lab4 = false;
-		if (! (this.I_p1 < this.I_x)) {
-			break lab4;
-		}
-		this.I_p1 = this.I_x;
-	}
-golab5:
-	while (true) {
-		lab6 = true;
-	lab6:
-		while (lab6 === true) {
-			lab6 = false;
-			if (! BaseStemmer$in_grouping$LBaseStemmer$AIII(this, GermanStemmer.g_v, 97, 252)) {
-				break lab6;
-			}
-			break golab5;
-		}
-		if (this.cursor >= this.limit) {
-			return false;
-		}
-		($__jsx_postinc_t = this.cursor, this.cursor = ($__jsx_postinc_t + 1) | 0, $__jsx_postinc_t);
-	}
-golab7:
-	while (true) {
-		lab8 = true;
-	lab8:
-		while (lab8 === true) {
-			lab8 = false;
-			if (! BaseStemmer$out_grouping$LBaseStemmer$AIII(this, GermanStemmer.g_v, 97, 252)) {
-				break lab8;
-			}
-			break golab7;
-		}
-		if (this.cursor >= this.limit) {
-			return false;
-		}
-		($__jsx_postinc_t = this.cursor, this.cursor = ($__jsx_postinc_t + 1) | 0, $__jsx_postinc_t);
-	}
-	this.I_p2 = this.cursor;
-	return true;
-};
-
-GermanStemmer.prototype.r_mark_regions = GermanStemmer.prototype.r_mark_regions$;
-
-function GermanStemmer$r_mark_regions$LGermanStemmer$($this) {
-	var v_1;
-	var c;
-	var lab1;
-	var lab3;
-	var lab4;
-	var lab6;
-	var lab8;
-	var limit$0;
-	var cursor$0;
-	var cursor$1;
-	var $__jsx_postinc_t;
-	$this.I_p1 = limit$0 = $this.limit;
-	$this.I_p2 = limit$0;
-	v_1 = cursor$0 = $this.cursor;
-	c = (cursor$0 + 3 | 0);
-	if (0 > c || c > limit$0) {
-		return false;
-	}
-	cursor$1 = $this.cursor = c;
-	$this.I_x = cursor$1;
-	$this.cursor = v_1;
-golab0:
-	while (true) {
-		lab1 = true;
-	lab1:
-		while (lab1 === true) {
-			lab1 = false;
-			if (! BaseStemmer$in_grouping$LBaseStemmer$AIII($this, GermanStemmer.g_v, 97, 252)) {
-				break lab1;
-			}
-			break golab0;
-		}
-		if ($this.cursor >= $this.limit) {
-			return false;
-		}
-		($__jsx_postinc_t = $this.cursor, $this.cursor = ($__jsx_postinc_t + 1) | 0, $__jsx_postinc_t);
-	}
-golab2:
-	while (true) {
-		lab3 = true;
-	lab3:
-		while (lab3 === true) {
-			lab3 = false;
-			if (! BaseStemmer$out_grouping$LBaseStemmer$AIII($this, GermanStemmer.g_v, 97, 252)) {
-				break lab3;
-			}
-			break golab2;
-		}
-		if ($this.cursor >= $this.limit) {
-			return false;
-		}
-		($__jsx_postinc_t = $this.cursor, $this.cursor = ($__jsx_postinc_t + 1) | 0, $__jsx_postinc_t);
-	}
-	$this.I_p1 = $this.cursor;
-	lab4 = true;
-lab4:
-	while (lab4 === true) {
-		lab4 = false;
-		if (! ($this.I_p1 < $this.I_x)) {
-			break lab4;
-		}
-		$this.I_p1 = $this.I_x;
-	}
-golab5:
-	while (true) {
-		lab6 = true;
-	lab6:
-		while (lab6 === true) {
-			lab6 = false;
-			if (! BaseStemmer$in_grouping$LBaseStemmer$AIII($this, GermanStemmer.g_v, 97, 252)) {
-				break lab6;
-			}
-			break golab5;
-		}
-		if ($this.cursor >= $this.limit) {
-			return false;
-		}
-		($__jsx_postinc_t = $this.cursor, $this.cursor = ($__jsx_postinc_t + 1) | 0, $__jsx_postinc_t);
-	}
-golab7:
-	while (true) {
-		lab8 = true;
-	lab8:
-		while (lab8 === true) {
-			lab8 = false;
-			if (! BaseStemmer$out_grouping$LBaseStemmer$AIII($this, GermanStemmer.g_v, 97, 252)) {
-				break lab8;
-			}
-			break golab7;
-		}
-		if ($this.cursor >= $this.limit) {
-			return false;
-		}
-		($__jsx_postinc_t = $this.cursor, $this.cursor = ($__jsx_postinc_t + 1) | 0, $__jsx_postinc_t);
-	}
-	$this.I_p2 = $this.cursor;
-	return true;
-};
-
-GermanStemmer.r_mark_regions$LGermanStemmer$ = GermanStemmer$r_mark_regions$LGermanStemmer$;
-
-GermanStemmer.prototype.r_postlude$ = function () {
-	var among_var;
-	var v_1;
-	var lab1;
-	var $__jsx_postinc_t;
-replab0:
-	while (true) {
-		v_1 = this.cursor;
-		lab1 = true;
-	lab1:
-		while (lab1 === true) {
-			lab1 = false;
-			this.bra = this.cursor;
-			among_var = BaseStemmer$find_among$LBaseStemmer$ALAmong$I(this, GermanStemmer.a_0, 6);
-			if (among_var === 0) {
-				break lab1;
-			}
-			this.ket = this.cursor;
-			switch (among_var) {
-			case 0:
-				break lab1;
-			case 1:
-				if (! BaseStemmer$slice_from$LBaseStemmer$S(this, "y")) {
-					return false;
-				}
-				break;
-			case 2:
-				if (! BaseStemmer$slice_from$LBaseStemmer$S(this, "u")) {
-					return false;
-				}
-				break;
-			case 3:
-				if (! BaseStemmer$slice_from$LBaseStemmer$S(this, "a")) {
-					return false;
-				}
-				break;
-			case 4:
-				if (! BaseStemmer$slice_from$LBaseStemmer$S(this, "o")) {
-					return false;
-				}
-				break;
-			case 5:
-				if (! BaseStemmer$slice_from$LBaseStemmer$S(this, "u")) {
-					return false;
-				}
-				break;
-			case 6:
-				if (this.cursor >= this.limit) {
-					break lab1;
-				}
-				($__jsx_postinc_t = this.cursor, this.cursor = ($__jsx_postinc_t + 1) | 0, $__jsx_postinc_t);
-				break;
-			}
-			continue replab0;
-		}
-		this.cursor = v_1;
-		break replab0;
-	}
-	return true;
-};
-
-GermanStemmer.prototype.r_postlude = GermanStemmer.prototype.r_postlude$;
-
-function GermanStemmer$r_postlude$LGermanStemmer$($this) {
-	var among_var;
-	var v_1;
-	var lab1;
-	var $__jsx_postinc_t;
-replab0:
-	while (true) {
-		v_1 = $this.cursor;
-		lab1 = true;
-	lab1:
-		while (lab1 === true) {
-			lab1 = false;
-			$this.bra = $this.cursor;
-			among_var = BaseStemmer$find_among$LBaseStemmer$ALAmong$I($this, GermanStemmer.a_0, 6);
-			if (among_var === 0) {
-				break lab1;
-			}
-			$this.ket = $this.cursor;
-			switch (among_var) {
-			case 0:
-				break lab1;
-			case 1:
-				if (! BaseStemmer$slice_from$LBaseStemmer$S($this, "y")) {
-					return false;
-				}
-				break;
-			case 2:
-				if (! BaseStemmer$slice_from$LBaseStemmer$S($this, "u")) {
-					return false;
-				}
-				break;
-			case 3:
-				if (! BaseStemmer$slice_from$LBaseStemmer$S($this, "a")) {
-					return false;
-				}
-				break;
-			case 4:
-				if (! BaseStemmer$slice_from$LBaseStemmer$S($this, "o")) {
-					return false;
-				}
-				break;
-			case 5:
-				if (! BaseStemmer$slice_from$LBaseStemmer$S($this, "u")) {
-					return false;
-				}
-				break;
-			case 6:
-				if ($this.cursor >= $this.limit) {
-					break lab1;
-				}
-				($__jsx_postinc_t = $this.cursor, $this.cursor = ($__jsx_postinc_t + 1) | 0, $__jsx_postinc_t);
-				break;
-			}
-			continue replab0;
-		}
-		$this.cursor = v_1;
-		break replab0;
-	}
-	return true;
-};
-
-GermanStemmer.r_postlude$LGermanStemmer$ = GermanStemmer$r_postlude$LGermanStemmer$;
-
-GermanStemmer.prototype.r_R1$ = function () {
-	return (! (this.I_p1 <= this.cursor) ? false : true);
-};
-
-GermanStemmer.prototype.r_R1 = GermanStemmer.prototype.r_R1$;
-
-function GermanStemmer$r_R1$LGermanStemmer$($this) {
-	return (! ($this.I_p1 <= $this.cursor) ? false : true);
-};
-
-GermanStemmer.r_R1$LGermanStemmer$ = GermanStemmer$r_R1$LGermanStemmer$;
-
-GermanStemmer.prototype.r_R2$ = function () {
-	return (! (this.I_p2 <= this.cursor) ? false : true);
-};
-
-GermanStemmer.prototype.r_R2 = GermanStemmer.prototype.r_R2$;
-
-function GermanStemmer$r_R2$LGermanStemmer$($this) {
-	return (! ($this.I_p2 <= $this.cursor) ? false : true);
-};
-
-GermanStemmer.r_R2$LGermanStemmer$ = GermanStemmer$r_R2$LGermanStemmer$;
-
-GermanStemmer.prototype.r_standard_suffix$ = function () {
-	var among_var;
-	var v_1;
-	var v_2;
-	var v_3;
-	var v_4;
-	var v_5;
-	var v_6;
-	var v_7;
-	var v_8;
-	var v_9;
-	var v_10;
-	var lab0;
-	var lab1;
-	var lab2;
-	var c;
-	var lab3;
-	var lab4;
-	var lab5;
-	var lab6;
-	var lab7;
-	var lab8;
-	var lab9;
-	var lab10;
-	var cursor$0;
-	var cursor$1;
-	var limit$0;
-	var cursor$2;
-	var cursor$3;
-	var cursor$4;
-	var cursor$5;
-	var cursor$6;
-	var cursor$7;
-	var limit$1;
-	var cursor$8;
-	v_1 = ((this.limit - this.cursor) | 0);
-	lab0 = true;
-lab0:
-	while (lab0 === true) {
-		lab0 = false;
-		this.ket = this.cursor;
-		among_var = BaseStemmer$find_among_b$LBaseStemmer$ALAmong$I(this, GermanStemmer.a_1, 7);
-		if (among_var === 0) {
-			break lab0;
-		}
-		this.bra = cursor$0 = this.cursor;
-		if (! (! (this.I_p1 <= cursor$0) ? false : true)) {
-			break lab0;
-		}
-		switch (among_var) {
-		case 0:
-			break lab0;
-		case 1:
-			if (! BaseStemmer$slice_from$LBaseStemmer$S(this, "")) {
-				return false;
-			}
-			break;
-		case 2:
-			if (! BaseStemmer$slice_from$LBaseStemmer$S(this, "")) {
-				return false;
-			}
-			v_2 = ((this.limit - this.cursor) | 0);
-			lab1 = true;
-		lab1:
-			while (lab1 === true) {
-				lab1 = false;
-				this.ket = this.cursor;
-				if (! BaseStemmer$eq_s_b$LBaseStemmer$IS(this, 1, "s")) {
-					this.cursor = ((this.limit - v_2) | 0);
-					break lab1;
-				}
-				this.bra = this.cursor;
-				if (! BaseStemmer$eq_s_b$LBaseStemmer$IS(this, 3, "nis")) {
-					this.cursor = ((this.limit - v_2) | 0);
-					break lab1;
-				}
-				if (! BaseStemmer$slice_from$LBaseStemmer$S(this, "")) {
-					return false;
-				}
-			}
-			break;
-		case 3:
-			if (! BaseStemmer$in_grouping_b$LBaseStemmer$AIII(this, GermanStemmer.g_s_ending, 98, 116)) {
-				break lab0;
-			}
-			if (! BaseStemmer$slice_from$LBaseStemmer$S(this, "")) {
-				return false;
-			}
-			break;
-		}
-	}
-	cursor$2 = this.cursor = (((limit$0 = this.limit) - v_1) | 0);
-	v_3 = ((limit$0 - cursor$2) | 0);
-	lab2 = true;
-lab2:
-	while (lab2 === true) {
-		lab2 = false;
-		this.ket = this.cursor;
-		among_var = BaseStemmer$find_among_b$LBaseStemmer$ALAmong$I(this, GermanStemmer.a_2, 4);
-		if (among_var === 0) {
-			break lab2;
-		}
-		this.bra = cursor$1 = this.cursor;
-		if (! (! (this.I_p1 <= cursor$1) ? false : true)) {
-			break lab2;
-		}
-		switch (among_var) {
-		case 0:
-			break lab2;
-		case 1:
-			if (! BaseStemmer$slice_from$LBaseStemmer$S(this, "")) {
-				return false;
-			}
-			break;
-		case 2:
-			if (! BaseStemmer$in_grouping_b$LBaseStemmer$AIII(this, GermanStemmer.g_st_ending, 98, 116)) {
-				break lab2;
-			}
-			c = (this.cursor - 3 | 0);
-			if (this.limit_backward > c || c > this.limit) {
-				break lab2;
-			}
-			this.cursor = c;
-			if (! BaseStemmer$slice_from$LBaseStemmer$S(this, "")) {
-				return false;
-			}
-			break;
-		}
-	}
-	cursor$8 = this.cursor = (((limit$1 = this.limit) - v_3) | 0);
-	v_4 = ((limit$1 - cursor$8) | 0);
-	lab3 = true;
-lab3:
-	while (lab3 === true) {
-		lab3 = false;
-		this.ket = this.cursor;
-		among_var = BaseStemmer$find_among_b$LBaseStemmer$ALAmong$I(this, GermanStemmer.a_4, 8);
-		if (among_var === 0) {
-			break lab3;
-		}
-		this.bra = cursor$3 = this.cursor;
-		if (! (! (this.I_p2 <= cursor$3) ? false : true)) {
-			break lab3;
-		}
-		switch (among_var) {
-		case 0:
-			break lab3;
-		case 1:
-			if (! BaseStemmer$slice_from$LBaseStemmer$S(this, "")) {
-				return false;
-			}
-			v_5 = ((this.limit - this.cursor) | 0);
-			lab4 = true;
-		lab4:
-			while (lab4 === true) {
-				lab4 = false;
-				this.ket = this.cursor;
-				if (! BaseStemmer$eq_s_b$LBaseStemmer$IS(this, 2, "ig")) {
-					this.cursor = ((this.limit - v_5) | 0);
-					break lab4;
-				}
-				this.bra = cursor$4 = this.cursor;
-				v_6 = ((this.limit - cursor$4) | 0);
-				lab5 = true;
-			lab5:
-				while (lab5 === true) {
-					lab5 = false;
-					if (! BaseStemmer$eq_s_b$LBaseStemmer$IS(this, 1, "e")) {
-						break lab5;
-					}
-					this.cursor = ((this.limit - v_5) | 0);
-					break lab4;
-				}
-				cursor$5 = this.cursor = ((this.limit - v_6) | 0);
-				if (! (! (this.I_p2 <= cursor$5) ? false : true)) {
-					this.cursor = ((this.limit - v_5) | 0);
-					break lab4;
-				}
-				if (! BaseStemmer$slice_from$LBaseStemmer$S(this, "")) {
-					return false;
-				}
-			}
-			break;
-		case 2:
-			v_7 = ((this.limit - this.cursor) | 0);
-			lab6 = true;
-		lab6:
-			while (lab6 === true) {
-				lab6 = false;
-				if (! BaseStemmer$eq_s_b$LBaseStemmer$IS(this, 1, "e")) {
-					break lab6;
-				}
-				break lab3;
-			}
-			this.cursor = ((this.limit - v_7) | 0);
-			if (! BaseStemmer$slice_from$LBaseStemmer$S(this, "")) {
-				return false;
-			}
-			break;
-		case 3:
-			if (! BaseStemmer$slice_from$LBaseStemmer$S(this, "")) {
-				return false;
-			}
-			v_8 = ((this.limit - this.cursor) | 0);
-			lab7 = true;
-		lab7:
-			while (lab7 === true) {
-				lab7 = false;
-				this.ket = this.cursor;
-				lab8 = true;
-			lab8:
-				while (lab8 === true) {
-					lab8 = false;
-					v_9 = ((this.limit - this.cursor) | 0);
-					lab9 = true;
-				lab9:
-					while (lab9 === true) {
-						lab9 = false;
-						if (! BaseStemmer$eq_s_b$LBaseStemmer$IS(this, 2, "er")) {
-							break lab9;
-						}
-						break lab8;
-					}
-					this.cursor = ((this.limit - v_9) | 0);
-					if (! BaseStemmer$eq_s_b$LBaseStemmer$IS(this, 2, "en")) {
-						this.cursor = ((this.limit - v_8) | 0);
-						break lab7;
-					}
-				}
-				this.bra = cursor$6 = this.cursor;
-				if (! (! (this.I_p1 <= cursor$6) ? false : true)) {
-					this.cursor = ((this.limit - v_8) | 0);
-					break lab7;
-				}
-				if (! BaseStemmer$slice_from$LBaseStemmer$S(this, "")) {
-					return false;
-				}
-			}
-			break;
-		case 4:
-			if (! BaseStemmer$slice_from$LBaseStemmer$S(this, "")) {
-				return false;
-			}
-			v_10 = ((this.limit - this.cursor) | 0);
-			lab10 = true;
-		lab10:
-			while (lab10 === true) {
-				lab10 = false;
-				this.ket = this.cursor;
-				among_var = BaseStemmer$find_among_b$LBaseStemmer$ALAmong$I(this, GermanStemmer.a_3, 2);
-				if (among_var === 0) {
-					this.cursor = ((this.limit - v_10) | 0);
-					break lab10;
-				}
-				this.bra = cursor$7 = this.cursor;
-				if (! (! (this.I_p2 <= cursor$7) ? false : true)) {
-					this.cursor = ((this.limit - v_10) | 0);
-					break lab10;
-				}
-				switch (among_var) {
-				case 0:
-					this.cursor = ((this.limit - v_10) | 0);
-					break lab10;
-				case 1:
-					if (! BaseStemmer$slice_from$LBaseStemmer$S(this, "")) {
-						return false;
-					}
-					break;
-				}
-			}
-			break;
-		}
-	}
-	this.cursor = ((this.limit - v_4) | 0);
-	return true;
-};
-
-GermanStemmer.prototype.r_standard_suffix = GermanStemmer.prototype.r_standard_suffix$;
-
-function GermanStemmer$r_standard_suffix$LGermanStemmer$($this) {
-	var among_var;
-	var v_1;
-	var v_2;
-	var v_3;
-	var v_4;
-	var v_5;
-	var v_6;
-	var v_7;
-	var v_8;
-	var v_9;
-	var v_10;
-	var lab0;
-	var lab1;
-	var lab2;
-	var c;
-	var lab3;
-	var lab4;
-	var lab5;
-	var lab6;
-	var lab7;
-	var lab8;
-	var lab9;
-	var lab10;
-	var cursor$0;
-	var cursor$1;
-	var limit$0;
-	var cursor$2;
-	var cursor$3;
-	var cursor$4;
-	var cursor$5;
-	var cursor$6;
-	var cursor$7;
-	var limit$1;
-	var cursor$8;
-	v_1 = (($this.limit - $this.cursor) | 0);
-	lab0 = true;
-lab0:
-	while (lab0 === true) {
-		lab0 = false;
-		$this.ket = $this.cursor;
-		among_var = BaseStemmer$find_among_b$LBaseStemmer$ALAmong$I($this, GermanStemmer.a_1, 7);
-		if (among_var === 0) {
-			break lab0;
-		}
-		$this.bra = cursor$0 = $this.cursor;
-		if (! (! ($this.I_p1 <= cursor$0) ? false : true)) {
-			break lab0;
-		}
-		switch (among_var) {
-		case 0:
-			break lab0;
-		case 1:
-			if (! BaseStemmer$slice_from$LBaseStemmer$S($this, "")) {
-				return false;
-			}
-			break;
-		case 2:
-			if (! BaseStemmer$slice_from$LBaseStemmer$S($this, "")) {
-				return false;
-			}
-			v_2 = (($this.limit - $this.cursor) | 0);
-			lab1 = true;
-		lab1:
-			while (lab1 === true) {
-				lab1 = false;
-				$this.ket = $this.cursor;
-				if (! BaseStemmer$eq_s_b$LBaseStemmer$IS($this, 1, "s")) {
-					$this.cursor = (($this.limit - v_2) | 0);
-					break lab1;
-				}
-				$this.bra = $this.cursor;
-				if (! BaseStemmer$eq_s_b$LBaseStemmer$IS($this, 3, "nis")) {
-					$this.cursor = (($this.limit - v_2) | 0);
-					break lab1;
-				}
-				if (! BaseStemmer$slice_from$LBaseStemmer$S($this, "")) {
-					return false;
-				}
-			}
-			break;
-		case 3:
-			if (! BaseStemmer$in_grouping_b$LBaseStemmer$AIII($this, GermanStemmer.g_s_ending, 98, 116)) {
-				break lab0;
-			}
-			if (! BaseStemmer$slice_from$LBaseStemmer$S($this, "")) {
-				return false;
-			}
-			break;
-		}
-	}
-	cursor$2 = $this.cursor = (((limit$0 = $this.limit) - v_1) | 0);
-	v_3 = ((limit$0 - cursor$2) | 0);
-	lab2 = true;
-lab2:
-	while (lab2 === true) {
-		lab2 = false;
-		$this.ket = $this.cursor;
-		among_var = BaseStemmer$find_among_b$LBaseStemmer$ALAmong$I($this, GermanStemmer.a_2, 4);
-		if (among_var === 0) {
-			break lab2;
-		}
-		$this.bra = cursor$1 = $this.cursor;
-		if (! (! ($this.I_p1 <= cursor$1) ? false : true)) {
-			break lab2;
-		}
-		switch (among_var) {
-		case 0:
-			break lab2;
-		case 1:
-			if (! BaseStemmer$slice_from$LBaseStemmer$S($this, "")) {
-				return false;
-			}
-			break;
-		case 2:
-			if (! BaseStemmer$in_grouping_b$LBaseStemmer$AIII($this, GermanStemmer.g_st_ending, 98, 116)) {
-				break lab2;
-			}
-			c = ($this.cursor - 3 | 0);
-			if ($this.limit_backward > c || c > $this.limit) {
-				break lab2;
-			}
-			$this.cursor = c;
-			if (! BaseStemmer$slice_from$LBaseStemmer$S($this, "")) {
-				return false;
-			}
-			break;
-		}
-	}
-	cursor$8 = $this.cursor = (((limit$1 = $this.limit) - v_3) | 0);
-	v_4 = ((limit$1 - cursor$8) | 0);
-	lab3 = true;
-lab3:
-	while (lab3 === true) {
-		lab3 = false;
-		$this.ket = $this.cursor;
-		among_var = BaseStemmer$find_among_b$LBaseStemmer$ALAmong$I($this, GermanStemmer.a_4, 8);
-		if (among_var === 0) {
-			break lab3;
-		}
-		$this.bra = cursor$3 = $this.cursor;
-		if (! (! ($this.I_p2 <= cursor$3) ? false : true)) {
-			break lab3;
-		}
-		switch (among_var) {
-		case 0:
-			break lab3;
-		case 1:
-			if (! BaseStemmer$slice_from$LBaseStemmer$S($this, "")) {
-				return false;
-			}
-			v_5 = (($this.limit - $this.cursor) | 0);
-			lab4 = true;
-		lab4:
-			while (lab4 === true) {
-				lab4 = false;
-				$this.ket = $this.cursor;
-				if (! BaseStemmer$eq_s_b$LBaseStemmer$IS($this, 2, "ig")) {
-					$this.cursor = (($this.limit - v_5) | 0);
-					break lab4;
-				}
-				$this.bra = cursor$4 = $this.cursor;
-				v_6 = (($this.limit - cursor$4) | 0);
-				lab5 = true;
-			lab5:
-				while (lab5 === true) {
-					lab5 = false;
-					if (! BaseStemmer$eq_s_b$LBaseStemmer$IS($this, 1, "e")) {
-						break lab5;
-					}
-					$this.cursor = (($this.limit - v_5) | 0);
-					break lab4;
-				}
-				cursor$5 = $this.cursor = (($this.limit - v_6) | 0);
-				if (! (! ($this.I_p2 <= cursor$5) ? false : true)) {
-					$this.cursor = (($this.limit - v_5) | 0);
-					break lab4;
-				}
-				if (! BaseStemmer$slice_from$LBaseStemmer$S($this, "")) {
-					return false;
-				}
-			}
-			break;
-		case 2:
-			v_7 = (($this.limit - $this.cursor) | 0);
-			lab6 = true;
-		lab6:
-			while (lab6 === true) {
-				lab6 = false;
-				if (! BaseStemmer$eq_s_b$LBaseStemmer$IS($this, 1, "e")) {
-					break lab6;
-				}
-				break lab3;
-			}
-			$this.cursor = (($this.limit - v_7) | 0);
-			if (! BaseStemmer$slice_from$LBaseStemmer$S($this, "")) {
-				return false;
-			}
-			break;
-		case 3:
-			if (! BaseStemmer$slice_from$LBaseStemmer$S($this, "")) {
-				return false;
-			}
-			v_8 = (($this.limit - $this.cursor) | 0);
-			lab7 = true;
-		lab7:
-			while (lab7 === true) {
-				lab7 = false;
-				$this.ket = $this.cursor;
-				lab8 = true;
-			lab8:
-				while (lab8 === true) {
-					lab8 = false;
-					v_9 = (($this.limit - $this.cursor) | 0);
-					lab9 = true;
-				lab9:
-					while (lab9 === true) {
-						lab9 = false;
-						if (! BaseStemmer$eq_s_b$LBaseStemmer$IS($this, 2, "er")) {
-							break lab9;
-						}
-						break lab8;
-					}
-					$this.cursor = (($this.limit - v_9) | 0);
-					if (! BaseStemmer$eq_s_b$LBaseStemmer$IS($this, 2, "en")) {
-						$this.cursor = (($this.limit - v_8) | 0);
-						break lab7;
-					}
-				}
-				$this.bra = cursor$6 = $this.cursor;
-				if (! (! ($this.I_p1 <= cursor$6) ? false : true)) {
-					$this.cursor = (($this.limit - v_8) | 0);
-					break lab7;
-				}
-				if (! BaseStemmer$slice_from$LBaseStemmer$S($this, "")) {
-					return false;
-				}
-			}
-			break;
-		case 4:
-			if (! BaseStemmer$slice_from$LBaseStemmer$S($this, "")) {
-				return false;
-			}
-			v_10 = (($this.limit - $this.cursor) | 0);
-			lab10 = true;
-		lab10:
-			while (lab10 === true) {
-				lab10 = false;
-				$this.ket = $this.cursor;
-				among_var = BaseStemmer$find_among_b$LBaseStemmer$ALAmong$I($this, GermanStemmer.a_3, 2);
-				if (among_var === 0) {
-					$this.cursor = (($this.limit - v_10) | 0);
-					break lab10;
-				}
-				$this.bra = cursor$7 = $this.cursor;
-				if (! (! ($this.I_p2 <= cursor$7) ? false : true)) {
-					$this.cursor = (($this.limit - v_10) | 0);
-					break lab10;
-				}
-				switch (among_var) {
-				case 0:
-					$this.cursor = (($this.limit - v_10) | 0);
-					break lab10;
-				case 1:
-					if (! BaseStemmer$slice_from$LBaseStemmer$S($this, "")) {
-						return false;
-					}
-					break;
-				}
-			}
-			break;
-		}
-	}
-	$this.cursor = (($this.limit - v_4) | 0);
-	return true;
-};
-
-GermanStemmer.r_standard_suffix$LGermanStemmer$ = GermanStemmer$r_standard_suffix$LGermanStemmer$;
-
-GermanStemmer.prototype.stem$ = function () {
-	var v_1;
-	var v_2;
-	var v_4;
-	var lab0;
-	var lab1;
-	var lab2;
-	var lab3;
-	var cursor$0;
-	var cursor$1;
-	var cursor$2;
-	v_1 = this.cursor;
-	lab0 = true;
-lab0:
-	while (lab0 === true) {
-		lab0 = false;
-		if (! GermanStemmer$r_prelude$LGermanStemmer$(this)) {
-			break lab0;
-		}
-	}
-	cursor$0 = this.cursor = v_1;
-	v_2 = cursor$0;
-	lab1 = true;
-lab1:
-	while (lab1 === true) {
-		lab1 = false;
-		if (! GermanStemmer$r_mark_regions$LGermanStemmer$(this)) {
-			break lab1;
-		}
-	}
-	cursor$1 = this.cursor = v_2;
-	this.limit_backward = cursor$1;
-	this.cursor = this.limit;
-	lab2 = true;
-lab2:
-	while (lab2 === true) {
-		lab2 = false;
-		if (! GermanStemmer$r_standard_suffix$LGermanStemmer$(this)) {
-			break lab2;
-		}
-	}
-	cursor$2 = this.cursor = this.limit_backward;
-	v_4 = cursor$2;
-	lab3 = true;
-lab3:
-	while (lab3 === true) {
-		lab3 = false;
-		if (! GermanStemmer$r_postlude$LGermanStemmer$(this)) {
-			break lab3;
-		}
-	}
-	this.cursor = v_4;
-	return true;
-};
-
-GermanStemmer.prototype.stem = GermanStemmer.prototype.stem$;
-
-GermanStemmer.prototype.equals$X = function (o) {
-	return o instanceof GermanStemmer;
-};
-
-GermanStemmer.prototype.equals = GermanStemmer.prototype.equals$X;
-
-function GermanStemmer$equals$LGermanStemmer$X($this, o) {
-	return o instanceof GermanStemmer;
-};
-
-GermanStemmer.equals$LGermanStemmer$X = GermanStemmer$equals$LGermanStemmer$X;
-
-GermanStemmer.prototype.hashCode$ = function () {
-	var classname;
-	var hash;
-	var i;
-	var char;
-	classname = "GermanStemmer";
-	hash = 0;
-	for (i = 0; i < classname.length; i++) {
-		char = classname.charCodeAt(i);
-		hash = (hash << 5) - hash + char;
-		hash = hash & hash;
-	}
-	return (hash | 0);
-};
-
-GermanStemmer.prototype.hashCode = GermanStemmer.prototype.hashCode$;
-
-function GermanStemmer$hashCode$LGermanStemmer$($this) {
-	var classname;
-	var hash;
-	var i;
-	var char;
-	classname = "GermanStemmer";
-	hash = 0;
-	for (i = 0; i < classname.length; i++) {
-		char = classname.charCodeAt(i);
-		hash = (hash << 5) - hash + char;
-		hash = hash & hash;
-	}
-	return (hash | 0);
-};
-
-GermanStemmer.hashCode$LGermanStemmer$ = GermanStemmer$hashCode$LGermanStemmer$;
-
-GermanStemmer.serialVersionUID = 1;
-$__jsx_lazy_init(GermanStemmer, "methodObject", function () {
-	return new GermanStemmer();
-});
-$__jsx_lazy_init(GermanStemmer, "a_0", function () {
-	return [ new Among("", -1, 6), new Among("U", 0, 2), new Among("Y", 0, 1), new Among("\u00E4", 0, 3), new Among("\u00F6", 0, 4), new Among("\u00FC", 0, 5) ];
-});
-$__jsx_lazy_init(GermanStemmer, "a_1", function () {
-	return [ new Among("e", -1, 2), new Among("em", -1, 1), new Among("en", -1, 2), new Among("ern", -1, 1), new Among("er", -1, 1), new Among("s", -1, 3), new Among("es", 5, 2) ];
-});
-$__jsx_lazy_init(GermanStemmer, "a_2", function () {
-	return [ new Among("en", -1, 1), new Among("er", -1, 1), new Among("st", -1, 2), new Among("est", 2, 1) ];
-});
-$__jsx_lazy_init(GermanStemmer, "a_3", function () {
-	return [ new Among("ig", -1, 1), new Among("lich", -1, 1) ];
-});
-$__jsx_lazy_init(GermanStemmer, "a_4", function () {
-	return [ new Among("end", -1, 1), new Among("ig", -1, 2), new Among("ung", -1, 1), new Among("lich", -1, 3), new Among("isch", -1, 2), new Among("ik", -1, 2), new Among("heit", -1, 3), new Among("keit", -1, 4) ];
-});
-GermanStemmer.g_v = [ 17, 65, 16, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 32, 8 ];
-GermanStemmer.g_s_ending = [ 117, 30, 5 ];
-GermanStemmer.g_st_ending = [ 117, 30, 4 ];
-
-var $__jsx_classMap = {
-	"src/among.jsx": {
-		Among: Among,
-		Among$SII: Among,
-		Among$SIIF$LBaseStemmer$B$LBaseStemmer$: Among$0
-	},
-	"src/stemmer.jsx": {
-		Stemmer: Stemmer,
-		Stemmer$: Stemmer
-	},
-	"src/base-stemmer.jsx": {
-		BaseStemmer: BaseStemmer,
-		BaseStemmer$: BaseStemmer
-	},
-	"src/german-stemmer.jsx": {
-		GermanStemmer: GermanStemmer,
-		GermanStemmer$: GermanStemmer
-	}
-};
-
-
-})(JSX);
-
-var Among = JSX.require("src/among.jsx").Among;
-var Among$SII = JSX.require("src/among.jsx").Among$SII;
-var Stemmer = JSX.require("src/stemmer.jsx").Stemmer;
-var BaseStemmer = JSX.require("src/base-stemmer.jsx").BaseStemmer;
-var GermanStemmer = JSX.require("src/german-stemmer.jsx").GermanStemmer;
diff --git a/docs/_build/html/_static/alabaster.css b/docs/_build/html/_static/alabaster.css
deleted file mode 100644
index 0eddaeb07..000000000
--- a/docs/_build/html/_static/alabaster.css
+++ /dev/null
@@ -1,701 +0,0 @@
-@import url("basic.css");
-
-/* -- page layout ----------------------------------------------------------- */
-
-body {
-    font-family: Georgia, serif;
-    font-size: 17px;
-    background-color: #fff;
-    color: #000;
-    margin: 0;
-    padding: 0;
-}
-
-
-div.document {
-    width: 940px;
-    margin: 30px auto 0 auto;
-}
-
-div.documentwrapper {
-    float: left;
-    width: 100%;
-}
-
-div.bodywrapper {
-    margin: 0 0 0 220px;
-}
-
-div.sphinxsidebar {
-    width: 220px;
-    font-size: 14px;
-    line-height: 1.5;
-}
-
-hr {
-    border: 1px solid #B1B4B6;
-}
-
-div.body {
-    background-color: #fff;
-    color: #3E4349;
-    padding: 0 30px 0 30px;
-}
-
-div.body > .section {
-    text-align: left;
-}
-
-div.footer {
-    width: 940px;
-    margin: 20px auto 30px auto;
-    font-size: 14px;
-    color: #888;
-    text-align: right;
-}
-
-div.footer a {
-    color: #888;
-}
-
-p.caption {
-    font-family: inherit;
-    font-size: inherit;
-}
-
-
-div.relations {
-    display: none;
-}
-
-
-div.sphinxsidebar a {
-    color: #444;
-    text-decoration: none;
-    border-bottom: 1px dotted #999;
-}
-
-div.sphinxsidebar a:hover {
-    border-bottom: 1px solid #999;
-}
-
-div.sphinxsidebarwrapper {
-    padding: 18px 10px;
-}
-
-div.sphinxsidebarwrapper p.logo {
-    padding: 0;
-    margin: -10px 0 0 0px;
-    text-align: center;
-}
-
-div.sphinxsidebarwrapper h1.logo {
-    margin-top: -10px;
-    text-align: center;
-    margin-bottom: 5px;
-    text-align: left;
-}
-
-div.sphinxsidebarwrapper h1.logo-name {
-    margin-top: 0px;
-}
-
-div.sphinxsidebarwrapper p.blurb {
-    margin-top: 0;
-    font-style: normal;
-}
-
-div.sphinxsidebar h3,
-div.sphinxsidebar h4 {
-    font-family: Georgia, serif;
-    color: #444;
-    font-size: 24px;
-    font-weight: normal;
-    margin: 0 0 5px 0;
-    padding: 0;
-}
-
-div.sphinxsidebar h4 {
-    font-size: 20px;
-}
-
-div.sphinxsidebar h3 a {
-    color: #444;
-}
-
-div.sphinxsidebar p.logo a,
-div.sphinxsidebar h3 a,
-div.sphinxsidebar p.logo a:hover,
-div.sphinxsidebar h3 a:hover {
-    border: none;
-}
-
-div.sphinxsidebar p {
-    color: #555;
-    margin: 10px 0;
-}
-
-div.sphinxsidebar ul {
-    margin: 10px 0;
-    padding: 0;
-    color: #000;
-}
-
-div.sphinxsidebar ul li.toctree-l1 > a {
-    font-size: 120%;
-}
-
-div.sphinxsidebar ul li.toctree-l2 > a {
-    font-size: 110%;
-}
-
-div.sphinxsidebar input {
-    border: 1px solid #CCC;
-    font-family: Georgia, serif;
-    font-size: 1em;
-}
-
-div.sphinxsidebar hr {
-    border: none;
-    height: 1px;
-    color: #AAA;
-    background: #AAA;
-
-    text-align: left;
-    margin-left: 0;
-    width: 50%;
-}
-
-div.sphinxsidebar .badge {
-    border-bottom: none;
-}
-
-div.sphinxsidebar .badge:hover {
-    border-bottom: none;
-}
-
-/* To address an issue with donation coming after search */
-div.sphinxsidebar h3.donation {
-    margin-top: 10px;
-}
-
-/* -- body styles ----------------------------------------------------------- */
-
-a {
-    color: #004B6B;
-    text-decoration: underline;
-}
-
-a:hover {
-    color: #6D4100;
-    text-decoration: underline;
-}
-
-div.body h1,
-div.body h2,
-div.body h3,
-div.body h4,
-div.body h5,
-div.body h6 {
-    font-family: Georgia, serif;
-    font-weight: normal;
-    margin: 30px 0px 10px 0px;
-    padding: 0;
-}
-
-div.body h1 { margin-top: 0; padding-top: 0; font-size: 240%; }
-div.body h2 { font-size: 180%; }
-div.body h3 { font-size: 150%; }
-div.body h4 { font-size: 130%; }
-div.body h5 { font-size: 100%; }
-div.body h6 { font-size: 100%; }
-
-a.headerlink {
-    color: #DDD;
-    padding: 0 4px;
-    text-decoration: none;
-}
-
-a.headerlink:hover {
-    color: #444;
-    background: #EAEAEA;
-}
-
-div.body p, div.body dd, div.body li {
-    line-height: 1.4em;
-}
-
-div.admonition {
-    margin: 20px 0px;
-    padding: 10px 30px;
-    background-color: #EEE;
-    border: 1px solid #CCC;
-}
-
-div.admonition tt.xref, div.admonition code.xref, div.admonition a tt {
-    background-color: #FBFBFB;
-    border-bottom: 1px solid #fafafa;
-}
-
-div.admonition p.admonition-title {
-    font-family: Georgia, serif;
-    font-weight: normal;
-    font-size: 24px;
-    margin: 0 0 10px 0;
-    padding: 0;
-    line-height: 1;
-}
-
-div.admonition p.last {
-    margin-bottom: 0;
-}
-
-div.highlight {
-    background-color: #fff;
-}
-
-dt:target, .highlight {
-    background: #FAF3E8;
-}
-
-div.warning {
-    background-color: #FCC;
-    border: 1px solid #FAA;
-}
-
-div.danger {
-    background-color: #FCC;
-    border: 1px solid #FAA;
-    -moz-box-shadow: 2px 2px 4px #D52C2C;
-    -webkit-box-shadow: 2px 2px 4px #D52C2C;
-    box-shadow: 2px 2px 4px #D52C2C;
-}
-
-div.error {
-    background-color: #FCC;
-    border: 1px solid #FAA;
-    -moz-box-shadow: 2px 2px 4px #D52C2C;
-    -webkit-box-shadow: 2px 2px 4px #D52C2C;
-    box-shadow: 2px 2px 4px #D52C2C;
-}
-
-div.caution {
-    background-color: #FCC;
-    border: 1px solid #FAA;
-}
-
-div.attention {
-    background-color: #FCC;
-    border: 1px solid #FAA;
-}
-
-div.important {
-    background-color: #EEE;
-    border: 1px solid #CCC;
-}
-
-div.note {
-    background-color: #EEE;
-    border: 1px solid #CCC;
-}
-
-div.tip {
-    background-color: #EEE;
-    border: 1px solid #CCC;
-}
-
-div.hint {
-    background-color: #EEE;
-    border: 1px solid #CCC;
-}
-
-div.seealso {
-    background-color: #EEE;
-    border: 1px solid #CCC;
-}
-
-div.topic {
-    background-color: #EEE;
-}
-
-p.admonition-title {
-    display: inline;
-}
-
-p.admonition-title:after {
-    content: ":";
-}
-
-pre, tt, code {
-    font-family: 'Consolas', 'Menlo', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', monospace;
-    font-size: 0.9em;
-}
-
-.hll {
-    background-color: #FFC;
-    margin: 0 -12px;
-    padding: 0 12px;
-    display: block;
-}
-
-img.screenshot {
-}
-
-tt.descname, tt.descclassname, code.descname, code.descclassname {
-    font-size: 0.95em;
-}
-
-tt.descname, code.descname {
-    padding-right: 0.08em;
-}
-
-img.screenshot {
-    -moz-box-shadow: 2px 2px 4px #EEE;
-    -webkit-box-shadow: 2px 2px 4px #EEE;
-    box-shadow: 2px 2px 4px #EEE;
-}
-
-table.docutils {
-    border: 1px solid #888;
-    -moz-box-shadow: 2px 2px 4px #EEE;
-    -webkit-box-shadow: 2px 2px 4px #EEE;
-    box-shadow: 2px 2px 4px #EEE;
-}
-
-table.docutils td, table.docutils th {
-    border: 1px solid #888;
-    padding: 0.25em 0.7em;
-}
-
-table.field-list, table.footnote {
-    border: none;
-    -moz-box-shadow: none;
-    -webkit-box-shadow: none;
-    box-shadow: none;
-}
-
-table.footnote {
-    margin: 15px 0;
-    width: 100%;
-    border: 1px solid #EEE;
-    background: #FDFDFD;
-    font-size: 0.9em;
-}
-
-table.footnote + table.footnote {
-    margin-top: -15px;
-    border-top: none;
-}
-
-table.field-list th {
-    padding: 0 0.8em 0 0;
-}
-
-table.field-list td {
-    padding: 0;
-}
-
-table.field-list p {
-    margin-bottom: 0.8em;
-}
-
-/* Cloned from
- * https://github.com/sphinx-doc/sphinx/commit/ef60dbfce09286b20b7385333d63a60321784e68
- */
-.field-name {
-    -moz-hyphens: manual;
-    -ms-hyphens: manual;
-    -webkit-hyphens: manual;
-    hyphens: manual;
-}
-
-table.footnote td.label {
-    width: .1px;
-    padding: 0.3em 0 0.3em 0.5em;
-}
-
-table.footnote td {
-    padding: 0.3em 0.5em;
-}
-
-dl {
-    margin: 0;
-    padding: 0;
-}
-
-dl dd {
-    margin-left: 30px;
-}
-
-blockquote {
-    margin: 0 0 0 30px;
-    padding: 0;
-}
-
-ul, ol {
-    /* Matches the 30px from the narrow-screen "li > ul" selector below */
-    margin: 10px 0 10px 30px;
-    padding: 0;
-}
-
-pre {
-    background: #EEE;
-    padding: 7px 30px;
-    margin: 15px 0px;
-    line-height: 1.3em;
-}
-
-div.viewcode-block:target {
-    background: #ffd;
-}
-
-dl pre, blockquote pre, li pre {
-    margin-left: 0;
-    padding-left: 30px;
-}
-
-tt, code {
-    background-color: #ecf0f3;
-    color: #222;
-    /* padding: 1px 2px; */
-}
-
-tt.xref, code.xref, a tt {
-    background-color: #FBFBFB;
-    border-bottom: 1px solid #fff;
-}
-
-a.reference {
-    text-decoration: none;
-    border-bottom: 1px dotted #004B6B;
-}
-
-/* Don't put an underline on images */
-a.image-reference, a.image-reference:hover {
-    border-bottom: none;
-}
-
-a.reference:hover {
-    border-bottom: 1px solid #6D4100;
-}
-
-a.footnote-reference {
-    text-decoration: none;
-    font-size: 0.7em;
-    vertical-align: top;
-    border-bottom: 1px dotted #004B6B;
-}
-
-a.footnote-reference:hover {
-    border-bottom: 1px solid #6D4100;
-}
-
-a:hover tt, a:hover code {
-    background: #EEE;
-}
-
-
-@media screen and (max-width: 870px) {
-
-    div.sphinxsidebar {
-    	display: none;
-    }
-
-    div.document {
-       width: 100%;
-
-    }
-
-    div.documentwrapper {
-    	margin-left: 0;
-    	margin-top: 0;
-    	margin-right: 0;
-    	margin-bottom: 0;
-    }
-
-    div.bodywrapper {
-    	margin-top: 0;
-    	margin-right: 0;
-    	margin-bottom: 0;
-    	margin-left: 0;
-    }
-
-    ul {
-    	margin-left: 0;
-    }
-
-	li > ul {
-        /* Matches the 30px from the "ul, ol" selector above */
-		margin-left: 30px;
-	}
-
-    .document {
-    	width: auto;
-    }
-
-    .footer {
-    	width: auto;
-    }
-
-    .bodywrapper {
-    	margin: 0;
-    }
-
-    .footer {
-    	width: auto;
-    }
-
-    .github {
-        display: none;
-    }
-
-
-
-}
-
-
-
-@media screen and (max-width: 875px) {
-
-    body {
-        margin: 0;
-        padding: 20px 30px;
-    }
-
-    div.documentwrapper {
-        float: none;
-        background: #fff;
-    }
-
-    div.sphinxsidebar {
-        display: block;
-        float: none;
-        width: 102.5%;
-        margin: 50px -30px -20px -30px;
-        padding: 10px 20px;
-        background: #333;
-        color: #FFF;
-    }
-
-    div.sphinxsidebar h3, div.sphinxsidebar h4, div.sphinxsidebar p,
-    div.sphinxsidebar h3 a {
-        color: #fff;
-    }
-
-    div.sphinxsidebar a {
-        color: #AAA;
-    }
-
-    div.sphinxsidebar p.logo {
-        display: none;
-    }
-
-    div.document {
-        width: 100%;
-        margin: 0;
-    }
-
-    div.footer {
-        display: none;
-    }
-
-    div.bodywrapper {
-        margin: 0;
-    }
-
-    div.body {
-        min-height: 0;
-        padding: 0;
-    }
-
-    .rtd_doc_footer {
-        display: none;
-    }
-
-    .document {
-        width: auto;
-    }
-
-    .footer {
-        width: auto;
-    }
-
-    .footer {
-        width: auto;
-    }
-
-    .github {
-        display: none;
-    }
-}
-
-
-/* misc. */
-
-.revsys-inline {
-    display: none!important;
-}
-
-/* Make nested-list/multi-paragraph items look better in Releases changelog
- * pages. Without this, docutils' magical list fuckery causes inconsistent
- * formatting between different release sub-lists.
- */
-div#changelog > div.section > ul > li > p:only-child {
-    margin-bottom: 0;
-}
-
-/* Hide fugly table cell borders in ..bibliography:: directive output */
-table.docutils.citation, table.docutils.citation td, table.docutils.citation th {
-  border: none;
-  /* Below needed in some edge cases; if not applied, bottom shadows appear */
-  -moz-box-shadow: none;
-  -webkit-box-shadow: none;
-  box-shadow: none;
-}
-
-
-/* relbar */
-
-.related {
-    line-height: 30px;
-    width: 100%;
-    font-size: 0.9rem;
-}
-
-.related.top {
-    border-bottom: 1px solid #EEE;
-    margin-bottom: 20px;
-}
-
-.related.bottom {
-    border-top: 1px solid #EEE;
-}
-
-.related ul {
-    padding: 0;
-    margin: 0;
-    list-style: none;
-}
-
-.related li {
-    display: inline;
-}
-
-nav#rellinks {
-    float: right;
-}
-
-nav#rellinks li+li:before {
-    content: "|";
-}
-
-nav#breadcrumbs li+li:before {
-    content: "\00BB";
-}
-
-/* Hide certain items when printing */
-@media print {
-    div.related {
-        display: none;
-    }
-}
\ No newline at end of file
diff --git a/docs/_build/html/_static/basic.css b/docs/_build/html/_static/basic.css
deleted file mode 100644
index ea6972d55..000000000
--- a/docs/_build/html/_static/basic.css
+++ /dev/null
@@ -1,764 +0,0 @@
-/*
- * basic.css
- * ~~~~~~~~~
- *
- * Sphinx stylesheet -- basic theme.
- *
- * :copyright: Copyright 2007-2019 by the Sphinx team, see AUTHORS.
- * :license: BSD, see LICENSE for details.
- *
- */
-
-/* -- main layout ----------------------------------------------------------- */
-
-div.clearer {
-    clear: both;
-}
-
-/* -- relbar ---------------------------------------------------------------- */
-
-div.related {
-    width: 100%;
-    font-size: 90%;
-}
-
-div.related h3 {
-    display: none;
-}
-
-div.related ul {
-    margin: 0;
-    padding: 0 0 0 10px;
-    list-style: none;
-}
-
-div.related li {
-    display: inline;
-}
-
-div.related li.right {
-    float: right;
-    margin-right: 5px;
-}
-
-/* -- sidebar --------------------------------------------------------------- */
-
-div.sphinxsidebarwrapper {
-    padding: 10px 5px 0 10px;
-}
-
-div.sphinxsidebar {
-    float: left;
-    width: 230px;
-    margin-left: -100%;
-    font-size: 90%;
-    word-wrap: break-word;
-    overflow-wrap : break-word;
-}
-
-div.sphinxsidebar ul {
-    list-style: none;
-}
-
-div.sphinxsidebar ul ul,
-div.sphinxsidebar ul.want-points {
-    margin-left: 20px;
-    list-style: square;
-}
-
-div.sphinxsidebar ul ul {
-    margin-top: 0;
-    margin-bottom: 0;
-}
-
-div.sphinxsidebar form {
-    margin-top: 10px;
-}
-
-div.sphinxsidebar input {
-    border: 1px solid #98dbcc;
-    font-family: sans-serif;
-    font-size: 1em;
-}
-
-div.sphinxsidebar #searchbox form.search {
-    overflow: hidden;
-}
-
-div.sphinxsidebar #searchbox input[type="text"] {
-    float: left;
-    width: 80%;
-    padding: 0.25em;
-    box-sizing: border-box;
-}
-
-div.sphinxsidebar #searchbox input[type="submit"] {
-    float: left;
-    width: 20%;
-    border-left: none;
-    padding: 0.25em;
-    box-sizing: border-box;
-}
-
-
-img {
-    border: 0;
-    max-width: 100%;
-}
-
-/* -- search page ----------------------------------------------------------- */
-
-ul.search {
-    margin: 10px 0 0 20px;
-    padding: 0;
-}
-
-ul.search li {
-    padding: 5px 0 5px 20px;
-    background-image: url(file.png);
-    background-repeat: no-repeat;
-    background-position: 0 7px;
-}
-
-ul.search li a {
-    font-weight: bold;
-}
-
-ul.search li div.context {
-    color: #888;
-    margin: 2px 0 0 30px;
-    text-align: left;
-}
-
-ul.keywordmatches li.goodmatch a {
-    font-weight: bold;
-}
-
-/* -- index page ------------------------------------------------------------ */
-
-table.contentstable {
-    width: 90%;
-    margin-left: auto;
-    margin-right: auto;
-}
-
-table.contentstable p.biglink {
-    line-height: 150%;
-}
-
-a.biglink {
-    font-size: 1.3em;
-}
-
-span.linkdescr {
-    font-style: italic;
-    padding-top: 5px;
-    font-size: 90%;
-}
-
-/* -- general index --------------------------------------------------------- */
-
-table.indextable {
-    width: 100%;
-}
-
-table.indextable td {
-    text-align: left;
-    vertical-align: top;
-}
-
-table.indextable ul {
-    margin-top: 0;
-    margin-bottom: 0;
-    list-style-type: none;
-}
-
-table.indextable > tbody > tr > td > ul {
-    padding-left: 0em;
-}
-
-table.indextable tr.pcap {
-    height: 10px;
-}
-
-table.indextable tr.cap {
-    margin-top: 10px;
-    background-color: #f2f2f2;
-}
-
-img.toggler {
-    margin-right: 3px;
-    margin-top: 3px;
-    cursor: pointer;
-}
-
-div.modindex-jumpbox {
-    border-top: 1px solid #ddd;
-    border-bottom: 1px solid #ddd;
-    margin: 1em 0 1em 0;
-    padding: 0.4em;
-}
-
-div.genindex-jumpbox {
-    border-top: 1px solid #ddd;
-    border-bottom: 1px solid #ddd;
-    margin: 1em 0 1em 0;
-    padding: 0.4em;
-}
-
-/* -- domain module index --------------------------------------------------- */
-
-table.modindextable td {
-    padding: 2px;
-    border-collapse: collapse;
-}
-
-/* -- general body styles --------------------------------------------------- */
-
-div.body {
-    min-width: 450px;
-    max-width: 800px;
-}
-
-div.body p, div.body dd, div.body li, div.body blockquote {
-    -moz-hyphens: auto;
-    -ms-hyphens: auto;
-    -webkit-hyphens: auto;
-    hyphens: auto;
-}
-
-a.headerlink {
-    visibility: hidden;
-}
-
-a.brackets:before,
-span.brackets > a:before{
-    content: "[";
-}
-
-a.brackets:after,
-span.brackets > a:after {
-    content: "]";
-}
-
-h1:hover > a.headerlink,
-h2:hover > a.headerlink,
-h3:hover > a.headerlink,
-h4:hover > a.headerlink,
-h5:hover > a.headerlink,
-h6:hover > a.headerlink,
-dt:hover > a.headerlink,
-caption:hover > a.headerlink,
-p.caption:hover > a.headerlink,
-div.code-block-caption:hover > a.headerlink {
-    visibility: visible;
-}
-
-div.body p.caption {
-    text-align: inherit;
-}
-
-div.body td {
-    text-align: left;
-}
-
-.first {
-    margin-top: 0 !important;
-}
-
-p.rubric {
-    margin-top: 30px;
-    font-weight: bold;
-}
-
-img.align-left, .figure.align-left, object.align-left {
-    clear: left;
-    float: left;
-    margin-right: 1em;
-}
-
-img.align-right, .figure.align-right, object.align-right {
-    clear: right;
-    float: right;
-    margin-left: 1em;
-}
-
-img.align-center, .figure.align-center, object.align-center {
-  display: block;
-  margin-left: auto;
-  margin-right: auto;
-}
-
-img.align-default, .figure.align-default {
-  display: block;
-  margin-left: auto;
-  margin-right: auto;
-}
-
-.align-left {
-    text-align: left;
-}
-
-.align-center {
-    text-align: center;
-}
-
-.align-default {
-    text-align: center;
-}
-
-.align-right {
-    text-align: right;
-}
-
-/* -- sidebars -------------------------------------------------------------- */
-
-div.sidebar {
-    margin: 0 0 0.5em 1em;
-    border: 1px solid #ddb;
-    padding: 7px 7px 0 7px;
-    background-color: #ffe;
-    width: 40%;
-    float: right;
-}
-
-p.sidebar-title {
-    font-weight: bold;
-}
-
-/* -- topics ---------------------------------------------------------------- */
-
-div.topic {
-    border: 1px solid #ccc;
-    padding: 7px 7px 0 7px;
-    margin: 10px 0 10px 0;
-}
-
-p.topic-title {
-    font-size: 1.1em;
-    font-weight: bold;
-    margin-top: 10px;
-}
-
-/* -- admonitions ----------------------------------------------------------- */
-
-div.admonition {
-    margin-top: 10px;
-    margin-bottom: 10px;
-    padding: 7px;
-}
-
-div.admonition dt {
-    font-weight: bold;
-}
-
-div.admonition dl {
-    margin-bottom: 0;
-}
-
-p.admonition-title {
-    margin: 0px 10px 5px 0px;
-    font-weight: bold;
-}
-
-div.body p.centered {
-    text-align: center;
-    margin-top: 25px;
-}
-
-/* -- tables ---------------------------------------------------------------- */
-
-table.docutils {
-    border: 0;
-    border-collapse: collapse;
-}
-
-table.align-center {
-    margin-left: auto;
-    margin-right: auto;
-}
-
-table.align-default {
-    margin-left: auto;
-    margin-right: auto;
-}
-
-table caption span.caption-number {
-    font-style: italic;
-}
-
-table caption span.caption-text {
-}
-
-table.docutils td, table.docutils th {
-    padding: 1px 8px 1px 5px;
-    border-top: 0;
-    border-left: 0;
-    border-right: 0;
-    border-bottom: 1px solid #aaa;
-}
-
-table.footnote td, table.footnote th {
-    border: 0 !important;
-}
-
-th {
-    text-align: left;
-    padding-right: 5px;
-}
-
-table.citation {
-    border-left: solid 1px gray;
-    margin-left: 1px;
-}
-
-table.citation td {
-    border-bottom: none;
-}
-
-th > p:first-child,
-td > p:first-child {
-    margin-top: 0px;
-}
-
-th > p:last-child,
-td > p:last-child {
-    margin-bottom: 0px;
-}
-
-/* -- figures --------------------------------------------------------------- */
-
-div.figure {
-    margin: 0.5em;
-    padding: 0.5em;
-}
-
-div.figure p.caption {
-    padding: 0.3em;
-}
-
-div.figure p.caption span.caption-number {
-    font-style: italic;
-}
-
-div.figure p.caption span.caption-text {
-}
-
-/* -- field list styles ----------------------------------------------------- */
-
-table.field-list td, table.field-list th {
-    border: 0 !important;
-}
-
-.field-list ul {
-    margin: 0;
-    padding-left: 1em;
-}
-
-.field-list p {
-    margin: 0;
-}
-
-.field-name {
-    -moz-hyphens: manual;
-    -ms-hyphens: manual;
-    -webkit-hyphens: manual;
-    hyphens: manual;
-}
-
-/* -- hlist styles ---------------------------------------------------------- */
-
-table.hlist td {
-    vertical-align: top;
-}
-
-
-/* -- other body styles ----------------------------------------------------- */
-
-ol.arabic {
-    list-style: decimal;
-}
-
-ol.loweralpha {
-    list-style: lower-alpha;
-}
-
-ol.upperalpha {
-    list-style: upper-alpha;
-}
-
-ol.lowerroman {
-    list-style: lower-roman;
-}
-
-ol.upperroman {
-    list-style: upper-roman;
-}
-
-li > p:first-child {
-    margin-top: 0px;
-}
-
-li > p:last-child {
-    margin-bottom: 0px;
-}
-
-dl.footnote > dt,
-dl.citation > dt {
-    float: left;
-}
-
-dl.footnote > dd,
-dl.citation > dd {
-    margin-bottom: 0em;
-}
-
-dl.footnote > dd:after,
-dl.citation > dd:after {
-    content: "";
-    clear: both;
-}
-
-dl.field-list {
-    display: grid;
-    grid-template-columns: fit-content(30%) auto;
-}
-
-dl.field-list > dt {
-    font-weight: bold;
-    word-break: break-word;
-    padding-left: 0.5em;
-    padding-right: 5px;
-}
-
-dl.field-list > dt:after {
-    content: ":";
-}
-
-dl.field-list > dd {
-    padding-left: 0.5em;
-    margin-top: 0em;
-    margin-left: 0em;
-    margin-bottom: 0em;
-}
-
-dl {
-    margin-bottom: 15px;
-}
-
-dd > p:first-child {
-    margin-top: 0px;
-}
-
-dd ul, dd table {
-    margin-bottom: 10px;
-}
-
-dd {
-    margin-top: 3px;
-    margin-bottom: 10px;
-    margin-left: 30px;
-}
-
-dt:target, span.highlighted {
-    background-color: #fbe54e;
-}
-
-rect.highlighted {
-    fill: #fbe54e;
-}
-
-dl.glossary dt {
-    font-weight: bold;
-    font-size: 1.1em;
-}
-
-.optional {
-    font-size: 1.3em;
-}
-
-.sig-paren {
-    font-size: larger;
-}
-
-.versionmodified {
-    font-style: italic;
-}
-
-.system-message {
-    background-color: #fda;
-    padding: 5px;
-    border: 3px solid red;
-}
-
-.footnote:target  {
-    background-color: #ffa;
-}
-
-.line-block {
-    display: block;
-    margin-top: 1em;
-    margin-bottom: 1em;
-}
-
-.line-block .line-block {
-    margin-top: 0;
-    margin-bottom: 0;
-    margin-left: 1.5em;
-}
-
-.guilabel, .menuselection {
-    font-family: sans-serif;
-}
-
-.accelerator {
-    text-decoration: underline;
-}
-
-.classifier {
-    font-style: oblique;
-}
-
-.classifier:before {
-    font-style: normal;
-    margin: 0.5em;
-    content: ":";
-}
-
-abbr, acronym {
-    border-bottom: dotted 1px;
-    cursor: help;
-}
-
-/* -- code displays --------------------------------------------------------- */
-
-pre {
-    overflow: auto;
-    overflow-y: hidden;  /* fixes display issues on Chrome browsers */
-}
-
-span.pre {
-    -moz-hyphens: none;
-    -ms-hyphens: none;
-    -webkit-hyphens: none;
-    hyphens: none;
-}
-
-td.linenos pre {
-    padding: 5px 0px;
-    border: 0;
-    background-color: transparent;
-    color: #aaa;
-}
-
-table.highlighttable {
-    margin-left: 0.5em;
-}
-
-table.highlighttable td {
-    padding: 0 0.5em 0 0.5em;
-}
-
-div.code-block-caption {
-    padding: 2px 5px;
-    font-size: small;
-}
-
-div.code-block-caption code {
-    background-color: transparent;
-}
-
-div.code-block-caption + div > div.highlight > pre {
-    margin-top: 0;
-}
-
-div.code-block-caption span.caption-number {
-    padding: 0.1em 0.3em;
-    font-style: italic;
-}
-
-div.code-block-caption span.caption-text {
-}
-
-div.literal-block-wrapper {
-    padding: 1em 1em 0;
-}
-
-div.literal-block-wrapper div.highlight {
-    margin: 0;
-}
-
-code.descname {
-    background-color: transparent;
-    font-weight: bold;
-    font-size: 1.2em;
-}
-
-code.descclassname {
-    background-color: transparent;
-}
-
-code.xref, a code {
-    background-color: transparent;
-    font-weight: bold;
-}
-
-h1 code, h2 code, h3 code, h4 code, h5 code, h6 code {
-    background-color: transparent;
-}
-
-.viewcode-link {
-    float: right;
-}
-
-.viewcode-back {
-    float: right;
-    font-family: sans-serif;
-}
-
-div.viewcode-block:target {
-    margin: -1px -10px;
-    padding: 0 10px;
-}
-
-/* -- math display ---------------------------------------------------------- */
-
-img.math {
-    vertical-align: middle;
-}
-
-div.body div.math p {
-    text-align: center;
-}
-
-span.eqno {
-    float: right;
-}
-
-span.eqno a.headerlink {
-    position: relative;
-    left: 0px;
-    z-index: 1;
-}
-
-div.math:hover a.headerlink {
-    visibility: visible;
-}
-
-/* -- printout stylesheet --------------------------------------------------- */
-
-@media print {
-    div.document,
-    div.documentwrapper,
-    div.bodywrapper {
-        margin: 0 !important;
-        width: 100%;
-    }
-
-    div.sphinxsidebar,
-    div.related,
-    div.footer,
-    #top-link {
-        display: none;
-    }
-}
\ No newline at end of file
diff --git a/docs/_build/html/_static/custom.css b/docs/_build/html/_static/custom.css
deleted file mode 100644
index 2a924f1d6..000000000
--- a/docs/_build/html/_static/custom.css
+++ /dev/null
@@ -1 +0,0 @@
-/* This file intentionally left blank. */
diff --git a/docs/_build/html/_static/doctools.js b/docs/_build/html/_static/doctools.js
deleted file mode 100644
index b33f87fcb..000000000
--- a/docs/_build/html/_static/doctools.js
+++ /dev/null
@@ -1,314 +0,0 @@
-/*
- * doctools.js
- * ~~~~~~~~~~~
- *
- * Sphinx JavaScript utilities for all documentation.
- *
- * :copyright: Copyright 2007-2019 by the Sphinx team, see AUTHORS.
- * :license: BSD, see LICENSE for details.
- *
- */
-
-/**
- * select a different prefix for underscore
- */
-$u = _.noConflict();
-
-/**
- * make the code below compatible with browsers without
- * an installed firebug like debugger
-if (!window.console || !console.firebug) {
-  var names = ["log", "debug", "info", "warn", "error", "assert", "dir",
-    "dirxml", "group", "groupEnd", "time", "timeEnd", "count", "trace",
-    "profile", "profileEnd"];
-  window.console = {};
-  for (var i = 0; i < names.length; ++i)
-    window.console[names[i]] = function() {};
-}
- */
-
-/**
- * small helper function to urldecode strings
- */
-jQuery.urldecode = function(x) {
-  return decodeURIComponent(x).replace(/\+/g, ' ');
-};
-
-/**
- * small helper function to urlencode strings
- */
-jQuery.urlencode = encodeURIComponent;
-
-/**
- * This function returns the parsed url parameters of the
- * current request. Multiple values per key are supported,
- * it will always return arrays of strings for the value parts.
- */
-jQuery.getQueryParameters = function(s) {
-  if (typeof s === 'undefined')
-    s = document.location.search;
-  var parts = s.substr(s.indexOf('?') + 1).split('&');
-  var result = {};
-  for (var i = 0; i < parts.length; i++) {
-    var tmp = parts[i].split('=', 2);
-    var key = jQuery.urldecode(tmp[0]);
-    var value = jQuery.urldecode(tmp[1]);
-    if (key in result)
-      result[key].push(value);
-    else
-      result[key] = [value];
-  }
-  return result;
-};
-
-/**
- * highlight a given string on a jquery object by wrapping it in
- * span elements with the given class name.
- */
-jQuery.fn.highlightText = function(text, className) {
-  function highlight(node, addItems) {
-    if (node.nodeType === 3) {
-      var val = node.nodeValue;
-      var pos = val.toLowerCase().indexOf(text);
-      if (pos >= 0 &&
-          !jQuery(node.parentNode).hasClass(className) &&
-          !jQuery(node.parentNode).hasClass("nohighlight")) {
-        var span;
-        var isInSVG = jQuery(node).closest("body, svg, foreignObject").is("svg");
-        if (isInSVG) {
-          span = document.createElementNS("http://www.w3.org/2000/svg", "tspan");
-        } else {
-          span = document.createElement("span");
-          span.className = className;
-        }
-        span.appendChild(document.createTextNode(val.substr(pos, text.length)));
-        node.parentNode.insertBefore(span, node.parentNode.insertBefore(
-          document.createTextNode(val.substr(pos + text.length)),
-          node.nextSibling));
-        node.nodeValue = val.substr(0, pos);
-        if (isInSVG) {
-          var rect = document.createElementNS("http://www.w3.org/2000/svg", "rect");
-          var bbox = node.parentElement.getBBox();
-          rect.x.baseVal.value = bbox.x;
-          rect.y.baseVal.value = bbox.y;
-          rect.width.baseVal.value = bbox.width;
-          rect.height.baseVal.value = bbox.height;
-          rect.setAttribute('class', className);
-          addItems.push({
-              "parent": node.parentNode,
-              "target": rect});
-        }
-      }
-    }
-    else if (!jQuery(node).is("button, select, textarea")) {
-      jQuery.each(node.childNodes, function() {
-        highlight(this, addItems);
-      });
-    }
-  }
-  var addItems = [];
-  var result = this.each(function() {
-    highlight(this, addItems);
-  });
-  for (var i = 0; i < addItems.length; ++i) {
-    jQuery(addItems[i].parent).before(addItems[i].target);
-  }
-  return result;
-};
-
-/*
- * backward compatibility for jQuery.browser
- * This will be supported until firefox bug is fixed.
- */
-if (!jQuery.browser) {
-  jQuery.uaMatch = function(ua) {
-    ua = ua.toLowerCase();
-
-    var match = /(chrome)[ \/]([\w.]+)/.exec(ua) ||
-      /(webkit)[ \/]([\w.]+)/.exec(ua) ||
-      /(opera)(?:.*version|)[ \/]([\w.]+)/.exec(ua) ||
-      /(msie) ([\w.]+)/.exec(ua) ||
-      ua.indexOf("compatible") < 0 && /(mozilla)(?:.*? rv:([\w.]+)|)/.exec(ua) ||
-      [];
-
-    return {
-      browser: match[ 1 ] || "",
-      version: match[ 2 ] || "0"
-    };
-  };
-  jQuery.browser = {};
-  jQuery.browser[jQuery.uaMatch(navigator.userAgent).browser] = true;
-}
-
-/**
- * Small JavaScript module for the documentation.
- */
-var Documentation = {
-
-  init : function() {
-    this.fixFirefoxAnchorBug();
-    this.highlightSearchWords();
-    this.initIndexTable();
-    if (DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) {
-      this.initOnKeyListeners();
-    }
-  },
-
-  /**
-   * i18n support
-   */
-  TRANSLATIONS : {},
-  PLURAL_EXPR : function(n) { return n === 1 ? 0 : 1; },
-  LOCALE : 'unknown',
-
-  // gettext and ngettext don't access this so that the functions
-  // can safely bound to a different name (_ = Documentation.gettext)
-  gettext : function(string) {
-    var translated = Documentation.TRANSLATIONS[string];
-    if (typeof translated === 'undefined')
-      return string;
-    return (typeof translated === 'string') ? translated : translated[0];
-  },
-
-  ngettext : function(singular, plural, n) {
-    var translated = Documentation.TRANSLATIONS[singular];
-    if (typeof translated === 'undefined')
-      return (n == 1) ? singular : plural;
-    return translated[Documentation.PLURALEXPR(n)];
-  },
-
-  addTranslations : function(catalog) {
-    for (var key in catalog.messages)
-      this.TRANSLATIONS[key] = catalog.messages[key];
-    this.PLURAL_EXPR = new Function('n', 'return +(' + catalog.plural_expr + ')');
-    this.LOCALE = catalog.locale;
-  },
-
-  /**
-   * add context elements like header anchor links
-   */
-  addContextElements : function() {
-    $('div[id] > :header:first').each(function() {
-      $('<a class="headerlink">\u00B6</a>').
-      attr('href', '#' + this.id).
-      attr('title', _('Permalink to this headline')).
-      appendTo(this);
-    });
-    $('dt[id]').each(function() {
-      $('<a class="headerlink">\u00B6</a>').
-      attr('href', '#' + this.id).
-      attr('title', _('Permalink to this definition')).
-      appendTo(this);
-    });
-  },
-
-  /**
-   * workaround a firefox stupidity
-   * see: https://bugzilla.mozilla.org/show_bug.cgi?id=645075
-   */
-  fixFirefoxAnchorBug : function() {
-    if (document.location.hash && $.browser.mozilla)
-      window.setTimeout(function() {
-        document.location.href += '';
-      }, 10);
-  },
-
-  /**
-   * highlight the search words provided in the url in the text
-   */
-  highlightSearchWords : function() {
-    var params = $.getQueryParameters();
-    var terms = (params.highlight) ? params.highlight[0].split(/\s+/) : [];
-    if (terms.length) {
-      var body = $('div.body');
-      if (!body.length) {
-        body = $('body');
-      }
-      window.setTimeout(function() {
-        $.each(terms, function() {
-          body.highlightText(this.toLowerCase(), 'highlighted');
-        });
-      }, 10);
-      $('<p class="highlight-link"><a href="javascript:Documentation.' +
-        'hideSearchWords()">' + _('Hide Search Matches') + '</a></p>')
-          .appendTo($('#searchbox'));
-    }
-  },
-
-  /**
-   * init the domain index toggle buttons
-   */
-  initIndexTable : function() {
-    var togglers = $('img.toggler').click(function() {
-      var src = $(this).attr('src');
-      var idnum = $(this).attr('id').substr(7);
-      $('tr.cg-' + idnum).toggle();
-      if (src.substr(-9) === 'minus.png')
-        $(this).attr('src', src.substr(0, src.length-9) + 'plus.png');
-      else
-        $(this).attr('src', src.substr(0, src.length-8) + 'minus.png');
-    }).css('display', '');
-    if (DOCUMENTATION_OPTIONS.COLLAPSE_INDEX) {
-        togglers.click();
-    }
-  },
-
-  /**
-   * helper function to hide the search marks again
-   */
-  hideSearchWords : function() {
-    $('#searchbox .highlight-link').fadeOut(300);
-    $('span.highlighted').removeClass('highlighted');
-  },
-
-  /**
-   * make the url absolute
-   */
-  makeURL : function(relativeURL) {
-    return DOCUMENTATION_OPTIONS.URL_ROOT + '/' + relativeURL;
-  },
-
-  /**
-   * get the current relative url
-   */
-  getCurrentURL : function() {
-    var path = document.location.pathname;
-    var parts = path.split(/\//);
-    $.each(DOCUMENTATION_OPTIONS.URL_ROOT.split(/\//), function() {
-      if (this === '..')
-        parts.pop();
-    });
-    var url = parts.join('/');
-    return path.substring(url.lastIndexOf('/') + 1, path.length - 1);
-  },
-
-  initOnKeyListeners: function() {
-    $(document).keyup(function(event) {
-      var activeElementType = document.activeElement.tagName;
-      // don't navigate when in search box or textarea
-      if (activeElementType !== 'TEXTAREA' && activeElementType !== 'INPUT' && activeElementType !== 'SELECT') {
-        switch (event.keyCode) {
-          case 37: // left
-            var prevHref = $('link[rel="prev"]').prop('href');
-            if (prevHref) {
-              window.location.href = prevHref;
-              return false;
-            }
-          case 39: // right
-            var nextHref = $('link[rel="next"]').prop('href');
-            if (nextHref) {
-              window.location.href = nextHref;
-              return false;
-            }
-        }
-      }
-    });
-  }
-};
-
-// quick alias for translations
-_ = Documentation.gettext;
-
-$(document).ready(function() {
-  Documentation.init();
-});
diff --git a/docs/_build/html/_static/documentation_options.js b/docs/_build/html/_static/documentation_options.js
deleted file mode 100644
index 2e2514430..000000000
--- a/docs/_build/html/_static/documentation_options.js
+++ /dev/null
@@ -1,10 +0,0 @@
-var DOCUMENTATION_OPTIONS = {
-    URL_ROOT: document.getElementById("documentation_options").getAttribute('data-url_root'),
-    VERSION: 'Version 1.0.2-dev',
-    LANGUAGE: 'de',
-    COLLAPSE_INDEX: false,
-    FILE_SUFFIX: '.html',
-    HAS_SOURCE: true,
-    SOURCELINK_SUFFIX: '.txt',
-    NAVIGATION_WITH_KEYS: false
-};
\ No newline at end of file
diff --git a/docs/_build/html/_static/file.png b/docs/_build/html/_static/file.png
deleted file mode 100644
index a858a410e4faa62ce324d814e4b816fff83a6fb3..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 286
zcmV+(0pb3MP)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV0002xNkl<Zcmb`G
zgHi?o6ovOGdxdP*AltSE*&JruJwUGI3!FN?xxO>s`hMrGg#P~ix$^RISR_I47Y|r1
z_CyJOe}D1){SET-^Amu_i71Lt6eYfZjRyw@I6OQAIXXHD<M{a4P!N^sPbQKi=?mBx
zoos%BSoiGXjr-;%$QixXMOVNSUNp6L0a1Oz&cgu)wqE?07u5I7qrQIu4Fij)Y3c&0
z@0u_#NH6I?Mk(n;dT}d~^J<WkTLqp|RW-hV56tKpXqu)k@V{?amI+5DOlEU@funz+
kySsbM>fiX^GbOlHe=Ae4>0m)d(f|Me07*qoM6N<$f}vM^LjV8(

diff --git a/docs/_build/html/_static/jquery-3.4.1.js b/docs/_build/html/_static/jquery-3.4.1.js
deleted file mode 100644
index 773ad95c5..000000000
--- a/docs/_build/html/_static/jquery-3.4.1.js
+++ /dev/null
@@ -1,10598 +0,0 @@
-/*!
- * jQuery JavaScript Library v3.4.1
- * https://jquery.com/
- *
- * Includes Sizzle.js
- * https://sizzlejs.com/
- *
- * Copyright JS Foundation and other contributors
- * Released under the MIT license
- * https://jquery.org/license
- *
- * Date: 2019-05-01T21:04Z
- */
-( function( global, factory ) {
-
-	"use strict";
-
-	if ( typeof module === "object" && typeof module.exports === "object" ) {
-
-		// For CommonJS and CommonJS-like environments where a proper `window`
-		// is present, execute the factory and get jQuery.
-		// For environments that do not have a `window` with a `document`
-		// (such as Node.js), expose a factory as module.exports.
-		// This accentuates the need for the creation of a real `window`.
-		// e.g. var jQuery = require("jquery")(window);
-		// See ticket #14549 for more info.
-		module.exports = global.document ?
-			factory( global, true ) :
-			function( w ) {
-				if ( !w.document ) {
-					throw new Error( "jQuery requires a window with a document" );
-				}
-				return factory( w );
-			};
-	} else {
-		factory( global );
-	}
-
-// Pass this if window is not defined yet
-} )( typeof window !== "undefined" ? window : this, function( window, noGlobal ) {
-
-// Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1
-// throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode
-// arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common
-// enough that all such attempts are guarded in a try block.
-"use strict";
-
-var arr = [];
-
-var document = window.document;
-
-var getProto = Object.getPrototypeOf;
-
-var slice = arr.slice;
-
-var concat = arr.concat;
-
-var push = arr.push;
-
-var indexOf = arr.indexOf;
-
-var class2type = {};
-
-var toString = class2type.toString;
-
-var hasOwn = class2type.hasOwnProperty;
-
-var fnToString = hasOwn.toString;
-
-var ObjectFunctionString = fnToString.call( Object );
-
-var support = {};
-
-var isFunction = function isFunction( obj ) {
-
-      // Support: Chrome <=57, Firefox <=52
-      // In some browsers, typeof returns "function" for HTML <object> elements
-      // (i.e., `typeof document.createElement( "object" ) === "function"`).
-      // We don't want to classify *any* DOM node as a function.
-      return typeof obj === "function" && typeof obj.nodeType !== "number";
-  };
-
-
-var isWindow = function isWindow( obj ) {
-		return obj != null && obj === obj.window;
-	};
-
-
-
-
-	var preservedScriptAttributes = {
-		type: true,
-		src: true,
-		nonce: true,
-		noModule: true
-	};
-
-	function DOMEval( code, node, doc ) {
-		doc = doc || document;
-
-		var i, val,
-			script = doc.createElement( "script" );
-
-		script.text = code;
-		if ( node ) {
-			for ( i in preservedScriptAttributes ) {
-
-				// Support: Firefox 64+, Edge 18+
-				// Some browsers don't support the "nonce" property on scripts.
-				// On the other hand, just using `getAttribute` is not enough as
-				// the `nonce` attribute is reset to an empty string whenever it
-				// becomes browsing-context connected.
-				// See https://github.com/whatwg/html/issues/2369
-				// See https://html.spec.whatwg.org/#nonce-attributes
-				// The `node.getAttribute` check was added for the sake of
-				// `jQuery.globalEval` so that it can fake a nonce-containing node
-				// via an object.
-				val = node[ i ] || node.getAttribute && node.getAttribute( i );
-				if ( val ) {
-					script.setAttribute( i, val );
-				}
-			}
-		}
-		doc.head.appendChild( script ).parentNode.removeChild( script );
-	}
-
-
-function toType( obj ) {
-	if ( obj == null ) {
-		return obj + "";
-	}
-
-	// Support: Android <=2.3 only (functionish RegExp)
-	return typeof obj === "object" || typeof obj === "function" ?
-		class2type[ toString.call( obj ) ] || "object" :
-		typeof obj;
-}
-/* global Symbol */
-// Defining this global in .eslintrc.json would create a danger of using the global
-// unguarded in another place, it seems safer to define global only for this module
-
-
-
-var
-	version = "3.4.1",
-
-	// Define a local copy of jQuery
-	jQuery = function( selector, context ) {
-
-		// The jQuery object is actually just the init constructor 'enhanced'
-		// Need init if jQuery is called (just allow error to be thrown if not included)
-		return new jQuery.fn.init( selector, context );
-	},
-
-	// Support: Android <=4.0 only
-	// Make sure we trim BOM and NBSP
-	rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g;
-
-jQuery.fn = jQuery.prototype = {
-
-	// The current version of jQuery being used
-	jquery: version,
-
-	constructor: jQuery,
-
-	// The default length of a jQuery object is 0
-	length: 0,
-
-	toArray: function() {
-		return slice.call( this );
-	},
-
-	// Get the Nth element in the matched element set OR
-	// Get the whole matched element set as a clean array
-	get: function( num ) {
-
-		// Return all the elements in a clean array
-		if ( num == null ) {
-			return slice.call( this );
-		}
-
-		// Return just the one element from the set
-		return num < 0 ? this[ num + this.length ] : this[ num ];
-	},
-
-	// Take an array of elements and push it onto the stack
-	// (returning the new matched element set)
-	pushStack: function( elems ) {
-
-		// Build a new jQuery matched element set
-		var ret = jQuery.merge( this.constructor(), elems );
-
-		// Add the old object onto the stack (as a reference)
-		ret.prevObject = this;
-
-		// Return the newly-formed element set
-		return ret;
-	},
-
-	// Execute a callback for every element in the matched set.
-	each: function( callback ) {
-		return jQuery.each( this, callback );
-	},
-
-	map: function( callback ) {
-		return this.pushStack( jQuery.map( this, function( elem, i ) {
-			return callback.call( elem, i, elem );
-		} ) );
-	},
-
-	slice: function() {
-		return this.pushStack( slice.apply( this, arguments ) );
-	},
-
-	first: function() {
-		return this.eq( 0 );
-	},
-
-	last: function() {
-		return this.eq( -1 );
-	},
-
-	eq: function( i ) {
-		var len = this.length,
-			j = +i + ( i < 0 ? len : 0 );
-		return this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] );
-	},
-
-	end: function() {
-		return this.prevObject || this.constructor();
-	},
-
-	// For internal use only.
-	// Behaves like an Array's method, not like a jQuery method.
-	push: push,
-	sort: arr.sort,
-	splice: arr.splice
-};
-
-jQuery.extend = jQuery.fn.extend = function() {
-	var options, name, src, copy, copyIsArray, clone,
-		target = arguments[ 0 ] || {},
-		i = 1,
-		length = arguments.length,
-		deep = false;
-
-	// Handle a deep copy situation
-	if ( typeof target === "boolean" ) {
-		deep = target;
-
-		// Skip the boolean and the target
-		target = arguments[ i ] || {};
-		i++;
-	}
-
-	// Handle case when target is a string or something (possible in deep copy)
-	if ( typeof target !== "object" && !isFunction( target ) ) {
-		target = {};
-	}
-
-	// Extend jQuery itself if only one argument is passed
-	if ( i === length ) {
-		target = this;
-		i--;
-	}
-
-	for ( ; i < length; i++ ) {
-
-		// Only deal with non-null/undefined values
-		if ( ( options = arguments[ i ] ) != null ) {
-
-			// Extend the base object
-			for ( name in options ) {
-				copy = options[ name ];
-
-				// Prevent Object.prototype pollution
-				// Prevent never-ending loop
-				if ( name === "__proto__" || target === copy ) {
-					continue;
-				}
-
-				// Recurse if we're merging plain objects or arrays
-				if ( deep && copy && ( jQuery.isPlainObject( copy ) ||
-					( copyIsArray = Array.isArray( copy ) ) ) ) {
-					src = target[ name ];
-
-					// Ensure proper type for the source value
-					if ( copyIsArray && !Array.isArray( src ) ) {
-						clone = [];
-					} else if ( !copyIsArray && !jQuery.isPlainObject( src ) ) {
-						clone = {};
-					} else {
-						clone = src;
-					}
-					copyIsArray = false;
-
-					// Never move original objects, clone them
-					target[ name ] = jQuery.extend( deep, clone, copy );
-
-				// Don't bring in undefined values
-				} else if ( copy !== undefined ) {
-					target[ name ] = copy;
-				}
-			}
-		}
-	}
-
-	// Return the modified object
-	return target;
-};
-
-jQuery.extend( {
-
-	// Unique for each copy of jQuery on the page
-	expando: "jQuery" + ( version + Math.random() ).replace( /\D/g, "" ),
-
-	// Assume jQuery is ready without the ready module
-	isReady: true,
-
-	error: function( msg ) {
-		throw new Error( msg );
-	},
-
-	noop: function() {},
-
-	isPlainObject: function( obj ) {
-		var proto, Ctor;
-
-		// Detect obvious negatives
-		// Use toString instead of jQuery.type to catch host objects
-		if ( !obj || toString.call( obj ) !== "[object Object]" ) {
-			return false;
-		}
-
-		proto = getProto( obj );
-
-		// Objects with no prototype (e.g., `Object.create( null )`) are plain
-		if ( !proto ) {
-			return true;
-		}
-
-		// Objects with prototype are plain iff they were constructed by a global Object function
-		Ctor = hasOwn.call( proto, "constructor" ) && proto.constructor;
-		return typeof Ctor === "function" && fnToString.call( Ctor ) === ObjectFunctionString;
-	},
-
-	isEmptyObject: function( obj ) {
-		var name;
-
-		for ( name in obj ) {
-			return false;
-		}
-		return true;
-	},
-
-	// Evaluates a script in a global context
-	globalEval: function( code, options ) {
-		DOMEval( code, { nonce: options && options.nonce } );
-	},
-
-	each: function( obj, callback ) {
-		var length, i = 0;
-
-		if ( isArrayLike( obj ) ) {
-			length = obj.length;
-			for ( ; i < length; i++ ) {
-				if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {
-					break;
-				}
-			}
-		} else {
-			for ( i in obj ) {
-				if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {
-					break;
-				}
-			}
-		}
-
-		return obj;
-	},
-
-	// Support: Android <=4.0 only
-	trim: function( text ) {
-		return text == null ?
-			"" :
-			( text + "" ).replace( rtrim, "" );
-	},
-
-	// results is for internal usage only
-	makeArray: function( arr, results ) {
-		var ret = results || [];
-
-		if ( arr != null ) {
-			if ( isArrayLike( Object( arr ) ) ) {
-				jQuery.merge( ret,
-					typeof arr === "string" ?
-					[ arr ] : arr
-				);
-			} else {
-				push.call( ret, arr );
-			}
-		}
-
-		return ret;
-	},
-
-	inArray: function( elem, arr, i ) {
-		return arr == null ? -1 : indexOf.call( arr, elem, i );
-	},
-
-	// Support: Android <=4.0 only, PhantomJS 1 only
-	// push.apply(_, arraylike) throws on ancient WebKit
-	merge: function( first, second ) {
-		var len = +second.length,
-			j = 0,
-			i = first.length;
-
-		for ( ; j < len; j++ ) {
-			first[ i++ ] = second[ j ];
-		}
-
-		first.length = i;
-
-		return first;
-	},
-
-	grep: function( elems, callback, invert ) {
-		var callbackInverse,
-			matches = [],
-			i = 0,
-			length = elems.length,
-			callbackExpect = !invert;
-
-		// Go through the array, only saving the items
-		// that pass the validator function
-		for ( ; i < length; i++ ) {
-			callbackInverse = !callback( elems[ i ], i );
-			if ( callbackInverse !== callbackExpect ) {
-				matches.push( elems[ i ] );
-			}
-		}
-
-		return matches;
-	},
-
-	// arg is for internal usage only
-	map: function( elems, callback, arg ) {
-		var length, value,
-			i = 0,
-			ret = [];
-
-		// Go through the array, translating each of the items to their new values
-		if ( isArrayLike( elems ) ) {
-			length = elems.length;
-			for ( ; i < length; i++ ) {
-				value = callback( elems[ i ], i, arg );
-
-				if ( value != null ) {
-					ret.push( value );
-				}
-			}
-
-		// Go through every key on the object,
-		} else {
-			for ( i in elems ) {
-				value = callback( elems[ i ], i, arg );
-
-				if ( value != null ) {
-					ret.push( value );
-				}
-			}
-		}
-
-		// Flatten any nested arrays
-		return concat.apply( [], ret );
-	},
-
-	// A global GUID counter for objects
-	guid: 1,
-
-	// jQuery.support is not used in Core but other projects attach their
-	// properties to it so it needs to exist.
-	support: support
-} );
-
-if ( typeof Symbol === "function" ) {
-	jQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ];
-}
-
-// Populate the class2type map
-jQuery.each( "Boolean Number String Function Array Date RegExp Object Error Symbol".split( " " ),
-function( i, name ) {
-	class2type[ "[object " + name + "]" ] = name.toLowerCase();
-} );
-
-function isArrayLike( obj ) {
-
-	// Support: real iOS 8.2 only (not reproducible in simulator)
-	// `in` check used to prevent JIT error (gh-2145)
-	// hasOwn isn't used here due to false negatives
-	// regarding Nodelist length in IE
-	var length = !!obj && "length" in obj && obj.length,
-		type = toType( obj );
-
-	if ( isFunction( obj ) || isWindow( obj ) ) {
-		return false;
-	}
-
-	return type === "array" || length === 0 ||
-		typeof length === "number" && length > 0 && ( length - 1 ) in obj;
-}
-var Sizzle =
-/*!
- * Sizzle CSS Selector Engine v2.3.4
- * https://sizzlejs.com/
- *
- * Copyright JS Foundation and other contributors
- * Released under the MIT license
- * https://js.foundation/
- *
- * Date: 2019-04-08
- */
-(function( window ) {
-
-var i,
-	support,
-	Expr,
-	getText,
-	isXML,
-	tokenize,
-	compile,
-	select,
-	outermostContext,
-	sortInput,
-	hasDuplicate,
-
-	// Local document vars
-	setDocument,
-	document,
-	docElem,
-	documentIsHTML,
-	rbuggyQSA,
-	rbuggyMatches,
-	matches,
-	contains,
-
-	// Instance-specific data
-	expando = "sizzle" + 1 * new Date(),
-	preferredDoc = window.document,
-	dirruns = 0,
-	done = 0,
-	classCache = createCache(),
-	tokenCache = createCache(),
-	compilerCache = createCache(),
-	nonnativeSelectorCache = createCache(),
-	sortOrder = function( a, b ) {
-		if ( a === b ) {
-			hasDuplicate = true;
-		}
-		return 0;
-	},
-
-	// Instance methods
-	hasOwn = ({}).hasOwnProperty,
-	arr = [],
-	pop = arr.pop,
-	push_native = arr.push,
-	push = arr.push,
-	slice = arr.slice,
-	// Use a stripped-down indexOf as it's faster than native
-	// https://jsperf.com/thor-indexof-vs-for/5
-	indexOf = function( list, elem ) {
-		var i = 0,
-			len = list.length;
-		for ( ; i < len; i++ ) {
-			if ( list[i] === elem ) {
-				return i;
-			}
-		}
-		return -1;
-	},
-
-	booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",
-
-	// Regular expressions
-
-	// http://www.w3.org/TR/css3-selectors/#whitespace
-	whitespace = "[\\x20\\t\\r\\n\\f]",
-
-	// http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier
-	identifier = "(?:\\\\.|[\\w-]|[^\0-\\xa0])+",
-
-	// Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors
-	attributes = "\\[" + whitespace + "*(" + identifier + ")(?:" + whitespace +
-		// Operator (capture 2)
-		"*([*^$|!~]?=)" + whitespace +
-		// "Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]"
-		"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" + whitespace +
-		"*\\]",
-
-	pseudos = ":(" + identifier + ")(?:\\((" +
-		// To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:
-		// 1. quoted (capture 3; capture 4 or capture 5)
-		"('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" +
-		// 2. simple (capture 6)
-		"((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" +
-		// 3. anything else (capture 2)
-		".*" +
-		")\\)|)",
-
-	// Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter
-	rwhitespace = new RegExp( whitespace + "+", "g" ),
-	rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", "g" ),
-
-	rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ),
-	rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + "*" ),
-	rdescend = new RegExp( whitespace + "|>" ),
-
-	rpseudo = new RegExp( pseudos ),
-	ridentifier = new RegExp( "^" + identifier + "$" ),
-
-	matchExpr = {
-		"ID": new RegExp( "^#(" + identifier + ")" ),
-		"CLASS": new RegExp( "^\\.(" + identifier + ")" ),
-		"TAG": new RegExp( "^(" + identifier + "|[*])" ),
-		"ATTR": new RegExp( "^" + attributes ),
-		"PSEUDO": new RegExp( "^" + pseudos ),
-		"CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + whitespace +
-			"*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + whitespace +
-			"*(\\d+)|))" + whitespace + "*\\)|)", "i" ),
-		"bool": new RegExp( "^(?:" + booleans + ")$", "i" ),
-		// For use in libraries implementing .is()
-		// We use this for POS matching in `select`
-		"needsContext": new RegExp( "^" + whitespace + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" +
-			whitespace + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" )
-	},
-
-	rhtml = /HTML$/i,
-	rinputs = /^(?:input|select|textarea|button)$/i,
-	rheader = /^h\d$/i,
-
-	rnative = /^[^{]+\{\s*\[native \w/,
-
-	// Easily-parseable/retrievable ID or TAG or CLASS selectors
-	rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,
-
-	rsibling = /[+~]/,
-
-	// CSS escapes
-	// http://www.w3.org/TR/CSS21/syndata.html#escaped-characters
-	runescape = new RegExp( "\\\\([\\da-f]{1,6}" + whitespace + "?|(" + whitespace + ")|.)", "ig" ),
-	funescape = function( _, escaped, escapedWhitespace ) {
-		var high = "0x" + escaped - 0x10000;
-		// NaN means non-codepoint
-		// Support: Firefox<24
-		// Workaround erroneous numeric interpretation of +"0x"
-		return high !== high || escapedWhitespace ?
-			escaped :
-			high < 0 ?
-				// BMP codepoint
-				String.fromCharCode( high + 0x10000 ) :
-				// Supplemental Plane codepoint (surrogate pair)
-				String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );
-	},
-
-	// CSS string/identifier serialization
-	// https://drafts.csswg.org/cssom/#common-serializing-idioms
-	rcssescape = /([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,
-	fcssescape = function( ch, asCodePoint ) {
-		if ( asCodePoint ) {
-
-			// U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER
-			if ( ch === "\0" ) {
-				return "\uFFFD";
-			}
-
-			// Control characters and (dependent upon position) numbers get escaped as code points
-			return ch.slice( 0, -1 ) + "\\" + ch.charCodeAt( ch.length - 1 ).toString( 16 ) + " ";
-		}
-
-		// Other potentially-special ASCII characters get backslash-escaped
-		return "\\" + ch;
-	},
-
-	// Used for iframes
-	// See setDocument()
-	// Removing the function wrapper causes a "Permission Denied"
-	// error in IE
-	unloadHandler = function() {
-		setDocument();
-	},
-
-	inDisabledFieldset = addCombinator(
-		function( elem ) {
-			return elem.disabled === true && elem.nodeName.toLowerCase() === "fieldset";
-		},
-		{ dir: "parentNode", next: "legend" }
-	);
-
-// Optimize for push.apply( _, NodeList )
-try {
-	push.apply(
-		(arr = slice.call( preferredDoc.childNodes )),
-		preferredDoc.childNodes
-	);
-	// Support: Android<4.0
-	// Detect silently failing push.apply
-	arr[ preferredDoc.childNodes.length ].nodeType;
-} catch ( e ) {
-	push = { apply: arr.length ?
-
-		// Leverage slice if possible
-		function( target, els ) {
-			push_native.apply( target, slice.call(els) );
-		} :
-
-		// Support: IE<9
-		// Otherwise append directly
-		function( target, els ) {
-			var j = target.length,
-				i = 0;
-			// Can't trust NodeList.length
-			while ( (target[j++] = els[i++]) ) {}
-			target.length = j - 1;
-		}
-	};
-}
-
-function Sizzle( selector, context, results, seed ) {
-	var m, i, elem, nid, match, groups, newSelector,
-		newContext = context && context.ownerDocument,
-
-		// nodeType defaults to 9, since context defaults to document
-		nodeType = context ? context.nodeType : 9;
-
-	results = results || [];
-
-	// Return early from calls with invalid selector or context
-	if ( typeof selector !== "string" || !selector ||
-		nodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) {
-
-		return results;
-	}
-
-	// Try to shortcut find operations (as opposed to filters) in HTML documents
-	if ( !seed ) {
-
-		if ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) {
-			setDocument( context );
-		}
-		context = context || document;
-
-		if ( documentIsHTML ) {
-
-			// If the selector is sufficiently simple, try using a "get*By*" DOM method
-			// (excepting DocumentFragment context, where the methods don't exist)
-			if ( nodeType !== 11 && (match = rquickExpr.exec( selector )) ) {
-
-				// ID selector
-				if ( (m = match[1]) ) {
-
-					// Document context
-					if ( nodeType === 9 ) {
-						if ( (elem = context.getElementById( m )) ) {
-
-							// Support: IE, Opera, Webkit
-							// TODO: identify versions
-							// getElementById can match elements by name instead of ID
-							if ( elem.id === m ) {
-								results.push( elem );
-								return results;
-							}
-						} else {
-							return results;
-						}
-
-					// Element context
-					} else {
-
-						// Support: IE, Opera, Webkit
-						// TODO: identify versions
-						// getElementById can match elements by name instead of ID
-						if ( newContext && (elem = newContext.getElementById( m )) &&
-							contains( context, elem ) &&
-							elem.id === m ) {
-
-							results.push( elem );
-							return results;
-						}
-					}
-
-				// Type selector
-				} else if ( match[2] ) {
-					push.apply( results, context.getElementsByTagName( selector ) );
-					return results;
-
-				// Class selector
-				} else if ( (m = match[3]) && support.getElementsByClassName &&
-					context.getElementsByClassName ) {
-
-					push.apply( results, context.getElementsByClassName( m ) );
-					return results;
-				}
-			}
-
-			// Take advantage of querySelectorAll
-			if ( support.qsa &&
-				!nonnativeSelectorCache[ selector + " " ] &&
-				(!rbuggyQSA || !rbuggyQSA.test( selector )) &&
-
-				// Support: IE 8 only
-				// Exclude object elements
-				(nodeType !== 1 || context.nodeName.toLowerCase() !== "object") ) {
-
-				newSelector = selector;
-				newContext = context;
-
-				// qSA considers elements outside a scoping root when evaluating child or
-				// descendant combinators, which is not what we want.
-				// In such cases, we work around the behavior by prefixing every selector in the
-				// list with an ID selector referencing the scope context.
-				// Thanks to Andrew Dupont for this technique.
-				if ( nodeType === 1 && rdescend.test( selector ) ) {
-
-					// Capture the context ID, setting it first if necessary
-					if ( (nid = context.getAttribute( "id" )) ) {
-						nid = nid.replace( rcssescape, fcssescape );
-					} else {
-						context.setAttribute( "id", (nid = expando) );
-					}
-
-					// Prefix every selector in the list
-					groups = tokenize( selector );
-					i = groups.length;
-					while ( i-- ) {
-						groups[i] = "#" + nid + " " + toSelector( groups[i] );
-					}
-					newSelector = groups.join( "," );
-
-					// Expand context for sibling selectors
-					newContext = rsibling.test( selector ) && testContext( context.parentNode ) ||
-						context;
-				}
-
-				try {
-					push.apply( results,
-						newContext.querySelectorAll( newSelector )
-					);
-					return results;
-				} catch ( qsaError ) {
-					nonnativeSelectorCache( selector, true );
-				} finally {
-					if ( nid === expando ) {
-						context.removeAttribute( "id" );
-					}
-				}
-			}
-		}
-	}
-
-	// All others
-	return select( selector.replace( rtrim, "$1" ), context, results, seed );
-}
-
-/**
- * Create key-value caches of limited size
- * @returns {function(string, object)} Returns the Object data after storing it on itself with
- *	property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)
- *	deleting the oldest entry
- */
-function createCache() {
-	var keys = [];
-
-	function cache( key, value ) {
-		// Use (key + " ") to avoid collision with native prototype properties (see Issue #157)
-		if ( keys.push( key + " " ) > Expr.cacheLength ) {
-			// Only keep the most recent entries
-			delete cache[ keys.shift() ];
-		}
-		return (cache[ key + " " ] = value);
-	}
-	return cache;
-}
-
-/**
- * Mark a function for special use by Sizzle
- * @param {Function} fn The function to mark
- */
-function markFunction( fn ) {
-	fn[ expando ] = true;
-	return fn;
-}
-
-/**
- * Support testing using an element
- * @param {Function} fn Passed the created element and returns a boolean result
- */
-function assert( fn ) {
-	var el = document.createElement("fieldset");
-
-	try {
-		return !!fn( el );
-	} catch (e) {
-		return false;
-	} finally {
-		// Remove from its parent by default
-		if ( el.parentNode ) {
-			el.parentNode.removeChild( el );
-		}
-		// release memory in IE
-		el = null;
-	}
-}
-
-/**
- * Adds the same handler for all of the specified attrs
- * @param {String} attrs Pipe-separated list of attributes
- * @param {Function} handler The method that will be applied
- */
-function addHandle( attrs, handler ) {
-	var arr = attrs.split("|"),
-		i = arr.length;
-
-	while ( i-- ) {
-		Expr.attrHandle[ arr[i] ] = handler;
-	}
-}
-
-/**
- * Checks document order of two siblings
- * @param {Element} a
- * @param {Element} b
- * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b
- */
-function siblingCheck( a, b ) {
-	var cur = b && a,
-		diff = cur && a.nodeType === 1 && b.nodeType === 1 &&
-			a.sourceIndex - b.sourceIndex;
-
-	// Use IE sourceIndex if available on both nodes
-	if ( diff ) {
-		return diff;
-	}
-
-	// Check if b follows a
-	if ( cur ) {
-		while ( (cur = cur.nextSibling) ) {
-			if ( cur === b ) {
-				return -1;
-			}
-		}
-	}
-
-	return a ? 1 : -1;
-}
-
-/**
- * Returns a function to use in pseudos for input types
- * @param {String} type
- */
-function createInputPseudo( type ) {
-	return function( elem ) {
-		var name = elem.nodeName.toLowerCase();
-		return name === "input" && elem.type === type;
-	};
-}
-
-/**
- * Returns a function to use in pseudos for buttons
- * @param {String} type
- */
-function createButtonPseudo( type ) {
-	return function( elem ) {
-		var name = elem.nodeName.toLowerCase();
-		return (name === "input" || name === "button") && elem.type === type;
-	};
-}
-
-/**
- * Returns a function to use in pseudos for :enabled/:disabled
- * @param {Boolean} disabled true for :disabled; false for :enabled
- */
-function createDisabledPseudo( disabled ) {
-
-	// Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable
-	return function( elem ) {
-
-		// Only certain elements can match :enabled or :disabled
-		// https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled
-		// https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled
-		if ( "form" in elem ) {
-
-			// Check for inherited disabledness on relevant non-disabled elements:
-			// * listed form-associated elements in a disabled fieldset
-			//   https://html.spec.whatwg.org/multipage/forms.html#category-listed
-			//   https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled
-			// * option elements in a disabled optgroup
-			//   https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled
-			// All such elements have a "form" property.
-			if ( elem.parentNode && elem.disabled === false ) {
-
-				// Option elements defer to a parent optgroup if present
-				if ( "label" in elem ) {
-					if ( "label" in elem.parentNode ) {
-						return elem.parentNode.disabled === disabled;
-					} else {
-						return elem.disabled === disabled;
-					}
-				}
-
-				// Support: IE 6 - 11
-				// Use the isDisabled shortcut property to check for disabled fieldset ancestors
-				return elem.isDisabled === disabled ||
-
-					// Where there is no isDisabled, check manually
-					/* jshint -W018 */
-					elem.isDisabled !== !disabled &&
-						inDisabledFieldset( elem ) === disabled;
-			}
-
-			return elem.disabled === disabled;
-
-		// Try to winnow out elements that can't be disabled before trusting the disabled property.
-		// Some victims get caught in our net (label, legend, menu, track), but it shouldn't
-		// even exist on them, let alone have a boolean value.
-		} else if ( "label" in elem ) {
-			return elem.disabled === disabled;
-		}
-
-		// Remaining elements are neither :enabled nor :disabled
-		return false;
-	};
-}
-
-/**
- * Returns a function to use in pseudos for positionals
- * @param {Function} fn
- */
-function createPositionalPseudo( fn ) {
-	return markFunction(function( argument ) {
-		argument = +argument;
-		return markFunction(function( seed, matches ) {
-			var j,
-				matchIndexes = fn( [], seed.length, argument ),
-				i = matchIndexes.length;
-
-			// Match elements found at the specified indexes
-			while ( i-- ) {
-				if ( seed[ (j = matchIndexes[i]) ] ) {
-					seed[j] = !(matches[j] = seed[j]);
-				}
-			}
-		});
-	});
-}
-
-/**
- * Checks a node for validity as a Sizzle context
- * @param {Element|Object=} context
- * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value
- */
-function testContext( context ) {
-	return context && typeof context.getElementsByTagName !== "undefined" && context;
-}
-
-// Expose support vars for convenience
-support = Sizzle.support = {};
-
-/**
- * Detects XML nodes
- * @param {Element|Object} elem An element or a document
- * @returns {Boolean} True iff elem is a non-HTML XML node
- */
-isXML = Sizzle.isXML = function( elem ) {
-	var namespace = elem.namespaceURI,
-		docElem = (elem.ownerDocument || elem).documentElement;
-
-	// Support: IE <=8
-	// Assume HTML when documentElement doesn't yet exist, such as inside loading iframes
-	// https://bugs.jquery.com/ticket/4833
-	return !rhtml.test( namespace || docElem && docElem.nodeName || "HTML" );
-};
-
-/**
- * Sets document-related variables once based on the current document
- * @param {Element|Object} [doc] An element or document object to use to set the document
- * @returns {Object} Returns the current document
- */
-setDocument = Sizzle.setDocument = function( node ) {
-	var hasCompare, subWindow,
-		doc = node ? node.ownerDocument || node : preferredDoc;
-
-	// Return early if doc is invalid or already selected
-	if ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) {
-		return document;
-	}
-
-	// Update global variables
-	document = doc;
-	docElem = document.documentElement;
-	documentIsHTML = !isXML( document );
-
-	// Support: IE 9-11, Edge
-	// Accessing iframe documents after unload throws "permission denied" errors (jQuery #13936)
-	if ( preferredDoc !== document &&
-		(subWindow = document.defaultView) && subWindow.top !== subWindow ) {
-
-		// Support: IE 11, Edge
-		if ( subWindow.addEventListener ) {
-			subWindow.addEventListener( "unload", unloadHandler, false );
-
-		// Support: IE 9 - 10 only
-		} else if ( subWindow.attachEvent ) {
-			subWindow.attachEvent( "onunload", unloadHandler );
-		}
-	}
-
-	/* Attributes
-	---------------------------------------------------------------------- */
-
-	// Support: IE<8
-	// Verify that getAttribute really returns attributes and not properties
-	// (excepting IE8 booleans)
-	support.attributes = assert(function( el ) {
-		el.className = "i";
-		return !el.getAttribute("className");
-	});
-
-	/* getElement(s)By*
-	---------------------------------------------------------------------- */
-
-	// Check if getElementsByTagName("*") returns only elements
-	support.getElementsByTagName = assert(function( el ) {
-		el.appendChild( document.createComment("") );
-		return !el.getElementsByTagName("*").length;
-	});
-
-	// Support: IE<9
-	support.getElementsByClassName = rnative.test( document.getElementsByClassName );
-
-	// Support: IE<10
-	// Check if getElementById returns elements by name
-	// The broken getElementById methods don't pick up programmatically-set names,
-	// so use a roundabout getElementsByName test
-	support.getById = assert(function( el ) {
-		docElem.appendChild( el ).id = expando;
-		return !document.getElementsByName || !document.getElementsByName( expando ).length;
-	});
-
-	// ID filter and find
-	if ( support.getById ) {
-		Expr.filter["ID"] = function( id ) {
-			var attrId = id.replace( runescape, funescape );
-			return function( elem ) {
-				return elem.getAttribute("id") === attrId;
-			};
-		};
-		Expr.find["ID"] = function( id, context ) {
-			if ( typeof context.getElementById !== "undefined" && documentIsHTML ) {
-				var elem = context.getElementById( id );
-				return elem ? [ elem ] : [];
-			}
-		};
-	} else {
-		Expr.filter["ID"] =  function( id ) {
-			var attrId = id.replace( runescape, funescape );
-			return function( elem ) {
-				var node = typeof elem.getAttributeNode !== "undefined" &&
-					elem.getAttributeNode("id");
-				return node && node.value === attrId;
-			};
-		};
-
-		// Support: IE 6 - 7 only
-		// getElementById is not reliable as a find shortcut
-		Expr.find["ID"] = function( id, context ) {
-			if ( typeof context.getElementById !== "undefined" && documentIsHTML ) {
-				var node, i, elems,
-					elem = context.getElementById( id );
-
-				if ( elem ) {
-
-					// Verify the id attribute
-					node = elem.getAttributeNode("id");
-					if ( node && node.value === id ) {
-						return [ elem ];
-					}
-
-					// Fall back on getElementsByName
-					elems = context.getElementsByName( id );
-					i = 0;
-					while ( (elem = elems[i++]) ) {
-						node = elem.getAttributeNode("id");
-						if ( node && node.value === id ) {
-							return [ elem ];
-						}
-					}
-				}
-
-				return [];
-			}
-		};
-	}
-
-	// Tag
-	Expr.find["TAG"] = support.getElementsByTagName ?
-		function( tag, context ) {
-			if ( typeof context.getElementsByTagName !== "undefined" ) {
-				return context.getElementsByTagName( tag );
-
-			// DocumentFragment nodes don't have gEBTN
-			} else if ( support.qsa ) {
-				return context.querySelectorAll( tag );
-			}
-		} :
-
-		function( tag, context ) {
-			var elem,
-				tmp = [],
-				i = 0,
-				// By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too
-				results = context.getElementsByTagName( tag );
-
-			// Filter out possible comments
-			if ( tag === "*" ) {
-				while ( (elem = results[i++]) ) {
-					if ( elem.nodeType === 1 ) {
-						tmp.push( elem );
-					}
-				}
-
-				return tmp;
-			}
-			return results;
-		};
-
-	// Class
-	Expr.find["CLASS"] = support.getElementsByClassName && function( className, context ) {
-		if ( typeof context.getElementsByClassName !== "undefined" && documentIsHTML ) {
-			return context.getElementsByClassName( className );
-		}
-	};
-
-	/* QSA/matchesSelector
-	---------------------------------------------------------------------- */
-
-	// QSA and matchesSelector support
-
-	// matchesSelector(:active) reports false when true (IE9/Opera 11.5)
-	rbuggyMatches = [];
-
-	// qSa(:focus) reports false when true (Chrome 21)
-	// We allow this because of a bug in IE8/9 that throws an error
-	// whenever `document.activeElement` is accessed on an iframe
-	// So, we allow :focus to pass through QSA all the time to avoid the IE error
-	// See https://bugs.jquery.com/ticket/13378
-	rbuggyQSA = [];
-
-	if ( (support.qsa = rnative.test( document.querySelectorAll )) ) {
-		// Build QSA regex
-		// Regex strategy adopted from Diego Perini
-		assert(function( el ) {
-			// Select is set to empty string on purpose
-			// This is to test IE's treatment of not explicitly
-			// setting a boolean content attribute,
-			// since its presence should be enough
-			// https://bugs.jquery.com/ticket/12359
-			docElem.appendChild( el ).innerHTML = "<a id='" + expando + "'></a>" +
-				"<select id='" + expando + "-\r\\' msallowcapture=''>" +
-				"<option selected=''></option></select>";
-
-			// Support: IE8, Opera 11-12.16
-			// Nothing should be selected when empty strings follow ^= or $= or *=
-			// The test attribute must be unknown in Opera but "safe" for WinRT
-			// https://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section
-			if ( el.querySelectorAll("[msallowcapture^='']").length ) {
-				rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:''|\"\")" );
-			}
-
-			// Support: IE8
-			// Boolean attributes and "value" are not treated correctly
-			if ( !el.querySelectorAll("[selected]").length ) {
-				rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" );
-			}
-
-			// Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+
-			if ( !el.querySelectorAll( "[id~=" + expando + "-]" ).length ) {
-				rbuggyQSA.push("~=");
-			}
-
-			// Webkit/Opera - :checked should return selected option elements
-			// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked
-			// IE8 throws error here and will not see later tests
-			if ( !el.querySelectorAll(":checked").length ) {
-				rbuggyQSA.push(":checked");
-			}
-
-			// Support: Safari 8+, iOS 8+
-			// https://bugs.webkit.org/show_bug.cgi?id=136851
-			// In-page `selector#id sibling-combinator selector` fails
-			if ( !el.querySelectorAll( "a#" + expando + "+*" ).length ) {
-				rbuggyQSA.push(".#.+[+~]");
-			}
-		});
-
-		assert(function( el ) {
-			el.innerHTML = "<a href='' disabled='disabled'></a>" +
-				"<select disabled='disabled'><option/></select>";
-
-			// Support: Windows 8 Native Apps
-			// The type and name attributes are restricted during .innerHTML assignment
-			var input = document.createElement("input");
-			input.setAttribute( "type", "hidden" );
-			el.appendChild( input ).setAttribute( "name", "D" );
-
-			// Support: IE8
-			// Enforce case-sensitivity of name attribute
-			if ( el.querySelectorAll("[name=d]").length ) {
-				rbuggyQSA.push( "name" + whitespace + "*[*^$|!~]?=" );
-			}
-
-			// FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled)
-			// IE8 throws error here and will not see later tests
-			if ( el.querySelectorAll(":enabled").length !== 2 ) {
-				rbuggyQSA.push( ":enabled", ":disabled" );
-			}
-
-			// Support: IE9-11+
-			// IE's :disabled selector does not pick up the children of disabled fieldsets
-			docElem.appendChild( el ).disabled = true;
-			if ( el.querySelectorAll(":disabled").length !== 2 ) {
-				rbuggyQSA.push( ":enabled", ":disabled" );
-			}
-
-			// Opera 10-11 does not throw on post-comma invalid pseudos
-			el.querySelectorAll("*,:x");
-			rbuggyQSA.push(",.*:");
-		});
-	}
-
-	if ( (support.matchesSelector = rnative.test( (matches = docElem.matches ||
-		docElem.webkitMatchesSelector ||
-		docElem.mozMatchesSelector ||
-		docElem.oMatchesSelector ||
-		docElem.msMatchesSelector) )) ) {
-
-		assert(function( el ) {
-			// Check to see if it's possible to do matchesSelector
-			// on a disconnected node (IE 9)
-			support.disconnectedMatch = matches.call( el, "*" );
-
-			// This should fail with an exception
-			// Gecko does not error, returns false instead
-			matches.call( el, "[s!='']:x" );
-			rbuggyMatches.push( "!=", pseudos );
-		});
-	}
-
-	rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join("|") );
-	rbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join("|") );
-
-	/* Contains
-	---------------------------------------------------------------------- */
-	hasCompare = rnative.test( docElem.compareDocumentPosition );
-
-	// Element contains another
-	// Purposefully self-exclusive
-	// As in, an element does not contain itself
-	contains = hasCompare || rnative.test( docElem.contains ) ?
-		function( a, b ) {
-			var adown = a.nodeType === 9 ? a.documentElement : a,
-				bup = b && b.parentNode;
-			return a === bup || !!( bup && bup.nodeType === 1 && (
-				adown.contains ?
-					adown.contains( bup ) :
-					a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16
-			));
-		} :
-		function( a, b ) {
-			if ( b ) {
-				while ( (b = b.parentNode) ) {
-					if ( b === a ) {
-						return true;
-					}
-				}
-			}
-			return false;
-		};
-
-	/* Sorting
-	---------------------------------------------------------------------- */
-
-	// Document order sorting
-	sortOrder = hasCompare ?
-	function( a, b ) {
-
-		// Flag for duplicate removal
-		if ( a === b ) {
-			hasDuplicate = true;
-			return 0;
-		}
-
-		// Sort on method existence if only one input has compareDocumentPosition
-		var compare = !a.compareDocumentPosition - !b.compareDocumentPosition;
-		if ( compare ) {
-			return compare;
-		}
-
-		// Calculate position if both inputs belong to the same document
-		compare = ( a.ownerDocument || a ) === ( b.ownerDocument || b ) ?
-			a.compareDocumentPosition( b ) :
-
-			// Otherwise we know they are disconnected
-			1;
-
-		// Disconnected nodes
-		if ( compare & 1 ||
-			(!support.sortDetached && b.compareDocumentPosition( a ) === compare) ) {
-
-			// Choose the first element that is related to our preferred document
-			if ( a === document || a.ownerDocument === preferredDoc && contains(preferredDoc, a) ) {
-				return -1;
-			}
-			if ( b === document || b.ownerDocument === preferredDoc && contains(preferredDoc, b) ) {
-				return 1;
-			}
-
-			// Maintain original order
-			return sortInput ?
-				( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :
-				0;
-		}
-
-		return compare & 4 ? -1 : 1;
-	} :
-	function( a, b ) {
-		// Exit early if the nodes are identical
-		if ( a === b ) {
-			hasDuplicate = true;
-			return 0;
-		}
-
-		var cur,
-			i = 0,
-			aup = a.parentNode,
-			bup = b.parentNode,
-			ap = [ a ],
-			bp = [ b ];
-
-		// Parentless nodes are either documents or disconnected
-		if ( !aup || !bup ) {
-			return a === document ? -1 :
-				b === document ? 1 :
-				aup ? -1 :
-				bup ? 1 :
-				sortInput ?
-				( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :
-				0;
-
-		// If the nodes are siblings, we can do a quick check
-		} else if ( aup === bup ) {
-			return siblingCheck( a, b );
-		}
-
-		// Otherwise we need full lists of their ancestors for comparison
-		cur = a;
-		while ( (cur = cur.parentNode) ) {
-			ap.unshift( cur );
-		}
-		cur = b;
-		while ( (cur = cur.parentNode) ) {
-			bp.unshift( cur );
-		}
-
-		// Walk down the tree looking for a discrepancy
-		while ( ap[i] === bp[i] ) {
-			i++;
-		}
-
-		return i ?
-			// Do a sibling check if the nodes have a common ancestor
-			siblingCheck( ap[i], bp[i] ) :
-
-			// Otherwise nodes in our document sort first
-			ap[i] === preferredDoc ? -1 :
-			bp[i] === preferredDoc ? 1 :
-			0;
-	};
-
-	return document;
-};
-
-Sizzle.matches = function( expr, elements ) {
-	return Sizzle( expr, null, null, elements );
-};
-
-Sizzle.matchesSelector = function( elem, expr ) {
-	// Set document vars if needed
-	if ( ( elem.ownerDocument || elem ) !== document ) {
-		setDocument( elem );
-	}
-
-	if ( support.matchesSelector && documentIsHTML &&
-		!nonnativeSelectorCache[ expr + " " ] &&
-		( !rbuggyMatches || !rbuggyMatches.test( expr ) ) &&
-		( !rbuggyQSA     || !rbuggyQSA.test( expr ) ) ) {
-
-		try {
-			var ret = matches.call( elem, expr );
-
-			// IE 9's matchesSelector returns false on disconnected nodes
-			if ( ret || support.disconnectedMatch ||
-					// As well, disconnected nodes are said to be in a document
-					// fragment in IE 9
-					elem.document && elem.document.nodeType !== 11 ) {
-				return ret;
-			}
-		} catch (e) {
-			nonnativeSelectorCache( expr, true );
-		}
-	}
-
-	return Sizzle( expr, document, null, [ elem ] ).length > 0;
-};
-
-Sizzle.contains = function( context, elem ) {
-	// Set document vars if needed
-	if ( ( context.ownerDocument || context ) !== document ) {
-		setDocument( context );
-	}
-	return contains( context, elem );
-};
-
-Sizzle.attr = function( elem, name ) {
-	// Set document vars if needed
-	if ( ( elem.ownerDocument || elem ) !== document ) {
-		setDocument( elem );
-	}
-
-	var fn = Expr.attrHandle[ name.toLowerCase() ],
-		// Don't get fooled by Object.prototype properties (jQuery #13807)
-		val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ?
-			fn( elem, name, !documentIsHTML ) :
-			undefined;
-
-	return val !== undefined ?
-		val :
-		support.attributes || !documentIsHTML ?
-			elem.getAttribute( name ) :
-			(val = elem.getAttributeNode(name)) && val.specified ?
-				val.value :
-				null;
-};
-
-Sizzle.escape = function( sel ) {
-	return (sel + "").replace( rcssescape, fcssescape );
-};
-
-Sizzle.error = function( msg ) {
-	throw new Error( "Syntax error, unrecognized expression: " + msg );
-};
-
-/**
- * Document sorting and removing duplicates
- * @param {ArrayLike} results
- */
-Sizzle.uniqueSort = function( results ) {
-	var elem,
-		duplicates = [],
-		j = 0,
-		i = 0;
-
-	// Unless we *know* we can detect duplicates, assume their presence
-	hasDuplicate = !support.detectDuplicates;
-	sortInput = !support.sortStable && results.slice( 0 );
-	results.sort( sortOrder );
-
-	if ( hasDuplicate ) {
-		while ( (elem = results[i++]) ) {
-			if ( elem === results[ i ] ) {
-				j = duplicates.push( i );
-			}
-		}
-		while ( j-- ) {
-			results.splice( duplicates[ j ], 1 );
-		}
-	}
-
-	// Clear input after sorting to release objects
-	// See https://github.com/jquery/sizzle/pull/225
-	sortInput = null;
-
-	return results;
-};
-
-/**
- * Utility function for retrieving the text value of an array of DOM nodes
- * @param {Array|Element} elem
- */
-getText = Sizzle.getText = function( elem ) {
-	var node,
-		ret = "",
-		i = 0,
-		nodeType = elem.nodeType;
-
-	if ( !nodeType ) {
-		// If no nodeType, this is expected to be an array
-		while ( (node = elem[i++]) ) {
-			// Do not traverse comment nodes
-			ret += getText( node );
-		}
-	} else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) {
-		// Use textContent for elements
-		// innerText usage removed for consistency of new lines (jQuery #11153)
-		if ( typeof elem.textContent === "string" ) {
-			return elem.textContent;
-		} else {
-			// Traverse its children
-			for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {
-				ret += getText( elem );
-			}
-		}
-	} else if ( nodeType === 3 || nodeType === 4 ) {
-		return elem.nodeValue;
-	}
-	// Do not include comment or processing instruction nodes
-
-	return ret;
-};
-
-Expr = Sizzle.selectors = {
-
-	// Can be adjusted by the user
-	cacheLength: 50,
-
-	createPseudo: markFunction,
-
-	match: matchExpr,
-
-	attrHandle: {},
-
-	find: {},
-
-	relative: {
-		">": { dir: "parentNode", first: true },
-		" ": { dir: "parentNode" },
-		"+": { dir: "previousSibling", first: true },
-		"~": { dir: "previousSibling" }
-	},
-
-	preFilter: {
-		"ATTR": function( match ) {
-			match[1] = match[1].replace( runescape, funescape );
-
-			// Move the given value to match[3] whether quoted or unquoted
-			match[3] = ( match[3] || match[4] || match[5] || "" ).replace( runescape, funescape );
-
-			if ( match[2] === "~=" ) {
-				match[3] = " " + match[3] + " ";
-			}
-
-			return match.slice( 0, 4 );
-		},
-
-		"CHILD": function( match ) {
-			/* matches from matchExpr["CHILD"]
-				1 type (only|nth|...)
-				2 what (child|of-type)
-				3 argument (even|odd|\d*|\d*n([+-]\d+)?|...)
-				4 xn-component of xn+y argument ([+-]?\d*n|)
-				5 sign of xn-component
-				6 x of xn-component
-				7 sign of y-component
-				8 y of y-component
-			*/
-			match[1] = match[1].toLowerCase();
-
-			if ( match[1].slice( 0, 3 ) === "nth" ) {
-				// nth-* requires argument
-				if ( !match[3] ) {
-					Sizzle.error( match[0] );
-				}
-
-				// numeric x and y parameters for Expr.filter.CHILD
-				// remember that false/true cast respectively to 0/1
-				match[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === "even" || match[3] === "odd" ) );
-				match[5] = +( ( match[7] + match[8] ) || match[3] === "odd" );
-
-			// other types prohibit arguments
-			} else if ( match[3] ) {
-				Sizzle.error( match[0] );
-			}
-
-			return match;
-		},
-
-		"PSEUDO": function( match ) {
-			var excess,
-				unquoted = !match[6] && match[2];
-
-			if ( matchExpr["CHILD"].test( match[0] ) ) {
-				return null;
-			}
-
-			// Accept quoted arguments as-is
-			if ( match[3] ) {
-				match[2] = match[4] || match[5] || "";
-
-			// Strip excess characters from unquoted arguments
-			} else if ( unquoted && rpseudo.test( unquoted ) &&
-				// Get excess from tokenize (recursively)
-				(excess = tokenize( unquoted, true )) &&
-				// advance to the next closing parenthesis
-				(excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length) ) {
-
-				// excess is a negative index
-				match[0] = match[0].slice( 0, excess );
-				match[2] = unquoted.slice( 0, excess );
-			}
-
-			// Return only captures needed by the pseudo filter method (type and argument)
-			return match.slice( 0, 3 );
-		}
-	},
-
-	filter: {
-
-		"TAG": function( nodeNameSelector ) {
-			var nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase();
-			return nodeNameSelector === "*" ?
-				function() { return true; } :
-				function( elem ) {
-					return elem.nodeName && elem.nodeName.toLowerCase() === nodeName;
-				};
-		},
-
-		"CLASS": function( className ) {
-			var pattern = classCache[ className + " " ];
-
-			return pattern ||
-				(pattern = new RegExp( "(^|" + whitespace + ")" + className + "(" + whitespace + "|$)" )) &&
-				classCache( className, function( elem ) {
-					return pattern.test( typeof elem.className === "string" && elem.className || typeof elem.getAttribute !== "undefined" && elem.getAttribute("class") || "" );
-				});
-		},
-
-		"ATTR": function( name, operator, check ) {
-			return function( elem ) {
-				var result = Sizzle.attr( elem, name );
-
-				if ( result == null ) {
-					return operator === "!=";
-				}
-				if ( !operator ) {
-					return true;
-				}
-
-				result += "";
-
-				return operator === "=" ? result === check :
-					operator === "!=" ? result !== check :
-					operator === "^=" ? check && result.indexOf( check ) === 0 :
-					operator === "*=" ? check && result.indexOf( check ) > -1 :
-					operator === "$=" ? check && result.slice( -check.length ) === check :
-					operator === "~=" ? ( " " + result.replace( rwhitespace, " " ) + " " ).indexOf( check ) > -1 :
-					operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" :
-					false;
-			};
-		},
-
-		"CHILD": function( type, what, argument, first, last ) {
-			var simple = type.slice( 0, 3 ) !== "nth",
-				forward = type.slice( -4 ) !== "last",
-				ofType = what === "of-type";
-
-			return first === 1 && last === 0 ?
-
-				// Shortcut for :nth-*(n)
-				function( elem ) {
-					return !!elem.parentNode;
-				} :
-
-				function( elem, context, xml ) {
-					var cache, uniqueCache, outerCache, node, nodeIndex, start,
-						dir = simple !== forward ? "nextSibling" : "previousSibling",
-						parent = elem.parentNode,
-						name = ofType && elem.nodeName.toLowerCase(),
-						useCache = !xml && !ofType,
-						diff = false;
-
-					if ( parent ) {
-
-						// :(first|last|only)-(child|of-type)
-						if ( simple ) {
-							while ( dir ) {
-								node = elem;
-								while ( (node = node[ dir ]) ) {
-									if ( ofType ?
-										node.nodeName.toLowerCase() === name :
-										node.nodeType === 1 ) {
-
-										return false;
-									}
-								}
-								// Reverse direction for :only-* (if we haven't yet done so)
-								start = dir = type === "only" && !start && "nextSibling";
-							}
-							return true;
-						}
-
-						start = [ forward ? parent.firstChild : parent.lastChild ];
-
-						// non-xml :nth-child(...) stores cache data on `parent`
-						if ( forward && useCache ) {
-
-							// Seek `elem` from a previously-cached index
-
-							// ...in a gzip-friendly way
-							node = parent;
-							outerCache = node[ expando ] || (node[ expando ] = {});
-
-							// Support: IE <9 only
-							// Defend against cloned attroperties (jQuery gh-1709)
-							uniqueCache = outerCache[ node.uniqueID ] ||
-								(outerCache[ node.uniqueID ] = {});
-
-							cache = uniqueCache[ type ] || [];
-							nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];
-							diff = nodeIndex && cache[ 2 ];
-							node = nodeIndex && parent.childNodes[ nodeIndex ];
-
-							while ( (node = ++nodeIndex && node && node[ dir ] ||
-
-								// Fallback to seeking `elem` from the start
-								(diff = nodeIndex = 0) || start.pop()) ) {
-
-								// When found, cache indexes on `parent` and break
-								if ( node.nodeType === 1 && ++diff && node === elem ) {
-									uniqueCache[ type ] = [ dirruns, nodeIndex, diff ];
-									break;
-								}
-							}
-
-						} else {
-							// Use previously-cached element index if available
-							if ( useCache ) {
-								// ...in a gzip-friendly way
-								node = elem;
-								outerCache = node[ expando ] || (node[ expando ] = {});
-
-								// Support: IE <9 only
-								// Defend against cloned attroperties (jQuery gh-1709)
-								uniqueCache = outerCache[ node.uniqueID ] ||
-									(outerCache[ node.uniqueID ] = {});
-
-								cache = uniqueCache[ type ] || [];
-								nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];
-								diff = nodeIndex;
-							}
-
-							// xml :nth-child(...)
-							// or :nth-last-child(...) or :nth(-last)?-of-type(...)
-							if ( diff === false ) {
-								// Use the same loop as above to seek `elem` from the start
-								while ( (node = ++nodeIndex && node && node[ dir ] ||
-									(diff = nodeIndex = 0) || start.pop()) ) {
-
-									if ( ( ofType ?
-										node.nodeName.toLowerCase() === name :
-										node.nodeType === 1 ) &&
-										++diff ) {
-
-										// Cache the index of each encountered element
-										if ( useCache ) {
-											outerCache = node[ expando ] || (node[ expando ] = {});
-
-											// Support: IE <9 only
-											// Defend against cloned attroperties (jQuery gh-1709)
-											uniqueCache = outerCache[ node.uniqueID ] ||
-												(outerCache[ node.uniqueID ] = {});
-
-											uniqueCache[ type ] = [ dirruns, diff ];
-										}
-
-										if ( node === elem ) {
-											break;
-										}
-									}
-								}
-							}
-						}
-
-						// Incorporate the offset, then check against cycle size
-						diff -= last;
-						return diff === first || ( diff % first === 0 && diff / first >= 0 );
-					}
-				};
-		},
-
-		"PSEUDO": function( pseudo, argument ) {
-			// pseudo-class names are case-insensitive
-			// http://www.w3.org/TR/selectors/#pseudo-classes
-			// Prioritize by case sensitivity in case custom pseudos are added with uppercase letters
-			// Remember that setFilters inherits from pseudos
-			var args,
-				fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] ||
-					Sizzle.error( "unsupported pseudo: " + pseudo );
-
-			// The user may use createPseudo to indicate that
-			// arguments are needed to create the filter function
-			// just as Sizzle does
-			if ( fn[ expando ] ) {
-				return fn( argument );
-			}
-
-			// But maintain support for old signatures
-			if ( fn.length > 1 ) {
-				args = [ pseudo, pseudo, "", argument ];
-				return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ?
-					markFunction(function( seed, matches ) {
-						var idx,
-							matched = fn( seed, argument ),
-							i = matched.length;
-						while ( i-- ) {
-							idx = indexOf( seed, matched[i] );
-							seed[ idx ] = !( matches[ idx ] = matched[i] );
-						}
-					}) :
-					function( elem ) {
-						return fn( elem, 0, args );
-					};
-			}
-
-			return fn;
-		}
-	},
-
-	pseudos: {
-		// Potentially complex pseudos
-		"not": markFunction(function( selector ) {
-			// Trim the selector passed to compile
-			// to avoid treating leading and trailing
-			// spaces as combinators
-			var input = [],
-				results = [],
-				matcher = compile( selector.replace( rtrim, "$1" ) );
-
-			return matcher[ expando ] ?
-				markFunction(function( seed, matches, context, xml ) {
-					var elem,
-						unmatched = matcher( seed, null, xml, [] ),
-						i = seed.length;
-
-					// Match elements unmatched by `matcher`
-					while ( i-- ) {
-						if ( (elem = unmatched[i]) ) {
-							seed[i] = !(matches[i] = elem);
-						}
-					}
-				}) :
-				function( elem, context, xml ) {
-					input[0] = elem;
-					matcher( input, null, xml, results );
-					// Don't keep the element (issue #299)
-					input[0] = null;
-					return !results.pop();
-				};
-		}),
-
-		"has": markFunction(function( selector ) {
-			return function( elem ) {
-				return Sizzle( selector, elem ).length > 0;
-			};
-		}),
-
-		"contains": markFunction(function( text ) {
-			text = text.replace( runescape, funescape );
-			return function( elem ) {
-				return ( elem.textContent || getText( elem ) ).indexOf( text ) > -1;
-			};
-		}),
-
-		// "Whether an element is represented by a :lang() selector
-		// is based solely on the element's language value
-		// being equal to the identifier C,
-		// or beginning with the identifier C immediately followed by "-".
-		// The matching of C against the element's language value is performed case-insensitively.
-		// The identifier C does not have to be a valid language name."
-		// http://www.w3.org/TR/selectors/#lang-pseudo
-		"lang": markFunction( function( lang ) {
-			// lang value must be a valid identifier
-			if ( !ridentifier.test(lang || "") ) {
-				Sizzle.error( "unsupported lang: " + lang );
-			}
-			lang = lang.replace( runescape, funescape ).toLowerCase();
-			return function( elem ) {
-				var elemLang;
-				do {
-					if ( (elemLang = documentIsHTML ?
-						elem.lang :
-						elem.getAttribute("xml:lang") || elem.getAttribute("lang")) ) {
-
-						elemLang = elemLang.toLowerCase();
-						return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0;
-					}
-				} while ( (elem = elem.parentNode) && elem.nodeType === 1 );
-				return false;
-			};
-		}),
-
-		// Miscellaneous
-		"target": function( elem ) {
-			var hash = window.location && window.location.hash;
-			return hash && hash.slice( 1 ) === elem.id;
-		},
-
-		"root": function( elem ) {
-			return elem === docElem;
-		},
-
-		"focus": function( elem ) {
-			return elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex);
-		},
-
-		// Boolean properties
-		"enabled": createDisabledPseudo( false ),
-		"disabled": createDisabledPseudo( true ),
-
-		"checked": function( elem ) {
-			// In CSS3, :checked should return both checked and selected elements
-			// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked
-			var nodeName = elem.nodeName.toLowerCase();
-			return (nodeName === "input" && !!elem.checked) || (nodeName === "option" && !!elem.selected);
-		},
-
-		"selected": function( elem ) {
-			// Accessing this property makes selected-by-default
-			// options in Safari work properly
-			if ( elem.parentNode ) {
-				elem.parentNode.selectedIndex;
-			}
-
-			return elem.selected === true;
-		},
-
-		// Contents
-		"empty": function( elem ) {
-			// http://www.w3.org/TR/selectors/#empty-pseudo
-			// :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),
-			//   but not by others (comment: 8; processing instruction: 7; etc.)
-			// nodeType < 6 works because attributes (2) do not appear as children
-			for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {
-				if ( elem.nodeType < 6 ) {
-					return false;
-				}
-			}
-			return true;
-		},
-
-		"parent": function( elem ) {
-			return !Expr.pseudos["empty"]( elem );
-		},
-
-		// Element/input types
-		"header": function( elem ) {
-			return rheader.test( elem.nodeName );
-		},
-
-		"input": function( elem ) {
-			return rinputs.test( elem.nodeName );
-		},
-
-		"button": function( elem ) {
-			var name = elem.nodeName.toLowerCase();
-			return name === "input" && elem.type === "button" || name === "button";
-		},
-
-		"text": function( elem ) {
-			var attr;
-			return elem.nodeName.toLowerCase() === "input" &&
-				elem.type === "text" &&
-
-				// Support: IE<8
-				// New HTML5 attribute values (e.g., "search") appear with elem.type === "text"
-				( (attr = elem.getAttribute("type")) == null || attr.toLowerCase() === "text" );
-		},
-
-		// Position-in-collection
-		"first": createPositionalPseudo(function() {
-			return [ 0 ];
-		}),
-
-		"last": createPositionalPseudo(function( matchIndexes, length ) {
-			return [ length - 1 ];
-		}),
-
-		"eq": createPositionalPseudo(function( matchIndexes, length, argument ) {
-			return [ argument < 0 ? argument + length : argument ];
-		}),
-
-		"even": createPositionalPseudo(function( matchIndexes, length ) {
-			var i = 0;
-			for ( ; i < length; i += 2 ) {
-				matchIndexes.push( i );
-			}
-			return matchIndexes;
-		}),
-
-		"odd": createPositionalPseudo(function( matchIndexes, length ) {
-			var i = 1;
-			for ( ; i < length; i += 2 ) {
-				matchIndexes.push( i );
-			}
-			return matchIndexes;
-		}),
-
-		"lt": createPositionalPseudo(function( matchIndexes, length, argument ) {
-			var i = argument < 0 ?
-				argument + length :
-				argument > length ?
-					length :
-					argument;
-			for ( ; --i >= 0; ) {
-				matchIndexes.push( i );
-			}
-			return matchIndexes;
-		}),
-
-		"gt": createPositionalPseudo(function( matchIndexes, length, argument ) {
-			var i = argument < 0 ? argument + length : argument;
-			for ( ; ++i < length; ) {
-				matchIndexes.push( i );
-			}
-			return matchIndexes;
-		})
-	}
-};
-
-Expr.pseudos["nth"] = Expr.pseudos["eq"];
-
-// Add button/input type pseudos
-for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) {
-	Expr.pseudos[ i ] = createInputPseudo( i );
-}
-for ( i in { submit: true, reset: true } ) {
-	Expr.pseudos[ i ] = createButtonPseudo( i );
-}
-
-// Easy API for creating new setFilters
-function setFilters() {}
-setFilters.prototype = Expr.filters = Expr.pseudos;
-Expr.setFilters = new setFilters();
-
-tokenize = Sizzle.tokenize = function( selector, parseOnly ) {
-	var matched, match, tokens, type,
-		soFar, groups, preFilters,
-		cached = tokenCache[ selector + " " ];
-
-	if ( cached ) {
-		return parseOnly ? 0 : cached.slice( 0 );
-	}
-
-	soFar = selector;
-	groups = [];
-	preFilters = Expr.preFilter;
-
-	while ( soFar ) {
-
-		// Comma and first run
-		if ( !matched || (match = rcomma.exec( soFar )) ) {
-			if ( match ) {
-				// Don't consume trailing commas as valid
-				soFar = soFar.slice( match[0].length ) || soFar;
-			}
-			groups.push( (tokens = []) );
-		}
-
-		matched = false;
-
-		// Combinators
-		if ( (match = rcombinators.exec( soFar )) ) {
-			matched = match.shift();
-			tokens.push({
-				value: matched,
-				// Cast descendant combinators to space
-				type: match[0].replace( rtrim, " " )
-			});
-			soFar = soFar.slice( matched.length );
-		}
-
-		// Filters
-		for ( type in Expr.filter ) {
-			if ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] ||
-				(match = preFilters[ type ]( match ))) ) {
-				matched = match.shift();
-				tokens.push({
-					value: matched,
-					type: type,
-					matches: match
-				});
-				soFar = soFar.slice( matched.length );
-			}
-		}
-
-		if ( !matched ) {
-			break;
-		}
-	}
-
-	// Return the length of the invalid excess
-	// if we're just parsing
-	// Otherwise, throw an error or return tokens
-	return parseOnly ?
-		soFar.length :
-		soFar ?
-			Sizzle.error( selector ) :
-			// Cache the tokens
-			tokenCache( selector, groups ).slice( 0 );
-};
-
-function toSelector( tokens ) {
-	var i = 0,
-		len = tokens.length,
-		selector = "";
-	for ( ; i < len; i++ ) {
-		selector += tokens[i].value;
-	}
-	return selector;
-}
-
-function addCombinator( matcher, combinator, base ) {
-	var dir = combinator.dir,
-		skip = combinator.next,
-		key = skip || dir,
-		checkNonElements = base && key === "parentNode",
-		doneName = done++;
-
-	return combinator.first ?
-		// Check against closest ancestor/preceding element
-		function( elem, context, xml ) {
-			while ( (elem = elem[ dir ]) ) {
-				if ( elem.nodeType === 1 || checkNonElements ) {
-					return matcher( elem, context, xml );
-				}
-			}
-			return false;
-		} :
-
-		// Check against all ancestor/preceding elements
-		function( elem, context, xml ) {
-			var oldCache, uniqueCache, outerCache,
-				newCache = [ dirruns, doneName ];
-
-			// We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching
-			if ( xml ) {
-				while ( (elem = elem[ dir ]) ) {
-					if ( elem.nodeType === 1 || checkNonElements ) {
-						if ( matcher( elem, context, xml ) ) {
-							return true;
-						}
-					}
-				}
-			} else {
-				while ( (elem = elem[ dir ]) ) {
-					if ( elem.nodeType === 1 || checkNonElements ) {
-						outerCache = elem[ expando ] || (elem[ expando ] = {});
-
-						// Support: IE <9 only
-						// Defend against cloned attroperties (jQuery gh-1709)
-						uniqueCache = outerCache[ elem.uniqueID ] || (outerCache[ elem.uniqueID ] = {});
-
-						if ( skip && skip === elem.nodeName.toLowerCase() ) {
-							elem = elem[ dir ] || elem;
-						} else if ( (oldCache = uniqueCache[ key ]) &&
-							oldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) {
-
-							// Assign to newCache so results back-propagate to previous elements
-							return (newCache[ 2 ] = oldCache[ 2 ]);
-						} else {
-							// Reuse newcache so results back-propagate to previous elements
-							uniqueCache[ key ] = newCache;
-
-							// A match means we're done; a fail means we have to keep checking
-							if ( (newCache[ 2 ] = matcher( elem, context, xml )) ) {
-								return true;
-							}
-						}
-					}
-				}
-			}
-			return false;
-		};
-}
-
-function elementMatcher( matchers ) {
-	return matchers.length > 1 ?
-		function( elem, context, xml ) {
-			var i = matchers.length;
-			while ( i-- ) {
-				if ( !matchers[i]( elem, context, xml ) ) {
-					return false;
-				}
-			}
-			return true;
-		} :
-		matchers[0];
-}
-
-function multipleContexts( selector, contexts, results ) {
-	var i = 0,
-		len = contexts.length;
-	for ( ; i < len; i++ ) {
-		Sizzle( selector, contexts[i], results );
-	}
-	return results;
-}
-
-function condense( unmatched, map, filter, context, xml ) {
-	var elem,
-		newUnmatched = [],
-		i = 0,
-		len = unmatched.length,
-		mapped = map != null;
-
-	for ( ; i < len; i++ ) {
-		if ( (elem = unmatched[i]) ) {
-			if ( !filter || filter( elem, context, xml ) ) {
-				newUnmatched.push( elem );
-				if ( mapped ) {
-					map.push( i );
-				}
-			}
-		}
-	}
-
-	return newUnmatched;
-}
-
-function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) {
-	if ( postFilter && !postFilter[ expando ] ) {
-		postFilter = setMatcher( postFilter );
-	}
-	if ( postFinder && !postFinder[ expando ] ) {
-		postFinder = setMatcher( postFinder, postSelector );
-	}
-	return markFunction(function( seed, results, context, xml ) {
-		var temp, i, elem,
-			preMap = [],
-			postMap = [],
-			preexisting = results.length,
-
-			// Get initial elements from seed or context
-			elems = seed || multipleContexts( selector || "*", context.nodeType ? [ context ] : context, [] ),
-
-			// Prefilter to get matcher input, preserving a map for seed-results synchronization
-			matcherIn = preFilter && ( seed || !selector ) ?
-				condense( elems, preMap, preFilter, context, xml ) :
-				elems,
-
-			matcherOut = matcher ?
-				// If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results,
-				postFinder || ( seed ? preFilter : preexisting || postFilter ) ?
-
-					// ...intermediate processing is necessary
-					[] :
-
-					// ...otherwise use results directly
-					results :
-				matcherIn;
-
-		// Find primary matches
-		if ( matcher ) {
-			matcher( matcherIn, matcherOut, context, xml );
-		}
-
-		// Apply postFilter
-		if ( postFilter ) {
-			temp = condense( matcherOut, postMap );
-			postFilter( temp, [], context, xml );
-
-			// Un-match failing elements by moving them back to matcherIn
-			i = temp.length;
-			while ( i-- ) {
-				if ( (elem = temp[i]) ) {
-					matcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem);
-				}
-			}
-		}
-
-		if ( seed ) {
-			if ( postFinder || preFilter ) {
-				if ( postFinder ) {
-					// Get the final matcherOut by condensing this intermediate into postFinder contexts
-					temp = [];
-					i = matcherOut.length;
-					while ( i-- ) {
-						if ( (elem = matcherOut[i]) ) {
-							// Restore matcherIn since elem is not yet a final match
-							temp.push( (matcherIn[i] = elem) );
-						}
-					}
-					postFinder( null, (matcherOut = []), temp, xml );
-				}
-
-				// Move matched elements from seed to results to keep them synchronized
-				i = matcherOut.length;
-				while ( i-- ) {
-					if ( (elem = matcherOut[i]) &&
-						(temp = postFinder ? indexOf( seed, elem ) : preMap[i]) > -1 ) {
-
-						seed[temp] = !(results[temp] = elem);
-					}
-				}
-			}
-
-		// Add elements to results, through postFinder if defined
-		} else {
-			matcherOut = condense(
-				matcherOut === results ?
-					matcherOut.splice( preexisting, matcherOut.length ) :
-					matcherOut
-			);
-			if ( postFinder ) {
-				postFinder( null, results, matcherOut, xml );
-			} else {
-				push.apply( results, matcherOut );
-			}
-		}
-	});
-}
-
-function matcherFromTokens( tokens ) {
-	var checkContext, matcher, j,
-		len = tokens.length,
-		leadingRelative = Expr.relative[ tokens[0].type ],
-		implicitRelative = leadingRelative || Expr.relative[" "],
-		i = leadingRelative ? 1 : 0,
-
-		// The foundational matcher ensures that elements are reachable from top-level context(s)
-		matchContext = addCombinator( function( elem ) {
-			return elem === checkContext;
-		}, implicitRelative, true ),
-		matchAnyContext = addCombinator( function( elem ) {
-			return indexOf( checkContext, elem ) > -1;
-		}, implicitRelative, true ),
-		matchers = [ function( elem, context, xml ) {
-			var ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || (
-				(checkContext = context).nodeType ?
-					matchContext( elem, context, xml ) :
-					matchAnyContext( elem, context, xml ) );
-			// Avoid hanging onto element (issue #299)
-			checkContext = null;
-			return ret;
-		} ];
-
-	for ( ; i < len; i++ ) {
-		if ( (matcher = Expr.relative[ tokens[i].type ]) ) {
-			matchers = [ addCombinator(elementMatcher( matchers ), matcher) ];
-		} else {
-			matcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches );
-
-			// Return special upon seeing a positional matcher
-			if ( matcher[ expando ] ) {
-				// Find the next relative operator (if any) for proper handling
-				j = ++i;
-				for ( ; j < len; j++ ) {
-					if ( Expr.relative[ tokens[j].type ] ) {
-						break;
-					}
-				}
-				return setMatcher(
-					i > 1 && elementMatcher( matchers ),
-					i > 1 && toSelector(
-						// If the preceding token was a descendant combinator, insert an implicit any-element `*`
-						tokens.slice( 0, i - 1 ).concat({ value: tokens[ i - 2 ].type === " " ? "*" : "" })
-					).replace( rtrim, "$1" ),
-					matcher,
-					i < j && matcherFromTokens( tokens.slice( i, j ) ),
-					j < len && matcherFromTokens( (tokens = tokens.slice( j )) ),
-					j < len && toSelector( tokens )
-				);
-			}
-			matchers.push( matcher );
-		}
-	}
-
-	return elementMatcher( matchers );
-}
-
-function matcherFromGroupMatchers( elementMatchers, setMatchers ) {
-	var bySet = setMatchers.length > 0,
-		byElement = elementMatchers.length > 0,
-		superMatcher = function( seed, context, xml, results, outermost ) {
-			var elem, j, matcher,
-				matchedCount = 0,
-				i = "0",
-				unmatched = seed && [],
-				setMatched = [],
-				contextBackup = outermostContext,
-				// We must always have either seed elements or outermost context
-				elems = seed || byElement && Expr.find["TAG"]( "*", outermost ),
-				// Use integer dirruns iff this is the outermost matcher
-				dirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1),
-				len = elems.length;
-
-			if ( outermost ) {
-				outermostContext = context === document || context || outermost;
-			}
-
-			// Add elements passing elementMatchers directly to results
-			// Support: IE<9, Safari
-			// Tolerate NodeList properties (IE: "length"; Safari: <number>) matching elements by id
-			for ( ; i !== len && (elem = elems[i]) != null; i++ ) {
-				if ( byElement && elem ) {
-					j = 0;
-					if ( !context && elem.ownerDocument !== document ) {
-						setDocument( elem );
-						xml = !documentIsHTML;
-					}
-					while ( (matcher = elementMatchers[j++]) ) {
-						if ( matcher( elem, context || document, xml) ) {
-							results.push( elem );
-							break;
-						}
-					}
-					if ( outermost ) {
-						dirruns = dirrunsUnique;
-					}
-				}
-
-				// Track unmatched elements for set filters
-				if ( bySet ) {
-					// They will have gone through all possible matchers
-					if ( (elem = !matcher && elem) ) {
-						matchedCount--;
-					}
-
-					// Lengthen the array for every element, matched or not
-					if ( seed ) {
-						unmatched.push( elem );
-					}
-				}
-			}
-
-			// `i` is now the count of elements visited above, and adding it to `matchedCount`
-			// makes the latter nonnegative.
-			matchedCount += i;
-
-			// Apply set filters to unmatched elements
-			// NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount`
-			// equals `i`), unless we didn't visit _any_ elements in the above loop because we have
-			// no element matchers and no seed.
-			// Incrementing an initially-string "0" `i` allows `i` to remain a string only in that
-			// case, which will result in a "00" `matchedCount` that differs from `i` but is also
-			// numerically zero.
-			if ( bySet && i !== matchedCount ) {
-				j = 0;
-				while ( (matcher = setMatchers[j++]) ) {
-					matcher( unmatched, setMatched, context, xml );
-				}
-
-				if ( seed ) {
-					// Reintegrate element matches to eliminate the need for sorting
-					if ( matchedCount > 0 ) {
-						while ( i-- ) {
-							if ( !(unmatched[i] || setMatched[i]) ) {
-								setMatched[i] = pop.call( results );
-							}
-						}
-					}
-
-					// Discard index placeholder values to get only actual matches
-					setMatched = condense( setMatched );
-				}
-
-				// Add matches to results
-				push.apply( results, setMatched );
-
-				// Seedless set matches succeeding multiple successful matchers stipulate sorting
-				if ( outermost && !seed && setMatched.length > 0 &&
-					( matchedCount + setMatchers.length ) > 1 ) {
-
-					Sizzle.uniqueSort( results );
-				}
-			}
-
-			// Override manipulation of globals by nested matchers
-			if ( outermost ) {
-				dirruns = dirrunsUnique;
-				outermostContext = contextBackup;
-			}
-
-			return unmatched;
-		};
-
-	return bySet ?
-		markFunction( superMatcher ) :
-		superMatcher;
-}
-
-compile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) {
-	var i,
-		setMatchers = [],
-		elementMatchers = [],
-		cached = compilerCache[ selector + " " ];
-
-	if ( !cached ) {
-		// Generate a function of recursive functions that can be used to check each element
-		if ( !match ) {
-			match = tokenize( selector );
-		}
-		i = match.length;
-		while ( i-- ) {
-			cached = matcherFromTokens( match[i] );
-			if ( cached[ expando ] ) {
-				setMatchers.push( cached );
-			} else {
-				elementMatchers.push( cached );
-			}
-		}
-
-		// Cache the compiled function
-		cached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) );
-
-		// Save selector and tokenization
-		cached.selector = selector;
-	}
-	return cached;
-};
-
-/**
- * A low-level selection function that works with Sizzle's compiled
- *  selector functions
- * @param {String|Function} selector A selector or a pre-compiled
- *  selector function built with Sizzle.compile
- * @param {Element} context
- * @param {Array} [results]
- * @param {Array} [seed] A set of elements to match against
- */
-select = Sizzle.select = function( selector, context, results, seed ) {
-	var i, tokens, token, type, find,
-		compiled = typeof selector === "function" && selector,
-		match = !seed && tokenize( (selector = compiled.selector || selector) );
-
-	results = results || [];
-
-	// Try to minimize operations if there is only one selector in the list and no seed
-	// (the latter of which guarantees us context)
-	if ( match.length === 1 ) {
-
-		// Reduce context if the leading compound selector is an ID
-		tokens = match[0] = match[0].slice( 0 );
-		if ( tokens.length > 2 && (token = tokens[0]).type === "ID" &&
-				context.nodeType === 9 && documentIsHTML && Expr.relative[ tokens[1].type ] ) {
-
-			context = ( Expr.find["ID"]( token.matches[0].replace(runescape, funescape), context ) || [] )[0];
-			if ( !context ) {
-				return results;
-
-			// Precompiled matchers will still verify ancestry, so step up a level
-			} else if ( compiled ) {
-				context = context.parentNode;
-			}
-
-			selector = selector.slice( tokens.shift().value.length );
-		}
-
-		// Fetch a seed set for right-to-left matching
-		i = matchExpr["needsContext"].test( selector ) ? 0 : tokens.length;
-		while ( i-- ) {
-			token = tokens[i];
-
-			// Abort if we hit a combinator
-			if ( Expr.relative[ (type = token.type) ] ) {
-				break;
-			}
-			if ( (find = Expr.find[ type ]) ) {
-				// Search, expanding context for leading sibling combinators
-				if ( (seed = find(
-					token.matches[0].replace( runescape, funescape ),
-					rsibling.test( tokens[0].type ) && testContext( context.parentNode ) || context
-				)) ) {
-
-					// If seed is empty or no tokens remain, we can return early
-					tokens.splice( i, 1 );
-					selector = seed.length && toSelector( tokens );
-					if ( !selector ) {
-						push.apply( results, seed );
-						return results;
-					}
-
-					break;
-				}
-			}
-		}
-	}
-
-	// Compile and execute a filtering function if one is not provided
-	// Provide `match` to avoid retokenization if we modified the selector above
-	( compiled || compile( selector, match ) )(
-		seed,
-		context,
-		!documentIsHTML,
-		results,
-		!context || rsibling.test( selector ) && testContext( context.parentNode ) || context
-	);
-	return results;
-};
-
-// One-time assignments
-
-// Sort stability
-support.sortStable = expando.split("").sort( sortOrder ).join("") === expando;
-
-// Support: Chrome 14-35+
-// Always assume duplicates if they aren't passed to the comparison function
-support.detectDuplicates = !!hasDuplicate;
-
-// Initialize against the default document
-setDocument();
-
-// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27)
-// Detached nodes confoundingly follow *each other*
-support.sortDetached = assert(function( el ) {
-	// Should return 1, but returns 4 (following)
-	return el.compareDocumentPosition( document.createElement("fieldset") ) & 1;
-});
-
-// Support: IE<8
-// Prevent attribute/property "interpolation"
-// https://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx
-if ( !assert(function( el ) {
-	el.innerHTML = "<a href='#'></a>";
-	return el.firstChild.getAttribute("href") === "#" ;
-}) ) {
-	addHandle( "type|href|height|width", function( elem, name, isXML ) {
-		if ( !isXML ) {
-			return elem.getAttribute( name, name.toLowerCase() === "type" ? 1 : 2 );
-		}
-	});
-}
-
-// Support: IE<9
-// Use defaultValue in place of getAttribute("value")
-if ( !support.attributes || !assert(function( el ) {
-	el.innerHTML = "<input/>";
-	el.firstChild.setAttribute( "value", "" );
-	return el.firstChild.getAttribute( "value" ) === "";
-}) ) {
-	addHandle( "value", function( elem, name, isXML ) {
-		if ( !isXML && elem.nodeName.toLowerCase() === "input" ) {
-			return elem.defaultValue;
-		}
-	});
-}
-
-// Support: IE<9
-// Use getAttributeNode to fetch booleans when getAttribute lies
-if ( !assert(function( el ) {
-	return el.getAttribute("disabled") == null;
-}) ) {
-	addHandle( booleans, function( elem, name, isXML ) {
-		var val;
-		if ( !isXML ) {
-			return elem[ name ] === true ? name.toLowerCase() :
-					(val = elem.getAttributeNode( name )) && val.specified ?
-					val.value :
-				null;
-		}
-	});
-}
-
-return Sizzle;
-
-})( window );
-
-
-
-jQuery.find = Sizzle;
-jQuery.expr = Sizzle.selectors;
-
-// Deprecated
-jQuery.expr[ ":" ] = jQuery.expr.pseudos;
-jQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort;
-jQuery.text = Sizzle.getText;
-jQuery.isXMLDoc = Sizzle.isXML;
-jQuery.contains = Sizzle.contains;
-jQuery.escapeSelector = Sizzle.escape;
-
-
-
-
-var dir = function( elem, dir, until ) {
-	var matched = [],
-		truncate = until !== undefined;
-
-	while ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) {
-		if ( elem.nodeType === 1 ) {
-			if ( truncate && jQuery( elem ).is( until ) ) {
-				break;
-			}
-			matched.push( elem );
-		}
-	}
-	return matched;
-};
-
-
-var siblings = function( n, elem ) {
-	var matched = [];
-
-	for ( ; n; n = n.nextSibling ) {
-		if ( n.nodeType === 1 && n !== elem ) {
-			matched.push( n );
-		}
-	}
-
-	return matched;
-};
-
-
-var rneedsContext = jQuery.expr.match.needsContext;
-
-
-
-function nodeName( elem, name ) {
-
-  return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();
-
-};
-var rsingleTag = ( /^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i );
-
-
-
-// Implement the identical functionality for filter and not
-function winnow( elements, qualifier, not ) {
-	if ( isFunction( qualifier ) ) {
-		return jQuery.grep( elements, function( elem, i ) {
-			return !!qualifier.call( elem, i, elem ) !== not;
-		} );
-	}
-
-	// Single element
-	if ( qualifier.nodeType ) {
-		return jQuery.grep( elements, function( elem ) {
-			return ( elem === qualifier ) !== not;
-		} );
-	}
-
-	// Arraylike of elements (jQuery, arguments, Array)
-	if ( typeof qualifier !== "string" ) {
-		return jQuery.grep( elements, function( elem ) {
-			return ( indexOf.call( qualifier, elem ) > -1 ) !== not;
-		} );
-	}
-
-	// Filtered directly for both simple and complex selectors
-	return jQuery.filter( qualifier, elements, not );
-}
-
-jQuery.filter = function( expr, elems, not ) {
-	var elem = elems[ 0 ];
-
-	if ( not ) {
-		expr = ":not(" + expr + ")";
-	}
-
-	if ( elems.length === 1 && elem.nodeType === 1 ) {
-		return jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [];
-	}
-
-	return jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) {
-		return elem.nodeType === 1;
-	} ) );
-};
-
-jQuery.fn.extend( {
-	find: function( selector ) {
-		var i, ret,
-			len = this.length,
-			self = this;
-
-		if ( typeof selector !== "string" ) {
-			return this.pushStack( jQuery( selector ).filter( function() {
-				for ( i = 0; i < len; i++ ) {
-					if ( jQuery.contains( self[ i ], this ) ) {
-						return true;
-					}
-				}
-			} ) );
-		}
-
-		ret = this.pushStack( [] );
-
-		for ( i = 0; i < len; i++ ) {
-			jQuery.find( selector, self[ i ], ret );
-		}
-
-		return len > 1 ? jQuery.uniqueSort( ret ) : ret;
-	},
-	filter: function( selector ) {
-		return this.pushStack( winnow( this, selector || [], false ) );
-	},
-	not: function( selector ) {
-		return this.pushStack( winnow( this, selector || [], true ) );
-	},
-	is: function( selector ) {
-		return !!winnow(
-			this,
-
-			// If this is a positional/relative selector, check membership in the returned set
-			// so $("p:first").is("p:last") won't return true for a doc with two "p".
-			typeof selector === "string" && rneedsContext.test( selector ) ?
-				jQuery( selector ) :
-				selector || [],
-			false
-		).length;
-	}
-} );
-
-
-// Initialize a jQuery object
-
-
-// A central reference to the root jQuery(document)
-var rootjQuery,
-
-	// A simple way to check for HTML strings
-	// Prioritize #id over <tag> to avoid XSS via location.hash (#9521)
-	// Strict HTML recognition (#11290: must start with <)
-	// Shortcut simple #id case for speed
-	rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/,
-
-	init = jQuery.fn.init = function( selector, context, root ) {
-		var match, elem;
-
-		// HANDLE: $(""), $(null), $(undefined), $(false)
-		if ( !selector ) {
-			return this;
-		}
-
-		// Method init() accepts an alternate rootjQuery
-		// so migrate can support jQuery.sub (gh-2101)
-		root = root || rootjQuery;
-
-		// Handle HTML strings
-		if ( typeof selector === "string" ) {
-			if ( selector[ 0 ] === "<" &&
-				selector[ selector.length - 1 ] === ">" &&
-				selector.length >= 3 ) {
-
-				// Assume that strings that start and end with <> are HTML and skip the regex check
-				match = [ null, selector, null ];
-
-			} else {
-				match = rquickExpr.exec( selector );
-			}
-
-			// Match html or make sure no context is specified for #id
-			if ( match && ( match[ 1 ] || !context ) ) {
-
-				// HANDLE: $(html) -> $(array)
-				if ( match[ 1 ] ) {
-					context = context instanceof jQuery ? context[ 0 ] : context;
-
-					// Option to run scripts is true for back-compat
-					// Intentionally let the error be thrown if parseHTML is not present
-					jQuery.merge( this, jQuery.parseHTML(
-						match[ 1 ],
-						context && context.nodeType ? context.ownerDocument || context : document,
-						true
-					) );
-
-					// HANDLE: $(html, props)
-					if ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) {
-						for ( match in context ) {
-
-							// Properties of context are called as methods if possible
-							if ( isFunction( this[ match ] ) ) {
-								this[ match ]( context[ match ] );
-
-							// ...and otherwise set as attributes
-							} else {
-								this.attr( match, context[ match ] );
-							}
-						}
-					}
-
-					return this;
-
-				// HANDLE: $(#id)
-				} else {
-					elem = document.getElementById( match[ 2 ] );
-
-					if ( elem ) {
-
-						// Inject the element directly into the jQuery object
-						this[ 0 ] = elem;
-						this.length = 1;
-					}
-					return this;
-				}
-
-			// HANDLE: $(expr, $(...))
-			} else if ( !context || context.jquery ) {
-				return ( context || root ).find( selector );
-
-			// HANDLE: $(expr, context)
-			// (which is just equivalent to: $(context).find(expr)
-			} else {
-				return this.constructor( context ).find( selector );
-			}
-
-		// HANDLE: $(DOMElement)
-		} else if ( selector.nodeType ) {
-			this[ 0 ] = selector;
-			this.length = 1;
-			return this;
-
-		// HANDLE: $(function)
-		// Shortcut for document ready
-		} else if ( isFunction( selector ) ) {
-			return root.ready !== undefined ?
-				root.ready( selector ) :
-
-				// Execute immediately if ready is not present
-				selector( jQuery );
-		}
-
-		return jQuery.makeArray( selector, this );
-	};
-
-// Give the init function the jQuery prototype for later instantiation
-init.prototype = jQuery.fn;
-
-// Initialize central reference
-rootjQuery = jQuery( document );
-
-
-var rparentsprev = /^(?:parents|prev(?:Until|All))/,
-
-	// Methods guaranteed to produce a unique set when starting from a unique set
-	guaranteedUnique = {
-		children: true,
-		contents: true,
-		next: true,
-		prev: true
-	};
-
-jQuery.fn.extend( {
-	has: function( target ) {
-		var targets = jQuery( target, this ),
-			l = targets.length;
-
-		return this.filter( function() {
-			var i = 0;
-			for ( ; i < l; i++ ) {
-				if ( jQuery.contains( this, targets[ i ] ) ) {
-					return true;
-				}
-			}
-		} );
-	},
-
-	closest: function( selectors, context ) {
-		var cur,
-			i = 0,
-			l = this.length,
-			matched = [],
-			targets = typeof selectors !== "string" && jQuery( selectors );
-
-		// Positional selectors never match, since there's no _selection_ context
-		if ( !rneedsContext.test( selectors ) ) {
-			for ( ; i < l; i++ ) {
-				for ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) {
-
-					// Always skip document fragments
-					if ( cur.nodeType < 11 && ( targets ?
-						targets.index( cur ) > -1 :
-
-						// Don't pass non-elements to Sizzle
-						cur.nodeType === 1 &&
-							jQuery.find.matchesSelector( cur, selectors ) ) ) {
-
-						matched.push( cur );
-						break;
-					}
-				}
-			}
-		}
-
-		return this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched );
-	},
-
-	// Determine the position of an element within the set
-	index: function( elem ) {
-
-		// No argument, return index in parent
-		if ( !elem ) {
-			return ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1;
-		}
-
-		// Index in selector
-		if ( typeof elem === "string" ) {
-			return indexOf.call( jQuery( elem ), this[ 0 ] );
-		}
-
-		// Locate the position of the desired element
-		return indexOf.call( this,
-
-			// If it receives a jQuery object, the first element is used
-			elem.jquery ? elem[ 0 ] : elem
-		);
-	},
-
-	add: function( selector, context ) {
-		return this.pushStack(
-			jQuery.uniqueSort(
-				jQuery.merge( this.get(), jQuery( selector, context ) )
-			)
-		);
-	},
-
-	addBack: function( selector ) {
-		return this.add( selector == null ?
-			this.prevObject : this.prevObject.filter( selector )
-		);
-	}
-} );
-
-function sibling( cur, dir ) {
-	while ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {}
-	return cur;
-}
-
-jQuery.each( {
-	parent: function( elem ) {
-		var parent = elem.parentNode;
-		return parent && parent.nodeType !== 11 ? parent : null;
-	},
-	parents: function( elem ) {
-		return dir( elem, "parentNode" );
-	},
-	parentsUntil: function( elem, i, until ) {
-		return dir( elem, "parentNode", until );
-	},
-	next: function( elem ) {
-		return sibling( elem, "nextSibling" );
-	},
-	prev: function( elem ) {
-		return sibling( elem, "previousSibling" );
-	},
-	nextAll: function( elem ) {
-		return dir( elem, "nextSibling" );
-	},
-	prevAll: function( elem ) {
-		return dir( elem, "previousSibling" );
-	},
-	nextUntil: function( elem, i, until ) {
-		return dir( elem, "nextSibling", until );
-	},
-	prevUntil: function( elem, i, until ) {
-		return dir( elem, "previousSibling", until );
-	},
-	siblings: function( elem ) {
-		return siblings( ( elem.parentNode || {} ).firstChild, elem );
-	},
-	children: function( elem ) {
-		return siblings( elem.firstChild );
-	},
-	contents: function( elem ) {
-		if ( typeof elem.contentDocument !== "undefined" ) {
-			return elem.contentDocument;
-		}
-
-		// Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only
-		// Treat the template element as a regular one in browsers that
-		// don't support it.
-		if ( nodeName( elem, "template" ) ) {
-			elem = elem.content || elem;
-		}
-
-		return jQuery.merge( [], elem.childNodes );
-	}
-}, function( name, fn ) {
-	jQuery.fn[ name ] = function( until, selector ) {
-		var matched = jQuery.map( this, fn, until );
-
-		if ( name.slice( -5 ) !== "Until" ) {
-			selector = until;
-		}
-
-		if ( selector && typeof selector === "string" ) {
-			matched = jQuery.filter( selector, matched );
-		}
-
-		if ( this.length > 1 ) {
-
-			// Remove duplicates
-			if ( !guaranteedUnique[ name ] ) {
-				jQuery.uniqueSort( matched );
-			}
-
-			// Reverse order for parents* and prev-derivatives
-			if ( rparentsprev.test( name ) ) {
-				matched.reverse();
-			}
-		}
-
-		return this.pushStack( matched );
-	};
-} );
-var rnothtmlwhite = ( /[^\x20\t\r\n\f]+/g );
-
-
-
-// Convert String-formatted options into Object-formatted ones
-function createOptions( options ) {
-	var object = {};
-	jQuery.each( options.match( rnothtmlwhite ) || [], function( _, flag ) {
-		object[ flag ] = true;
-	} );
-	return object;
-}
-
-/*
- * Create a callback list using the following parameters:
- *
- *	options: an optional list of space-separated options that will change how
- *			the callback list behaves or a more traditional option object
- *
- * By default a callback list will act like an event callback list and can be
- * "fired" multiple times.
- *
- * Possible options:
- *
- *	once:			will ensure the callback list can only be fired once (like a Deferred)
- *
- *	memory:			will keep track of previous values and will call any callback added
- *					after the list has been fired right away with the latest "memorized"
- *					values (like a Deferred)
- *
- *	unique:			will ensure a callback can only be added once (no duplicate in the list)
- *
- *	stopOnFalse:	interrupt callings when a callback returns false
- *
- */
-jQuery.Callbacks = function( options ) {
-
-	// Convert options from String-formatted to Object-formatted if needed
-	// (we check in cache first)
-	options = typeof options === "string" ?
-		createOptions( options ) :
-		jQuery.extend( {}, options );
-
-	var // Flag to know if list is currently firing
-		firing,
-
-		// Last fire value for non-forgettable lists
-		memory,
-
-		// Flag to know if list was already fired
-		fired,
-
-		// Flag to prevent firing
-		locked,
-
-		// Actual callback list
-		list = [],
-
-		// Queue of execution data for repeatable lists
-		queue = [],
-
-		// Index of currently firing callback (modified by add/remove as needed)
-		firingIndex = -1,
-
-		// Fire callbacks
-		fire = function() {
-
-			// Enforce single-firing
-			locked = locked || options.once;
-
-			// Execute callbacks for all pending executions,
-			// respecting firingIndex overrides and runtime changes
-			fired = firing = true;
-			for ( ; queue.length; firingIndex = -1 ) {
-				memory = queue.shift();
-				while ( ++firingIndex < list.length ) {
-
-					// Run callback and check for early termination
-					if ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false &&
-						options.stopOnFalse ) {
-
-						// Jump to end and forget the data so .add doesn't re-fire
-						firingIndex = list.length;
-						memory = false;
-					}
-				}
-			}
-
-			// Forget the data if we're done with it
-			if ( !options.memory ) {
-				memory = false;
-			}
-
-			firing = false;
-
-			// Clean up if we're done firing for good
-			if ( locked ) {
-
-				// Keep an empty list if we have data for future add calls
-				if ( memory ) {
-					list = [];
-
-				// Otherwise, this object is spent
-				} else {
-					list = "";
-				}
-			}
-		},
-
-		// Actual Callbacks object
-		self = {
-
-			// Add a callback or a collection of callbacks to the list
-			add: function() {
-				if ( list ) {
-
-					// If we have memory from a past run, we should fire after adding
-					if ( memory && !firing ) {
-						firingIndex = list.length - 1;
-						queue.push( memory );
-					}
-
-					( function add( args ) {
-						jQuery.each( args, function( _, arg ) {
-							if ( isFunction( arg ) ) {
-								if ( !options.unique || !self.has( arg ) ) {
-									list.push( arg );
-								}
-							} else if ( arg && arg.length && toType( arg ) !== "string" ) {
-
-								// Inspect recursively
-								add( arg );
-							}
-						} );
-					} )( arguments );
-
-					if ( memory && !firing ) {
-						fire();
-					}
-				}
-				return this;
-			},
-
-			// Remove a callback from the list
-			remove: function() {
-				jQuery.each( arguments, function( _, arg ) {
-					var index;
-					while ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {
-						list.splice( index, 1 );
-
-						// Handle firing indexes
-						if ( index <= firingIndex ) {
-							firingIndex--;
-						}
-					}
-				} );
-				return this;
-			},
-
-			// Check if a given callback is in the list.
-			// If no argument is given, return whether or not list has callbacks attached.
-			has: function( fn ) {
-				return fn ?
-					jQuery.inArray( fn, list ) > -1 :
-					list.length > 0;
-			},
-
-			// Remove all callbacks from the list
-			empty: function() {
-				if ( list ) {
-					list = [];
-				}
-				return this;
-			},
-
-			// Disable .fire and .add
-			// Abort any current/pending executions
-			// Clear all callbacks and values
-			disable: function() {
-				locked = queue = [];
-				list = memory = "";
-				return this;
-			},
-			disabled: function() {
-				return !list;
-			},
-
-			// Disable .fire
-			// Also disable .add unless we have memory (since it would have no effect)
-			// Abort any pending executions
-			lock: function() {
-				locked = queue = [];
-				if ( !memory && !firing ) {
-					list = memory = "";
-				}
-				return this;
-			},
-			locked: function() {
-				return !!locked;
-			},
-
-			// Call all callbacks with the given context and arguments
-			fireWith: function( context, args ) {
-				if ( !locked ) {
-					args = args || [];
-					args = [ context, args.slice ? args.slice() : args ];
-					queue.push( args );
-					if ( !firing ) {
-						fire();
-					}
-				}
-				return this;
-			},
-
-			// Call all the callbacks with the given arguments
-			fire: function() {
-				self.fireWith( this, arguments );
-				return this;
-			},
-
-			// To know if the callbacks have already been called at least once
-			fired: function() {
-				return !!fired;
-			}
-		};
-
-	return self;
-};
-
-
-function Identity( v ) {
-	return v;
-}
-function Thrower( ex ) {
-	throw ex;
-}
-
-function adoptValue( value, resolve, reject, noValue ) {
-	var method;
-
-	try {
-
-		// Check for promise aspect first to privilege synchronous behavior
-		if ( value && isFunction( ( method = value.promise ) ) ) {
-			method.call( value ).done( resolve ).fail( reject );
-
-		// Other thenables
-		} else if ( value && isFunction( ( method = value.then ) ) ) {
-			method.call( value, resolve, reject );
-
-		// Other non-thenables
-		} else {
-
-			// Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer:
-			// * false: [ value ].slice( 0 ) => resolve( value )
-			// * true: [ value ].slice( 1 ) => resolve()
-			resolve.apply( undefined, [ value ].slice( noValue ) );
-		}
-
-	// For Promises/A+, convert exceptions into rejections
-	// Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in
-	// Deferred#then to conditionally suppress rejection.
-	} catch ( value ) {
-
-		// Support: Android 4.0 only
-		// Strict mode functions invoked without .call/.apply get global-object context
-		reject.apply( undefined, [ value ] );
-	}
-}
-
-jQuery.extend( {
-
-	Deferred: function( func ) {
-		var tuples = [
-
-				// action, add listener, callbacks,
-				// ... .then handlers, argument index, [final state]
-				[ "notify", "progress", jQuery.Callbacks( "memory" ),
-					jQuery.Callbacks( "memory" ), 2 ],
-				[ "resolve", "done", jQuery.Callbacks( "once memory" ),
-					jQuery.Callbacks( "once memory" ), 0, "resolved" ],
-				[ "reject", "fail", jQuery.Callbacks( "once memory" ),
-					jQuery.Callbacks( "once memory" ), 1, "rejected" ]
-			],
-			state = "pending",
-			promise = {
-				state: function() {
-					return state;
-				},
-				always: function() {
-					deferred.done( arguments ).fail( arguments );
-					return this;
-				},
-				"catch": function( fn ) {
-					return promise.then( null, fn );
-				},
-
-				// Keep pipe for back-compat
-				pipe: function( /* fnDone, fnFail, fnProgress */ ) {
-					var fns = arguments;
-
-					return jQuery.Deferred( function( newDefer ) {
-						jQuery.each( tuples, function( i, tuple ) {
-
-							// Map tuples (progress, done, fail) to arguments (done, fail, progress)
-							var fn = isFunction( fns[ tuple[ 4 ] ] ) && fns[ tuple[ 4 ] ];
-
-							// deferred.progress(function() { bind to newDefer or newDefer.notify })
-							// deferred.done(function() { bind to newDefer or newDefer.resolve })
-							// deferred.fail(function() { bind to newDefer or newDefer.reject })
-							deferred[ tuple[ 1 ] ]( function() {
-								var returned = fn && fn.apply( this, arguments );
-								if ( returned && isFunction( returned.promise ) ) {
-									returned.promise()
-										.progress( newDefer.notify )
-										.done( newDefer.resolve )
-										.fail( newDefer.reject );
-								} else {
-									newDefer[ tuple[ 0 ] + "With" ](
-										this,
-										fn ? [ returned ] : arguments
-									);
-								}
-							} );
-						} );
-						fns = null;
-					} ).promise();
-				},
-				then: function( onFulfilled, onRejected, onProgress ) {
-					var maxDepth = 0;
-					function resolve( depth, deferred, handler, special ) {
-						return function() {
-							var that = this,
-								args = arguments,
-								mightThrow = function() {
-									var returned, then;
-
-									// Support: Promises/A+ section 2.3.3.3.3
-									// https://promisesaplus.com/#point-59
-									// Ignore double-resolution attempts
-									if ( depth < maxDepth ) {
-										return;
-									}
-
-									returned = handler.apply( that, args );
-
-									// Support: Promises/A+ section 2.3.1
-									// https://promisesaplus.com/#point-48
-									if ( returned === deferred.promise() ) {
-										throw new TypeError( "Thenable self-resolution" );
-									}
-
-									// Support: Promises/A+ sections 2.3.3.1, 3.5
-									// https://promisesaplus.com/#point-54
-									// https://promisesaplus.com/#point-75
-									// Retrieve `then` only once
-									then = returned &&
-
-										// Support: Promises/A+ section 2.3.4
-										// https://promisesaplus.com/#point-64
-										// Only check objects and functions for thenability
-										( typeof returned === "object" ||
-											typeof returned === "function" ) &&
-										returned.then;
-
-									// Handle a returned thenable
-									if ( isFunction( then ) ) {
-
-										// Special processors (notify) just wait for resolution
-										if ( special ) {
-											then.call(
-												returned,
-												resolve( maxDepth, deferred, Identity, special ),
-												resolve( maxDepth, deferred, Thrower, special )
-											);
-
-										// Normal processors (resolve) also hook into progress
-										} else {
-
-											// ...and disregard older resolution values
-											maxDepth++;
-
-											then.call(
-												returned,
-												resolve( maxDepth, deferred, Identity, special ),
-												resolve( maxDepth, deferred, Thrower, special ),
-												resolve( maxDepth, deferred, Identity,
-													deferred.notifyWith )
-											);
-										}
-
-									// Handle all other returned values
-									} else {
-
-										// Only substitute handlers pass on context
-										// and multiple values (non-spec behavior)
-										if ( handler !== Identity ) {
-											that = undefined;
-											args = [ returned ];
-										}
-
-										// Process the value(s)
-										// Default process is resolve
-										( special || deferred.resolveWith )( that, args );
-									}
-								},
-
-								// Only normal processors (resolve) catch and reject exceptions
-								process = special ?
-									mightThrow :
-									function() {
-										try {
-											mightThrow();
-										} catch ( e ) {
-
-											if ( jQuery.Deferred.exceptionHook ) {
-												jQuery.Deferred.exceptionHook( e,
-													process.stackTrace );
-											}
-
-											// Support: Promises/A+ section 2.3.3.3.4.1
-											// https://promisesaplus.com/#point-61
-											// Ignore post-resolution exceptions
-											if ( depth + 1 >= maxDepth ) {
-
-												// Only substitute handlers pass on context
-												// and multiple values (non-spec behavior)
-												if ( handler !== Thrower ) {
-													that = undefined;
-													args = [ e ];
-												}
-
-												deferred.rejectWith( that, args );
-											}
-										}
-									};
-
-							// Support: Promises/A+ section 2.3.3.3.1
-							// https://promisesaplus.com/#point-57
-							// Re-resolve promises immediately to dodge false rejection from
-							// subsequent errors
-							if ( depth ) {
-								process();
-							} else {
-
-								// Call an optional hook to record the stack, in case of exception
-								// since it's otherwise lost when execution goes async
-								if ( jQuery.Deferred.getStackHook ) {
-									process.stackTrace = jQuery.Deferred.getStackHook();
-								}
-								window.setTimeout( process );
-							}
-						};
-					}
-
-					return jQuery.Deferred( function( newDefer ) {
-
-						// progress_handlers.add( ... )
-						tuples[ 0 ][ 3 ].add(
-							resolve(
-								0,
-								newDefer,
-								isFunction( onProgress ) ?
-									onProgress :
-									Identity,
-								newDefer.notifyWith
-							)
-						);
-
-						// fulfilled_handlers.add( ... )
-						tuples[ 1 ][ 3 ].add(
-							resolve(
-								0,
-								newDefer,
-								isFunction( onFulfilled ) ?
-									onFulfilled :
-									Identity
-							)
-						);
-
-						// rejected_handlers.add( ... )
-						tuples[ 2 ][ 3 ].add(
-							resolve(
-								0,
-								newDefer,
-								isFunction( onRejected ) ?
-									onRejected :
-									Thrower
-							)
-						);
-					} ).promise();
-				},
-
-				// Get a promise for this deferred
-				// If obj is provided, the promise aspect is added to the object
-				promise: function( obj ) {
-					return obj != null ? jQuery.extend( obj, promise ) : promise;
-				}
-			},
-			deferred = {};
-
-		// Add list-specific methods
-		jQuery.each( tuples, function( i, tuple ) {
-			var list = tuple[ 2 ],
-				stateString = tuple[ 5 ];
-
-			// promise.progress = list.add
-			// promise.done = list.add
-			// promise.fail = list.add
-			promise[ tuple[ 1 ] ] = list.add;
-
-			// Handle state
-			if ( stateString ) {
-				list.add(
-					function() {
-
-						// state = "resolved" (i.e., fulfilled)
-						// state = "rejected"
-						state = stateString;
-					},
-
-					// rejected_callbacks.disable
-					// fulfilled_callbacks.disable
-					tuples[ 3 - i ][ 2 ].disable,
-
-					// rejected_handlers.disable
-					// fulfilled_handlers.disable
-					tuples[ 3 - i ][ 3 ].disable,
-
-					// progress_callbacks.lock
-					tuples[ 0 ][ 2 ].lock,
-
-					// progress_handlers.lock
-					tuples[ 0 ][ 3 ].lock
-				);
-			}
-
-			// progress_handlers.fire
-			// fulfilled_handlers.fire
-			// rejected_handlers.fire
-			list.add( tuple[ 3 ].fire );
-
-			// deferred.notify = function() { deferred.notifyWith(...) }
-			// deferred.resolve = function() { deferred.resolveWith(...) }
-			// deferred.reject = function() { deferred.rejectWith(...) }
-			deferred[ tuple[ 0 ] ] = function() {
-				deferred[ tuple[ 0 ] + "With" ]( this === deferred ? undefined : this, arguments );
-				return this;
-			};
-
-			// deferred.notifyWith = list.fireWith
-			// deferred.resolveWith = list.fireWith
-			// deferred.rejectWith = list.fireWith
-			deferred[ tuple[ 0 ] + "With" ] = list.fireWith;
-		} );
-
-		// Make the deferred a promise
-		promise.promise( deferred );
-
-		// Call given func if any
-		if ( func ) {
-			func.call( deferred, deferred );
-		}
-
-		// All done!
-		return deferred;
-	},
-
-	// Deferred helper
-	when: function( singleValue ) {
-		var
-
-			// count of uncompleted subordinates
-			remaining = arguments.length,
-
-			// count of unprocessed arguments
-			i = remaining,
-
-			// subordinate fulfillment data
-			resolveContexts = Array( i ),
-			resolveValues = slice.call( arguments ),
-
-			// the master Deferred
-			master = jQuery.Deferred(),
-
-			// subordinate callback factory
-			updateFunc = function( i ) {
-				return function( value ) {
-					resolveContexts[ i ] = this;
-					resolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value;
-					if ( !( --remaining ) ) {
-						master.resolveWith( resolveContexts, resolveValues );
-					}
-				};
-			};
-
-		// Single- and empty arguments are adopted like Promise.resolve
-		if ( remaining <= 1 ) {
-			adoptValue( singleValue, master.done( updateFunc( i ) ).resolve, master.reject,
-				!remaining );
-
-			// Use .then() to unwrap secondary thenables (cf. gh-3000)
-			if ( master.state() === "pending" ||
-				isFunction( resolveValues[ i ] && resolveValues[ i ].then ) ) {
-
-				return master.then();
-			}
-		}
-
-		// Multiple arguments are aggregated like Promise.all array elements
-		while ( i-- ) {
-			adoptValue( resolveValues[ i ], updateFunc( i ), master.reject );
-		}
-
-		return master.promise();
-	}
-} );
-
-
-// These usually indicate a programmer mistake during development,
-// warn about them ASAP rather than swallowing them by default.
-var rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;
-
-jQuery.Deferred.exceptionHook = function( error, stack ) {
-
-	// Support: IE 8 - 9 only
-	// Console exists when dev tools are open, which can happen at any time
-	if ( window.console && window.console.warn && error && rerrorNames.test( error.name ) ) {
-		window.console.warn( "jQuery.Deferred exception: " + error.message, error.stack, stack );
-	}
-};
-
-
-
-
-jQuery.readyException = function( error ) {
-	window.setTimeout( function() {
-		throw error;
-	} );
-};
-
-
-
-
-// The deferred used on DOM ready
-var readyList = jQuery.Deferred();
-
-jQuery.fn.ready = function( fn ) {
-
-	readyList
-		.then( fn )
-
-		// Wrap jQuery.readyException in a function so that the lookup
-		// happens at the time of error handling instead of callback
-		// registration.
-		.catch( function( error ) {
-			jQuery.readyException( error );
-		} );
-
-	return this;
-};
-
-jQuery.extend( {
-
-	// Is the DOM ready to be used? Set to true once it occurs.
-	isReady: false,
-
-	// A counter to track how many items to wait for before
-	// the ready event fires. See #6781
-	readyWait: 1,
-
-	// Handle when the DOM is ready
-	ready: function( wait ) {
-
-		// Abort if there are pending holds or we're already ready
-		if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {
-			return;
-		}
-
-		// Remember that the DOM is ready
-		jQuery.isReady = true;
-
-		// If a normal DOM Ready event fired, decrement, and wait if need be
-		if ( wait !== true && --jQuery.readyWait > 0 ) {
-			return;
-		}
-
-		// If there are functions bound, to execute
-		readyList.resolveWith( document, [ jQuery ] );
-	}
-} );
-
-jQuery.ready.then = readyList.then;
-
-// The ready event handler and self cleanup method
-function completed() {
-	document.removeEventListener( "DOMContentLoaded", completed );
-	window.removeEventListener( "load", completed );
-	jQuery.ready();
-}
-
-// Catch cases where $(document).ready() is called
-// after the browser event has already occurred.
-// Support: IE <=9 - 10 only
-// Older IE sometimes signals "interactive" too soon
-if ( document.readyState === "complete" ||
-	( document.readyState !== "loading" && !document.documentElement.doScroll ) ) {
-
-	// Handle it asynchronously to allow scripts the opportunity to delay ready
-	window.setTimeout( jQuery.ready );
-
-} else {
-
-	// Use the handy event callback
-	document.addEventListener( "DOMContentLoaded", completed );
-
-	// A fallback to window.onload, that will always work
-	window.addEventListener( "load", completed );
-}
-
-
-
-
-// Multifunctional method to get and set values of a collection
-// The value/s can optionally be executed if it's a function
-var access = function( elems, fn, key, value, chainable, emptyGet, raw ) {
-	var i = 0,
-		len = elems.length,
-		bulk = key == null;
-
-	// Sets many values
-	if ( toType( key ) === "object" ) {
-		chainable = true;
-		for ( i in key ) {
-			access( elems, fn, i, key[ i ], true, emptyGet, raw );
-		}
-
-	// Sets one value
-	} else if ( value !== undefined ) {
-		chainable = true;
-
-		if ( !isFunction( value ) ) {
-			raw = true;
-		}
-
-		if ( bulk ) {
-
-			// Bulk operations run against the entire set
-			if ( raw ) {
-				fn.call( elems, value );
-				fn = null;
-
-			// ...except when executing function values
-			} else {
-				bulk = fn;
-				fn = function( elem, key, value ) {
-					return bulk.call( jQuery( elem ), value );
-				};
-			}
-		}
-
-		if ( fn ) {
-			for ( ; i < len; i++ ) {
-				fn(
-					elems[ i ], key, raw ?
-					value :
-					value.call( elems[ i ], i, fn( elems[ i ], key ) )
-				);
-			}
-		}
-	}
-
-	if ( chainable ) {
-		return elems;
-	}
-
-	// Gets
-	if ( bulk ) {
-		return fn.call( elems );
-	}
-
-	return len ? fn( elems[ 0 ], key ) : emptyGet;
-};
-
-
-// Matches dashed string for camelizing
-var rmsPrefix = /^-ms-/,
-	rdashAlpha = /-([a-z])/g;
-
-// Used by camelCase as callback to replace()
-function fcamelCase( all, letter ) {
-	return letter.toUpperCase();
-}
-
-// Convert dashed to camelCase; used by the css and data modules
-// Support: IE <=9 - 11, Edge 12 - 15
-// Microsoft forgot to hump their vendor prefix (#9572)
-function camelCase( string ) {
-	return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase );
-}
-var acceptData = function( owner ) {
-
-	// Accepts only:
-	//  - Node
-	//    - Node.ELEMENT_NODE
-	//    - Node.DOCUMENT_NODE
-	//  - Object
-	//    - Any
-	return owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType );
-};
-
-
-
-
-function Data() {
-	this.expando = jQuery.expando + Data.uid++;
-}
-
-Data.uid = 1;
-
-Data.prototype = {
-
-	cache: function( owner ) {
-
-		// Check if the owner object already has a cache
-		var value = owner[ this.expando ];
-
-		// If not, create one
-		if ( !value ) {
-			value = {};
-
-			// We can accept data for non-element nodes in modern browsers,
-			// but we should not, see #8335.
-			// Always return an empty object.
-			if ( acceptData( owner ) ) {
-
-				// If it is a node unlikely to be stringify-ed or looped over
-				// use plain assignment
-				if ( owner.nodeType ) {
-					owner[ this.expando ] = value;
-
-				// Otherwise secure it in a non-enumerable property
-				// configurable must be true to allow the property to be
-				// deleted when data is removed
-				} else {
-					Object.defineProperty( owner, this.expando, {
-						value: value,
-						configurable: true
-					} );
-				}
-			}
-		}
-
-		return value;
-	},
-	set: function( owner, data, value ) {
-		var prop,
-			cache = this.cache( owner );
-
-		// Handle: [ owner, key, value ] args
-		// Always use camelCase key (gh-2257)
-		if ( typeof data === "string" ) {
-			cache[ camelCase( data ) ] = value;
-
-		// Handle: [ owner, { properties } ] args
-		} else {
-
-			// Copy the properties one-by-one to the cache object
-			for ( prop in data ) {
-				cache[ camelCase( prop ) ] = data[ prop ];
-			}
-		}
-		return cache;
-	},
-	get: function( owner, key ) {
-		return key === undefined ?
-			this.cache( owner ) :
-
-			// Always use camelCase key (gh-2257)
-			owner[ this.expando ] && owner[ this.expando ][ camelCase( key ) ];
-	},
-	access: function( owner, key, value ) {
-
-		// In cases where either:
-		//
-		//   1. No key was specified
-		//   2. A string key was specified, but no value provided
-		//
-		// Take the "read" path and allow the get method to determine
-		// which value to return, respectively either:
-		//
-		//   1. The entire cache object
-		//   2. The data stored at the key
-		//
-		if ( key === undefined ||
-				( ( key && typeof key === "string" ) && value === undefined ) ) {
-
-			return this.get( owner, key );
-		}
-
-		// When the key is not a string, or both a key and value
-		// are specified, set or extend (existing objects) with either:
-		//
-		//   1. An object of properties
-		//   2. A key and value
-		//
-		this.set( owner, key, value );
-
-		// Since the "set" path can have two possible entry points
-		// return the expected data based on which path was taken[*]
-		return value !== undefined ? value : key;
-	},
-	remove: function( owner, key ) {
-		var i,
-			cache = owner[ this.expando ];
-
-		if ( cache === undefined ) {
-			return;
-		}
-
-		if ( key !== undefined ) {
-
-			// Support array or space separated string of keys
-			if ( Array.isArray( key ) ) {
-
-				// If key is an array of keys...
-				// We always set camelCase keys, so remove that.
-				key = key.map( camelCase );
-			} else {
-				key = camelCase( key );
-
-				// If a key with the spaces exists, use it.
-				// Otherwise, create an array by matching non-whitespace
-				key = key in cache ?
-					[ key ] :
-					( key.match( rnothtmlwhite ) || [] );
-			}
-
-			i = key.length;
-
-			while ( i-- ) {
-				delete cache[ key[ i ] ];
-			}
-		}
-
-		// Remove the expando if there's no more data
-		if ( key === undefined || jQuery.isEmptyObject( cache ) ) {
-
-			// Support: Chrome <=35 - 45
-			// Webkit & Blink performance suffers when deleting properties
-			// from DOM nodes, so set to undefined instead
-			// https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted)
-			if ( owner.nodeType ) {
-				owner[ this.expando ] = undefined;
-			} else {
-				delete owner[ this.expando ];
-			}
-		}
-	},
-	hasData: function( owner ) {
-		var cache = owner[ this.expando ];
-		return cache !== undefined && !jQuery.isEmptyObject( cache );
-	}
-};
-var dataPriv = new Data();
-
-var dataUser = new Data();
-
-
-
-//	Implementation Summary
-//
-//	1. Enforce API surface and semantic compatibility with 1.9.x branch
-//	2. Improve the module's maintainability by reducing the storage
-//		paths to a single mechanism.
-//	3. Use the same single mechanism to support "private" and "user" data.
-//	4. _Never_ expose "private" data to user code (TODO: Drop _data, _removeData)
-//	5. Avoid exposing implementation details on user objects (eg. expando properties)
-//	6. Provide a clear path for implementation upgrade to WeakMap in 2014
-
-var rbrace = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,
-	rmultiDash = /[A-Z]/g;
-
-function getData( data ) {
-	if ( data === "true" ) {
-		return true;
-	}
-
-	if ( data === "false" ) {
-		return false;
-	}
-
-	if ( data === "null" ) {
-		return null;
-	}
-
-	// Only convert to a number if it doesn't change the string
-	if ( data === +data + "" ) {
-		return +data;
-	}
-
-	if ( rbrace.test( data ) ) {
-		return JSON.parse( data );
-	}
-
-	return data;
-}
-
-function dataAttr( elem, key, data ) {
-	var name;
-
-	// If nothing was found internally, try to fetch any
-	// data from the HTML5 data-* attribute
-	if ( data === undefined && elem.nodeType === 1 ) {
-		name = "data-" + key.replace( rmultiDash, "-$&" ).toLowerCase();
-		data = elem.getAttribute( name );
-
-		if ( typeof data === "string" ) {
-			try {
-				data = getData( data );
-			} catch ( e ) {}
-
-			// Make sure we set the data so it isn't changed later
-			dataUser.set( elem, key, data );
-		} else {
-			data = undefined;
-		}
-	}
-	return data;
-}
-
-jQuery.extend( {
-	hasData: function( elem ) {
-		return dataUser.hasData( elem ) || dataPriv.hasData( elem );
-	},
-
-	data: function( elem, name, data ) {
-		return dataUser.access( elem, name, data );
-	},
-
-	removeData: function( elem, name ) {
-		dataUser.remove( elem, name );
-	},
-
-	// TODO: Now that all calls to _data and _removeData have been replaced
-	// with direct calls to dataPriv methods, these can be deprecated.
-	_data: function( elem, name, data ) {
-		return dataPriv.access( elem, name, data );
-	},
-
-	_removeData: function( elem, name ) {
-		dataPriv.remove( elem, name );
-	}
-} );
-
-jQuery.fn.extend( {
-	data: function( key, value ) {
-		var i, name, data,
-			elem = this[ 0 ],
-			attrs = elem && elem.attributes;
-
-		// Gets all values
-		if ( key === undefined ) {
-			if ( this.length ) {
-				data = dataUser.get( elem );
-
-				if ( elem.nodeType === 1 && !dataPriv.get( elem, "hasDataAttrs" ) ) {
-					i = attrs.length;
-					while ( i-- ) {
-
-						// Support: IE 11 only
-						// The attrs elements can be null (#14894)
-						if ( attrs[ i ] ) {
-							name = attrs[ i ].name;
-							if ( name.indexOf( "data-" ) === 0 ) {
-								name = camelCase( name.slice( 5 ) );
-								dataAttr( elem, name, data[ name ] );
-							}
-						}
-					}
-					dataPriv.set( elem, "hasDataAttrs", true );
-				}
-			}
-
-			return data;
-		}
-
-		// Sets multiple values
-		if ( typeof key === "object" ) {
-			return this.each( function() {
-				dataUser.set( this, key );
-			} );
-		}
-
-		return access( this, function( value ) {
-			var data;
-
-			// The calling jQuery object (element matches) is not empty
-			// (and therefore has an element appears at this[ 0 ]) and the
-			// `value` parameter was not undefined. An empty jQuery object
-			// will result in `undefined` for elem = this[ 0 ] which will
-			// throw an exception if an attempt to read a data cache is made.
-			if ( elem && value === undefined ) {
-
-				// Attempt to get data from the cache
-				// The key will always be camelCased in Data
-				data = dataUser.get( elem, key );
-				if ( data !== undefined ) {
-					return data;
-				}
-
-				// Attempt to "discover" the data in
-				// HTML5 custom data-* attrs
-				data = dataAttr( elem, key );
-				if ( data !== undefined ) {
-					return data;
-				}
-
-				// We tried really hard, but the data doesn't exist.
-				return;
-			}
-
-			// Set the data...
-			this.each( function() {
-
-				// We always store the camelCased key
-				dataUser.set( this, key, value );
-			} );
-		}, null, value, arguments.length > 1, null, true );
-	},
-
-	removeData: function( key ) {
-		return this.each( function() {
-			dataUser.remove( this, key );
-		} );
-	}
-} );
-
-
-jQuery.extend( {
-	queue: function( elem, type, data ) {
-		var queue;
-
-		if ( elem ) {
-			type = ( type || "fx" ) + "queue";
-			queue = dataPriv.get( elem, type );
-
-			// Speed up dequeue by getting out quickly if this is just a lookup
-			if ( data ) {
-				if ( !queue || Array.isArray( data ) ) {
-					queue = dataPriv.access( elem, type, jQuery.makeArray( data ) );
-				} else {
-					queue.push( data );
-				}
-			}
-			return queue || [];
-		}
-	},
-
-	dequeue: function( elem, type ) {
-		type = type || "fx";
-
-		var queue = jQuery.queue( elem, type ),
-			startLength = queue.length,
-			fn = queue.shift(),
-			hooks = jQuery._queueHooks( elem, type ),
-			next = function() {
-				jQuery.dequeue( elem, type );
-			};
-
-		// If the fx queue is dequeued, always remove the progress sentinel
-		if ( fn === "inprogress" ) {
-			fn = queue.shift();
-			startLength--;
-		}
-
-		if ( fn ) {
-
-			// Add a progress sentinel to prevent the fx queue from being
-			// automatically dequeued
-			if ( type === "fx" ) {
-				queue.unshift( "inprogress" );
-			}
-
-			// Clear up the last queue stop function
-			delete hooks.stop;
-			fn.call( elem, next, hooks );
-		}
-
-		if ( !startLength && hooks ) {
-			hooks.empty.fire();
-		}
-	},
-
-	// Not public - generate a queueHooks object, or return the current one
-	_queueHooks: function( elem, type ) {
-		var key = type + "queueHooks";
-		return dataPriv.get( elem, key ) || dataPriv.access( elem, key, {
-			empty: jQuery.Callbacks( "once memory" ).add( function() {
-				dataPriv.remove( elem, [ type + "queue", key ] );
-			} )
-		} );
-	}
-} );
-
-jQuery.fn.extend( {
-	queue: function( type, data ) {
-		var setter = 2;
-
-		if ( typeof type !== "string" ) {
-			data = type;
-			type = "fx";
-			setter--;
-		}
-
-		if ( arguments.length < setter ) {
-			return jQuery.queue( this[ 0 ], type );
-		}
-
-		return data === undefined ?
-			this :
-			this.each( function() {
-				var queue = jQuery.queue( this, type, data );
-
-				// Ensure a hooks for this queue
-				jQuery._queueHooks( this, type );
-
-				if ( type === "fx" && queue[ 0 ] !== "inprogress" ) {
-					jQuery.dequeue( this, type );
-				}
-			} );
-	},
-	dequeue: function( type ) {
-		return this.each( function() {
-			jQuery.dequeue( this, type );
-		} );
-	},
-	clearQueue: function( type ) {
-		return this.queue( type || "fx", [] );
-	},
-
-	// Get a promise resolved when queues of a certain type
-	// are emptied (fx is the type by default)
-	promise: function( type, obj ) {
-		var tmp,
-			count = 1,
-			defer = jQuery.Deferred(),
-			elements = this,
-			i = this.length,
-			resolve = function() {
-				if ( !( --count ) ) {
-					defer.resolveWith( elements, [ elements ] );
-				}
-			};
-
-		if ( typeof type !== "string" ) {
-			obj = type;
-			type = undefined;
-		}
-		type = type || "fx";
-
-		while ( i-- ) {
-			tmp = dataPriv.get( elements[ i ], type + "queueHooks" );
-			if ( tmp && tmp.empty ) {
-				count++;
-				tmp.empty.add( resolve );
-			}
-		}
-		resolve();
-		return defer.promise( obj );
-	}
-} );
-var pnum = ( /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/ ).source;
-
-var rcssNum = new RegExp( "^(?:([+-])=|)(" + pnum + ")([a-z%]*)$", "i" );
-
-
-var cssExpand = [ "Top", "Right", "Bottom", "Left" ];
-
-var documentElement = document.documentElement;
-
-
-
-	var isAttached = function( elem ) {
-			return jQuery.contains( elem.ownerDocument, elem );
-		},
-		composed = { composed: true };
-
-	// Support: IE 9 - 11+, Edge 12 - 18+, iOS 10.0 - 10.2 only
-	// Check attachment across shadow DOM boundaries when possible (gh-3504)
-	// Support: iOS 10.0-10.2 only
-	// Early iOS 10 versions support `attachShadow` but not `getRootNode`,
-	// leading to errors. We need to check for `getRootNode`.
-	if ( documentElement.getRootNode ) {
-		isAttached = function( elem ) {
-			return jQuery.contains( elem.ownerDocument, elem ) ||
-				elem.getRootNode( composed ) === elem.ownerDocument;
-		};
-	}
-var isHiddenWithinTree = function( elem, el ) {
-
-		// isHiddenWithinTree might be called from jQuery#filter function;
-		// in that case, element will be second argument
-		elem = el || elem;
-
-		// Inline style trumps all
-		return elem.style.display === "none" ||
-			elem.style.display === "" &&
-
-			// Otherwise, check computed style
-			// Support: Firefox <=43 - 45
-			// Disconnected elements can have computed display: none, so first confirm that elem is
-			// in the document.
-			isAttached( elem ) &&
-
-			jQuery.css( elem, "display" ) === "none";
-	};
-
-var swap = function( elem, options, callback, args ) {
-	var ret, name,
-		old = {};
-
-	// Remember the old values, and insert the new ones
-	for ( name in options ) {
-		old[ name ] = elem.style[ name ];
-		elem.style[ name ] = options[ name ];
-	}
-
-	ret = callback.apply( elem, args || [] );
-
-	// Revert the old values
-	for ( name in options ) {
-		elem.style[ name ] = old[ name ];
-	}
-
-	return ret;
-};
-
-
-
-
-function adjustCSS( elem, prop, valueParts, tween ) {
-	var adjusted, scale,
-		maxIterations = 20,
-		currentValue = tween ?
-			function() {
-				return tween.cur();
-			} :
-			function() {
-				return jQuery.css( elem, prop, "" );
-			},
-		initial = currentValue(),
-		unit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? "" : "px" ),
-
-		// Starting value computation is required for potential unit mismatches
-		initialInUnit = elem.nodeType &&
-			( jQuery.cssNumber[ prop ] || unit !== "px" && +initial ) &&
-			rcssNum.exec( jQuery.css( elem, prop ) );
-
-	if ( initialInUnit && initialInUnit[ 3 ] !== unit ) {
-
-		// Support: Firefox <=54
-		// Halve the iteration target value to prevent interference from CSS upper bounds (gh-2144)
-		initial = initial / 2;
-
-		// Trust units reported by jQuery.css
-		unit = unit || initialInUnit[ 3 ];
-
-		// Iteratively approximate from a nonzero starting point
-		initialInUnit = +initial || 1;
-
-		while ( maxIterations-- ) {
-
-			// Evaluate and update our best guess (doubling guesses that zero out).
-			// Finish if the scale equals or crosses 1 (making the old*new product non-positive).
-			jQuery.style( elem, prop, initialInUnit + unit );
-			if ( ( 1 - scale ) * ( 1 - ( scale = currentValue() / initial || 0.5 ) ) <= 0 ) {
-				maxIterations = 0;
-			}
-			initialInUnit = initialInUnit / scale;
-
-		}
-
-		initialInUnit = initialInUnit * 2;
-		jQuery.style( elem, prop, initialInUnit + unit );
-
-		// Make sure we update the tween properties later on
-		valueParts = valueParts || [];
-	}
-
-	if ( valueParts ) {
-		initialInUnit = +initialInUnit || +initial || 0;
-
-		// Apply relative offset (+=/-=) if specified
-		adjusted = valueParts[ 1 ] ?
-			initialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] :
-			+valueParts[ 2 ];
-		if ( tween ) {
-			tween.unit = unit;
-			tween.start = initialInUnit;
-			tween.end = adjusted;
-		}
-	}
-	return adjusted;
-}
-
-
-var defaultDisplayMap = {};
-
-function getDefaultDisplay( elem ) {
-	var temp,
-		doc = elem.ownerDocument,
-		nodeName = elem.nodeName,
-		display = defaultDisplayMap[ nodeName ];
-
-	if ( display ) {
-		return display;
-	}
-
-	temp = doc.body.appendChild( doc.createElement( nodeName ) );
-	display = jQuery.css( temp, "display" );
-
-	temp.parentNode.removeChild( temp );
-
-	if ( display === "none" ) {
-		display = "block";
-	}
-	defaultDisplayMap[ nodeName ] = display;
-
-	return display;
-}
-
-function showHide( elements, show ) {
-	var display, elem,
-		values = [],
-		index = 0,
-		length = elements.length;
-
-	// Determine new display value for elements that need to change
-	for ( ; index < length; index++ ) {
-		elem = elements[ index ];
-		if ( !elem.style ) {
-			continue;
-		}
-
-		display = elem.style.display;
-		if ( show ) {
-
-			// Since we force visibility upon cascade-hidden elements, an immediate (and slow)
-			// check is required in this first loop unless we have a nonempty display value (either
-			// inline or about-to-be-restored)
-			if ( display === "none" ) {
-				values[ index ] = dataPriv.get( elem, "display" ) || null;
-				if ( !values[ index ] ) {
-					elem.style.display = "";
-				}
-			}
-			if ( elem.style.display === "" && isHiddenWithinTree( elem ) ) {
-				values[ index ] = getDefaultDisplay( elem );
-			}
-		} else {
-			if ( display !== "none" ) {
-				values[ index ] = "none";
-
-				// Remember what we're overwriting
-				dataPriv.set( elem, "display", display );
-			}
-		}
-	}
-
-	// Set the display of the elements in a second loop to avoid constant reflow
-	for ( index = 0; index < length; index++ ) {
-		if ( values[ index ] != null ) {
-			elements[ index ].style.display = values[ index ];
-		}
-	}
-
-	return elements;
-}
-
-jQuery.fn.extend( {
-	show: function() {
-		return showHide( this, true );
-	},
-	hide: function() {
-		return showHide( this );
-	},
-	toggle: function( state ) {
-		if ( typeof state === "boolean" ) {
-			return state ? this.show() : this.hide();
-		}
-
-		return this.each( function() {
-			if ( isHiddenWithinTree( this ) ) {
-				jQuery( this ).show();
-			} else {
-				jQuery( this ).hide();
-			}
-		} );
-	}
-} );
-var rcheckableType = ( /^(?:checkbox|radio)$/i );
-
-var rtagName = ( /<([a-z][^\/\0>\x20\t\r\n\f]*)/i );
-
-var rscriptType = ( /^$|^module$|\/(?:java|ecma)script/i );
-
-
-
-// We have to close these tags to support XHTML (#13200)
-var wrapMap = {
-
-	// Support: IE <=9 only
-	option: [ 1, "<select multiple='multiple'>", "</select>" ],
-
-	// XHTML parsers do not magically insert elements in the
-	// same way that tag soup parsers do. So we cannot shorten
-	// this by omitting <tbody> or other required elements.
-	thead: [ 1, "<table>", "</table>" ],
-	col: [ 2, "<table><colgroup>", "</colgroup></table>" ],
-	tr: [ 2, "<table><tbody>", "</tbody></table>" ],
-	td: [ 3, "<table><tbody><tr>", "</tr></tbody></table>" ],
-
-	_default: [ 0, "", "" ]
-};
-
-// Support: IE <=9 only
-wrapMap.optgroup = wrapMap.option;
-
-wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;
-wrapMap.th = wrapMap.td;
-
-
-function getAll( context, tag ) {
-
-	// Support: IE <=9 - 11 only
-	// Use typeof to avoid zero-argument method invocation on host objects (#15151)
-	var ret;
-
-	if ( typeof context.getElementsByTagName !== "undefined" ) {
-		ret = context.getElementsByTagName( tag || "*" );
-
-	} else if ( typeof context.querySelectorAll !== "undefined" ) {
-		ret = context.querySelectorAll( tag || "*" );
-
-	} else {
-		ret = [];
-	}
-
-	if ( tag === undefined || tag && nodeName( context, tag ) ) {
-		return jQuery.merge( [ context ], ret );
-	}
-
-	return ret;
-}
-
-
-// Mark scripts as having already been evaluated
-function setGlobalEval( elems, refElements ) {
-	var i = 0,
-		l = elems.length;
-
-	for ( ; i < l; i++ ) {
-		dataPriv.set(
-			elems[ i ],
-			"globalEval",
-			!refElements || dataPriv.get( refElements[ i ], "globalEval" )
-		);
-	}
-}
-
-
-var rhtml = /<|&#?\w+;/;
-
-function buildFragment( elems, context, scripts, selection, ignored ) {
-	var elem, tmp, tag, wrap, attached, j,
-		fragment = context.createDocumentFragment(),
-		nodes = [],
-		i = 0,
-		l = elems.length;
-
-	for ( ; i < l; i++ ) {
-		elem = elems[ i ];
-
-		if ( elem || elem === 0 ) {
-
-			// Add nodes directly
-			if ( toType( elem ) === "object" ) {
-
-				// Support: Android <=4.0 only, PhantomJS 1 only
-				// push.apply(_, arraylike) throws on ancient WebKit
-				jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem );
-
-			// Convert non-html into a text node
-			} else if ( !rhtml.test( elem ) ) {
-				nodes.push( context.createTextNode( elem ) );
-
-			// Convert html into DOM nodes
-			} else {
-				tmp = tmp || fragment.appendChild( context.createElement( "div" ) );
-
-				// Deserialize a standard representation
-				tag = ( rtagName.exec( elem ) || [ "", "" ] )[ 1 ].toLowerCase();
-				wrap = wrapMap[ tag ] || wrapMap._default;
-				tmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ];
-
-				// Descend through wrappers to the right content
-				j = wrap[ 0 ];
-				while ( j-- ) {
-					tmp = tmp.lastChild;
-				}
-
-				// Support: Android <=4.0 only, PhantomJS 1 only
-				// push.apply(_, arraylike) throws on ancient WebKit
-				jQuery.merge( nodes, tmp.childNodes );
-
-				// Remember the top-level container
-				tmp = fragment.firstChild;
-
-				// Ensure the created nodes are orphaned (#12392)
-				tmp.textContent = "";
-			}
-		}
-	}
-
-	// Remove wrapper from fragment
-	fragment.textContent = "";
-
-	i = 0;
-	while ( ( elem = nodes[ i++ ] ) ) {
-
-		// Skip elements already in the context collection (trac-4087)
-		if ( selection && jQuery.inArray( elem, selection ) > -1 ) {
-			if ( ignored ) {
-				ignored.push( elem );
-			}
-			continue;
-		}
-
-		attached = isAttached( elem );
-
-		// Append to fragment
-		tmp = getAll( fragment.appendChild( elem ), "script" );
-
-		// Preserve script evaluation history
-		if ( attached ) {
-			setGlobalEval( tmp );
-		}
-
-		// Capture executables
-		if ( scripts ) {
-			j = 0;
-			while ( ( elem = tmp[ j++ ] ) ) {
-				if ( rscriptType.test( elem.type || "" ) ) {
-					scripts.push( elem );
-				}
-			}
-		}
-	}
-
-	return fragment;
-}
-
-
-( function() {
-	var fragment = document.createDocumentFragment(),
-		div = fragment.appendChild( document.createElement( "div" ) ),
-		input = document.createElement( "input" );
-
-	// Support: Android 4.0 - 4.3 only
-	// Check state lost if the name is set (#11217)
-	// Support: Windows Web Apps (WWA)
-	// `name` and `type` must use .setAttribute for WWA (#14901)
-	input.setAttribute( "type", "radio" );
-	input.setAttribute( "checked", "checked" );
-	input.setAttribute( "name", "t" );
-
-	div.appendChild( input );
-
-	// Support: Android <=4.1 only
-	// Older WebKit doesn't clone checked state correctly in fragments
-	support.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked;
-
-	// Support: IE <=11 only
-	// Make sure textarea (and checkbox) defaultValue is properly cloned
-	div.innerHTML = "<textarea>x</textarea>";
-	support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue;
-} )();
-
-
-var
-	rkeyEvent = /^key/,
-	rmouseEvent = /^(?:mouse|pointer|contextmenu|drag|drop)|click/,
-	rtypenamespace = /^([^.]*)(?:\.(.+)|)/;
-
-function returnTrue() {
-	return true;
-}
-
-function returnFalse() {
-	return false;
-}
-
-// Support: IE <=9 - 11+
-// focus() and blur() are asynchronous, except when they are no-op.
-// So expect focus to be synchronous when the element is already active,
-// and blur to be synchronous when the element is not already active.
-// (focus and blur are always synchronous in other supported browsers,
-// this just defines when we can count on it).
-function expectSync( elem, type ) {
-	return ( elem === safeActiveElement() ) === ( type === "focus" );
-}
-
-// Support: IE <=9 only
-// Accessing document.activeElement can throw unexpectedly
-// https://bugs.jquery.com/ticket/13393
-function safeActiveElement() {
-	try {
-		return document.activeElement;
-	} catch ( err ) { }
-}
-
-function on( elem, types, selector, data, fn, one ) {
-	var origFn, type;
-
-	// Types can be a map of types/handlers
-	if ( typeof types === "object" ) {
-
-		// ( types-Object, selector, data )
-		if ( typeof selector !== "string" ) {
-
-			// ( types-Object, data )
-			data = data || selector;
-			selector = undefined;
-		}
-		for ( type in types ) {
-			on( elem, type, selector, data, types[ type ], one );
-		}
-		return elem;
-	}
-
-	if ( data == null && fn == null ) {
-
-		// ( types, fn )
-		fn = selector;
-		data = selector = undefined;
-	} else if ( fn == null ) {
-		if ( typeof selector === "string" ) {
-
-			// ( types, selector, fn )
-			fn = data;
-			data = undefined;
-		} else {
-
-			// ( types, data, fn )
-			fn = data;
-			data = selector;
-			selector = undefined;
-		}
-	}
-	if ( fn === false ) {
-		fn = returnFalse;
-	} else if ( !fn ) {
-		return elem;
-	}
-
-	if ( one === 1 ) {
-		origFn = fn;
-		fn = function( event ) {
-
-			// Can use an empty set, since event contains the info
-			jQuery().off( event );
-			return origFn.apply( this, arguments );
-		};
-
-		// Use same guid so caller can remove using origFn
-		fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );
-	}
-	return elem.each( function() {
-		jQuery.event.add( this, types, fn, data, selector );
-	} );
-}
-
-/*
- * Helper functions for managing events -- not part of the public interface.
- * Props to Dean Edwards' addEvent library for many of the ideas.
- */
-jQuery.event = {
-
-	global: {},
-
-	add: function( elem, types, handler, data, selector ) {
-
-		var handleObjIn, eventHandle, tmp,
-			events, t, handleObj,
-			special, handlers, type, namespaces, origType,
-			elemData = dataPriv.get( elem );
-
-		// Don't attach events to noData or text/comment nodes (but allow plain objects)
-		if ( !elemData ) {
-			return;
-		}
-
-		// Caller can pass in an object of custom data in lieu of the handler
-		if ( handler.handler ) {
-			handleObjIn = handler;
-			handler = handleObjIn.handler;
-			selector = handleObjIn.selector;
-		}
-
-		// Ensure that invalid selectors throw exceptions at attach time
-		// Evaluate against documentElement in case elem is a non-element node (e.g., document)
-		if ( selector ) {
-			jQuery.find.matchesSelector( documentElement, selector );
-		}
-
-		// Make sure that the handler has a unique ID, used to find/remove it later
-		if ( !handler.guid ) {
-			handler.guid = jQuery.guid++;
-		}
-
-		// Init the element's event structure and main handler, if this is the first
-		if ( !( events = elemData.events ) ) {
-			events = elemData.events = {};
-		}
-		if ( !( eventHandle = elemData.handle ) ) {
-			eventHandle = elemData.handle = function( e ) {
-
-				// Discard the second event of a jQuery.event.trigger() and
-				// when an event is called after a page has unloaded
-				return typeof jQuery !== "undefined" && jQuery.event.triggered !== e.type ?
-					jQuery.event.dispatch.apply( elem, arguments ) : undefined;
-			};
-		}
-
-		// Handle multiple events separated by a space
-		types = ( types || "" ).match( rnothtmlwhite ) || [ "" ];
-		t = types.length;
-		while ( t-- ) {
-			tmp = rtypenamespace.exec( types[ t ] ) || [];
-			type = origType = tmp[ 1 ];
-			namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort();
-
-			// There *must* be a type, no attaching namespace-only handlers
-			if ( !type ) {
-				continue;
-			}
-
-			// If event changes its type, use the special event handlers for the changed type
-			special = jQuery.event.special[ type ] || {};
-
-			// If selector defined, determine special event api type, otherwise given type
-			type = ( selector ? special.delegateType : special.bindType ) || type;
-
-			// Update special based on newly reset type
-			special = jQuery.event.special[ type ] || {};
-
-			// handleObj is passed to all event handlers
-			handleObj = jQuery.extend( {
-				type: type,
-				origType: origType,
-				data: data,
-				handler: handler,
-				guid: handler.guid,
-				selector: selector,
-				needsContext: selector && jQuery.expr.match.needsContext.test( selector ),
-				namespace: namespaces.join( "." )
-			}, handleObjIn );
-
-			// Init the event handler queue if we're the first
-			if ( !( handlers = events[ type ] ) ) {
-				handlers = events[ type ] = [];
-				handlers.delegateCount = 0;
-
-				// Only use addEventListener if the special events handler returns false
-				if ( !special.setup ||
-					special.setup.call( elem, data, namespaces, eventHandle ) === false ) {
-
-					if ( elem.addEventListener ) {
-						elem.addEventListener( type, eventHandle );
-					}
-				}
-			}
-
-			if ( special.add ) {
-				special.add.call( elem, handleObj );
-
-				if ( !handleObj.handler.guid ) {
-					handleObj.handler.guid = handler.guid;
-				}
-			}
-
-			// Add to the element's handler list, delegates in front
-			if ( selector ) {
-				handlers.splice( handlers.delegateCount++, 0, handleObj );
-			} else {
-				handlers.push( handleObj );
-			}
-
-			// Keep track of which events have ever been used, for event optimization
-			jQuery.event.global[ type ] = true;
-		}
-
-	},
-
-	// Detach an event or set of events from an element
-	remove: function( elem, types, handler, selector, mappedTypes ) {
-
-		var j, origCount, tmp,
-			events, t, handleObj,
-			special, handlers, type, namespaces, origType,
-			elemData = dataPriv.hasData( elem ) && dataPriv.get( elem );
-
-		if ( !elemData || !( events = elemData.events ) ) {
-			return;
-		}
-
-		// Once for each type.namespace in types; type may be omitted
-		types = ( types || "" ).match( rnothtmlwhite ) || [ "" ];
-		t = types.length;
-		while ( t-- ) {
-			tmp = rtypenamespace.exec( types[ t ] ) || [];
-			type = origType = tmp[ 1 ];
-			namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort();
-
-			// Unbind all events (on this namespace, if provided) for the element
-			if ( !type ) {
-				for ( type in events ) {
-					jQuery.event.remove( elem, type + types[ t ], handler, selector, true );
-				}
-				continue;
-			}
-
-			special = jQuery.event.special[ type ] || {};
-			type = ( selector ? special.delegateType : special.bindType ) || type;
-			handlers = events[ type ] || [];
-			tmp = tmp[ 2 ] &&
-				new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" );
-
-			// Remove matching events
-			origCount = j = handlers.length;
-			while ( j-- ) {
-				handleObj = handlers[ j ];
-
-				if ( ( mappedTypes || origType === handleObj.origType ) &&
-					( !handler || handler.guid === handleObj.guid ) &&
-					( !tmp || tmp.test( handleObj.namespace ) ) &&
-					( !selector || selector === handleObj.selector ||
-						selector === "**" && handleObj.selector ) ) {
-					handlers.splice( j, 1 );
-
-					if ( handleObj.selector ) {
-						handlers.delegateCount--;
-					}
-					if ( special.remove ) {
-						special.remove.call( elem, handleObj );
-					}
-				}
-			}
-
-			// Remove generic event handler if we removed something and no more handlers exist
-			// (avoids potential for endless recursion during removal of special event handlers)
-			if ( origCount && !handlers.length ) {
-				if ( !special.teardown ||
-					special.teardown.call( elem, namespaces, elemData.handle ) === false ) {
-
-					jQuery.removeEvent( elem, type, elemData.handle );
-				}
-
-				delete events[ type ];
-			}
-		}
-
-		// Remove data and the expando if it's no longer used
-		if ( jQuery.isEmptyObject( events ) ) {
-			dataPriv.remove( elem, "handle events" );
-		}
-	},
-
-	dispatch: function( nativeEvent ) {
-
-		// Make a writable jQuery.Event from the native event object
-		var event = jQuery.event.fix( nativeEvent );
-
-		var i, j, ret, matched, handleObj, handlerQueue,
-			args = new Array( arguments.length ),
-			handlers = ( dataPriv.get( this, "events" ) || {} )[ event.type ] || [],
-			special = jQuery.event.special[ event.type ] || {};
-
-		// Use the fix-ed jQuery.Event rather than the (read-only) native event
-		args[ 0 ] = event;
-
-		for ( i = 1; i < arguments.length; i++ ) {
-			args[ i ] = arguments[ i ];
-		}
-
-		event.delegateTarget = this;
-
-		// Call the preDispatch hook for the mapped type, and let it bail if desired
-		if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {
-			return;
-		}
-
-		// Determine handlers
-		handlerQueue = jQuery.event.handlers.call( this, event, handlers );
-
-		// Run delegates first; they may want to stop propagation beneath us
-		i = 0;
-		while ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) {
-			event.currentTarget = matched.elem;
-
-			j = 0;
-			while ( ( handleObj = matched.handlers[ j++ ] ) &&
-				!event.isImmediatePropagationStopped() ) {
-
-				// If the event is namespaced, then each handler is only invoked if it is
-				// specially universal or its namespaces are a superset of the event's.
-				if ( !event.rnamespace || handleObj.namespace === false ||
-					event.rnamespace.test( handleObj.namespace ) ) {
-
-					event.handleObj = handleObj;
-					event.data = handleObj.data;
-
-					ret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle ||
-						handleObj.handler ).apply( matched.elem, args );
-
-					if ( ret !== undefined ) {
-						if ( ( event.result = ret ) === false ) {
-							event.preventDefault();
-							event.stopPropagation();
-						}
-					}
-				}
-			}
-		}
-
-		// Call the postDispatch hook for the mapped type
-		if ( special.postDispatch ) {
-			special.postDispatch.call( this, event );
-		}
-
-		return event.result;
-	},
-
-	handlers: function( event, handlers ) {
-		var i, handleObj, sel, matchedHandlers, matchedSelectors,
-			handlerQueue = [],
-			delegateCount = handlers.delegateCount,
-			cur = event.target;
-
-		// Find delegate handlers
-		if ( delegateCount &&
-
-			// Support: IE <=9
-			// Black-hole SVG <use> instance trees (trac-13180)
-			cur.nodeType &&
-
-			// Support: Firefox <=42
-			// Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861)
-			// https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click
-			// Support: IE 11 only
-			// ...but not arrow key "clicks" of radio inputs, which can have `button` -1 (gh-2343)
-			!( event.type === "click" && event.button >= 1 ) ) {
-
-			for ( ; cur !== this; cur = cur.parentNode || this ) {
-
-				// Don't check non-elements (#13208)
-				// Don't process clicks on disabled elements (#6911, #8165, #11382, #11764)
-				if ( cur.nodeType === 1 && !( event.type === "click" && cur.disabled === true ) ) {
-					matchedHandlers = [];
-					matchedSelectors = {};
-					for ( i = 0; i < delegateCount; i++ ) {
-						handleObj = handlers[ i ];
-
-						// Don't conflict with Object.prototype properties (#13203)
-						sel = handleObj.selector + " ";
-
-						if ( matchedSelectors[ sel ] === undefined ) {
-							matchedSelectors[ sel ] = handleObj.needsContext ?
-								jQuery( sel, this ).index( cur ) > -1 :
-								jQuery.find( sel, this, null, [ cur ] ).length;
-						}
-						if ( matchedSelectors[ sel ] ) {
-							matchedHandlers.push( handleObj );
-						}
-					}
-					if ( matchedHandlers.length ) {
-						handlerQueue.push( { elem: cur, handlers: matchedHandlers } );
-					}
-				}
-			}
-		}
-
-		// Add the remaining (directly-bound) handlers
-		cur = this;
-		if ( delegateCount < handlers.length ) {
-			handlerQueue.push( { elem: cur, handlers: handlers.slice( delegateCount ) } );
-		}
-
-		return handlerQueue;
-	},
-
-	addProp: function( name, hook ) {
-		Object.defineProperty( jQuery.Event.prototype, name, {
-			enumerable: true,
-			configurable: true,
-
-			get: isFunction( hook ) ?
-				function() {
-					if ( this.originalEvent ) {
-							return hook( this.originalEvent );
-					}
-				} :
-				function() {
-					if ( this.originalEvent ) {
-							return this.originalEvent[ name ];
-					}
-				},
-
-			set: function( value ) {
-				Object.defineProperty( this, name, {
-					enumerable: true,
-					configurable: true,
-					writable: true,
-					value: value
-				} );
-			}
-		} );
-	},
-
-	fix: function( originalEvent ) {
-		return originalEvent[ jQuery.expando ] ?
-			originalEvent :
-			new jQuery.Event( originalEvent );
-	},
-
-	special: {
-		load: {
-
-			// Prevent triggered image.load events from bubbling to window.load
-			noBubble: true
-		},
-		click: {
-
-			// Utilize native event to ensure correct state for checkable inputs
-			setup: function( data ) {
-
-				// For mutual compressibility with _default, replace `this` access with a local var.
-				// `|| data` is dead code meant only to preserve the variable through minification.
-				var el = this || data;
-
-				// Claim the first handler
-				if ( rcheckableType.test( el.type ) &&
-					el.click && nodeName( el, "input" ) ) {
-
-					// dataPriv.set( el, "click", ... )
-					leverageNative( el, "click", returnTrue );
-				}
-
-				// Return false to allow normal processing in the caller
-				return false;
-			},
-			trigger: function( data ) {
-
-				// For mutual compressibility with _default, replace `this` access with a local var.
-				// `|| data` is dead code meant only to preserve the variable through minification.
-				var el = this || data;
-
-				// Force setup before triggering a click
-				if ( rcheckableType.test( el.type ) &&
-					el.click && nodeName( el, "input" ) ) {
-
-					leverageNative( el, "click" );
-				}
-
-				// Return non-false to allow normal event-path propagation
-				return true;
-			},
-
-			// For cross-browser consistency, suppress native .click() on links
-			// Also prevent it if we're currently inside a leveraged native-event stack
-			_default: function( event ) {
-				var target = event.target;
-				return rcheckableType.test( target.type ) &&
-					target.click && nodeName( target, "input" ) &&
-					dataPriv.get( target, "click" ) ||
-					nodeName( target, "a" );
-			}
-		},
-
-		beforeunload: {
-			postDispatch: function( event ) {
-
-				// Support: Firefox 20+
-				// Firefox doesn't alert if the returnValue field is not set.
-				if ( event.result !== undefined && event.originalEvent ) {
-					event.originalEvent.returnValue = event.result;
-				}
-			}
-		}
-	}
-};
-
-// Ensure the presence of an event listener that handles manually-triggered
-// synthetic events by interrupting progress until reinvoked in response to
-// *native* events that it fires directly, ensuring that state changes have
-// already occurred before other listeners are invoked.
-function leverageNative( el, type, expectSync ) {
-
-	// Missing expectSync indicates a trigger call, which must force setup through jQuery.event.add
-	if ( !expectSync ) {
-		if ( dataPriv.get( el, type ) === undefined ) {
-			jQuery.event.add( el, type, returnTrue );
-		}
-		return;
-	}
-
-	// Register the controller as a special universal handler for all event namespaces
-	dataPriv.set( el, type, false );
-	jQuery.event.add( el, type, {
-		namespace: false,
-		handler: function( event ) {
-			var notAsync, result,
-				saved = dataPriv.get( this, type );
-
-			if ( ( event.isTrigger & 1 ) && this[ type ] ) {
-
-				// Interrupt processing of the outer synthetic .trigger()ed event
-				// Saved data should be false in such cases, but might be a leftover capture object
-				// from an async native handler (gh-4350)
-				if ( !saved.length ) {
-
-					// Store arguments for use when handling the inner native event
-					// There will always be at least one argument (an event object), so this array
-					// will not be confused with a leftover capture object.
-					saved = slice.call( arguments );
-					dataPriv.set( this, type, saved );
-
-					// Trigger the native event and capture its result
-					// Support: IE <=9 - 11+
-					// focus() and blur() are asynchronous
-					notAsync = expectSync( this, type );
-					this[ type ]();
-					result = dataPriv.get( this, type );
-					if ( saved !== result || notAsync ) {
-						dataPriv.set( this, type, false );
-					} else {
-						result = {};
-					}
-					if ( saved !== result ) {
-
-						// Cancel the outer synthetic event
-						event.stopImmediatePropagation();
-						event.preventDefault();
-						return result.value;
-					}
-
-				// If this is an inner synthetic event for an event with a bubbling surrogate
-				// (focus or blur), assume that the surrogate already propagated from triggering the
-				// native event and prevent that from happening again here.
-				// This technically gets the ordering wrong w.r.t. to `.trigger()` (in which the
-				// bubbling surrogate propagates *after* the non-bubbling base), but that seems
-				// less bad than duplication.
-				} else if ( ( jQuery.event.special[ type ] || {} ).delegateType ) {
-					event.stopPropagation();
-				}
-
-			// If this is a native event triggered above, everything is now in order
-			// Fire an inner synthetic event with the original arguments
-			} else if ( saved.length ) {
-
-				// ...and capture the result
-				dataPriv.set( this, type, {
-					value: jQuery.event.trigger(
-
-						// Support: IE <=9 - 11+
-						// Extend with the prototype to reset the above stopImmediatePropagation()
-						jQuery.extend( saved[ 0 ], jQuery.Event.prototype ),
-						saved.slice( 1 ),
-						this
-					)
-				} );
-
-				// Abort handling of the native event
-				event.stopImmediatePropagation();
-			}
-		}
-	} );
-}
-
-jQuery.removeEvent = function( elem, type, handle ) {
-
-	// This "if" is needed for plain objects
-	if ( elem.removeEventListener ) {
-		elem.removeEventListener( type, handle );
-	}
-};
-
-jQuery.Event = function( src, props ) {
-
-	// Allow instantiation without the 'new' keyword
-	if ( !( this instanceof jQuery.Event ) ) {
-		return new jQuery.Event( src, props );
-	}
-
-	// Event object
-	if ( src && src.type ) {
-		this.originalEvent = src;
-		this.type = src.type;
-
-		// Events bubbling up the document may have been marked as prevented
-		// by a handler lower down the tree; reflect the correct value.
-		this.isDefaultPrevented = src.defaultPrevented ||
-				src.defaultPrevented === undefined &&
-
-				// Support: Android <=2.3 only
-				src.returnValue === false ?
-			returnTrue :
-			returnFalse;
-
-		// Create target properties
-		// Support: Safari <=6 - 7 only
-		// Target should not be a text node (#504, #13143)
-		this.target = ( src.target && src.target.nodeType === 3 ) ?
-			src.target.parentNode :
-			src.target;
-
-		this.currentTarget = src.currentTarget;
-		this.relatedTarget = src.relatedTarget;
-
-	// Event type
-	} else {
-		this.type = src;
-	}
-
-	// Put explicitly provided properties onto the event object
-	if ( props ) {
-		jQuery.extend( this, props );
-	}
-
-	// Create a timestamp if incoming event doesn't have one
-	this.timeStamp = src && src.timeStamp || Date.now();
-
-	// Mark it as fixed
-	this[ jQuery.expando ] = true;
-};
-
-// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding
-// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html
-jQuery.Event.prototype = {
-	constructor: jQuery.Event,
-	isDefaultPrevented: returnFalse,
-	isPropagationStopped: returnFalse,
-	isImmediatePropagationStopped: returnFalse,
-	isSimulated: false,
-
-	preventDefault: function() {
-		var e = this.originalEvent;
-
-		this.isDefaultPrevented = returnTrue;
-
-		if ( e && !this.isSimulated ) {
-			e.preventDefault();
-		}
-	},
-	stopPropagation: function() {
-		var e = this.originalEvent;
-
-		this.isPropagationStopped = returnTrue;
-
-		if ( e && !this.isSimulated ) {
-			e.stopPropagation();
-		}
-	},
-	stopImmediatePropagation: function() {
-		var e = this.originalEvent;
-
-		this.isImmediatePropagationStopped = returnTrue;
-
-		if ( e && !this.isSimulated ) {
-			e.stopImmediatePropagation();
-		}
-
-		this.stopPropagation();
-	}
-};
-
-// Includes all common event props including KeyEvent and MouseEvent specific props
-jQuery.each( {
-	altKey: true,
-	bubbles: true,
-	cancelable: true,
-	changedTouches: true,
-	ctrlKey: true,
-	detail: true,
-	eventPhase: true,
-	metaKey: true,
-	pageX: true,
-	pageY: true,
-	shiftKey: true,
-	view: true,
-	"char": true,
-	code: true,
-	charCode: true,
-	key: true,
-	keyCode: true,
-	button: true,
-	buttons: true,
-	clientX: true,
-	clientY: true,
-	offsetX: true,
-	offsetY: true,
-	pointerId: true,
-	pointerType: true,
-	screenX: true,
-	screenY: true,
-	targetTouches: true,
-	toElement: true,
-	touches: true,
-
-	which: function( event ) {
-		var button = event.button;
-
-		// Add which for key events
-		if ( event.which == null && rkeyEvent.test( event.type ) ) {
-			return event.charCode != null ? event.charCode : event.keyCode;
-		}
-
-		// Add which for click: 1 === left; 2 === middle; 3 === right
-		if ( !event.which && button !== undefined && rmouseEvent.test( event.type ) ) {
-			if ( button & 1 ) {
-				return 1;
-			}
-
-			if ( button & 2 ) {
-				return 3;
-			}
-
-			if ( button & 4 ) {
-				return 2;
-			}
-
-			return 0;
-		}
-
-		return event.which;
-	}
-}, jQuery.event.addProp );
-
-jQuery.each( { focus: "focusin", blur: "focusout" }, function( type, delegateType ) {
-	jQuery.event.special[ type ] = {
-
-		// Utilize native event if possible so blur/focus sequence is correct
-		setup: function() {
-
-			// Claim the first handler
-			// dataPriv.set( this, "focus", ... )
-			// dataPriv.set( this, "blur", ... )
-			leverageNative( this, type, expectSync );
-
-			// Return false to allow normal processing in the caller
-			return false;
-		},
-		trigger: function() {
-
-			// Force setup before trigger
-			leverageNative( this, type );
-
-			// Return non-false to allow normal event-path propagation
-			return true;
-		},
-
-		delegateType: delegateType
-	};
-} );
-
-// Create mouseenter/leave events using mouseover/out and event-time checks
-// so that event delegation works in jQuery.
-// Do the same for pointerenter/pointerleave and pointerover/pointerout
-//
-// Support: Safari 7 only
-// Safari sends mouseenter too often; see:
-// https://bugs.chromium.org/p/chromium/issues/detail?id=470258
-// for the description of the bug (it existed in older Chrome versions as well).
-jQuery.each( {
-	mouseenter: "mouseover",
-	mouseleave: "mouseout",
-	pointerenter: "pointerover",
-	pointerleave: "pointerout"
-}, function( orig, fix ) {
-	jQuery.event.special[ orig ] = {
-		delegateType: fix,
-		bindType: fix,
-
-		handle: function( event ) {
-			var ret,
-				target = this,
-				related = event.relatedTarget,
-				handleObj = event.handleObj;
-
-			// For mouseenter/leave call the handler if related is outside the target.
-			// NB: No relatedTarget if the mouse left/entered the browser window
-			if ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) {
-				event.type = handleObj.origType;
-				ret = handleObj.handler.apply( this, arguments );
-				event.type = fix;
-			}
-			return ret;
-		}
-	};
-} );
-
-jQuery.fn.extend( {
-
-	on: function( types, selector, data, fn ) {
-		return on( this, types, selector, data, fn );
-	},
-	one: function( types, selector, data, fn ) {
-		return on( this, types, selector, data, fn, 1 );
-	},
-	off: function( types, selector, fn ) {
-		var handleObj, type;
-		if ( types && types.preventDefault && types.handleObj ) {
-
-			// ( event )  dispatched jQuery.Event
-			handleObj = types.handleObj;
-			jQuery( types.delegateTarget ).off(
-				handleObj.namespace ?
-					handleObj.origType + "." + handleObj.namespace :
-					handleObj.origType,
-				handleObj.selector,
-				handleObj.handler
-			);
-			return this;
-		}
-		if ( typeof types === "object" ) {
-
-			// ( types-object [, selector] )
-			for ( type in types ) {
-				this.off( type, selector, types[ type ] );
-			}
-			return this;
-		}
-		if ( selector === false || typeof selector === "function" ) {
-
-			// ( types [, fn] )
-			fn = selector;
-			selector = undefined;
-		}
-		if ( fn === false ) {
-			fn = returnFalse;
-		}
-		return this.each( function() {
-			jQuery.event.remove( this, types, fn, selector );
-		} );
-	}
-} );
-
-
-var
-
-	/* eslint-disable max-len */
-
-	// See https://github.com/eslint/eslint/issues/3229
-	rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([a-z][^\/\0>\x20\t\r\n\f]*)[^>]*)\/>/gi,
-
-	/* eslint-enable */
-
-	// Support: IE <=10 - 11, Edge 12 - 13 only
-	// In IE/Edge using regex groups here causes severe slowdowns.
-	// See https://connect.microsoft.com/IE/feedback/details/1736512/
-	rnoInnerhtml = /<script|<style|<link/i,
-
-	// checked="checked" or checked
-	rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i,
-	rcleanScript = /^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g;
-
-// Prefer a tbody over its parent table for containing new rows
-function manipulationTarget( elem, content ) {
-	if ( nodeName( elem, "table" ) &&
-		nodeName( content.nodeType !== 11 ? content : content.firstChild, "tr" ) ) {
-
-		return jQuery( elem ).children( "tbody" )[ 0 ] || elem;
-	}
-
-	return elem;
-}
-
-// Replace/restore the type attribute of script elements for safe DOM manipulation
-function disableScript( elem ) {
-	elem.type = ( elem.getAttribute( "type" ) !== null ) + "/" + elem.type;
-	return elem;
-}
-function restoreScript( elem ) {
-	if ( ( elem.type || "" ).slice( 0, 5 ) === "true/" ) {
-		elem.type = elem.type.slice( 5 );
-	} else {
-		elem.removeAttribute( "type" );
-	}
-
-	return elem;
-}
-
-function cloneCopyEvent( src, dest ) {
-	var i, l, type, pdataOld, pdataCur, udataOld, udataCur, events;
-
-	if ( dest.nodeType !== 1 ) {
-		return;
-	}
-
-	// 1. Copy private data: events, handlers, etc.
-	if ( dataPriv.hasData( src ) ) {
-		pdataOld = dataPriv.access( src );
-		pdataCur = dataPriv.set( dest, pdataOld );
-		events = pdataOld.events;
-
-		if ( events ) {
-			delete pdataCur.handle;
-			pdataCur.events = {};
-
-			for ( type in events ) {
-				for ( i = 0, l = events[ type ].length; i < l; i++ ) {
-					jQuery.event.add( dest, type, events[ type ][ i ] );
-				}
-			}
-		}
-	}
-
-	// 2. Copy user data
-	if ( dataUser.hasData( src ) ) {
-		udataOld = dataUser.access( src );
-		udataCur = jQuery.extend( {}, udataOld );
-
-		dataUser.set( dest, udataCur );
-	}
-}
-
-// Fix IE bugs, see support tests
-function fixInput( src, dest ) {
-	var nodeName = dest.nodeName.toLowerCase();
-
-	// Fails to persist the checked state of a cloned checkbox or radio button.
-	if ( nodeName === "input" && rcheckableType.test( src.type ) ) {
-		dest.checked = src.checked;
-
-	// Fails to return the selected option to the default selected state when cloning options
-	} else if ( nodeName === "input" || nodeName === "textarea" ) {
-		dest.defaultValue = src.defaultValue;
-	}
-}
-
-function domManip( collection, args, callback, ignored ) {
-
-	// Flatten any nested arrays
-	args = concat.apply( [], args );
-
-	var fragment, first, scripts, hasScripts, node, doc,
-		i = 0,
-		l = collection.length,
-		iNoClone = l - 1,
-		value = args[ 0 ],
-		valueIsFunction = isFunction( value );
-
-	// We can't cloneNode fragments that contain checked, in WebKit
-	if ( valueIsFunction ||
-			( l > 1 && typeof value === "string" &&
-				!support.checkClone && rchecked.test( value ) ) ) {
-		return collection.each( function( index ) {
-			var self = collection.eq( index );
-			if ( valueIsFunction ) {
-				args[ 0 ] = value.call( this, index, self.html() );
-			}
-			domManip( self, args, callback, ignored );
-		} );
-	}
-
-	if ( l ) {
-		fragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored );
-		first = fragment.firstChild;
-
-		if ( fragment.childNodes.length === 1 ) {
-			fragment = first;
-		}
-
-		// Require either new content or an interest in ignored elements to invoke the callback
-		if ( first || ignored ) {
-			scripts = jQuery.map( getAll( fragment, "script" ), disableScript );
-			hasScripts = scripts.length;
-
-			// Use the original fragment for the last item
-			// instead of the first because it can end up
-			// being emptied incorrectly in certain situations (#8070).
-			for ( ; i < l; i++ ) {
-				node = fragment;
-
-				if ( i !== iNoClone ) {
-					node = jQuery.clone( node, true, true );
-
-					// Keep references to cloned scripts for later restoration
-					if ( hasScripts ) {
-
-						// Support: Android <=4.0 only, PhantomJS 1 only
-						// push.apply(_, arraylike) throws on ancient WebKit
-						jQuery.merge( scripts, getAll( node, "script" ) );
-					}
-				}
-
-				callback.call( collection[ i ], node, i );
-			}
-
-			if ( hasScripts ) {
-				doc = scripts[ scripts.length - 1 ].ownerDocument;
-
-				// Reenable scripts
-				jQuery.map( scripts, restoreScript );
-
-				// Evaluate executable scripts on first document insertion
-				for ( i = 0; i < hasScripts; i++ ) {
-					node = scripts[ i ];
-					if ( rscriptType.test( node.type || "" ) &&
-						!dataPriv.access( node, "globalEval" ) &&
-						jQuery.contains( doc, node ) ) {
-
-						if ( node.src && ( node.type || "" ).toLowerCase()  !== "module" ) {
-
-							// Optional AJAX dependency, but won't run scripts if not present
-							if ( jQuery._evalUrl && !node.noModule ) {
-								jQuery._evalUrl( node.src, {
-									nonce: node.nonce || node.getAttribute( "nonce" )
-								} );
-							}
-						} else {
-							DOMEval( node.textContent.replace( rcleanScript, "" ), node, doc );
-						}
-					}
-				}
-			}
-		}
-	}
-
-	return collection;
-}
-
-function remove( elem, selector, keepData ) {
-	var node,
-		nodes = selector ? jQuery.filter( selector, elem ) : elem,
-		i = 0;
-
-	for ( ; ( node = nodes[ i ] ) != null; i++ ) {
-		if ( !keepData && node.nodeType === 1 ) {
-			jQuery.cleanData( getAll( node ) );
-		}
-
-		if ( node.parentNode ) {
-			if ( keepData && isAttached( node ) ) {
-				setGlobalEval( getAll( node, "script" ) );
-			}
-			node.parentNode.removeChild( node );
-		}
-	}
-
-	return elem;
-}
-
-jQuery.extend( {
-	htmlPrefilter: function( html ) {
-		return html.replace( rxhtmlTag, "<$1></$2>" );
-	},
-
-	clone: function( elem, dataAndEvents, deepDataAndEvents ) {
-		var i, l, srcElements, destElements,
-			clone = elem.cloneNode( true ),
-			inPage = isAttached( elem );
-
-		// Fix IE cloning issues
-		if ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) &&
-				!jQuery.isXMLDoc( elem ) ) {
-
-			// We eschew Sizzle here for performance reasons: https://jsperf.com/getall-vs-sizzle/2
-			destElements = getAll( clone );
-			srcElements = getAll( elem );
-
-			for ( i = 0, l = srcElements.length; i < l; i++ ) {
-				fixInput( srcElements[ i ], destElements[ i ] );
-			}
-		}
-
-		// Copy the events from the original to the clone
-		if ( dataAndEvents ) {
-			if ( deepDataAndEvents ) {
-				srcElements = srcElements || getAll( elem );
-				destElements = destElements || getAll( clone );
-
-				for ( i = 0, l = srcElements.length; i < l; i++ ) {
-					cloneCopyEvent( srcElements[ i ], destElements[ i ] );
-				}
-			} else {
-				cloneCopyEvent( elem, clone );
-			}
-		}
-
-		// Preserve script evaluation history
-		destElements = getAll( clone, "script" );
-		if ( destElements.length > 0 ) {
-			setGlobalEval( destElements, !inPage && getAll( elem, "script" ) );
-		}
-
-		// Return the cloned set
-		return clone;
-	},
-
-	cleanData: function( elems ) {
-		var data, elem, type,
-			special = jQuery.event.special,
-			i = 0;
-
-		for ( ; ( elem = elems[ i ] ) !== undefined; i++ ) {
-			if ( acceptData( elem ) ) {
-				if ( ( data = elem[ dataPriv.expando ] ) ) {
-					if ( data.events ) {
-						for ( type in data.events ) {
-							if ( special[ type ] ) {
-								jQuery.event.remove( elem, type );
-
-							// This is a shortcut to avoid jQuery.event.remove's overhead
-							} else {
-								jQuery.removeEvent( elem, type, data.handle );
-							}
-						}
-					}
-
-					// Support: Chrome <=35 - 45+
-					// Assign undefined instead of using delete, see Data#remove
-					elem[ dataPriv.expando ] = undefined;
-				}
-				if ( elem[ dataUser.expando ] ) {
-
-					// Support: Chrome <=35 - 45+
-					// Assign undefined instead of using delete, see Data#remove
-					elem[ dataUser.expando ] = undefined;
-				}
-			}
-		}
-	}
-} );
-
-jQuery.fn.extend( {
-	detach: function( selector ) {
-		return remove( this, selector, true );
-	},
-
-	remove: function( selector ) {
-		return remove( this, selector );
-	},
-
-	text: function( value ) {
-		return access( this, function( value ) {
-			return value === undefined ?
-				jQuery.text( this ) :
-				this.empty().each( function() {
-					if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
-						this.textContent = value;
-					}
-				} );
-		}, null, value, arguments.length );
-	},
-
-	append: function() {
-		return domManip( this, arguments, function( elem ) {
-			if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
-				var target = manipulationTarget( this, elem );
-				target.appendChild( elem );
-			}
-		} );
-	},
-
-	prepend: function() {
-		return domManip( this, arguments, function( elem ) {
-			if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
-				var target = manipulationTarget( this, elem );
-				target.insertBefore( elem, target.firstChild );
-			}
-		} );
-	},
-
-	before: function() {
-		return domManip( this, arguments, function( elem ) {
-			if ( this.parentNode ) {
-				this.parentNode.insertBefore( elem, this );
-			}
-		} );
-	},
-
-	after: function() {
-		return domManip( this, arguments, function( elem ) {
-			if ( this.parentNode ) {
-				this.parentNode.insertBefore( elem, this.nextSibling );
-			}
-		} );
-	},
-
-	empty: function() {
-		var elem,
-			i = 0;
-
-		for ( ; ( elem = this[ i ] ) != null; i++ ) {
-			if ( elem.nodeType === 1 ) {
-
-				// Prevent memory leaks
-				jQuery.cleanData( getAll( elem, false ) );
-
-				// Remove any remaining nodes
-				elem.textContent = "";
-			}
-		}
-
-		return this;
-	},
-
-	clone: function( dataAndEvents, deepDataAndEvents ) {
-		dataAndEvents = dataAndEvents == null ? false : dataAndEvents;
-		deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;
-
-		return this.map( function() {
-			return jQuery.clone( this, dataAndEvents, deepDataAndEvents );
-		} );
-	},
-
-	html: function( value ) {
-		return access( this, function( value ) {
-			var elem = this[ 0 ] || {},
-				i = 0,
-				l = this.length;
-
-			if ( value === undefined && elem.nodeType === 1 ) {
-				return elem.innerHTML;
-			}
-
-			// See if we can take a shortcut and just use innerHTML
-			if ( typeof value === "string" && !rnoInnerhtml.test( value ) &&
-				!wrapMap[ ( rtagName.exec( value ) || [ "", "" ] )[ 1 ].toLowerCase() ] ) {
-
-				value = jQuery.htmlPrefilter( value );
-
-				try {
-					for ( ; i < l; i++ ) {
-						elem = this[ i ] || {};
-
-						// Remove element nodes and prevent memory leaks
-						if ( elem.nodeType === 1 ) {
-							jQuery.cleanData( getAll( elem, false ) );
-							elem.innerHTML = value;
-						}
-					}
-
-					elem = 0;
-
-				// If using innerHTML throws an exception, use the fallback method
-				} catch ( e ) {}
-			}
-
-			if ( elem ) {
-				this.empty().append( value );
-			}
-		}, null, value, arguments.length );
-	},
-
-	replaceWith: function() {
-		var ignored = [];
-
-		// Make the changes, replacing each non-ignored context element with the new content
-		return domManip( this, arguments, function( elem ) {
-			var parent = this.parentNode;
-
-			if ( jQuery.inArray( this, ignored ) < 0 ) {
-				jQuery.cleanData( getAll( this ) );
-				if ( parent ) {
-					parent.replaceChild( elem, this );
-				}
-			}
-
-		// Force callback invocation
-		}, ignored );
-	}
-} );
-
-jQuery.each( {
-	appendTo: "append",
-	prependTo: "prepend",
-	insertBefore: "before",
-	insertAfter: "after",
-	replaceAll: "replaceWith"
-}, function( name, original ) {
-	jQuery.fn[ name ] = function( selector ) {
-		var elems,
-			ret = [],
-			insert = jQuery( selector ),
-			last = insert.length - 1,
-			i = 0;
-
-		for ( ; i <= last; i++ ) {
-			elems = i === last ? this : this.clone( true );
-			jQuery( insert[ i ] )[ original ]( elems );
-
-			// Support: Android <=4.0 only, PhantomJS 1 only
-			// .get() because push.apply(_, arraylike) throws on ancient WebKit
-			push.apply( ret, elems.get() );
-		}
-
-		return this.pushStack( ret );
-	};
-} );
-var rnumnonpx = new RegExp( "^(" + pnum + ")(?!px)[a-z%]+$", "i" );
-
-var getStyles = function( elem ) {
-
-		// Support: IE <=11 only, Firefox <=30 (#15098, #14150)
-		// IE throws on elements created in popups
-		// FF meanwhile throws on frame elements through "defaultView.getComputedStyle"
-		var view = elem.ownerDocument.defaultView;
-
-		if ( !view || !view.opener ) {
-			view = window;
-		}
-
-		return view.getComputedStyle( elem );
-	};
-
-var rboxStyle = new RegExp( cssExpand.join( "|" ), "i" );
-
-
-
-( function() {
-
-	// Executing both pixelPosition & boxSizingReliable tests require only one layout
-	// so they're executed at the same time to save the second computation.
-	function computeStyleTests() {
-
-		// This is a singleton, we need to execute it only once
-		if ( !div ) {
-			return;
-		}
-
-		container.style.cssText = "position:absolute;left:-11111px;width:60px;" +
-			"margin-top:1px;padding:0;border:0";
-		div.style.cssText =
-			"position:relative;display:block;box-sizing:border-box;overflow:scroll;" +
-			"margin:auto;border:1px;padding:1px;" +
-			"width:60%;top:1%";
-		documentElement.appendChild( container ).appendChild( div );
-
-		var divStyle = window.getComputedStyle( div );
-		pixelPositionVal = divStyle.top !== "1%";
-
-		// Support: Android 4.0 - 4.3 only, Firefox <=3 - 44
-		reliableMarginLeftVal = roundPixelMeasures( divStyle.marginLeft ) === 12;
-
-		// Support: Android 4.0 - 4.3 only, Safari <=9.1 - 10.1, iOS <=7.0 - 9.3
-		// Some styles come back with percentage values, even though they shouldn't
-		div.style.right = "60%";
-		pixelBoxStylesVal = roundPixelMeasures( divStyle.right ) === 36;
-
-		// Support: IE 9 - 11 only
-		// Detect misreporting of content dimensions for box-sizing:border-box elements
-		boxSizingReliableVal = roundPixelMeasures( divStyle.width ) === 36;
-
-		// Support: IE 9 only
-		// Detect overflow:scroll screwiness (gh-3699)
-		// Support: Chrome <=64
-		// Don't get tricked when zoom affects offsetWidth (gh-4029)
-		div.style.position = "absolute";
-		scrollboxSizeVal = roundPixelMeasures( div.offsetWidth / 3 ) === 12;
-
-		documentElement.removeChild( container );
-
-		// Nullify the div so it wouldn't be stored in the memory and
-		// it will also be a sign that checks already performed
-		div = null;
-	}
-
-	function roundPixelMeasures( measure ) {
-		return Math.round( parseFloat( measure ) );
-	}
-
-	var pixelPositionVal, boxSizingReliableVal, scrollboxSizeVal, pixelBoxStylesVal,
-		reliableMarginLeftVal,
-		container = document.createElement( "div" ),
-		div = document.createElement( "div" );
-
-	// Finish early in limited (non-browser) environments
-	if ( !div.style ) {
-		return;
-	}
-
-	// Support: IE <=9 - 11 only
-	// Style of cloned element affects source element cloned (#8908)
-	div.style.backgroundClip = "content-box";
-	div.cloneNode( true ).style.backgroundClip = "";
-	support.clearCloneStyle = div.style.backgroundClip === "content-box";
-
-	jQuery.extend( support, {
-		boxSizingReliable: function() {
-			computeStyleTests();
-			return boxSizingReliableVal;
-		},
-		pixelBoxStyles: function() {
-			computeStyleTests();
-			return pixelBoxStylesVal;
-		},
-		pixelPosition: function() {
-			computeStyleTests();
-			return pixelPositionVal;
-		},
-		reliableMarginLeft: function() {
-			computeStyleTests();
-			return reliableMarginLeftVal;
-		},
-		scrollboxSize: function() {
-			computeStyleTests();
-			return scrollboxSizeVal;
-		}
-	} );
-} )();
-
-
-function curCSS( elem, name, computed ) {
-	var width, minWidth, maxWidth, ret,
-
-		// Support: Firefox 51+
-		// Retrieving style before computed somehow
-		// fixes an issue with getting wrong values
-		// on detached elements
-		style = elem.style;
-
-	computed = computed || getStyles( elem );
-
-	// getPropertyValue is needed for:
-	//   .css('filter') (IE 9 only, #12537)
-	//   .css('--customProperty) (#3144)
-	if ( computed ) {
-		ret = computed.getPropertyValue( name ) || computed[ name ];
-
-		if ( ret === "" && !isAttached( elem ) ) {
-			ret = jQuery.style( elem, name );
-		}
-
-		// A tribute to the "awesome hack by Dean Edwards"
-		// Android Browser returns percentage for some values,
-		// but width seems to be reliably pixels.
-		// This is against the CSSOM draft spec:
-		// https://drafts.csswg.org/cssom/#resolved-values
-		if ( !support.pixelBoxStyles() && rnumnonpx.test( ret ) && rboxStyle.test( name ) ) {
-
-			// Remember the original values
-			width = style.width;
-			minWidth = style.minWidth;
-			maxWidth = style.maxWidth;
-
-			// Put in the new values to get a computed value out
-			style.minWidth = style.maxWidth = style.width = ret;
-			ret = computed.width;
-
-			// Revert the changed values
-			style.width = width;
-			style.minWidth = minWidth;
-			style.maxWidth = maxWidth;
-		}
-	}
-
-	return ret !== undefined ?
-
-		// Support: IE <=9 - 11 only
-		// IE returns zIndex value as an integer.
-		ret + "" :
-		ret;
-}
-
-
-function addGetHookIf( conditionFn, hookFn ) {
-
-	// Define the hook, we'll check on the first run if it's really needed.
-	return {
-		get: function() {
-			if ( conditionFn() ) {
-
-				// Hook not needed (or it's not possible to use it due
-				// to missing dependency), remove it.
-				delete this.get;
-				return;
-			}
-
-			// Hook needed; redefine it so that the support test is not executed again.
-			return ( this.get = hookFn ).apply( this, arguments );
-		}
-	};
-}
-
-
-var cssPrefixes = [ "Webkit", "Moz", "ms" ],
-	emptyStyle = document.createElement( "div" ).style,
-	vendorProps = {};
-
-// Return a vendor-prefixed property or undefined
-function vendorPropName( name ) {
-
-	// Check for vendor prefixed names
-	var capName = name[ 0 ].toUpperCase() + name.slice( 1 ),
-		i = cssPrefixes.length;
-
-	while ( i-- ) {
-		name = cssPrefixes[ i ] + capName;
-		if ( name in emptyStyle ) {
-			return name;
-		}
-	}
-}
-
-// Return a potentially-mapped jQuery.cssProps or vendor prefixed property
-function finalPropName( name ) {
-	var final = jQuery.cssProps[ name ] || vendorProps[ name ];
-
-	if ( final ) {
-		return final;
-	}
-	if ( name in emptyStyle ) {
-		return name;
-	}
-	return vendorProps[ name ] = vendorPropName( name ) || name;
-}
-
-
-var
-
-	// Swappable if display is none or starts with table
-	// except "table", "table-cell", or "table-caption"
-	// See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display
-	rdisplayswap = /^(none|table(?!-c[ea]).+)/,
-	rcustomProp = /^--/,
-	cssShow = { position: "absolute", visibility: "hidden", display: "block" },
-	cssNormalTransform = {
-		letterSpacing: "0",
-		fontWeight: "400"
-	};
-
-function setPositiveNumber( elem, value, subtract ) {
-
-	// Any relative (+/-) values have already been
-	// normalized at this point
-	var matches = rcssNum.exec( value );
-	return matches ?
-
-		// Guard against undefined "subtract", e.g., when used as in cssHooks
-		Math.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || "px" ) :
-		value;
-}
-
-function boxModelAdjustment( elem, dimension, box, isBorderBox, styles, computedVal ) {
-	var i = dimension === "width" ? 1 : 0,
-		extra = 0,
-		delta = 0;
-
-	// Adjustment may not be necessary
-	if ( box === ( isBorderBox ? "border" : "content" ) ) {
-		return 0;
-	}
-
-	for ( ; i < 4; i += 2 ) {
-
-		// Both box models exclude margin
-		if ( box === "margin" ) {
-			delta += jQuery.css( elem, box + cssExpand[ i ], true, styles );
-		}
-
-		// If we get here with a content-box, we're seeking "padding" or "border" or "margin"
-		if ( !isBorderBox ) {
-
-			// Add padding
-			delta += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles );
-
-			// For "border" or "margin", add border
-			if ( box !== "padding" ) {
-				delta += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles );
-
-			// But still keep track of it otherwise
-			} else {
-				extra += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles );
-			}
-
-		// If we get here with a border-box (content + padding + border), we're seeking "content" or
-		// "padding" or "margin"
-		} else {
-
-			// For "content", subtract padding
-			if ( box === "content" ) {
-				delta -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles );
-			}
-
-			// For "content" or "padding", subtract border
-			if ( box !== "margin" ) {
-				delta -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles );
-			}
-		}
-	}
-
-	// Account for positive content-box scroll gutter when requested by providing computedVal
-	if ( !isBorderBox && computedVal >= 0 ) {
-
-		// offsetWidth/offsetHeight is a rounded sum of content, padding, scroll gutter, and border
-		// Assuming integer scroll gutter, subtract the rest and round down
-		delta += Math.max( 0, Math.ceil(
-			elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] -
-			computedVal -
-			delta -
-			extra -
-			0.5
-
-		// If offsetWidth/offsetHeight is unknown, then we can't determine content-box scroll gutter
-		// Use an explicit zero to avoid NaN (gh-3964)
-		) ) || 0;
-	}
-
-	return delta;
-}
-
-function getWidthOrHeight( elem, dimension, extra ) {
-
-	// Start with computed style
-	var styles = getStyles( elem ),
-
-		// To avoid forcing a reflow, only fetch boxSizing if we need it (gh-4322).
-		// Fake content-box until we know it's needed to know the true value.
-		boxSizingNeeded = !support.boxSizingReliable() || extra,
-		isBorderBox = boxSizingNeeded &&
-			jQuery.css( elem, "boxSizing", false, styles ) === "border-box",
-		valueIsBorderBox = isBorderBox,
-
-		val = curCSS( elem, dimension, styles ),
-		offsetProp = "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 );
-
-	// Support: Firefox <=54
-	// Return a confounding non-pixel value or feign ignorance, as appropriate.
-	if ( rnumnonpx.test( val ) ) {
-		if ( !extra ) {
-			return val;
-		}
-		val = "auto";
-	}
-
-
-	// Fall back to offsetWidth/offsetHeight when value is "auto"
-	// This happens for inline elements with no explicit setting (gh-3571)
-	// Support: Android <=4.1 - 4.3 only
-	// Also use offsetWidth/offsetHeight for misreported inline dimensions (gh-3602)
-	// Support: IE 9-11 only
-	// Also use offsetWidth/offsetHeight for when box sizing is unreliable
-	// We use getClientRects() to check for hidden/disconnected.
-	// In those cases, the computed value can be trusted to be border-box
-	if ( ( !support.boxSizingReliable() && isBorderBox ||
-		val === "auto" ||
-		!parseFloat( val ) && jQuery.css( elem, "display", false, styles ) === "inline" ) &&
-		elem.getClientRects().length ) {
-
-		isBorderBox = jQuery.css( elem, "boxSizing", false, styles ) === "border-box";
-
-		// Where available, offsetWidth/offsetHeight approximate border box dimensions.
-		// Where not available (e.g., SVG), assume unreliable box-sizing and interpret the
-		// retrieved value as a content box dimension.
-		valueIsBorderBox = offsetProp in elem;
-		if ( valueIsBorderBox ) {
-			val = elem[ offsetProp ];
-		}
-	}
-
-	// Normalize "" and auto
-	val = parseFloat( val ) || 0;
-
-	// Adjust for the element's box model
-	return ( val +
-		boxModelAdjustment(
-			elem,
-			dimension,
-			extra || ( isBorderBox ? "border" : "content" ),
-			valueIsBorderBox,
-			styles,
-
-			// Provide the current computed size to request scroll gutter calculation (gh-3589)
-			val
-		)
-	) + "px";
-}
-
-jQuery.extend( {
-
-	// Add in style property hooks for overriding the default
-	// behavior of getting and setting a style property
-	cssHooks: {
-		opacity: {
-			get: function( elem, computed ) {
-				if ( computed ) {
-
-					// We should always get a number back from opacity
-					var ret = curCSS( elem, "opacity" );
-					return ret === "" ? "1" : ret;
-				}
-			}
-		}
-	},
-
-	// Don't automatically add "px" to these possibly-unitless properties
-	cssNumber: {
-		"animationIterationCount": true,
-		"columnCount": true,
-		"fillOpacity": true,
-		"flexGrow": true,
-		"flexShrink": true,
-		"fontWeight": true,
-		"gridArea": true,
-		"gridColumn": true,
-		"gridColumnEnd": true,
-		"gridColumnStart": true,
-		"gridRow": true,
-		"gridRowEnd": true,
-		"gridRowStart": true,
-		"lineHeight": true,
-		"opacity": true,
-		"order": true,
-		"orphans": true,
-		"widows": true,
-		"zIndex": true,
-		"zoom": true
-	},
-
-	// Add in properties whose names you wish to fix before
-	// setting or getting the value
-	cssProps: {},
-
-	// Get and set the style property on a DOM Node
-	style: function( elem, name, value, extra ) {
-
-		// Don't set styles on text and comment nodes
-		if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {
-			return;
-		}
-
-		// Make sure that we're working with the right name
-		var ret, type, hooks,
-			origName = camelCase( name ),
-			isCustomProp = rcustomProp.test( name ),
-			style = elem.style;
-
-		// Make sure that we're working with the right name. We don't
-		// want to query the value if it is a CSS custom property
-		// since they are user-defined.
-		if ( !isCustomProp ) {
-			name = finalPropName( origName );
-		}
-
-		// Gets hook for the prefixed version, then unprefixed version
-		hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];
-
-		// Check if we're setting a value
-		if ( value !== undefined ) {
-			type = typeof value;
-
-			// Convert "+=" or "-=" to relative numbers (#7345)
-			if ( type === "string" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) {
-				value = adjustCSS( elem, name, ret );
-
-				// Fixes bug #9237
-				type = "number";
-			}
-
-			// Make sure that null and NaN values aren't set (#7116)
-			if ( value == null || value !== value ) {
-				return;
-			}
-
-			// If a number was passed in, add the unit (except for certain CSS properties)
-			// The isCustomProp check can be removed in jQuery 4.0 when we only auto-append
-			// "px" to a few hardcoded values.
-			if ( type === "number" && !isCustomProp ) {
-				value += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? "" : "px" );
-			}
-
-			// background-* props affect original clone's values
-			if ( !support.clearCloneStyle && value === "" && name.indexOf( "background" ) === 0 ) {
-				style[ name ] = "inherit";
-			}
-
-			// If a hook was provided, use that value, otherwise just set the specified value
-			if ( !hooks || !( "set" in hooks ) ||
-				( value = hooks.set( elem, value, extra ) ) !== undefined ) {
-
-				if ( isCustomProp ) {
-					style.setProperty( name, value );
-				} else {
-					style[ name ] = value;
-				}
-			}
-
-		} else {
-
-			// If a hook was provided get the non-computed value from there
-			if ( hooks && "get" in hooks &&
-				( ret = hooks.get( elem, false, extra ) ) !== undefined ) {
-
-				return ret;
-			}
-
-			// Otherwise just get the value from the style object
-			return style[ name ];
-		}
-	},
-
-	css: function( elem, name, extra, styles ) {
-		var val, num, hooks,
-			origName = camelCase( name ),
-			isCustomProp = rcustomProp.test( name );
-
-		// Make sure that we're working with the right name. We don't
-		// want to modify the value if it is a CSS custom property
-		// since they are user-defined.
-		if ( !isCustomProp ) {
-			name = finalPropName( origName );
-		}
-
-		// Try prefixed name followed by the unprefixed name
-		hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];
-
-		// If a hook was provided get the computed value from there
-		if ( hooks && "get" in hooks ) {
-			val = hooks.get( elem, true, extra );
-		}
-
-		// Otherwise, if a way to get the computed value exists, use that
-		if ( val === undefined ) {
-			val = curCSS( elem, name, styles );
-		}
-
-		// Convert "normal" to computed value
-		if ( val === "normal" && name in cssNormalTransform ) {
-			val = cssNormalTransform[ name ];
-		}
-
-		// Make numeric if forced or a qualifier was provided and val looks numeric
-		if ( extra === "" || extra ) {
-			num = parseFloat( val );
-			return extra === true || isFinite( num ) ? num || 0 : val;
-		}
-
-		return val;
-	}
-} );
-
-jQuery.each( [ "height", "width" ], function( i, dimension ) {
-	jQuery.cssHooks[ dimension ] = {
-		get: function( elem, computed, extra ) {
-			if ( computed ) {
-
-				// Certain elements can have dimension info if we invisibly show them
-				// but it must have a current display style that would benefit
-				return rdisplayswap.test( jQuery.css( elem, "display" ) ) &&
-
-					// Support: Safari 8+
-					// Table columns in Safari have non-zero offsetWidth & zero
-					// getBoundingClientRect().width unless display is changed.
-					// Support: IE <=11 only
-					// Running getBoundingClientRect on a disconnected node
-					// in IE throws an error.
-					( !elem.getClientRects().length || !elem.getBoundingClientRect().width ) ?
-						swap( elem, cssShow, function() {
-							return getWidthOrHeight( elem, dimension, extra );
-						} ) :
-						getWidthOrHeight( elem, dimension, extra );
-			}
-		},
-
-		set: function( elem, value, extra ) {
-			var matches,
-				styles = getStyles( elem ),
-
-				// Only read styles.position if the test has a chance to fail
-				// to avoid forcing a reflow.
-				scrollboxSizeBuggy = !support.scrollboxSize() &&
-					styles.position === "absolute",
-
-				// To avoid forcing a reflow, only fetch boxSizing if we need it (gh-3991)
-				boxSizingNeeded = scrollboxSizeBuggy || extra,
-				isBorderBox = boxSizingNeeded &&
-					jQuery.css( elem, "boxSizing", false, styles ) === "border-box",
-				subtract = extra ?
-					boxModelAdjustment(
-						elem,
-						dimension,
-						extra,
-						isBorderBox,
-						styles
-					) :
-					0;
-
-			// Account for unreliable border-box dimensions by comparing offset* to computed and
-			// faking a content-box to get border and padding (gh-3699)
-			if ( isBorderBox && scrollboxSizeBuggy ) {
-				subtract -= Math.ceil(
-					elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] -
-					parseFloat( styles[ dimension ] ) -
-					boxModelAdjustment( elem, dimension, "border", false, styles ) -
-					0.5
-				);
-			}
-
-			// Convert to pixels if value adjustment is needed
-			if ( subtract && ( matches = rcssNum.exec( value ) ) &&
-				( matches[ 3 ] || "px" ) !== "px" ) {
-
-				elem.style[ dimension ] = value;
-				value = jQuery.css( elem, dimension );
-			}
-
-			return setPositiveNumber( elem, value, subtract );
-		}
-	};
-} );
-
-jQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft,
-	function( elem, computed ) {
-		if ( computed ) {
-			return ( parseFloat( curCSS( elem, "marginLeft" ) ) ||
-				elem.getBoundingClientRect().left -
-					swap( elem, { marginLeft: 0 }, function() {
-						return elem.getBoundingClientRect().left;
-					} )
-				) + "px";
-		}
-	}
-);
-
-// These hooks are used by animate to expand properties
-jQuery.each( {
-	margin: "",
-	padding: "",
-	border: "Width"
-}, function( prefix, suffix ) {
-	jQuery.cssHooks[ prefix + suffix ] = {
-		expand: function( value ) {
-			var i = 0,
-				expanded = {},
-
-				// Assumes a single number if not a string
-				parts = typeof value === "string" ? value.split( " " ) : [ value ];
-
-			for ( ; i < 4; i++ ) {
-				expanded[ prefix + cssExpand[ i ] + suffix ] =
-					parts[ i ] || parts[ i - 2 ] || parts[ 0 ];
-			}
-
-			return expanded;
-		}
-	};
-
-	if ( prefix !== "margin" ) {
-		jQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber;
-	}
-} );
-
-jQuery.fn.extend( {
-	css: function( name, value ) {
-		return access( this, function( elem, name, value ) {
-			var styles, len,
-				map = {},
-				i = 0;
-
-			if ( Array.isArray( name ) ) {
-				styles = getStyles( elem );
-				len = name.length;
-
-				for ( ; i < len; i++ ) {
-					map[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles );
-				}
-
-				return map;
-			}
-
-			return value !== undefined ?
-				jQuery.style( elem, name, value ) :
-				jQuery.css( elem, name );
-		}, name, value, arguments.length > 1 );
-	}
-} );
-
-
-function Tween( elem, options, prop, end, easing ) {
-	return new Tween.prototype.init( elem, options, prop, end, easing );
-}
-jQuery.Tween = Tween;
-
-Tween.prototype = {
-	constructor: Tween,
-	init: function( elem, options, prop, end, easing, unit ) {
-		this.elem = elem;
-		this.prop = prop;
-		this.easing = easing || jQuery.easing._default;
-		this.options = options;
-		this.start = this.now = this.cur();
-		this.end = end;
-		this.unit = unit || ( jQuery.cssNumber[ prop ] ? "" : "px" );
-	},
-	cur: function() {
-		var hooks = Tween.propHooks[ this.prop ];
-
-		return hooks && hooks.get ?
-			hooks.get( this ) :
-			Tween.propHooks._default.get( this );
-	},
-	run: function( percent ) {
-		var eased,
-			hooks = Tween.propHooks[ this.prop ];
-
-		if ( this.options.duration ) {
-			this.pos = eased = jQuery.easing[ this.easing ](
-				percent, this.options.duration * percent, 0, 1, this.options.duration
-			);
-		} else {
-			this.pos = eased = percent;
-		}
-		this.now = ( this.end - this.start ) * eased + this.start;
-
-		if ( this.options.step ) {
-			this.options.step.call( this.elem, this.now, this );
-		}
-
-		if ( hooks && hooks.set ) {
-			hooks.set( this );
-		} else {
-			Tween.propHooks._default.set( this );
-		}
-		return this;
-	}
-};
-
-Tween.prototype.init.prototype = Tween.prototype;
-
-Tween.propHooks = {
-	_default: {
-		get: function( tween ) {
-			var result;
-
-			// Use a property on the element directly when it is not a DOM element,
-			// or when there is no matching style property that exists.
-			if ( tween.elem.nodeType !== 1 ||
-				tween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) {
-				return tween.elem[ tween.prop ];
-			}
-
-			// Passing an empty string as a 3rd parameter to .css will automatically
-			// attempt a parseFloat and fallback to a string if the parse fails.
-			// Simple values such as "10px" are parsed to Float;
-			// complex values such as "rotate(1rad)" are returned as-is.
-			result = jQuery.css( tween.elem, tween.prop, "" );
-
-			// Empty strings, null, undefined and "auto" are converted to 0.
-			return !result || result === "auto" ? 0 : result;
-		},
-		set: function( tween ) {
-
-			// Use step hook for back compat.
-			// Use cssHook if its there.
-			// Use .style if available and use plain properties where available.
-			if ( jQuery.fx.step[ tween.prop ] ) {
-				jQuery.fx.step[ tween.prop ]( tween );
-			} else if ( tween.elem.nodeType === 1 && (
-					jQuery.cssHooks[ tween.prop ] ||
-					tween.elem.style[ finalPropName( tween.prop ) ] != null ) ) {
-				jQuery.style( tween.elem, tween.prop, tween.now + tween.unit );
-			} else {
-				tween.elem[ tween.prop ] = tween.now;
-			}
-		}
-	}
-};
-
-// Support: IE <=9 only
-// Panic based approach to setting things on disconnected nodes
-Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {
-	set: function( tween ) {
-		if ( tween.elem.nodeType && tween.elem.parentNode ) {
-			tween.elem[ tween.prop ] = tween.now;
-		}
-	}
-};
-
-jQuery.easing = {
-	linear: function( p ) {
-		return p;
-	},
-	swing: function( p ) {
-		return 0.5 - Math.cos( p * Math.PI ) / 2;
-	},
-	_default: "swing"
-};
-
-jQuery.fx = Tween.prototype.init;
-
-// Back compat <1.8 extension point
-jQuery.fx.step = {};
-
-
-
-
-var
-	fxNow, inProgress,
-	rfxtypes = /^(?:toggle|show|hide)$/,
-	rrun = /queueHooks$/;
-
-function schedule() {
-	if ( inProgress ) {
-		if ( document.hidden === false && window.requestAnimationFrame ) {
-			window.requestAnimationFrame( schedule );
-		} else {
-			window.setTimeout( schedule, jQuery.fx.interval );
-		}
-
-		jQuery.fx.tick();
-	}
-}
-
-// Animations created synchronously will run synchronously
-function createFxNow() {
-	window.setTimeout( function() {
-		fxNow = undefined;
-	} );
-	return ( fxNow = Date.now() );
-}
-
-// Generate parameters to create a standard animation
-function genFx( type, includeWidth ) {
-	var which,
-		i = 0,
-		attrs = { height: type };
-
-	// If we include width, step value is 1 to do all cssExpand values,
-	// otherwise step value is 2 to skip over Left and Right
-	includeWidth = includeWidth ? 1 : 0;
-	for ( ; i < 4; i += 2 - includeWidth ) {
-		which = cssExpand[ i ];
-		attrs[ "margin" + which ] = attrs[ "padding" + which ] = type;
-	}
-
-	if ( includeWidth ) {
-		attrs.opacity = attrs.width = type;
-	}
-
-	return attrs;
-}
-
-function createTween( value, prop, animation ) {
-	var tween,
-		collection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ "*" ] ),
-		index = 0,
-		length = collection.length;
-	for ( ; index < length; index++ ) {
-		if ( ( tween = collection[ index ].call( animation, prop, value ) ) ) {
-
-			// We're done with this property
-			return tween;
-		}
-	}
-}
-
-function defaultPrefilter( elem, props, opts ) {
-	var prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display,
-		isBox = "width" in props || "height" in props,
-		anim = this,
-		orig = {},
-		style = elem.style,
-		hidden = elem.nodeType && isHiddenWithinTree( elem ),
-		dataShow = dataPriv.get( elem, "fxshow" );
-
-	// Queue-skipping animations hijack the fx hooks
-	if ( !opts.queue ) {
-		hooks = jQuery._queueHooks( elem, "fx" );
-		if ( hooks.unqueued == null ) {
-			hooks.unqueued = 0;
-			oldfire = hooks.empty.fire;
-			hooks.empty.fire = function() {
-				if ( !hooks.unqueued ) {
-					oldfire();
-				}
-			};
-		}
-		hooks.unqueued++;
-
-		anim.always( function() {
-
-			// Ensure the complete handler is called before this completes
-			anim.always( function() {
-				hooks.unqueued--;
-				if ( !jQuery.queue( elem, "fx" ).length ) {
-					hooks.empty.fire();
-				}
-			} );
-		} );
-	}
-
-	// Detect show/hide animations
-	for ( prop in props ) {
-		value = props[ prop ];
-		if ( rfxtypes.test( value ) ) {
-			delete props[ prop ];
-			toggle = toggle || value === "toggle";
-			if ( value === ( hidden ? "hide" : "show" ) ) {
-
-				// Pretend to be hidden if this is a "show" and
-				// there is still data from a stopped show/hide
-				if ( value === "show" && dataShow && dataShow[ prop ] !== undefined ) {
-					hidden = true;
-
-				// Ignore all other no-op show/hide data
-				} else {
-					continue;
-				}
-			}
-			orig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop );
-		}
-	}
-
-	// Bail out if this is a no-op like .hide().hide()
-	propTween = !jQuery.isEmptyObject( props );
-	if ( !propTween && jQuery.isEmptyObject( orig ) ) {
-		return;
-	}
-
-	// Restrict "overflow" and "display" styles during box animations
-	if ( isBox && elem.nodeType === 1 ) {
-
-		// Support: IE <=9 - 11, Edge 12 - 15
-		// Record all 3 overflow attributes because IE does not infer the shorthand
-		// from identically-valued overflowX and overflowY and Edge just mirrors
-		// the overflowX value there.
-		opts.overflow = [ style.overflow, style.overflowX, style.overflowY ];
-
-		// Identify a display type, preferring old show/hide data over the CSS cascade
-		restoreDisplay = dataShow && dataShow.display;
-		if ( restoreDisplay == null ) {
-			restoreDisplay = dataPriv.get( elem, "display" );
-		}
-		display = jQuery.css( elem, "display" );
-		if ( display === "none" ) {
-			if ( restoreDisplay ) {
-				display = restoreDisplay;
-			} else {
-
-				// Get nonempty value(s) by temporarily forcing visibility
-				showHide( [ elem ], true );
-				restoreDisplay = elem.style.display || restoreDisplay;
-				display = jQuery.css( elem, "display" );
-				showHide( [ elem ] );
-			}
-		}
-
-		// Animate inline elements as inline-block
-		if ( display === "inline" || display === "inline-block" && restoreDisplay != null ) {
-			if ( jQuery.css( elem, "float" ) === "none" ) {
-
-				// Restore the original display value at the end of pure show/hide animations
-				if ( !propTween ) {
-					anim.done( function() {
-						style.display = restoreDisplay;
-					} );
-					if ( restoreDisplay == null ) {
-						display = style.display;
-						restoreDisplay = display === "none" ? "" : display;
-					}
-				}
-				style.display = "inline-block";
-			}
-		}
-	}
-
-	if ( opts.overflow ) {
-		style.overflow = "hidden";
-		anim.always( function() {
-			style.overflow = opts.overflow[ 0 ];
-			style.overflowX = opts.overflow[ 1 ];
-			style.overflowY = opts.overflow[ 2 ];
-		} );
-	}
-
-	// Implement show/hide animations
-	propTween = false;
-	for ( prop in orig ) {
-
-		// General show/hide setup for this element animation
-		if ( !propTween ) {
-			if ( dataShow ) {
-				if ( "hidden" in dataShow ) {
-					hidden = dataShow.hidden;
-				}
-			} else {
-				dataShow = dataPriv.access( elem, "fxshow", { display: restoreDisplay } );
-			}
-
-			// Store hidden/visible for toggle so `.stop().toggle()` "reverses"
-			if ( toggle ) {
-				dataShow.hidden = !hidden;
-			}
-
-			// Show elements before animating them
-			if ( hidden ) {
-				showHide( [ elem ], true );
-			}
-
-			/* eslint-disable no-loop-func */
-
-			anim.done( function() {
-
-			/* eslint-enable no-loop-func */
-
-				// The final step of a "hide" animation is actually hiding the element
-				if ( !hidden ) {
-					showHide( [ elem ] );
-				}
-				dataPriv.remove( elem, "fxshow" );
-				for ( prop in orig ) {
-					jQuery.style( elem, prop, orig[ prop ] );
-				}
-			} );
-		}
-
-		// Per-property setup
-		propTween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim );
-		if ( !( prop in dataShow ) ) {
-			dataShow[ prop ] = propTween.start;
-			if ( hidden ) {
-				propTween.end = propTween.start;
-				propTween.start = 0;
-			}
-		}
-	}
-}
-
-function propFilter( props, specialEasing ) {
-	var index, name, easing, value, hooks;
-
-	// camelCase, specialEasing and expand cssHook pass
-	for ( index in props ) {
-		name = camelCase( index );
-		easing = specialEasing[ name ];
-		value = props[ index ];
-		if ( Array.isArray( value ) ) {
-			easing = value[ 1 ];
-			value = props[ index ] = value[ 0 ];
-		}
-
-		if ( index !== name ) {
-			props[ name ] = value;
-			delete props[ index ];
-		}
-
-		hooks = jQuery.cssHooks[ name ];
-		if ( hooks && "expand" in hooks ) {
-			value = hooks.expand( value );
-			delete props[ name ];
-
-			// Not quite $.extend, this won't overwrite existing keys.
-			// Reusing 'index' because we have the correct "name"
-			for ( index in value ) {
-				if ( !( index in props ) ) {
-					props[ index ] = value[ index ];
-					specialEasing[ index ] = easing;
-				}
-			}
-		} else {
-			specialEasing[ name ] = easing;
-		}
-	}
-}
-
-function Animation( elem, properties, options ) {
-	var result,
-		stopped,
-		index = 0,
-		length = Animation.prefilters.length,
-		deferred = jQuery.Deferred().always( function() {
-
-			// Don't match elem in the :animated selector
-			delete tick.elem;
-		} ),
-		tick = function() {
-			if ( stopped ) {
-				return false;
-			}
-			var currentTime = fxNow || createFxNow(),
-				remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ),
-
-				// Support: Android 2.3 only
-				// Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (#12497)
-				temp = remaining / animation.duration || 0,
-				percent = 1 - temp,
-				index = 0,
-				length = animation.tweens.length;
-
-			for ( ; index < length; index++ ) {
-				animation.tweens[ index ].run( percent );
-			}
-
-			deferred.notifyWith( elem, [ animation, percent, remaining ] );
-
-			// If there's more to do, yield
-			if ( percent < 1 && length ) {
-				return remaining;
-			}
-
-			// If this was an empty animation, synthesize a final progress notification
-			if ( !length ) {
-				deferred.notifyWith( elem, [ animation, 1, 0 ] );
-			}
-
-			// Resolve the animation and report its conclusion
-			deferred.resolveWith( elem, [ animation ] );
-			return false;
-		},
-		animation = deferred.promise( {
-			elem: elem,
-			props: jQuery.extend( {}, properties ),
-			opts: jQuery.extend( true, {
-				specialEasing: {},
-				easing: jQuery.easing._default
-			}, options ),
-			originalProperties: properties,
-			originalOptions: options,
-			startTime: fxNow || createFxNow(),
-			duration: options.duration,
-			tweens: [],
-			createTween: function( prop, end ) {
-				var tween = jQuery.Tween( elem, animation.opts, prop, end,
-						animation.opts.specialEasing[ prop ] || animation.opts.easing );
-				animation.tweens.push( tween );
-				return tween;
-			},
-			stop: function( gotoEnd ) {
-				var index = 0,
-
-					// If we are going to the end, we want to run all the tweens
-					// otherwise we skip this part
-					length = gotoEnd ? animation.tweens.length : 0;
-				if ( stopped ) {
-					return this;
-				}
-				stopped = true;
-				for ( ; index < length; index++ ) {
-					animation.tweens[ index ].run( 1 );
-				}
-
-				// Resolve when we played the last frame; otherwise, reject
-				if ( gotoEnd ) {
-					deferred.notifyWith( elem, [ animation, 1, 0 ] );
-					deferred.resolveWith( elem, [ animation, gotoEnd ] );
-				} else {
-					deferred.rejectWith( elem, [ animation, gotoEnd ] );
-				}
-				return this;
-			}
-		} ),
-		props = animation.props;
-
-	propFilter( props, animation.opts.specialEasing );
-
-	for ( ; index < length; index++ ) {
-		result = Animation.prefilters[ index ].call( animation, elem, props, animation.opts );
-		if ( result ) {
-			if ( isFunction( result.stop ) ) {
-				jQuery._queueHooks( animation.elem, animation.opts.queue ).stop =
-					result.stop.bind( result );
-			}
-			return result;
-		}
-	}
-
-	jQuery.map( props, createTween, animation );
-
-	if ( isFunction( animation.opts.start ) ) {
-		animation.opts.start.call( elem, animation );
-	}
-
-	// Attach callbacks from options
-	animation
-		.progress( animation.opts.progress )
-		.done( animation.opts.done, animation.opts.complete )
-		.fail( animation.opts.fail )
-		.always( animation.opts.always );
-
-	jQuery.fx.timer(
-		jQuery.extend( tick, {
-			elem: elem,
-			anim: animation,
-			queue: animation.opts.queue
-		} )
-	);
-
-	return animation;
-}
-
-jQuery.Animation = jQuery.extend( Animation, {
-
-	tweeners: {
-		"*": [ function( prop, value ) {
-			var tween = this.createTween( prop, value );
-			adjustCSS( tween.elem, prop, rcssNum.exec( value ), tween );
-			return tween;
-		} ]
-	},
-
-	tweener: function( props, callback ) {
-		if ( isFunction( props ) ) {
-			callback = props;
-			props = [ "*" ];
-		} else {
-			props = props.match( rnothtmlwhite );
-		}
-
-		var prop,
-			index = 0,
-			length = props.length;
-
-		for ( ; index < length; index++ ) {
-			prop = props[ index ];
-			Animation.tweeners[ prop ] = Animation.tweeners[ prop ] || [];
-			Animation.tweeners[ prop ].unshift( callback );
-		}
-	},
-
-	prefilters: [ defaultPrefilter ],
-
-	prefilter: function( callback, prepend ) {
-		if ( prepend ) {
-			Animation.prefilters.unshift( callback );
-		} else {
-			Animation.prefilters.push( callback );
-		}
-	}
-} );
-
-jQuery.speed = function( speed, easing, fn ) {
-	var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : {
-		complete: fn || !fn && easing ||
-			isFunction( speed ) && speed,
-		duration: speed,
-		easing: fn && easing || easing && !isFunction( easing ) && easing
-	};
-
-	// Go to the end state if fx are off
-	if ( jQuery.fx.off ) {
-		opt.duration = 0;
-
-	} else {
-		if ( typeof opt.duration !== "number" ) {
-			if ( opt.duration in jQuery.fx.speeds ) {
-				opt.duration = jQuery.fx.speeds[ opt.duration ];
-
-			} else {
-				opt.duration = jQuery.fx.speeds._default;
-			}
-		}
-	}
-
-	// Normalize opt.queue - true/undefined/null -> "fx"
-	if ( opt.queue == null || opt.queue === true ) {
-		opt.queue = "fx";
-	}
-
-	// Queueing
-	opt.old = opt.complete;
-
-	opt.complete = function() {
-		if ( isFunction( opt.old ) ) {
-			opt.old.call( this );
-		}
-
-		if ( opt.queue ) {
-			jQuery.dequeue( this, opt.queue );
-		}
-	};
-
-	return opt;
-};
-
-jQuery.fn.extend( {
-	fadeTo: function( speed, to, easing, callback ) {
-
-		// Show any hidden elements after setting opacity to 0
-		return this.filter( isHiddenWithinTree ).css( "opacity", 0 ).show()
-
-			// Animate to the value specified
-			.end().animate( { opacity: to }, speed, easing, callback );
-	},
-	animate: function( prop, speed, easing, callback ) {
-		var empty = jQuery.isEmptyObject( prop ),
-			optall = jQuery.speed( speed, easing, callback ),
-			doAnimation = function() {
-
-				// Operate on a copy of prop so per-property easing won't be lost
-				var anim = Animation( this, jQuery.extend( {}, prop ), optall );
-
-				// Empty animations, or finishing resolves immediately
-				if ( empty || dataPriv.get( this, "finish" ) ) {
-					anim.stop( true );
-				}
-			};
-			doAnimation.finish = doAnimation;
-
-		return empty || optall.queue === false ?
-			this.each( doAnimation ) :
-			this.queue( optall.queue, doAnimation );
-	},
-	stop: function( type, clearQueue, gotoEnd ) {
-		var stopQueue = function( hooks ) {
-			var stop = hooks.stop;
-			delete hooks.stop;
-			stop( gotoEnd );
-		};
-
-		if ( typeof type !== "string" ) {
-			gotoEnd = clearQueue;
-			clearQueue = type;
-			type = undefined;
-		}
-		if ( clearQueue && type !== false ) {
-			this.queue( type || "fx", [] );
-		}
-
-		return this.each( function() {
-			var dequeue = true,
-				index = type != null && type + "queueHooks",
-				timers = jQuery.timers,
-				data = dataPriv.get( this );
-
-			if ( index ) {
-				if ( data[ index ] && data[ index ].stop ) {
-					stopQueue( data[ index ] );
-				}
-			} else {
-				for ( index in data ) {
-					if ( data[ index ] && data[ index ].stop && rrun.test( index ) ) {
-						stopQueue( data[ index ] );
-					}
-				}
-			}
-
-			for ( index = timers.length; index--; ) {
-				if ( timers[ index ].elem === this &&
-					( type == null || timers[ index ].queue === type ) ) {
-
-					timers[ index ].anim.stop( gotoEnd );
-					dequeue = false;
-					timers.splice( index, 1 );
-				}
-			}
-
-			// Start the next in the queue if the last step wasn't forced.
-			// Timers currently will call their complete callbacks, which
-			// will dequeue but only if they were gotoEnd.
-			if ( dequeue || !gotoEnd ) {
-				jQuery.dequeue( this, type );
-			}
-		} );
-	},
-	finish: function( type ) {
-		if ( type !== false ) {
-			type = type || "fx";
-		}
-		return this.each( function() {
-			var index,
-				data = dataPriv.get( this ),
-				queue = data[ type + "queue" ],
-				hooks = data[ type + "queueHooks" ],
-				timers = jQuery.timers,
-				length = queue ? queue.length : 0;
-
-			// Enable finishing flag on private data
-			data.finish = true;
-
-			// Empty the queue first
-			jQuery.queue( this, type, [] );
-
-			if ( hooks && hooks.stop ) {
-				hooks.stop.call( this, true );
-			}
-
-			// Look for any active animations, and finish them
-			for ( index = timers.length; index--; ) {
-				if ( timers[ index ].elem === this && timers[ index ].queue === type ) {
-					timers[ index ].anim.stop( true );
-					timers.splice( index, 1 );
-				}
-			}
-
-			// Look for any animations in the old queue and finish them
-			for ( index = 0; index < length; index++ ) {
-				if ( queue[ index ] && queue[ index ].finish ) {
-					queue[ index ].finish.call( this );
-				}
-			}
-
-			// Turn off finishing flag
-			delete data.finish;
-		} );
-	}
-} );
-
-jQuery.each( [ "toggle", "show", "hide" ], function( i, name ) {
-	var cssFn = jQuery.fn[ name ];
-	jQuery.fn[ name ] = function( speed, easing, callback ) {
-		return speed == null || typeof speed === "boolean" ?
-			cssFn.apply( this, arguments ) :
-			this.animate( genFx( name, true ), speed, easing, callback );
-	};
-} );
-
-// Generate shortcuts for custom animations
-jQuery.each( {
-	slideDown: genFx( "show" ),
-	slideUp: genFx( "hide" ),
-	slideToggle: genFx( "toggle" ),
-	fadeIn: { opacity: "show" },
-	fadeOut: { opacity: "hide" },
-	fadeToggle: { opacity: "toggle" }
-}, function( name, props ) {
-	jQuery.fn[ name ] = function( speed, easing, callback ) {
-		return this.animate( props, speed, easing, callback );
-	};
-} );
-
-jQuery.timers = [];
-jQuery.fx.tick = function() {
-	var timer,
-		i = 0,
-		timers = jQuery.timers;
-
-	fxNow = Date.now();
-
-	for ( ; i < timers.length; i++ ) {
-		timer = timers[ i ];
-
-		// Run the timer and safely remove it when done (allowing for external removal)
-		if ( !timer() && timers[ i ] === timer ) {
-			timers.splice( i--, 1 );
-		}
-	}
-
-	if ( !timers.length ) {
-		jQuery.fx.stop();
-	}
-	fxNow = undefined;
-};
-
-jQuery.fx.timer = function( timer ) {
-	jQuery.timers.push( timer );
-	jQuery.fx.start();
-};
-
-jQuery.fx.interval = 13;
-jQuery.fx.start = function() {
-	if ( inProgress ) {
-		return;
-	}
-
-	inProgress = true;
-	schedule();
-};
-
-jQuery.fx.stop = function() {
-	inProgress = null;
-};
-
-jQuery.fx.speeds = {
-	slow: 600,
-	fast: 200,
-
-	// Default speed
-	_default: 400
-};
-
-
-// Based off of the plugin by Clint Helfers, with permission.
-// https://web.archive.org/web/20100324014747/http://blindsignals.com/index.php/2009/07/jquery-delay/
-jQuery.fn.delay = function( time, type ) {
-	time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;
-	type = type || "fx";
-
-	return this.queue( type, function( next, hooks ) {
-		var timeout = window.setTimeout( next, time );
-		hooks.stop = function() {
-			window.clearTimeout( timeout );
-		};
-	} );
-};
-
-
-( function() {
-	var input = document.createElement( "input" ),
-		select = document.createElement( "select" ),
-		opt = select.appendChild( document.createElement( "option" ) );
-
-	input.type = "checkbox";
-
-	// Support: Android <=4.3 only
-	// Default value for a checkbox should be "on"
-	support.checkOn = input.value !== "";
-
-	// Support: IE <=11 only
-	// Must access selectedIndex to make default options select
-	support.optSelected = opt.selected;
-
-	// Support: IE <=11 only
-	// An input loses its value after becoming a radio
-	input = document.createElement( "input" );
-	input.value = "t";
-	input.type = "radio";
-	support.radioValue = input.value === "t";
-} )();
-
-
-var boolHook,
-	attrHandle = jQuery.expr.attrHandle;
-
-jQuery.fn.extend( {
-	attr: function( name, value ) {
-		return access( this, jQuery.attr, name, value, arguments.length > 1 );
-	},
-
-	removeAttr: function( name ) {
-		return this.each( function() {
-			jQuery.removeAttr( this, name );
-		} );
-	}
-} );
-
-jQuery.extend( {
-	attr: function( elem, name, value ) {
-		var ret, hooks,
-			nType = elem.nodeType;
-
-		// Don't get/set attributes on text, comment and attribute nodes
-		if ( nType === 3 || nType === 8 || nType === 2 ) {
-			return;
-		}
-
-		// Fallback to prop when attributes are not supported
-		if ( typeof elem.getAttribute === "undefined" ) {
-			return jQuery.prop( elem, name, value );
-		}
-
-		// Attribute hooks are determined by the lowercase version
-		// Grab necessary hook if one is defined
-		if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {
-			hooks = jQuery.attrHooks[ name.toLowerCase() ] ||
-				( jQuery.expr.match.bool.test( name ) ? boolHook : undefined );
-		}
-
-		if ( value !== undefined ) {
-			if ( value === null ) {
-				jQuery.removeAttr( elem, name );
-				return;
-			}
-
-			if ( hooks && "set" in hooks &&
-				( ret = hooks.set( elem, value, name ) ) !== undefined ) {
-				return ret;
-			}
-
-			elem.setAttribute( name, value + "" );
-			return value;
-		}
-
-		if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {
-			return ret;
-		}
-
-		ret = jQuery.find.attr( elem, name );
-
-		// Non-existent attributes return null, we normalize to undefined
-		return ret == null ? undefined : ret;
-	},
-
-	attrHooks: {
-		type: {
-			set: function( elem, value ) {
-				if ( !support.radioValue && value === "radio" &&
-					nodeName( elem, "input" ) ) {
-					var val = elem.value;
-					elem.setAttribute( "type", value );
-					if ( val ) {
-						elem.value = val;
-					}
-					return value;
-				}
-			}
-		}
-	},
-
-	removeAttr: function( elem, value ) {
-		var name,
-			i = 0,
-
-			// Attribute names can contain non-HTML whitespace characters
-			// https://html.spec.whatwg.org/multipage/syntax.html#attributes-2
-			attrNames = value && value.match( rnothtmlwhite );
-
-		if ( attrNames && elem.nodeType === 1 ) {
-			while ( ( name = attrNames[ i++ ] ) ) {
-				elem.removeAttribute( name );
-			}
-		}
-	}
-} );
-
-// Hooks for boolean attributes
-boolHook = {
-	set: function( elem, value, name ) {
-		if ( value === false ) {
-
-			// Remove boolean attributes when set to false
-			jQuery.removeAttr( elem, name );
-		} else {
-			elem.setAttribute( name, name );
-		}
-		return name;
-	}
-};
-
-jQuery.each( jQuery.expr.match.bool.source.match( /\w+/g ), function( i, name ) {
-	var getter = attrHandle[ name ] || jQuery.find.attr;
-
-	attrHandle[ name ] = function( elem, name, isXML ) {
-		var ret, handle,
-			lowercaseName = name.toLowerCase();
-
-		if ( !isXML ) {
-
-			// Avoid an infinite loop by temporarily removing this function from the getter
-			handle = attrHandle[ lowercaseName ];
-			attrHandle[ lowercaseName ] = ret;
-			ret = getter( elem, name, isXML ) != null ?
-				lowercaseName :
-				null;
-			attrHandle[ lowercaseName ] = handle;
-		}
-		return ret;
-	};
-} );
-
-
-
-
-var rfocusable = /^(?:input|select|textarea|button)$/i,
-	rclickable = /^(?:a|area)$/i;
-
-jQuery.fn.extend( {
-	prop: function( name, value ) {
-		return access( this, jQuery.prop, name, value, arguments.length > 1 );
-	},
-
-	removeProp: function( name ) {
-		return this.each( function() {
-			delete this[ jQuery.propFix[ name ] || name ];
-		} );
-	}
-} );
-
-jQuery.extend( {
-	prop: function( elem, name, value ) {
-		var ret, hooks,
-			nType = elem.nodeType;
-
-		// Don't get/set properties on text, comment and attribute nodes
-		if ( nType === 3 || nType === 8 || nType === 2 ) {
-			return;
-		}
-
-		if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {
-
-			// Fix name and attach hooks
-			name = jQuery.propFix[ name ] || name;
-			hooks = jQuery.propHooks[ name ];
-		}
-
-		if ( value !== undefined ) {
-			if ( hooks && "set" in hooks &&
-				( ret = hooks.set( elem, value, name ) ) !== undefined ) {
-				return ret;
-			}
-
-			return ( elem[ name ] = value );
-		}
-
-		if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {
-			return ret;
-		}
-
-		return elem[ name ];
-	},
-
-	propHooks: {
-		tabIndex: {
-			get: function( elem ) {
-
-				// Support: IE <=9 - 11 only
-				// elem.tabIndex doesn't always return the
-				// correct value when it hasn't been explicitly set
-				// https://web.archive.org/web/20141116233347/http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/
-				// Use proper attribute retrieval(#12072)
-				var tabindex = jQuery.find.attr( elem, "tabindex" );
-
-				if ( tabindex ) {
-					return parseInt( tabindex, 10 );
-				}
-
-				if (
-					rfocusable.test( elem.nodeName ) ||
-					rclickable.test( elem.nodeName ) &&
-					elem.href
-				) {
-					return 0;
-				}
-
-				return -1;
-			}
-		}
-	},
-
-	propFix: {
-		"for": "htmlFor",
-		"class": "className"
-	}
-} );
-
-// Support: IE <=11 only
-// Accessing the selectedIndex property
-// forces the browser to respect setting selected
-// on the option
-// The getter ensures a default option is selected
-// when in an optgroup
-// eslint rule "no-unused-expressions" is disabled for this code
-// since it considers such accessions noop
-if ( !support.optSelected ) {
-	jQuery.propHooks.selected = {
-		get: function( elem ) {
-
-			/* eslint no-unused-expressions: "off" */
-
-			var parent = elem.parentNode;
-			if ( parent && parent.parentNode ) {
-				parent.parentNode.selectedIndex;
-			}
-			return null;
-		},
-		set: function( elem ) {
-
-			/* eslint no-unused-expressions: "off" */
-
-			var parent = elem.parentNode;
-			if ( parent ) {
-				parent.selectedIndex;
-
-				if ( parent.parentNode ) {
-					parent.parentNode.selectedIndex;
-				}
-			}
-		}
-	};
-}
-
-jQuery.each( [
-	"tabIndex",
-	"readOnly",
-	"maxLength",
-	"cellSpacing",
-	"cellPadding",
-	"rowSpan",
-	"colSpan",
-	"useMap",
-	"frameBorder",
-	"contentEditable"
-], function() {
-	jQuery.propFix[ this.toLowerCase() ] = this;
-} );
-
-
-
-
-	// Strip and collapse whitespace according to HTML spec
-	// https://infra.spec.whatwg.org/#strip-and-collapse-ascii-whitespace
-	function stripAndCollapse( value ) {
-		var tokens = value.match( rnothtmlwhite ) || [];
-		return tokens.join( " " );
-	}
-
-
-function getClass( elem ) {
-	return elem.getAttribute && elem.getAttribute( "class" ) || "";
-}
-
-function classesToArray( value ) {
-	if ( Array.isArray( value ) ) {
-		return value;
-	}
-	if ( typeof value === "string" ) {
-		return value.match( rnothtmlwhite ) || [];
-	}
-	return [];
-}
-
-jQuery.fn.extend( {
-	addClass: function( value ) {
-		var classes, elem, cur, curValue, clazz, j, finalValue,
-			i = 0;
-
-		if ( isFunction( value ) ) {
-			return this.each( function( j ) {
-				jQuery( this ).addClass( value.call( this, j, getClass( this ) ) );
-			} );
-		}
-
-		classes = classesToArray( value );
-
-		if ( classes.length ) {
-			while ( ( elem = this[ i++ ] ) ) {
-				curValue = getClass( elem );
-				cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " );
-
-				if ( cur ) {
-					j = 0;
-					while ( ( clazz = classes[ j++ ] ) ) {
-						if ( cur.indexOf( " " + clazz + " " ) < 0 ) {
-							cur += clazz + " ";
-						}
-					}
-
-					// Only assign if different to avoid unneeded rendering.
-					finalValue = stripAndCollapse( cur );
-					if ( curValue !== finalValue ) {
-						elem.setAttribute( "class", finalValue );
-					}
-				}
-			}
-		}
-
-		return this;
-	},
-
-	removeClass: function( value ) {
-		var classes, elem, cur, curValue, clazz, j, finalValue,
-			i = 0;
-
-		if ( isFunction( value ) ) {
-			return this.each( function( j ) {
-				jQuery( this ).removeClass( value.call( this, j, getClass( this ) ) );
-			} );
-		}
-
-		if ( !arguments.length ) {
-			return this.attr( "class", "" );
-		}
-
-		classes = classesToArray( value );
-
-		if ( classes.length ) {
-			while ( ( elem = this[ i++ ] ) ) {
-				curValue = getClass( elem );
-
-				// This expression is here for better compressibility (see addClass)
-				cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " );
-
-				if ( cur ) {
-					j = 0;
-					while ( ( clazz = classes[ j++ ] ) ) {
-
-						// Remove *all* instances
-						while ( cur.indexOf( " " + clazz + " " ) > -1 ) {
-							cur = cur.replace( " " + clazz + " ", " " );
-						}
-					}
-
-					// Only assign if different to avoid unneeded rendering.
-					finalValue = stripAndCollapse( cur );
-					if ( curValue !== finalValue ) {
-						elem.setAttribute( "class", finalValue );
-					}
-				}
-			}
-		}
-
-		return this;
-	},
-
-	toggleClass: function( value, stateVal ) {
-		var type = typeof value,
-			isValidValue = type === "string" || Array.isArray( value );
-
-		if ( typeof stateVal === "boolean" && isValidValue ) {
-			return stateVal ? this.addClass( value ) : this.removeClass( value );
-		}
-
-		if ( isFunction( value ) ) {
-			return this.each( function( i ) {
-				jQuery( this ).toggleClass(
-					value.call( this, i, getClass( this ), stateVal ),
-					stateVal
-				);
-			} );
-		}
-
-		return this.each( function() {
-			var className, i, self, classNames;
-
-			if ( isValidValue ) {
-
-				// Toggle individual class names
-				i = 0;
-				self = jQuery( this );
-				classNames = classesToArray( value );
-
-				while ( ( className = classNames[ i++ ] ) ) {
-
-					// Check each className given, space separated list
-					if ( self.hasClass( className ) ) {
-						self.removeClass( className );
-					} else {
-						self.addClass( className );
-					}
-				}
-
-			// Toggle whole class name
-			} else if ( value === undefined || type === "boolean" ) {
-				className = getClass( this );
-				if ( className ) {
-
-					// Store className if set
-					dataPriv.set( this, "__className__", className );
-				}
-
-				// If the element has a class name or if we're passed `false`,
-				// then remove the whole classname (if there was one, the above saved it).
-				// Otherwise bring back whatever was previously saved (if anything),
-				// falling back to the empty string if nothing was stored.
-				if ( this.setAttribute ) {
-					this.setAttribute( "class",
-						className || value === false ?
-						"" :
-						dataPriv.get( this, "__className__" ) || ""
-					);
-				}
-			}
-		} );
-	},
-
-	hasClass: function( selector ) {
-		var className, elem,
-			i = 0;
-
-		className = " " + selector + " ";
-		while ( ( elem = this[ i++ ] ) ) {
-			if ( elem.nodeType === 1 &&
-				( " " + stripAndCollapse( getClass( elem ) ) + " " ).indexOf( className ) > -1 ) {
-					return true;
-			}
-		}
-
-		return false;
-	}
-} );
-
-
-
-
-var rreturn = /\r/g;
-
-jQuery.fn.extend( {
-	val: function( value ) {
-		var hooks, ret, valueIsFunction,
-			elem = this[ 0 ];
-
-		if ( !arguments.length ) {
-			if ( elem ) {
-				hooks = jQuery.valHooks[ elem.type ] ||
-					jQuery.valHooks[ elem.nodeName.toLowerCase() ];
-
-				if ( hooks &&
-					"get" in hooks &&
-					( ret = hooks.get( elem, "value" ) ) !== undefined
-				) {
-					return ret;
-				}
-
-				ret = elem.value;
-
-				// Handle most common string cases
-				if ( typeof ret === "string" ) {
-					return ret.replace( rreturn, "" );
-				}
-
-				// Handle cases where value is null/undef or number
-				return ret == null ? "" : ret;
-			}
-
-			return;
-		}
-
-		valueIsFunction = isFunction( value );
-
-		return this.each( function( i ) {
-			var val;
-
-			if ( this.nodeType !== 1 ) {
-				return;
-			}
-
-			if ( valueIsFunction ) {
-				val = value.call( this, i, jQuery( this ).val() );
-			} else {
-				val = value;
-			}
-
-			// Treat null/undefined as ""; convert numbers to string
-			if ( val == null ) {
-				val = "";
-
-			} else if ( typeof val === "number" ) {
-				val += "";
-
-			} else if ( Array.isArray( val ) ) {
-				val = jQuery.map( val, function( value ) {
-					return value == null ? "" : value + "";
-				} );
-			}
-
-			hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];
-
-			// If set returns undefined, fall back to normal setting
-			if ( !hooks || !( "set" in hooks ) || hooks.set( this, val, "value" ) === undefined ) {
-				this.value = val;
-			}
-		} );
-	}
-} );
-
-jQuery.extend( {
-	valHooks: {
-		option: {
-			get: function( elem ) {
-
-				var val = jQuery.find.attr( elem, "value" );
-				return val != null ?
-					val :
-
-					// Support: IE <=10 - 11 only
-					// option.text throws exceptions (#14686, #14858)
-					// Strip and collapse whitespace
-					// https://html.spec.whatwg.org/#strip-and-collapse-whitespace
-					stripAndCollapse( jQuery.text( elem ) );
-			}
-		},
-		select: {
-			get: function( elem ) {
-				var value, option, i,
-					options = elem.options,
-					index = elem.selectedIndex,
-					one = elem.type === "select-one",
-					values = one ? null : [],
-					max = one ? index + 1 : options.length;
-
-				if ( index < 0 ) {
-					i = max;
-
-				} else {
-					i = one ? index : 0;
-				}
-
-				// Loop through all the selected options
-				for ( ; i < max; i++ ) {
-					option = options[ i ];
-
-					// Support: IE <=9 only
-					// IE8-9 doesn't update selected after form reset (#2551)
-					if ( ( option.selected || i === index ) &&
-
-							// Don't return options that are disabled or in a disabled optgroup
-							!option.disabled &&
-							( !option.parentNode.disabled ||
-								!nodeName( option.parentNode, "optgroup" ) ) ) {
-
-						// Get the specific value for the option
-						value = jQuery( option ).val();
-
-						// We don't need an array for one selects
-						if ( one ) {
-							return value;
-						}
-
-						// Multi-Selects return an array
-						values.push( value );
-					}
-				}
-
-				return values;
-			},
-
-			set: function( elem, value ) {
-				var optionSet, option,
-					options = elem.options,
-					values = jQuery.makeArray( value ),
-					i = options.length;
-
-				while ( i-- ) {
-					option = options[ i ];
-
-					/* eslint-disable no-cond-assign */
-
-					if ( option.selected =
-						jQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1
-					) {
-						optionSet = true;
-					}
-
-					/* eslint-enable no-cond-assign */
-				}
-
-				// Force browsers to behave consistently when non-matching value is set
-				if ( !optionSet ) {
-					elem.selectedIndex = -1;
-				}
-				return values;
-			}
-		}
-	}
-} );
-
-// Radios and checkboxes getter/setter
-jQuery.each( [ "radio", "checkbox" ], function() {
-	jQuery.valHooks[ this ] = {
-		set: function( elem, value ) {
-			if ( Array.isArray( value ) ) {
-				return ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 );
-			}
-		}
-	};
-	if ( !support.checkOn ) {
-		jQuery.valHooks[ this ].get = function( elem ) {
-			return elem.getAttribute( "value" ) === null ? "on" : elem.value;
-		};
-	}
-} );
-
-
-
-
-// Return jQuery for attributes-only inclusion
-
-
-support.focusin = "onfocusin" in window;
-
-
-var rfocusMorph = /^(?:focusinfocus|focusoutblur)$/,
-	stopPropagationCallback = function( e ) {
-		e.stopPropagation();
-	};
-
-jQuery.extend( jQuery.event, {
-
-	trigger: function( event, data, elem, onlyHandlers ) {
-
-		var i, cur, tmp, bubbleType, ontype, handle, special, lastElement,
-			eventPath = [ elem || document ],
-			type = hasOwn.call( event, "type" ) ? event.type : event,
-			namespaces = hasOwn.call( event, "namespace" ) ? event.namespace.split( "." ) : [];
-
-		cur = lastElement = tmp = elem = elem || document;
-
-		// Don't do events on text and comment nodes
-		if ( elem.nodeType === 3 || elem.nodeType === 8 ) {
-			return;
-		}
-
-		// focus/blur morphs to focusin/out; ensure we're not firing them right now
-		if ( rfocusMorph.test( type + jQuery.event.triggered ) ) {
-			return;
-		}
-
-		if ( type.indexOf( "." ) > -1 ) {
-
-			// Namespaced trigger; create a regexp to match event type in handle()
-			namespaces = type.split( "." );
-			type = namespaces.shift();
-			namespaces.sort();
-		}
-		ontype = type.indexOf( ":" ) < 0 && "on" + type;
-
-		// Caller can pass in a jQuery.Event object, Object, or just an event type string
-		event = event[ jQuery.expando ] ?
-			event :
-			new jQuery.Event( type, typeof event === "object" && event );
-
-		// Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)
-		event.isTrigger = onlyHandlers ? 2 : 3;
-		event.namespace = namespaces.join( "." );
-		event.rnamespace = event.namespace ?
-			new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ) :
-			null;
-
-		// Clean up the event in case it is being reused
-		event.result = undefined;
-		if ( !event.target ) {
-			event.target = elem;
-		}
-
-		// Clone any incoming data and prepend the event, creating the handler arg list
-		data = data == null ?
-			[ event ] :
-			jQuery.makeArray( data, [ event ] );
-
-		// Allow special events to draw outside the lines
-		special = jQuery.event.special[ type ] || {};
-		if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) {
-			return;
-		}
-
-		// Determine event propagation path in advance, per W3C events spec (#9951)
-		// Bubble up to document, then to window; watch for a global ownerDocument var (#9724)
-		if ( !onlyHandlers && !special.noBubble && !isWindow( elem ) ) {
-
-			bubbleType = special.delegateType || type;
-			if ( !rfocusMorph.test( bubbleType + type ) ) {
-				cur = cur.parentNode;
-			}
-			for ( ; cur; cur = cur.parentNode ) {
-				eventPath.push( cur );
-				tmp = cur;
-			}
-
-			// Only add window if we got to document (e.g., not plain obj or detached DOM)
-			if ( tmp === ( elem.ownerDocument || document ) ) {
-				eventPath.push( tmp.defaultView || tmp.parentWindow || window );
-			}
-		}
-
-		// Fire handlers on the event path
-		i = 0;
-		while ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) {
-			lastElement = cur;
-			event.type = i > 1 ?
-				bubbleType :
-				special.bindType || type;
-
-			// jQuery handler
-			handle = ( dataPriv.get( cur, "events" ) || {} )[ event.type ] &&
-				dataPriv.get( cur, "handle" );
-			if ( handle ) {
-				handle.apply( cur, data );
-			}
-
-			// Native handler
-			handle = ontype && cur[ ontype ];
-			if ( handle && handle.apply && acceptData( cur ) ) {
-				event.result = handle.apply( cur, data );
-				if ( event.result === false ) {
-					event.preventDefault();
-				}
-			}
-		}
-		event.type = type;
-
-		// If nobody prevented the default action, do it now
-		if ( !onlyHandlers && !event.isDefaultPrevented() ) {
-
-			if ( ( !special._default ||
-				special._default.apply( eventPath.pop(), data ) === false ) &&
-				acceptData( elem ) ) {
-
-				// Call a native DOM method on the target with the same name as the event.
-				// Don't do default actions on window, that's where global variables be (#6170)
-				if ( ontype && isFunction( elem[ type ] ) && !isWindow( elem ) ) {
-
-					// Don't re-trigger an onFOO event when we call its FOO() method
-					tmp = elem[ ontype ];
-
-					if ( tmp ) {
-						elem[ ontype ] = null;
-					}
-
-					// Prevent re-triggering of the same event, since we already bubbled it above
-					jQuery.event.triggered = type;
-
-					if ( event.isPropagationStopped() ) {
-						lastElement.addEventListener( type, stopPropagationCallback );
-					}
-
-					elem[ type ]();
-
-					if ( event.isPropagationStopped() ) {
-						lastElement.removeEventListener( type, stopPropagationCallback );
-					}
-
-					jQuery.event.triggered = undefined;
-
-					if ( tmp ) {
-						elem[ ontype ] = tmp;
-					}
-				}
-			}
-		}
-
-		return event.result;
-	},
-
-	// Piggyback on a donor event to simulate a different one
-	// Used only for `focus(in | out)` events
-	simulate: function( type, elem, event ) {
-		var e = jQuery.extend(
-			new jQuery.Event(),
-			event,
-			{
-				type: type,
-				isSimulated: true
-			}
-		);
-
-		jQuery.event.trigger( e, null, elem );
-	}
-
-} );
-
-jQuery.fn.extend( {
-
-	trigger: function( type, data ) {
-		return this.each( function() {
-			jQuery.event.trigger( type, data, this );
-		} );
-	},
-	triggerHandler: function( type, data ) {
-		var elem = this[ 0 ];
-		if ( elem ) {
-			return jQuery.event.trigger( type, data, elem, true );
-		}
-	}
-} );
-
-
-// Support: Firefox <=44
-// Firefox doesn't have focus(in | out) events
-// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787
-//
-// Support: Chrome <=48 - 49, Safari <=9.0 - 9.1
-// focus(in | out) events fire after focus & blur events,
-// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order
-// Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857
-if ( !support.focusin ) {
-	jQuery.each( { focus: "focusin", blur: "focusout" }, function( orig, fix ) {
-
-		// Attach a single capturing handler on the document while someone wants focusin/focusout
-		var handler = function( event ) {
-			jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ) );
-		};
-
-		jQuery.event.special[ fix ] = {
-			setup: function() {
-				var doc = this.ownerDocument || this,
-					attaches = dataPriv.access( doc, fix );
-
-				if ( !attaches ) {
-					doc.addEventListener( orig, handler, true );
-				}
-				dataPriv.access( doc, fix, ( attaches || 0 ) + 1 );
-			},
-			teardown: function() {
-				var doc = this.ownerDocument || this,
-					attaches = dataPriv.access( doc, fix ) - 1;
-
-				if ( !attaches ) {
-					doc.removeEventListener( orig, handler, true );
-					dataPriv.remove( doc, fix );
-
-				} else {
-					dataPriv.access( doc, fix, attaches );
-				}
-			}
-		};
-	} );
-}
-var location = window.location;
-
-var nonce = Date.now();
-
-var rquery = ( /\?/ );
-
-
-
-// Cross-browser xml parsing
-jQuery.parseXML = function( data ) {
-	var xml;
-	if ( !data || typeof data !== "string" ) {
-		return null;
-	}
-
-	// Support: IE 9 - 11 only
-	// IE throws on parseFromString with invalid input.
-	try {
-		xml = ( new window.DOMParser() ).parseFromString( data, "text/xml" );
-	} catch ( e ) {
-		xml = undefined;
-	}
-
-	if ( !xml || xml.getElementsByTagName( "parsererror" ).length ) {
-		jQuery.error( "Invalid XML: " + data );
-	}
-	return xml;
-};
-
-
-var
-	rbracket = /\[\]$/,
-	rCRLF = /\r?\n/g,
-	rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,
-	rsubmittable = /^(?:input|select|textarea|keygen)/i;
-
-function buildParams( prefix, obj, traditional, add ) {
-	var name;
-
-	if ( Array.isArray( obj ) ) {
-
-		// Serialize array item.
-		jQuery.each( obj, function( i, v ) {
-			if ( traditional || rbracket.test( prefix ) ) {
-
-				// Treat each array item as a scalar.
-				add( prefix, v );
-
-			} else {
-
-				// Item is non-scalar (array or object), encode its numeric index.
-				buildParams(
-					prefix + "[" + ( typeof v === "object" && v != null ? i : "" ) + "]",
-					v,
-					traditional,
-					add
-				);
-			}
-		} );
-
-	} else if ( !traditional && toType( obj ) === "object" ) {
-
-		// Serialize object item.
-		for ( name in obj ) {
-			buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add );
-		}
-
-	} else {
-
-		// Serialize scalar item.
-		add( prefix, obj );
-	}
-}
-
-// Serialize an array of form elements or a set of
-// key/values into a query string
-jQuery.param = function( a, traditional ) {
-	var prefix,
-		s = [],
-		add = function( key, valueOrFunction ) {
-
-			// If value is a function, invoke it and use its return value
-			var value = isFunction( valueOrFunction ) ?
-				valueOrFunction() :
-				valueOrFunction;
-
-			s[ s.length ] = encodeURIComponent( key ) + "=" +
-				encodeURIComponent( value == null ? "" : value );
-		};
-
-	if ( a == null ) {
-		return "";
-	}
-
-	// If an array was passed in, assume that it is an array of form elements.
-	if ( Array.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {
-
-		// Serialize the form elements
-		jQuery.each( a, function() {
-			add( this.name, this.value );
-		} );
-
-	} else {
-
-		// If traditional, encode the "old" way (the way 1.3.2 or older
-		// did it), otherwise encode params recursively.
-		for ( prefix in a ) {
-			buildParams( prefix, a[ prefix ], traditional, add );
-		}
-	}
-
-	// Return the resulting serialization
-	return s.join( "&" );
-};
-
-jQuery.fn.extend( {
-	serialize: function() {
-		return jQuery.param( this.serializeArray() );
-	},
-	serializeArray: function() {
-		return this.map( function() {
-
-			// Can add propHook for "elements" to filter or add form elements
-			var elements = jQuery.prop( this, "elements" );
-			return elements ? jQuery.makeArray( elements ) : this;
-		} )
-		.filter( function() {
-			var type = this.type;
-
-			// Use .is( ":disabled" ) so that fieldset[disabled] works
-			return this.name && !jQuery( this ).is( ":disabled" ) &&
-				rsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) &&
-				( this.checked || !rcheckableType.test( type ) );
-		} )
-		.map( function( i, elem ) {
-			var val = jQuery( this ).val();
-
-			if ( val == null ) {
-				return null;
-			}
-
-			if ( Array.isArray( val ) ) {
-				return jQuery.map( val, function( val ) {
-					return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
-				} );
-			}
-
-			return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
-		} ).get();
-	}
-} );
-
-
-var
-	r20 = /%20/g,
-	rhash = /#.*$/,
-	rantiCache = /([?&])_=[^&]*/,
-	rheaders = /^(.*?):[ \t]*([^\r\n]*)$/mg,
-
-	// #7653, #8125, #8152: local protocol detection
-	rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,
-	rnoContent = /^(?:GET|HEAD)$/,
-	rprotocol = /^\/\//,
-
-	/* Prefilters
-	 * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)
-	 * 2) These are called:
-	 *    - BEFORE asking for a transport
-	 *    - AFTER param serialization (s.data is a string if s.processData is true)
-	 * 3) key is the dataType
-	 * 4) the catchall symbol "*" can be used
-	 * 5) execution will start with transport dataType and THEN continue down to "*" if needed
-	 */
-	prefilters = {},
-
-	/* Transports bindings
-	 * 1) key is the dataType
-	 * 2) the catchall symbol "*" can be used
-	 * 3) selection will start with transport dataType and THEN go to "*" if needed
-	 */
-	transports = {},
-
-	// Avoid comment-prolog char sequence (#10098); must appease lint and evade compression
-	allTypes = "*/".concat( "*" ),
-
-	// Anchor tag for parsing the document origin
-	originAnchor = document.createElement( "a" );
-	originAnchor.href = location.href;
-
-// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport
-function addToPrefiltersOrTransports( structure ) {
-
-	// dataTypeExpression is optional and defaults to "*"
-	return function( dataTypeExpression, func ) {
-
-		if ( typeof dataTypeExpression !== "string" ) {
-			func = dataTypeExpression;
-			dataTypeExpression = "*";
-		}
-
-		var dataType,
-			i = 0,
-			dataTypes = dataTypeExpression.toLowerCase().match( rnothtmlwhite ) || [];
-
-		if ( isFunction( func ) ) {
-
-			// For each dataType in the dataTypeExpression
-			while ( ( dataType = dataTypes[ i++ ] ) ) {
-
-				// Prepend if requested
-				if ( dataType[ 0 ] === "+" ) {
-					dataType = dataType.slice( 1 ) || "*";
-					( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func );
-
-				// Otherwise append
-				} else {
-					( structure[ dataType ] = structure[ dataType ] || [] ).push( func );
-				}
-			}
-		}
-	};
-}
-
-// Base inspection function for prefilters and transports
-function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) {
-
-	var inspected = {},
-		seekingTransport = ( structure === transports );
-
-	function inspect( dataType ) {
-		var selected;
-		inspected[ dataType ] = true;
-		jQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) {
-			var dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR );
-			if ( typeof dataTypeOrTransport === "string" &&
-				!seekingTransport && !inspected[ dataTypeOrTransport ] ) {
-
-				options.dataTypes.unshift( dataTypeOrTransport );
-				inspect( dataTypeOrTransport );
-				return false;
-			} else if ( seekingTransport ) {
-				return !( selected = dataTypeOrTransport );
-			}
-		} );
-		return selected;
-	}
-
-	return inspect( options.dataTypes[ 0 ] ) || !inspected[ "*" ] && inspect( "*" );
-}
-
-// A special extend for ajax options
-// that takes "flat" options (not to be deep extended)
-// Fixes #9887
-function ajaxExtend( target, src ) {
-	var key, deep,
-		flatOptions = jQuery.ajaxSettings.flatOptions || {};
-
-	for ( key in src ) {
-		if ( src[ key ] !== undefined ) {
-			( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ];
-		}
-	}
-	if ( deep ) {
-		jQuery.extend( true, target, deep );
-	}
-
-	return target;
-}
-
-/* Handles responses to an ajax request:
- * - finds the right dataType (mediates between content-type and expected dataType)
- * - returns the corresponding response
- */
-function ajaxHandleResponses( s, jqXHR, responses ) {
-
-	var ct, type, finalDataType, firstDataType,
-		contents = s.contents,
-		dataTypes = s.dataTypes;
-
-	// Remove auto dataType and get content-type in the process
-	while ( dataTypes[ 0 ] === "*" ) {
-		dataTypes.shift();
-		if ( ct === undefined ) {
-			ct = s.mimeType || jqXHR.getResponseHeader( "Content-Type" );
-		}
-	}
-
-	// Check if we're dealing with a known content-type
-	if ( ct ) {
-		for ( type in contents ) {
-			if ( contents[ type ] && contents[ type ].test( ct ) ) {
-				dataTypes.unshift( type );
-				break;
-			}
-		}
-	}
-
-	// Check to see if we have a response for the expected dataType
-	if ( dataTypes[ 0 ] in responses ) {
-		finalDataType = dataTypes[ 0 ];
-	} else {
-
-		// Try convertible dataTypes
-		for ( type in responses ) {
-			if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[ 0 ] ] ) {
-				finalDataType = type;
-				break;
-			}
-			if ( !firstDataType ) {
-				firstDataType = type;
-			}
-		}
-
-		// Or just use first one
-		finalDataType = finalDataType || firstDataType;
-	}
-
-	// If we found a dataType
-	// We add the dataType to the list if needed
-	// and return the corresponding response
-	if ( finalDataType ) {
-		if ( finalDataType !== dataTypes[ 0 ] ) {
-			dataTypes.unshift( finalDataType );
-		}
-		return responses[ finalDataType ];
-	}
-}
-
-/* Chain conversions given the request and the original response
- * Also sets the responseXXX fields on the jqXHR instance
- */
-function ajaxConvert( s, response, jqXHR, isSuccess ) {
-	var conv2, current, conv, tmp, prev,
-		converters = {},
-
-		// Work with a copy of dataTypes in case we need to modify it for conversion
-		dataTypes = s.dataTypes.slice();
-
-	// Create converters map with lowercased keys
-	if ( dataTypes[ 1 ] ) {
-		for ( conv in s.converters ) {
-			converters[ conv.toLowerCase() ] = s.converters[ conv ];
-		}
-	}
-
-	current = dataTypes.shift();
-
-	// Convert to each sequential dataType
-	while ( current ) {
-
-		if ( s.responseFields[ current ] ) {
-			jqXHR[ s.responseFields[ current ] ] = response;
-		}
-
-		// Apply the dataFilter if provided
-		if ( !prev && isSuccess && s.dataFilter ) {
-			response = s.dataFilter( response, s.dataType );
-		}
-
-		prev = current;
-		current = dataTypes.shift();
-
-		if ( current ) {
-
-			// There's only work to do if current dataType is non-auto
-			if ( current === "*" ) {
-
-				current = prev;
-
-			// Convert response if prev dataType is non-auto and differs from current
-			} else if ( prev !== "*" && prev !== current ) {
-
-				// Seek a direct converter
-				conv = converters[ prev + " " + current ] || converters[ "* " + current ];
-
-				// If none found, seek a pair
-				if ( !conv ) {
-					for ( conv2 in converters ) {
-
-						// If conv2 outputs current
-						tmp = conv2.split( " " );
-						if ( tmp[ 1 ] === current ) {
-
-							// If prev can be converted to accepted input
-							conv = converters[ prev + " " + tmp[ 0 ] ] ||
-								converters[ "* " + tmp[ 0 ] ];
-							if ( conv ) {
-
-								// Condense equivalence converters
-								if ( conv === true ) {
-									conv = converters[ conv2 ];
-
-								// Otherwise, insert the intermediate dataType
-								} else if ( converters[ conv2 ] !== true ) {
-									current = tmp[ 0 ];
-									dataTypes.unshift( tmp[ 1 ] );
-								}
-								break;
-							}
-						}
-					}
-				}
-
-				// Apply converter (if not an equivalence)
-				if ( conv !== true ) {
-
-					// Unless errors are allowed to bubble, catch and return them
-					if ( conv && s.throws ) {
-						response = conv( response );
-					} else {
-						try {
-							response = conv( response );
-						} catch ( e ) {
-							return {
-								state: "parsererror",
-								error: conv ? e : "No conversion from " + prev + " to " + current
-							};
-						}
-					}
-				}
-			}
-		}
-	}
-
-	return { state: "success", data: response };
-}
-
-jQuery.extend( {
-
-	// Counter for holding the number of active queries
-	active: 0,
-
-	// Last-Modified header cache for next request
-	lastModified: {},
-	etag: {},
-
-	ajaxSettings: {
-		url: location.href,
-		type: "GET",
-		isLocal: rlocalProtocol.test( location.protocol ),
-		global: true,
-		processData: true,
-		async: true,
-		contentType: "application/x-www-form-urlencoded; charset=UTF-8",
-
-		/*
-		timeout: 0,
-		data: null,
-		dataType: null,
-		username: null,
-		password: null,
-		cache: null,
-		throws: false,
-		traditional: false,
-		headers: {},
-		*/
-
-		accepts: {
-			"*": allTypes,
-			text: "text/plain",
-			html: "text/html",
-			xml: "application/xml, text/xml",
-			json: "application/json, text/javascript"
-		},
-
-		contents: {
-			xml: /\bxml\b/,
-			html: /\bhtml/,
-			json: /\bjson\b/
-		},
-
-		responseFields: {
-			xml: "responseXML",
-			text: "responseText",
-			json: "responseJSON"
-		},
-
-		// Data converters
-		// Keys separate source (or catchall "*") and destination types with a single space
-		converters: {
-
-			// Convert anything to text
-			"* text": String,
-
-			// Text to html (true = no transformation)
-			"text html": true,
-
-			// Evaluate text as a json expression
-			"text json": JSON.parse,
-
-			// Parse text as xml
-			"text xml": jQuery.parseXML
-		},
-
-		// For options that shouldn't be deep extended:
-		// you can add your own custom options here if
-		// and when you create one that shouldn't be
-		// deep extended (see ajaxExtend)
-		flatOptions: {
-			url: true,
-			context: true
-		}
-	},
-
-	// Creates a full fledged settings object into target
-	// with both ajaxSettings and settings fields.
-	// If target is omitted, writes into ajaxSettings.
-	ajaxSetup: function( target, settings ) {
-		return settings ?
-
-			// Building a settings object
-			ajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) :
-
-			// Extending ajaxSettings
-			ajaxExtend( jQuery.ajaxSettings, target );
-	},
-
-	ajaxPrefilter: addToPrefiltersOrTransports( prefilters ),
-	ajaxTransport: addToPrefiltersOrTransports( transports ),
-
-	// Main method
-	ajax: function( url, options ) {
-
-		// If url is an object, simulate pre-1.5 signature
-		if ( typeof url === "object" ) {
-			options = url;
-			url = undefined;
-		}
-
-		// Force options to be an object
-		options = options || {};
-
-		var transport,
-
-			// URL without anti-cache param
-			cacheURL,
-
-			// Response headers
-			responseHeadersString,
-			responseHeaders,
-
-			// timeout handle
-			timeoutTimer,
-
-			// Url cleanup var
-			urlAnchor,
-
-			// Request state (becomes false upon send and true upon completion)
-			completed,
-
-			// To know if global events are to be dispatched
-			fireGlobals,
-
-			// Loop variable
-			i,
-
-			// uncached part of the url
-			uncached,
-
-			// Create the final options object
-			s = jQuery.ajaxSetup( {}, options ),
-
-			// Callbacks context
-			callbackContext = s.context || s,
-
-			// Context for global events is callbackContext if it is a DOM node or jQuery collection
-			globalEventContext = s.context &&
-				( callbackContext.nodeType || callbackContext.jquery ) ?
-					jQuery( callbackContext ) :
-					jQuery.event,
-
-			// Deferreds
-			deferred = jQuery.Deferred(),
-			completeDeferred = jQuery.Callbacks( "once memory" ),
-
-			// Status-dependent callbacks
-			statusCode = s.statusCode || {},
-
-			// Headers (they are sent all at once)
-			requestHeaders = {},
-			requestHeadersNames = {},
-
-			// Default abort message
-			strAbort = "canceled",
-
-			// Fake xhr
-			jqXHR = {
-				readyState: 0,
-
-				// Builds headers hashtable if needed
-				getResponseHeader: function( key ) {
-					var match;
-					if ( completed ) {
-						if ( !responseHeaders ) {
-							responseHeaders = {};
-							while ( ( match = rheaders.exec( responseHeadersString ) ) ) {
-								responseHeaders[ match[ 1 ].toLowerCase() + " " ] =
-									( responseHeaders[ match[ 1 ].toLowerCase() + " " ] || [] )
-										.concat( match[ 2 ] );
-							}
-						}
-						match = responseHeaders[ key.toLowerCase() + " " ];
-					}
-					return match == null ? null : match.join( ", " );
-				},
-
-				// Raw string
-				getAllResponseHeaders: function() {
-					return completed ? responseHeadersString : null;
-				},
-
-				// Caches the header
-				setRequestHeader: function( name, value ) {
-					if ( completed == null ) {
-						name = requestHeadersNames[ name.toLowerCase() ] =
-							requestHeadersNames[ name.toLowerCase() ] || name;
-						requestHeaders[ name ] = value;
-					}
-					return this;
-				},
-
-				// Overrides response content-type header
-				overrideMimeType: function( type ) {
-					if ( completed == null ) {
-						s.mimeType = type;
-					}
-					return this;
-				},
-
-				// Status-dependent callbacks
-				statusCode: function( map ) {
-					var code;
-					if ( map ) {
-						if ( completed ) {
-
-							// Execute the appropriate callbacks
-							jqXHR.always( map[ jqXHR.status ] );
-						} else {
-
-							// Lazy-add the new callbacks in a way that preserves old ones
-							for ( code in map ) {
-								statusCode[ code ] = [ statusCode[ code ], map[ code ] ];
-							}
-						}
-					}
-					return this;
-				},
-
-				// Cancel the request
-				abort: function( statusText ) {
-					var finalText = statusText || strAbort;
-					if ( transport ) {
-						transport.abort( finalText );
-					}
-					done( 0, finalText );
-					return this;
-				}
-			};
-
-		// Attach deferreds
-		deferred.promise( jqXHR );
-
-		// Add protocol if not provided (prefilters might expect it)
-		// Handle falsy url in the settings object (#10093: consistency with old signature)
-		// We also use the url parameter if available
-		s.url = ( ( url || s.url || location.href ) + "" )
-			.replace( rprotocol, location.protocol + "//" );
-
-		// Alias method option to type as per ticket #12004
-		s.type = options.method || options.type || s.method || s.type;
-
-		// Extract dataTypes list
-		s.dataTypes = ( s.dataType || "*" ).toLowerCase().match( rnothtmlwhite ) || [ "" ];
-
-		// A cross-domain request is in order when the origin doesn't match the current origin.
-		if ( s.crossDomain == null ) {
-			urlAnchor = document.createElement( "a" );
-
-			// Support: IE <=8 - 11, Edge 12 - 15
-			// IE throws exception on accessing the href property if url is malformed,
-			// e.g. http://example.com:80x/
-			try {
-				urlAnchor.href = s.url;
-
-				// Support: IE <=8 - 11 only
-				// Anchor's host property isn't correctly set when s.url is relative
-				urlAnchor.href = urlAnchor.href;
-				s.crossDomain = originAnchor.protocol + "//" + originAnchor.host !==
-					urlAnchor.protocol + "//" + urlAnchor.host;
-			} catch ( e ) {
-
-				// If there is an error parsing the URL, assume it is crossDomain,
-				// it can be rejected by the transport if it is invalid
-				s.crossDomain = true;
-			}
-		}
-
-		// Convert data if not already a string
-		if ( s.data && s.processData && typeof s.data !== "string" ) {
-			s.data = jQuery.param( s.data, s.traditional );
-		}
-
-		// Apply prefilters
-		inspectPrefiltersOrTransports( prefilters, s, options, jqXHR );
-
-		// If request was aborted inside a prefilter, stop there
-		if ( completed ) {
-			return jqXHR;
-		}
-
-		// We can fire global events as of now if asked to
-		// Don't fire events if jQuery.event is undefined in an AMD-usage scenario (#15118)
-		fireGlobals = jQuery.event && s.global;
-
-		// Watch for a new set of requests
-		if ( fireGlobals && jQuery.active++ === 0 ) {
-			jQuery.event.trigger( "ajaxStart" );
-		}
-
-		// Uppercase the type
-		s.type = s.type.toUpperCase();
-
-		// Determine if request has content
-		s.hasContent = !rnoContent.test( s.type );
-
-		// Save the URL in case we're toying with the If-Modified-Since
-		// and/or If-None-Match header later on
-		// Remove hash to simplify url manipulation
-		cacheURL = s.url.replace( rhash, "" );
-
-		// More options handling for requests with no content
-		if ( !s.hasContent ) {
-
-			// Remember the hash so we can put it back
-			uncached = s.url.slice( cacheURL.length );
-
-			// If data is available and should be processed, append data to url
-			if ( s.data && ( s.processData || typeof s.data === "string" ) ) {
-				cacheURL += ( rquery.test( cacheURL ) ? "&" : "?" ) + s.data;
-
-				// #9682: remove data so that it's not used in an eventual retry
-				delete s.data;
-			}
-
-			// Add or update anti-cache param if needed
-			if ( s.cache === false ) {
-				cacheURL = cacheURL.replace( rantiCache, "$1" );
-				uncached = ( rquery.test( cacheURL ) ? "&" : "?" ) + "_=" + ( nonce++ ) + uncached;
-			}
-
-			// Put hash and anti-cache on the URL that will be requested (gh-1732)
-			s.url = cacheURL + uncached;
-
-		// Change '%20' to '+' if this is encoded form body content (gh-2658)
-		} else if ( s.data && s.processData &&
-			( s.contentType || "" ).indexOf( "application/x-www-form-urlencoded" ) === 0 ) {
-			s.data = s.data.replace( r20, "+" );
-		}
-
-		// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
-		if ( s.ifModified ) {
-			if ( jQuery.lastModified[ cacheURL ] ) {
-				jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ cacheURL ] );
-			}
-			if ( jQuery.etag[ cacheURL ] ) {
-				jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ cacheURL ] );
-			}
-		}
-
-		// Set the correct header, if data is being sent
-		if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {
-			jqXHR.setRequestHeader( "Content-Type", s.contentType );
-		}
-
-		// Set the Accepts header for the server, depending on the dataType
-		jqXHR.setRequestHeader(
-			"Accept",
-			s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ?
-				s.accepts[ s.dataTypes[ 0 ] ] +
-					( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) :
-				s.accepts[ "*" ]
-		);
-
-		// Check for headers option
-		for ( i in s.headers ) {
-			jqXHR.setRequestHeader( i, s.headers[ i ] );
-		}
-
-		// Allow custom headers/mimetypes and early abort
-		if ( s.beforeSend &&
-			( s.beforeSend.call( callbackContext, jqXHR, s ) === false || completed ) ) {
-
-			// Abort if not done already and return
-			return jqXHR.abort();
-		}
-
-		// Aborting is no longer a cancellation
-		strAbort = "abort";
-
-		// Install callbacks on deferreds
-		completeDeferred.add( s.complete );
-		jqXHR.done( s.success );
-		jqXHR.fail( s.error );
-
-		// Get transport
-		transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );
-
-		// If no transport, we auto-abort
-		if ( !transport ) {
-			done( -1, "No Transport" );
-		} else {
-			jqXHR.readyState = 1;
-
-			// Send global event
-			if ( fireGlobals ) {
-				globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] );
-			}
-
-			// If request was aborted inside ajaxSend, stop there
-			if ( completed ) {
-				return jqXHR;
-			}
-
-			// Timeout
-			if ( s.async && s.timeout > 0 ) {
-				timeoutTimer = window.setTimeout( function() {
-					jqXHR.abort( "timeout" );
-				}, s.timeout );
-			}
-
-			try {
-				completed = false;
-				transport.send( requestHeaders, done );
-			} catch ( e ) {
-
-				// Rethrow post-completion exceptions
-				if ( completed ) {
-					throw e;
-				}
-
-				// Propagate others as results
-				done( -1, e );
-			}
-		}
-
-		// Callback for when everything is done
-		function done( status, nativeStatusText, responses, headers ) {
-			var isSuccess, success, error, response, modified,
-				statusText = nativeStatusText;
-
-			// Ignore repeat invocations
-			if ( completed ) {
-				return;
-			}
-
-			completed = true;
-
-			// Clear timeout if it exists
-			if ( timeoutTimer ) {
-				window.clearTimeout( timeoutTimer );
-			}
-
-			// Dereference transport for early garbage collection
-			// (no matter how long the jqXHR object will be used)
-			transport = undefined;
-
-			// Cache response headers
-			responseHeadersString = headers || "";
-
-			// Set readyState
-			jqXHR.readyState = status > 0 ? 4 : 0;
-
-			// Determine if successful
-			isSuccess = status >= 200 && status < 300 || status === 304;
-
-			// Get response data
-			if ( responses ) {
-				response = ajaxHandleResponses( s, jqXHR, responses );
-			}
-
-			// Convert no matter what (that way responseXXX fields are always set)
-			response = ajaxConvert( s, response, jqXHR, isSuccess );
-
-			// If successful, handle type chaining
-			if ( isSuccess ) {
-
-				// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
-				if ( s.ifModified ) {
-					modified = jqXHR.getResponseHeader( "Last-Modified" );
-					if ( modified ) {
-						jQuery.lastModified[ cacheURL ] = modified;
-					}
-					modified = jqXHR.getResponseHeader( "etag" );
-					if ( modified ) {
-						jQuery.etag[ cacheURL ] = modified;
-					}
-				}
-
-				// if no content
-				if ( status === 204 || s.type === "HEAD" ) {
-					statusText = "nocontent";
-
-				// if not modified
-				} else if ( status === 304 ) {
-					statusText = "notmodified";
-
-				// If we have data, let's convert it
-				} else {
-					statusText = response.state;
-					success = response.data;
-					error = response.error;
-					isSuccess = !error;
-				}
-			} else {
-
-				// Extract error from statusText and normalize for non-aborts
-				error = statusText;
-				if ( status || !statusText ) {
-					statusText = "error";
-					if ( status < 0 ) {
-						status = 0;
-					}
-				}
-			}
-
-			// Set data for the fake xhr object
-			jqXHR.status = status;
-			jqXHR.statusText = ( nativeStatusText || statusText ) + "";
-
-			// Success/Error
-			if ( isSuccess ) {
-				deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );
-			} else {
-				deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );
-			}
-
-			// Status-dependent callbacks
-			jqXHR.statusCode( statusCode );
-			statusCode = undefined;
-
-			if ( fireGlobals ) {
-				globalEventContext.trigger( isSuccess ? "ajaxSuccess" : "ajaxError",
-					[ jqXHR, s, isSuccess ? success : error ] );
-			}
-
-			// Complete
-			completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] );
-
-			if ( fireGlobals ) {
-				globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] );
-
-				// Handle the global AJAX counter
-				if ( !( --jQuery.active ) ) {
-					jQuery.event.trigger( "ajaxStop" );
-				}
-			}
-		}
-
-		return jqXHR;
-	},
-
-	getJSON: function( url, data, callback ) {
-		return jQuery.get( url, data, callback, "json" );
-	},
-
-	getScript: function( url, callback ) {
-		return jQuery.get( url, undefined, callback, "script" );
-	}
-} );
-
-jQuery.each( [ "get", "post" ], function( i, method ) {
-	jQuery[ method ] = function( url, data, callback, type ) {
-
-		// Shift arguments if data argument was omitted
-		if ( isFunction( data ) ) {
-			type = type || callback;
-			callback = data;
-			data = undefined;
-		}
-
-		// The url can be an options object (which then must have .url)
-		return jQuery.ajax( jQuery.extend( {
-			url: url,
-			type: method,
-			dataType: type,
-			data: data,
-			success: callback
-		}, jQuery.isPlainObject( url ) && url ) );
-	};
-} );
-
-
-jQuery._evalUrl = function( url, options ) {
-	return jQuery.ajax( {
-		url: url,
-
-		// Make this explicit, since user can override this through ajaxSetup (#11264)
-		type: "GET",
-		dataType: "script",
-		cache: true,
-		async: false,
-		global: false,
-
-		// Only evaluate the response if it is successful (gh-4126)
-		// dataFilter is not invoked for failure responses, so using it instead
-		// of the default converter is kludgy but it works.
-		converters: {
-			"text script": function() {}
-		},
-		dataFilter: function( response ) {
-			jQuery.globalEval( response, options );
-		}
-	} );
-};
-
-
-jQuery.fn.extend( {
-	wrapAll: function( html ) {
-		var wrap;
-
-		if ( this[ 0 ] ) {
-			if ( isFunction( html ) ) {
-				html = html.call( this[ 0 ] );
-			}
-
-			// The elements to wrap the target around
-			wrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true );
-
-			if ( this[ 0 ].parentNode ) {
-				wrap.insertBefore( this[ 0 ] );
-			}
-
-			wrap.map( function() {
-				var elem = this;
-
-				while ( elem.firstElementChild ) {
-					elem = elem.firstElementChild;
-				}
-
-				return elem;
-			} ).append( this );
-		}
-
-		return this;
-	},
-
-	wrapInner: function( html ) {
-		if ( isFunction( html ) ) {
-			return this.each( function( i ) {
-				jQuery( this ).wrapInner( html.call( this, i ) );
-			} );
-		}
-
-		return this.each( function() {
-			var self = jQuery( this ),
-				contents = self.contents();
-
-			if ( contents.length ) {
-				contents.wrapAll( html );
-
-			} else {
-				self.append( html );
-			}
-		} );
-	},
-
-	wrap: function( html ) {
-		var htmlIsFunction = isFunction( html );
-
-		return this.each( function( i ) {
-			jQuery( this ).wrapAll( htmlIsFunction ? html.call( this, i ) : html );
-		} );
-	},
-
-	unwrap: function( selector ) {
-		this.parent( selector ).not( "body" ).each( function() {
-			jQuery( this ).replaceWith( this.childNodes );
-		} );
-		return this;
-	}
-} );
-
-
-jQuery.expr.pseudos.hidden = function( elem ) {
-	return !jQuery.expr.pseudos.visible( elem );
-};
-jQuery.expr.pseudos.visible = function( elem ) {
-	return !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length );
-};
-
-
-
-
-jQuery.ajaxSettings.xhr = function() {
-	try {
-		return new window.XMLHttpRequest();
-	} catch ( e ) {}
-};
-
-var xhrSuccessStatus = {
-
-		// File protocol always yields status code 0, assume 200
-		0: 200,
-
-		// Support: IE <=9 only
-		// #1450: sometimes IE returns 1223 when it should be 204
-		1223: 204
-	},
-	xhrSupported = jQuery.ajaxSettings.xhr();
-
-support.cors = !!xhrSupported && ( "withCredentials" in xhrSupported );
-support.ajax = xhrSupported = !!xhrSupported;
-
-jQuery.ajaxTransport( function( options ) {
-	var callback, errorCallback;
-
-	// Cross domain only allowed if supported through XMLHttpRequest
-	if ( support.cors || xhrSupported && !options.crossDomain ) {
-		return {
-			send: function( headers, complete ) {
-				var i,
-					xhr = options.xhr();
-
-				xhr.open(
-					options.type,
-					options.url,
-					options.async,
-					options.username,
-					options.password
-				);
-
-				// Apply custom fields if provided
-				if ( options.xhrFields ) {
-					for ( i in options.xhrFields ) {
-						xhr[ i ] = options.xhrFields[ i ];
-					}
-				}
-
-				// Override mime type if needed
-				if ( options.mimeType && xhr.overrideMimeType ) {
-					xhr.overrideMimeType( options.mimeType );
-				}
-
-				// X-Requested-With header
-				// For cross-domain requests, seeing as conditions for a preflight are
-				// akin to a jigsaw puzzle, we simply never set it to be sure.
-				// (it can always be set on a per-request basis or even using ajaxSetup)
-				// For same-domain requests, won't change header if already provided.
-				if ( !options.crossDomain && !headers[ "X-Requested-With" ] ) {
-					headers[ "X-Requested-With" ] = "XMLHttpRequest";
-				}
-
-				// Set headers
-				for ( i in headers ) {
-					xhr.setRequestHeader( i, headers[ i ] );
-				}
-
-				// Callback
-				callback = function( type ) {
-					return function() {
-						if ( callback ) {
-							callback = errorCallback = xhr.onload =
-								xhr.onerror = xhr.onabort = xhr.ontimeout =
-									xhr.onreadystatechange = null;
-
-							if ( type === "abort" ) {
-								xhr.abort();
-							} else if ( type === "error" ) {
-
-								// Support: IE <=9 only
-								// On a manual native abort, IE9 throws
-								// errors on any property access that is not readyState
-								if ( typeof xhr.status !== "number" ) {
-									complete( 0, "error" );
-								} else {
-									complete(
-
-										// File: protocol always yields status 0; see #8605, #14207
-										xhr.status,
-										xhr.statusText
-									);
-								}
-							} else {
-								complete(
-									xhrSuccessStatus[ xhr.status ] || xhr.status,
-									xhr.statusText,
-
-									// Support: IE <=9 only
-									// IE9 has no XHR2 but throws on binary (trac-11426)
-									// For XHR2 non-text, let the caller handle it (gh-2498)
-									( xhr.responseType || "text" ) !== "text"  ||
-									typeof xhr.responseText !== "string" ?
-										{ binary: xhr.response } :
-										{ text: xhr.responseText },
-									xhr.getAllResponseHeaders()
-								);
-							}
-						}
-					};
-				};
-
-				// Listen to events
-				xhr.onload = callback();
-				errorCallback = xhr.onerror = xhr.ontimeout = callback( "error" );
-
-				// Support: IE 9 only
-				// Use onreadystatechange to replace onabort
-				// to handle uncaught aborts
-				if ( xhr.onabort !== undefined ) {
-					xhr.onabort = errorCallback;
-				} else {
-					xhr.onreadystatechange = function() {
-
-						// Check readyState before timeout as it changes
-						if ( xhr.readyState === 4 ) {
-
-							// Allow onerror to be called first,
-							// but that will not handle a native abort
-							// Also, save errorCallback to a variable
-							// as xhr.onerror cannot be accessed
-							window.setTimeout( function() {
-								if ( callback ) {
-									errorCallback();
-								}
-							} );
-						}
-					};
-				}
-
-				// Create the abort callback
-				callback = callback( "abort" );
-
-				try {
-
-					// Do send the request (this may raise an exception)
-					xhr.send( options.hasContent && options.data || null );
-				} catch ( e ) {
-
-					// #14683: Only rethrow if this hasn't been notified as an error yet
-					if ( callback ) {
-						throw e;
-					}
-				}
-			},
-
-			abort: function() {
-				if ( callback ) {
-					callback();
-				}
-			}
-		};
-	}
-} );
-
-
-
-
-// Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432)
-jQuery.ajaxPrefilter( function( s ) {
-	if ( s.crossDomain ) {
-		s.contents.script = false;
-	}
-} );
-
-// Install script dataType
-jQuery.ajaxSetup( {
-	accepts: {
-		script: "text/javascript, application/javascript, " +
-			"application/ecmascript, application/x-ecmascript"
-	},
-	contents: {
-		script: /\b(?:java|ecma)script\b/
-	},
-	converters: {
-		"text script": function( text ) {
-			jQuery.globalEval( text );
-			return text;
-		}
-	}
-} );
-
-// Handle cache's special case and crossDomain
-jQuery.ajaxPrefilter( "script", function( s ) {
-	if ( s.cache === undefined ) {
-		s.cache = false;
-	}
-	if ( s.crossDomain ) {
-		s.type = "GET";
-	}
-} );
-
-// Bind script tag hack transport
-jQuery.ajaxTransport( "script", function( s ) {
-
-	// This transport only deals with cross domain or forced-by-attrs requests
-	if ( s.crossDomain || s.scriptAttrs ) {
-		var script, callback;
-		return {
-			send: function( _, complete ) {
-				script = jQuery( "<script>" )
-					.attr( s.scriptAttrs || {} )
-					.prop( { charset: s.scriptCharset, src: s.url } )
-					.on( "load error", callback = function( evt ) {
-						script.remove();
-						callback = null;
-						if ( evt ) {
-							complete( evt.type === "error" ? 404 : 200, evt.type );
-						}
-					} );
-
-				// Use native DOM manipulation to avoid our domManip AJAX trickery
-				document.head.appendChild( script[ 0 ] );
-			},
-			abort: function() {
-				if ( callback ) {
-					callback();
-				}
-			}
-		};
-	}
-} );
-
-
-
-
-var oldCallbacks = [],
-	rjsonp = /(=)\?(?=&|$)|\?\?/;
-
-// Default jsonp settings
-jQuery.ajaxSetup( {
-	jsonp: "callback",
-	jsonpCallback: function() {
-		var callback = oldCallbacks.pop() || ( jQuery.expando + "_" + ( nonce++ ) );
-		this[ callback ] = true;
-		return callback;
-	}
-} );
-
-// Detect, normalize options and install callbacks for jsonp requests
-jQuery.ajaxPrefilter( "json jsonp", function( s, originalSettings, jqXHR ) {
-
-	var callbackName, overwritten, responseContainer,
-		jsonProp = s.jsonp !== false && ( rjsonp.test( s.url ) ?
-			"url" :
-			typeof s.data === "string" &&
-				( s.contentType || "" )
-					.indexOf( "application/x-www-form-urlencoded" ) === 0 &&
-				rjsonp.test( s.data ) && "data"
-		);
-
-	// Handle iff the expected data type is "jsonp" or we have a parameter to set
-	if ( jsonProp || s.dataTypes[ 0 ] === "jsonp" ) {
-
-		// Get callback name, remembering preexisting value associated with it
-		callbackName = s.jsonpCallback = isFunction( s.jsonpCallback ) ?
-			s.jsonpCallback() :
-			s.jsonpCallback;
-
-		// Insert callback into url or form data
-		if ( jsonProp ) {
-			s[ jsonProp ] = s[ jsonProp ].replace( rjsonp, "$1" + callbackName );
-		} else if ( s.jsonp !== false ) {
-			s.url += ( rquery.test( s.url ) ? "&" : "?" ) + s.jsonp + "=" + callbackName;
-		}
-
-		// Use data converter to retrieve json after script execution
-		s.converters[ "script json" ] = function() {
-			if ( !responseContainer ) {
-				jQuery.error( callbackName + " was not called" );
-			}
-			return responseContainer[ 0 ];
-		};
-
-		// Force json dataType
-		s.dataTypes[ 0 ] = "json";
-
-		// Install callback
-		overwritten = window[ callbackName ];
-		window[ callbackName ] = function() {
-			responseContainer = arguments;
-		};
-
-		// Clean-up function (fires after converters)
-		jqXHR.always( function() {
-
-			// If previous value didn't exist - remove it
-			if ( overwritten === undefined ) {
-				jQuery( window ).removeProp( callbackName );
-
-			// Otherwise restore preexisting value
-			} else {
-				window[ callbackName ] = overwritten;
-			}
-
-			// Save back as free
-			if ( s[ callbackName ] ) {
-
-				// Make sure that re-using the options doesn't screw things around
-				s.jsonpCallback = originalSettings.jsonpCallback;
-
-				// Save the callback name for future use
-				oldCallbacks.push( callbackName );
-			}
-
-			// Call if it was a function and we have a response
-			if ( responseContainer && isFunction( overwritten ) ) {
-				overwritten( responseContainer[ 0 ] );
-			}
-
-			responseContainer = overwritten = undefined;
-		} );
-
-		// Delegate to script
-		return "script";
-	}
-} );
-
-
-
-
-// Support: Safari 8 only
-// In Safari 8 documents created via document.implementation.createHTMLDocument
-// collapse sibling forms: the second one becomes a child of the first one.
-// Because of that, this security measure has to be disabled in Safari 8.
-// https://bugs.webkit.org/show_bug.cgi?id=137337
-support.createHTMLDocument = ( function() {
-	var body = document.implementation.createHTMLDocument( "" ).body;
-	body.innerHTML = "<form></form><form></form>";
-	return body.childNodes.length === 2;
-} )();
-
-
-// Argument "data" should be string of html
-// context (optional): If specified, the fragment will be created in this context,
-// defaults to document
-// keepScripts (optional): If true, will include scripts passed in the html string
-jQuery.parseHTML = function( data, context, keepScripts ) {
-	if ( typeof data !== "string" ) {
-		return [];
-	}
-	if ( typeof context === "boolean" ) {
-		keepScripts = context;
-		context = false;
-	}
-
-	var base, parsed, scripts;
-
-	if ( !context ) {
-
-		// Stop scripts or inline event handlers from being executed immediately
-		// by using document.implementation
-		if ( support.createHTMLDocument ) {
-			context = document.implementation.createHTMLDocument( "" );
-
-			// Set the base href for the created document
-			// so any parsed elements with URLs
-			// are based on the document's URL (gh-2965)
-			base = context.createElement( "base" );
-			base.href = document.location.href;
-			context.head.appendChild( base );
-		} else {
-			context = document;
-		}
-	}
-
-	parsed = rsingleTag.exec( data );
-	scripts = !keepScripts && [];
-
-	// Single tag
-	if ( parsed ) {
-		return [ context.createElement( parsed[ 1 ] ) ];
-	}
-
-	parsed = buildFragment( [ data ], context, scripts );
-
-	if ( scripts && scripts.length ) {
-		jQuery( scripts ).remove();
-	}
-
-	return jQuery.merge( [], parsed.childNodes );
-};
-
-
-/**
- * Load a url into a page
- */
-jQuery.fn.load = function( url, params, callback ) {
-	var selector, type, response,
-		self = this,
-		off = url.indexOf( " " );
-
-	if ( off > -1 ) {
-		selector = stripAndCollapse( url.slice( off ) );
-		url = url.slice( 0, off );
-	}
-
-	// If it's a function
-	if ( isFunction( params ) ) {
-
-		// We assume that it's the callback
-		callback = params;
-		params = undefined;
-
-	// Otherwise, build a param string
-	} else if ( params && typeof params === "object" ) {
-		type = "POST";
-	}
-
-	// If we have elements to modify, make the request
-	if ( self.length > 0 ) {
-		jQuery.ajax( {
-			url: url,
-
-			// If "type" variable is undefined, then "GET" method will be used.
-			// Make value of this field explicit since
-			// user can override it through ajaxSetup method
-			type: type || "GET",
-			dataType: "html",
-			data: params
-		} ).done( function( responseText ) {
-
-			// Save response for use in complete callback
-			response = arguments;
-
-			self.html( selector ?
-
-				// If a selector was specified, locate the right elements in a dummy div
-				// Exclude scripts to avoid IE 'Permission Denied' errors
-				jQuery( "<div>" ).append( jQuery.parseHTML( responseText ) ).find( selector ) :
-
-				// Otherwise use the full result
-				responseText );
-
-		// If the request succeeds, this function gets "data", "status", "jqXHR"
-		// but they are ignored because response was set above.
-		// If it fails, this function gets "jqXHR", "status", "error"
-		} ).always( callback && function( jqXHR, status ) {
-			self.each( function() {
-				callback.apply( this, response || [ jqXHR.responseText, status, jqXHR ] );
-			} );
-		} );
-	}
-
-	return this;
-};
-
-
-
-
-// Attach a bunch of functions for handling common AJAX events
-jQuery.each( [
-	"ajaxStart",
-	"ajaxStop",
-	"ajaxComplete",
-	"ajaxError",
-	"ajaxSuccess",
-	"ajaxSend"
-], function( i, type ) {
-	jQuery.fn[ type ] = function( fn ) {
-		return this.on( type, fn );
-	};
-} );
-
-
-
-
-jQuery.expr.pseudos.animated = function( elem ) {
-	return jQuery.grep( jQuery.timers, function( fn ) {
-		return elem === fn.elem;
-	} ).length;
-};
-
-
-
-
-jQuery.offset = {
-	setOffset: function( elem, options, i ) {
-		var curPosition, curLeft, curCSSTop, curTop, curOffset, curCSSLeft, calculatePosition,
-			position = jQuery.css( elem, "position" ),
-			curElem = jQuery( elem ),
-			props = {};
-
-		// Set position first, in-case top/left are set even on static elem
-		if ( position === "static" ) {
-			elem.style.position = "relative";
-		}
-
-		curOffset = curElem.offset();
-		curCSSTop = jQuery.css( elem, "top" );
-		curCSSLeft = jQuery.css( elem, "left" );
-		calculatePosition = ( position === "absolute" || position === "fixed" ) &&
-			( curCSSTop + curCSSLeft ).indexOf( "auto" ) > -1;
-
-		// Need to be able to calculate position if either
-		// top or left is auto and position is either absolute or fixed
-		if ( calculatePosition ) {
-			curPosition = curElem.position();
-			curTop = curPosition.top;
-			curLeft = curPosition.left;
-
-		} else {
-			curTop = parseFloat( curCSSTop ) || 0;
-			curLeft = parseFloat( curCSSLeft ) || 0;
-		}
-
-		if ( isFunction( options ) ) {
-
-			// Use jQuery.extend here to allow modification of coordinates argument (gh-1848)
-			options = options.call( elem, i, jQuery.extend( {}, curOffset ) );
-		}
-
-		if ( options.top != null ) {
-			props.top = ( options.top - curOffset.top ) + curTop;
-		}
-		if ( options.left != null ) {
-			props.left = ( options.left - curOffset.left ) + curLeft;
-		}
-
-		if ( "using" in options ) {
-			options.using.call( elem, props );
-
-		} else {
-			curElem.css( props );
-		}
-	}
-};
-
-jQuery.fn.extend( {
-
-	// offset() relates an element's border box to the document origin
-	offset: function( options ) {
-
-		// Preserve chaining for setter
-		if ( arguments.length ) {
-			return options === undefined ?
-				this :
-				this.each( function( i ) {
-					jQuery.offset.setOffset( this, options, i );
-				} );
-		}
-
-		var rect, win,
-			elem = this[ 0 ];
-
-		if ( !elem ) {
-			return;
-		}
-
-		// Return zeros for disconnected and hidden (display: none) elements (gh-2310)
-		// Support: IE <=11 only
-		// Running getBoundingClientRect on a
-		// disconnected node in IE throws an error
-		if ( !elem.getClientRects().length ) {
-			return { top: 0, left: 0 };
-		}
-
-		// Get document-relative position by adding viewport scroll to viewport-relative gBCR
-		rect = elem.getBoundingClientRect();
-		win = elem.ownerDocument.defaultView;
-		return {
-			top: rect.top + win.pageYOffset,
-			left: rect.left + win.pageXOffset
-		};
-	},
-
-	// position() relates an element's margin box to its offset parent's padding box
-	// This corresponds to the behavior of CSS absolute positioning
-	position: function() {
-		if ( !this[ 0 ] ) {
-			return;
-		}
-
-		var offsetParent, offset, doc,
-			elem = this[ 0 ],
-			parentOffset = { top: 0, left: 0 };
-
-		// position:fixed elements are offset from the viewport, which itself always has zero offset
-		if ( jQuery.css( elem, "position" ) === "fixed" ) {
-
-			// Assume position:fixed implies availability of getBoundingClientRect
-			offset = elem.getBoundingClientRect();
-
-		} else {
-			offset = this.offset();
-
-			// Account for the *real* offset parent, which can be the document or its root element
-			// when a statically positioned element is identified
-			doc = elem.ownerDocument;
-			offsetParent = elem.offsetParent || doc.documentElement;
-			while ( offsetParent &&
-				( offsetParent === doc.body || offsetParent === doc.documentElement ) &&
-				jQuery.css( offsetParent, "position" ) === "static" ) {
-
-				offsetParent = offsetParent.parentNode;
-			}
-			if ( offsetParent && offsetParent !== elem && offsetParent.nodeType === 1 ) {
-
-				// Incorporate borders into its offset, since they are outside its content origin
-				parentOffset = jQuery( offsetParent ).offset();
-				parentOffset.top += jQuery.css( offsetParent, "borderTopWidth", true );
-				parentOffset.left += jQuery.css( offsetParent, "borderLeftWidth", true );
-			}
-		}
-
-		// Subtract parent offsets and element margins
-		return {
-			top: offset.top - parentOffset.top - jQuery.css( elem, "marginTop", true ),
-			left: offset.left - parentOffset.left - jQuery.css( elem, "marginLeft", true )
-		};
-	},
-
-	// This method will return documentElement in the following cases:
-	// 1) For the element inside the iframe without offsetParent, this method will return
-	//    documentElement of the parent window
-	// 2) For the hidden or detached element
-	// 3) For body or html element, i.e. in case of the html node - it will return itself
-	//
-	// but those exceptions were never presented as a real life use-cases
-	// and might be considered as more preferable results.
-	//
-	// This logic, however, is not guaranteed and can change at any point in the future
-	offsetParent: function() {
-		return this.map( function() {
-			var offsetParent = this.offsetParent;
-
-			while ( offsetParent && jQuery.css( offsetParent, "position" ) === "static" ) {
-				offsetParent = offsetParent.offsetParent;
-			}
-
-			return offsetParent || documentElement;
-		} );
-	}
-} );
-
-// Create scrollLeft and scrollTop methods
-jQuery.each( { scrollLeft: "pageXOffset", scrollTop: "pageYOffset" }, function( method, prop ) {
-	var top = "pageYOffset" === prop;
-
-	jQuery.fn[ method ] = function( val ) {
-		return access( this, function( elem, method, val ) {
-
-			// Coalesce documents and windows
-			var win;
-			if ( isWindow( elem ) ) {
-				win = elem;
-			} else if ( elem.nodeType === 9 ) {
-				win = elem.defaultView;
-			}
-
-			if ( val === undefined ) {
-				return win ? win[ prop ] : elem[ method ];
-			}
-
-			if ( win ) {
-				win.scrollTo(
-					!top ? val : win.pageXOffset,
-					top ? val : win.pageYOffset
-				);
-
-			} else {
-				elem[ method ] = val;
-			}
-		}, method, val, arguments.length );
-	};
-} );
-
-// Support: Safari <=7 - 9.1, Chrome <=37 - 49
-// Add the top/left cssHooks using jQuery.fn.position
-// Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084
-// Blink bug: https://bugs.chromium.org/p/chromium/issues/detail?id=589347
-// getComputedStyle returns percent when specified for top/left/bottom/right;
-// rather than make the css module depend on the offset module, just check for it here
-jQuery.each( [ "top", "left" ], function( i, prop ) {
-	jQuery.cssHooks[ prop ] = addGetHookIf( support.pixelPosition,
-		function( elem, computed ) {
-			if ( computed ) {
-				computed = curCSS( elem, prop );
-
-				// If curCSS returns percentage, fallback to offset
-				return rnumnonpx.test( computed ) ?
-					jQuery( elem ).position()[ prop ] + "px" :
-					computed;
-			}
-		}
-	);
-} );
-
-
-// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods
-jQuery.each( { Height: "height", Width: "width" }, function( name, type ) {
-	jQuery.each( { padding: "inner" + name, content: type, "": "outer" + name },
-		function( defaultExtra, funcName ) {
-
-		// Margin is only for outerHeight, outerWidth
-		jQuery.fn[ funcName ] = function( margin, value ) {
-			var chainable = arguments.length && ( defaultExtra || typeof margin !== "boolean" ),
-				extra = defaultExtra || ( margin === true || value === true ? "margin" : "border" );
-
-			return access( this, function( elem, type, value ) {
-				var doc;
-
-				if ( isWindow( elem ) ) {
-
-					// $( window ).outerWidth/Height return w/h including scrollbars (gh-1729)
-					return funcName.indexOf( "outer" ) === 0 ?
-						elem[ "inner" + name ] :
-						elem.document.documentElement[ "client" + name ];
-				}
-
-				// Get document width or height
-				if ( elem.nodeType === 9 ) {
-					doc = elem.documentElement;
-
-					// Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height],
-					// whichever is greatest
-					return Math.max(
-						elem.body[ "scroll" + name ], doc[ "scroll" + name ],
-						elem.body[ "offset" + name ], doc[ "offset" + name ],
-						doc[ "client" + name ]
-					);
-				}
-
-				return value === undefined ?
-
-					// Get width or height on the element, requesting but not forcing parseFloat
-					jQuery.css( elem, type, extra ) :
-
-					// Set width or height on the element
-					jQuery.style( elem, type, value, extra );
-			}, type, chainable ? margin : undefined, chainable );
-		};
-	} );
-} );
-
-
-jQuery.each( ( "blur focus focusin focusout resize scroll click dblclick " +
-	"mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " +
-	"change select submit keydown keypress keyup contextmenu" ).split( " " ),
-	function( i, name ) {
-
-	// Handle event binding
-	jQuery.fn[ name ] = function( data, fn ) {
-		return arguments.length > 0 ?
-			this.on( name, null, data, fn ) :
-			this.trigger( name );
-	};
-} );
-
-jQuery.fn.extend( {
-	hover: function( fnOver, fnOut ) {
-		return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );
-	}
-} );
-
-
-
-
-jQuery.fn.extend( {
-
-	bind: function( types, data, fn ) {
-		return this.on( types, null, data, fn );
-	},
-	unbind: function( types, fn ) {
-		return this.off( types, null, fn );
-	},
-
-	delegate: function( selector, types, data, fn ) {
-		return this.on( types, selector, data, fn );
-	},
-	undelegate: function( selector, types, fn ) {
-
-		// ( namespace ) or ( selector, types [, fn] )
-		return arguments.length === 1 ?
-			this.off( selector, "**" ) :
-			this.off( types, selector || "**", fn );
-	}
-} );
-
-// Bind a function to a context, optionally partially applying any
-// arguments.
-// jQuery.proxy is deprecated to promote standards (specifically Function#bind)
-// However, it is not slated for removal any time soon
-jQuery.proxy = function( fn, context ) {
-	var tmp, args, proxy;
-
-	if ( typeof context === "string" ) {
-		tmp = fn[ context ];
-		context = fn;
-		fn = tmp;
-	}
-
-	// Quick check to determine if target is callable, in the spec
-	// this throws a TypeError, but we will just return undefined.
-	if ( !isFunction( fn ) ) {
-		return undefined;
-	}
-
-	// Simulated bind
-	args = slice.call( arguments, 2 );
-	proxy = function() {
-		return fn.apply( context || this, args.concat( slice.call( arguments ) ) );
-	};
-
-	// Set the guid of unique handler to the same of original handler, so it can be removed
-	proxy.guid = fn.guid = fn.guid || jQuery.guid++;
-
-	return proxy;
-};
-
-jQuery.holdReady = function( hold ) {
-	if ( hold ) {
-		jQuery.readyWait++;
-	} else {
-		jQuery.ready( true );
-	}
-};
-jQuery.isArray = Array.isArray;
-jQuery.parseJSON = JSON.parse;
-jQuery.nodeName = nodeName;
-jQuery.isFunction = isFunction;
-jQuery.isWindow = isWindow;
-jQuery.camelCase = camelCase;
-jQuery.type = toType;
-
-jQuery.now = Date.now;
-
-jQuery.isNumeric = function( obj ) {
-
-	// As of jQuery 3.0, isNumeric is limited to
-	// strings and numbers (primitives or objects)
-	// that can be coerced to finite numbers (gh-2662)
-	var type = jQuery.type( obj );
-	return ( type === "number" || type === "string" ) &&
-
-		// parseFloat NaNs numeric-cast false positives ("")
-		// ...but misinterprets leading-number strings, particularly hex literals ("0x...")
-		// subtraction forces infinities to NaN
-		!isNaN( obj - parseFloat( obj ) );
-};
-
-
-
-
-// Register as a named AMD module, since jQuery can be concatenated with other
-// files that may use define, but not via a proper concatenation script that
-// understands anonymous AMD modules. A named AMD is safest and most robust
-// way to register. Lowercase jquery is used because AMD module names are
-// derived from file names, and jQuery is normally delivered in a lowercase
-// file name. Do this after creating the global so that if an AMD module wants
-// to call noConflict to hide this version of jQuery, it will work.
-
-// Note that for maximum portability, libraries that are not jQuery should
-// declare themselves as anonymous modules, and avoid setting a global if an
-// AMD loader is present. jQuery is a special case. For more information, see
-// https://github.com/jrburke/requirejs/wiki/Updating-existing-libraries#wiki-anon
-
-if ( typeof define === "function" && define.amd ) {
-	define( "jquery", [], function() {
-		return jQuery;
-	} );
-}
-
-
-
-
-var
-
-	// Map over jQuery in case of overwrite
-	_jQuery = window.jQuery,
-
-	// Map over the $ in case of overwrite
-	_$ = window.$;
-
-jQuery.noConflict = function( deep ) {
-	if ( window.$ === jQuery ) {
-		window.$ = _$;
-	}
-
-	if ( deep && window.jQuery === jQuery ) {
-		window.jQuery = _jQuery;
-	}
-
-	return jQuery;
-};
-
-// Expose jQuery and $ identifiers, even in AMD
-// (#7102#comment:10, https://github.com/jquery/jquery/pull/557)
-// and CommonJS for browser emulators (#13566)
-if ( !noGlobal ) {
-	window.jQuery = window.$ = jQuery;
-}
-
-
-
-
-return jQuery;
-} );
diff --git a/docs/_build/html/_static/jquery.js b/docs/_build/html/_static/jquery.js
deleted file mode 100644
index a1c07fd80..000000000
--- a/docs/_build/html/_static/jquery.js
+++ /dev/null
@@ -1,2 +0,0 @@
-/*! jQuery v3.4.1 | (c) JS Foundation and other contributors | jquery.org/license */
-!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(C,e){"use strict";var t=[],E=C.document,r=Object.getPrototypeOf,s=t.slice,g=t.concat,u=t.push,i=t.indexOf,n={},o=n.toString,v=n.hasOwnProperty,a=v.toString,l=a.call(Object),y={},m=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType},x=function(e){return null!=e&&e===e.window},c={type:!0,src:!0,nonce:!0,noModule:!0};function b(e,t,n){var r,i,o=(n=n||E).createElement("script");if(o.text=e,t)for(r in c)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function w(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[o.call(e)]||"object":typeof e}var f="3.4.1",k=function(e,t){return new k.fn.init(e,t)},p=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g;function d(e){var t=!!e&&"length"in e&&e.length,n=w(e);return!m(e)&&!x(e)&&("array"===n||0===t||"number"==typeof t&&0<t&&t-1 in e)}k.fn=k.prototype={jquery:f,constructor:k,length:0,toArray:function(){return s.call(this)},get:function(e){return null==e?s.call(this):e<0?this[e+this.length]:this[e]},pushStack:function(e){var t=k.merge(this.constructor(),e);return t.prevObject=this,t},each:function(e){return k.each(this,e)},map:function(n){return this.pushStack(k.map(this,function(e,t){return n.call(e,t,e)}))},slice:function(){return this.pushStack(s.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(e){var t=this.length,n=+e+(e<0?t:0);return this.pushStack(0<=n&&n<t?[this[n]]:[])},end:function(){return this.prevObject||this.constructor()},push:u,sort:t.sort,splice:t.splice},k.extend=k.fn.extend=function(){var e,t,n,r,i,o,a=arguments[0]||{},s=1,u=arguments.length,l=!1;for("boolean"==typeof a&&(l=a,a=arguments[s]||{},s++),"object"==typeof a||m(a)||(a={}),s===u&&(a=this,s--);s<u;s++)if(null!=(e=arguments[s]))for(t in e)r=e[t],"__proto__"!==t&&a!==r&&(l&&r&&(k.isPlainObject(r)||(i=Array.isArray(r)))?(n=a[t],o=i&&!Array.isArray(n)?[]:i||k.isPlainObject(n)?n:{},i=!1,a[t]=k.extend(l,o,r)):void 0!==r&&(a[t]=r));return a},k.extend({expando:"jQuery"+(f+Math.random()).replace(/\D/g,""),isReady:!0,error:function(e){throw new Error(e)},noop:function(){},isPlainObject:function(e){var t,n;return!(!e||"[object Object]"!==o.call(e))&&(!(t=r(e))||"function"==typeof(n=v.call(t,"constructor")&&t.constructor)&&a.call(n)===l)},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},globalEval:function(e,t){b(e,{nonce:t&&t.nonce})},each:function(e,t){var n,r=0;if(d(e)){for(n=e.length;r<n;r++)if(!1===t.call(e[r],r,e[r]))break}else for(r in e)if(!1===t.call(e[r],r,e[r]))break;return e},trim:function(e){return null==e?"":(e+"").replace(p,"")},makeArray:function(e,t){var n=t||[];return null!=e&&(d(Object(e))?k.merge(n,"string"==typeof e?[e]:e):u.call(n,e)),n},inArray:function(e,t,n){return null==t?-1:i.call(t,e,n)},merge:function(e,t){for(var n=+t.length,r=0,i=e.length;r<n;r++)e[i++]=t[r];return e.length=i,e},grep:function(e,t,n){for(var r=[],i=0,o=e.length,a=!n;i<o;i++)!t(e[i],i)!==a&&r.push(e[i]);return r},map:function(e,t,n){var r,i,o=0,a=[];if(d(e))for(r=e.length;o<r;o++)null!=(i=t(e[o],o,n))&&a.push(i);else for(o in e)null!=(i=t(e[o],o,n))&&a.push(i);return g.apply([],a)},guid:1,support:y}),"function"==typeof Symbol&&(k.fn[Symbol.iterator]=t[Symbol.iterator]),k.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "),function(e,t){n["[object "+t+"]"]=t.toLowerCase()});var h=function(n){var e,d,b,o,i,h,f,g,w,u,l,T,C,a,E,v,s,c,y,k="sizzle"+1*new Date,m=n.document,S=0,r=0,p=ue(),x=ue(),N=ue(),A=ue(),D=function(e,t){return e===t&&(l=!0),0},j={}.hasOwnProperty,t=[],q=t.pop,L=t.push,H=t.push,O=t.slice,P=function(e,t){for(var n=0,r=e.length;n<r;n++)if(e[n]===t)return n;return-1},R="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",M="[\\x20\\t\\r\\n\\f]",I="(?:\\\\.|[\\w-]|[^\0-\\xa0])+",W="\\["+M+"*("+I+")(?:"+M+"*([*^$|!~]?=)"+M+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+I+"))|)"+M+"*\\]",$=":("+I+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+W+")*)|.*)\\)|)",F=new RegExp(M+"+","g"),B=new RegExp("^"+M+"+|((?:^|[^\\\\])(?:\\\\.)*)"+M+"+$","g"),_=new RegExp("^"+M+"*,"+M+"*"),z=new RegExp("^"+M+"*([>+~]|"+M+")"+M+"*"),U=new RegExp(M+"|>"),X=new RegExp($),V=new RegExp("^"+I+"$"),G={ID:new RegExp("^#("+I+")"),CLASS:new RegExp("^\\.("+I+")"),TAG:new RegExp("^("+I+"|[*])"),ATTR:new RegExp("^"+W),PSEUDO:new RegExp("^"+$),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+R+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/HTML$/i,Q=/^(?:input|select|textarea|button)$/i,J=/^h\d$/i,K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\([\\da-f]{1,6}"+M+"?|("+M+")|.)","ig"),ne=function(e,t,n){var r="0x"+t-65536;return r!=r||n?t:r<0?String.fromCharCode(r+65536):String.fromCharCode(r>>10|55296,1023&r|56320)},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ie=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},oe=function(){T()},ae=be(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{H.apply(t=O.call(m.childNodes),m.childNodes),t[m.childNodes.length].nodeType}catch(e){H={apply:t.length?function(e,t){L.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&((e?e.ownerDocument||e:m)!==C&&T(e),e=e||C,E)){if(11!==p&&(u=Z.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(f&&(a=f.getElementById(i))&&y(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return H.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&d.getElementsByClassName&&e.getElementsByClassName)return H.apply(n,e.getElementsByClassName(i)),n}if(d.qsa&&!A[t+" "]&&(!v||!v.test(t))&&(1!==p||"object"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===p&&U.test(t)){(s=e.getAttribute("id"))?s=s.replace(re,ie):e.setAttribute("id",s=k),o=(l=h(t)).length;while(o--)l[o]="#"+s+" "+xe(l[o]);c=l.join(","),f=ee.test(t)&&ye(e.parentNode)||e}try{return H.apply(n,f.querySelectorAll(c)),n}catch(e){A(t,!0)}finally{s===k&&e.removeAttribute("id")}}}return g(t.replace(B,"$1"),e,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function le(e){return e[k]=!0,e}function ce(e){var t=C.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){var n=e.split("|"),r=n.length;while(r--)b.attrHandle[n[r]]=t}function pe(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function de(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function ge(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ae(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function ve(a){return le(function(o){return o=+o,le(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function ye(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}for(e in d=se.support={},i=se.isXML=function(e){var t=e.namespaceURI,n=(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||"HTML")},T=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:m;return r!==C&&9===r.nodeType&&r.documentElement&&(a=(C=r).documentElement,E=!i(C),m!==C&&(n=C.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",oe,!1):n.attachEvent&&n.attachEvent("onunload",oe)),d.attributes=ce(function(e){return e.className="i",!e.getAttribute("className")}),d.getElementsByTagName=ce(function(e){return e.appendChild(C.createComment("")),!e.getElementsByTagName("*").length}),d.getElementsByClassName=K.test(C.getElementsByClassName),d.getById=ce(function(e){return a.appendChild(e).id=k,!C.getElementsByName||!C.getElementsByName(k).length}),d.getById?(b.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=d.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):d.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},b.find.CLASS=d.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&E)return t.getElementsByClassName(e)},s=[],v=[],(d.qsa=K.test(C.querySelectorAll))&&(ce(function(e){a.appendChild(e).innerHTML="<a id='"+k+"'></a><select id='"+k+"-\r\\' msallowcapture=''><option selected=''></option></select>",e.querySelectorAll("[msallowcapture^='']").length&&v.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||v.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll("[id~="+k+"-]").length||v.push("~="),e.querySelectorAll(":checked").length||v.push(":checked"),e.querySelectorAll("a#"+k+"+*").length||v.push(".#.+[+~]")}),ce(function(e){e.innerHTML="<a href='' disabled='disabled'></a><select disabled='disabled'><option/></select>";var t=C.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&v.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&v.push(":enabled",":disabled"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&v.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),v.push(",.*:")})),(d.matchesSelector=K.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){d.disconnectedMatch=c.call(e,"*"),c.call(e,"[s!='']:x"),s.push("!=",$)}),v=v.length&&new RegExp(v.join("|")),s=s.length&&new RegExp(s.join("|")),t=K.test(a.compareDocumentPosition),y=t||K.test(a.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},D=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)===(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!d.sortDetached&&t.compareDocumentPosition(e)===n?e===C||e.ownerDocument===m&&y(m,e)?-1:t===C||t.ownerDocument===m&&y(m,t)?1:u?P(u,e)-P(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e===C?-1:t===C?1:i?-1:o?1:u?P(u,e)-P(u,t):0;if(i===o)return pe(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?pe(a[r],s[r]):a[r]===m?-1:s[r]===m?1:0}),C},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if((e.ownerDocument||e)!==C&&T(e),d.matchesSelector&&E&&!A[t+" "]&&(!s||!s.test(t))&&(!v||!v.test(t)))try{var n=c.call(e,t);if(n||d.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){A(t,!0)}return 0<se(t,C,null,[e]).length},se.contains=function(e,t){return(e.ownerDocument||e)!==C&&T(e),y(e,t)},se.attr=function(e,t){(e.ownerDocument||e)!==C&&T(e);var n=b.attrHandle[t.toLowerCase()],r=n&&j.call(b.attrHandle,t.toLowerCase())?n(e,t,!E):void 0;return void 0!==r?r:d.attributes||!E?e.getAttribute(t):(r=e.getAttributeNode(t))&&r.specified?r.value:null},se.escape=function(e){return(e+"").replace(re,ie)},se.error=function(e){throw new Error("Syntax error, unrecognized expression: "+e)},se.uniqueSort=function(e){var t,n=[],r=0,i=0;if(l=!d.detectDuplicates,u=!d.sortStable&&e.slice(0),e.sort(D),l){while(t=e[i++])t===e[i]&&(r=n.push(i));while(r--)e.splice(n[r],1)}return u=null,e},o=se.getText=function(e){var t,n="",r=0,i=e.nodeType;if(i){if(1===i||9===i||11===i){if("string"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=o(e)}else if(3===i||4===i)return e.nodeValue}else while(t=e[r++])n+=o(t);return n},(b=se.selectors={cacheLength:50,createPseudo:le,match:G,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return G.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=h(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=p[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&p(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1<t.indexOf(i):"$="===r?i&&t.slice(-i.length)===i:"~="===r?-1<(" "+t.replace(F," ")+" ").indexOf(i):"|="===r&&(t===i||t.slice(0,i.length+1)===i+"-"))}},CHILD:function(h,e,t,g,v){var y="nth"!==h.slice(0,3),m="last"!==h.slice(-4),x="of-type"===e;return 1===g&&0===v?function(e){return!!e.parentNode}:function(e,t,n){var r,i,o,a,s,u,l=y!==m?"nextSibling":"previousSibling",c=e.parentNode,f=x&&e.nodeName.toLowerCase(),p=!n&&!x,d=!1;if(c){if(y){while(l){a=e;while(a=a[l])if(x?a.nodeName.toLowerCase()===f:1===a.nodeType)return!1;u=l="only"===h&&!u&&"nextSibling"}return!0}if(u=[m?c.firstChild:c.lastChild],m&&p){d=(s=(r=(i=(o=(a=c)[k]||(a[k]={}))[a.uniqueID]||(o[a.uniqueID]={}))[h]||[])[0]===S&&r[1])&&r[2],a=s&&c.childNodes[s];while(a=++s&&a&&a[l]||(d=s=0)||u.pop())if(1===a.nodeType&&++d&&a===e){i[h]=[S,s,d];break}}else if(p&&(d=s=(r=(i=(o=(a=e)[k]||(a[k]={}))[a.uniqueID]||(o[a.uniqueID]={}))[h]||[])[0]===S&&r[1]),!1===d)while(a=++s&&a&&a[l]||(d=s=0)||u.pop())if((x?a.nodeName.toLowerCase()===f:1===a.nodeType)&&++d&&(p&&((i=(o=a[k]||(a[k]={}))[a.uniqueID]||(o[a.uniqueID]={}))[h]=[S,d]),a===e))break;return(d-=v)===g||d%g==0&&0<=d/g}}},PSEUDO:function(e,o){var t,a=b.pseudos[e]||b.setFilters[e.toLowerCase()]||se.error("unsupported pseudo: "+e);return a[k]?a(o):1<a.length?(t=[e,e,"",o],b.setFilters.hasOwnProperty(e.toLowerCase())?le(function(e,t){var n,r=a(e,o),i=r.length;while(i--)e[n=P(e,r[i])]=!(t[n]=r[i])}):function(e){return a(e,0,t)}):a}},pseudos:{not:le(function(e){var r=[],i=[],s=f(e.replace(B,"$1"));return s[k]?le(function(e,t,n,r){var i,o=s(e,null,r,[]),a=e.length;while(a--)(i=o[a])&&(e[a]=!(t[a]=i))}):function(e,t,n){return r[0]=e,s(r,null,n,i),r[0]=null,!i.pop()}}),has:le(function(t){return function(e){return 0<se(t,e).length}}),contains:le(function(t){return t=t.replace(te,ne),function(e){return-1<(e.textContent||o(e)).indexOf(t)}}),lang:le(function(n){return V.test(n||"")||se.error("unsupported lang: "+n),n=n.replace(te,ne).toLowerCase(),function(e){var t;do{if(t=E?e.lang:e.getAttribute("xml:lang")||e.getAttribute("lang"))return(t=t.toLowerCase())===n||0===t.indexOf(n+"-")}while((e=e.parentNode)&&1===e.nodeType);return!1}}),target:function(e){var t=n.location&&n.location.hash;return t&&t.slice(1)===e.id},root:function(e){return e===a},focus:function(e){return e===C.activeElement&&(!C.hasFocus||C.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:ge(!1),disabled:ge(!0),checked:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&!!e.checked||"option"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,!0===e.selected},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeType<6)return!1;return!0},parent:function(e){return!b.pseudos.empty(e)},header:function(e){return J.test(e.nodeName)},input:function(e){return Q.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&"button"===e.type||"button"===t},text:function(e){var t;return"input"===e.nodeName.toLowerCase()&&"text"===e.type&&(null==(t=e.getAttribute("type"))||"text"===t.toLowerCase())},first:ve(function(){return[0]}),last:ve(function(e,t){return[t-1]}),eq:ve(function(e,t,n){return[n<0?n+t:n]}),even:ve(function(e,t){for(var n=0;n<t;n+=2)e.push(n);return e}),odd:ve(function(e,t){for(var n=1;n<t;n+=2)e.push(n);return e}),lt:ve(function(e,t,n){for(var r=n<0?n+t:t<n?t:n;0<=--r;)e.push(r);return e}),gt:ve(function(e,t,n){for(var r=n<0?n+t:n;++r<t;)e.push(r);return e})}}).pseudos.nth=b.pseudos.eq,{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})b.pseudos[e]=de(e);for(e in{submit:!0,reset:!0})b.pseudos[e]=he(e);function me(){}function xe(e){for(var t=0,n=e.length,r="";t<n;t++)r+=e[t].value;return r}function be(s,e,t){var u=e.dir,l=e.next,c=l||u,f=t&&"parentNode"===c,p=r++;return e.first?function(e,t,n){while(e=e[u])if(1===e.nodeType||f)return s(e,t,n);return!1}:function(e,t,n){var r,i,o,a=[S,p];if(n){while(e=e[u])if((1===e.nodeType||f)&&s(e,t,n))return!0}else while(e=e[u])if(1===e.nodeType||f)if(i=(o=e[k]||(e[k]={}))[e.uniqueID]||(o[e.uniqueID]={}),l&&l===e.nodeName.toLowerCase())e=e[u]||e;else{if((r=i[c])&&r[0]===S&&r[1]===p)return a[2]=r[2];if((i[c]=a)[2]=s(e,t,n))return!0}return!1}}function we(i){return 1<i.length?function(e,t,n){var r=i.length;while(r--)if(!i[r](e,t,n))return!1;return!0}:i[0]}function Te(e,t,n,r,i){for(var o,a=[],s=0,u=e.length,l=null!=t;s<u;s++)(o=e[s])&&(n&&!n(o,r,i)||(a.push(o),l&&t.push(s)));return a}function Ce(d,h,g,v,y,e){return v&&!v[k]&&(v=Ce(v)),y&&!y[k]&&(y=Ce(y,e)),le(function(e,t,n,r){var i,o,a,s=[],u=[],l=t.length,c=e||function(e,t,n){for(var r=0,i=t.length;r<i;r++)se(e,t[r],n);return n}(h||"*",n.nodeType?[n]:n,[]),f=!d||!e&&h?c:Te(c,s,d,n,r),p=g?y||(e?d:l||v)?[]:t:f;if(g&&g(f,p,n,r),v){i=Te(p,u),v(i,[],n,r),o=i.length;while(o--)(a=i[o])&&(p[u[o]]=!(f[u[o]]=a))}if(e){if(y||d){if(y){i=[],o=p.length;while(o--)(a=p[o])&&i.push(f[o]=a);y(null,p=[],i,r)}o=p.length;while(o--)(a=p[o])&&-1<(i=y?P(e,a):s[o])&&(e[i]=!(t[i]=a))}}else p=Te(p===t?p.splice(l,p.length):p),y?y(null,t,p,r):H.apply(t,p)})}function Ee(e){for(var i,t,n,r=e.length,o=b.relative[e[0].type],a=o||b.relative[" "],s=o?1:0,u=be(function(e){return e===i},a,!0),l=be(function(e){return-1<P(i,e)},a,!0),c=[function(e,t,n){var r=!o&&(n||t!==w)||((i=t).nodeType?u(e,t,n):l(e,t,n));return i=null,r}];s<r;s++)if(t=b.relative[e[s].type])c=[be(we(c),t)];else{if((t=b.filter[e[s].type].apply(null,e[s].matches))[k]){for(n=++s;n<r;n++)if(b.relative[e[n].type])break;return Ce(1<s&&we(c),1<s&&xe(e.slice(0,s-1).concat({value:" "===e[s-2].type?"*":""})).replace(B,"$1"),t,s<n&&Ee(e.slice(s,n)),n<r&&Ee(e=e.slice(n)),n<r&&xe(e))}c.push(t)}return we(c)}return me.prototype=b.filters=b.pseudos,b.setFilters=new me,h=se.tokenize=function(e,t){var n,r,i,o,a,s,u,l=x[e+" "];if(l)return t?0:l.slice(0);a=e,s=[],u=b.preFilter;while(a){for(o in n&&!(r=_.exec(a))||(r&&(a=a.slice(r[0].length)||a),s.push(i=[])),n=!1,(r=z.exec(a))&&(n=r.shift(),i.push({value:n,type:r[0].replace(B," ")}),a=a.slice(n.length)),b.filter)!(r=G[o].exec(a))||u[o]&&!(r=u[o](r))||(n=r.shift(),i.push({value:n,type:o,matches:r}),a=a.slice(n.length));if(!n)break}return t?a.length:a?se.error(e):x(e,s).slice(0)},f=se.compile=function(e,t){var n,v,y,m,x,r,i=[],o=[],a=N[e+" "];if(!a){t||(t=h(e)),n=t.length;while(n--)(a=Ee(t[n]))[k]?i.push(a):o.push(a);(a=N(e,(v=o,m=0<(y=i).length,x=0<v.length,r=function(e,t,n,r,i){var o,a,s,u=0,l="0",c=e&&[],f=[],p=w,d=e||x&&b.find.TAG("*",i),h=S+=null==p?1:Math.random()||.1,g=d.length;for(i&&(w=t===C||t||i);l!==g&&null!=(o=d[l]);l++){if(x&&o){a=0,t||o.ownerDocument===C||(T(o),n=!E);while(s=v[a++])if(s(o,t||C,n)){r.push(o);break}i&&(S=h)}m&&((o=!s&&o)&&u--,e&&c.push(o))}if(u+=l,m&&l!==u){a=0;while(s=y[a++])s(c,f,t,n);if(e){if(0<u)while(l--)c[l]||f[l]||(f[l]=q.call(r));f=Te(f)}H.apply(r,f),i&&!e&&0<f.length&&1<u+y.length&&se.uniqueSort(r)}return i&&(S=h,w=p),c},m?le(r):r))).selector=e}return a},g=se.select=function(e,t,n,r){var i,o,a,s,u,l="function"==typeof e&&e,c=!r&&h(e=l.selector||e);if(n=n||[],1===c.length){if(2<(o=c[0]=c[0].slice(0)).length&&"ID"===(a=o[0]).type&&9===t.nodeType&&E&&b.relative[o[1].type]){if(!(t=(b.find.ID(a.matches[0].replace(te,ne),t)||[])[0]))return n;l&&(t=t.parentNode),e=e.slice(o.shift().value.length)}i=G.needsContext.test(e)?0:o.length;while(i--){if(a=o[i],b.relative[s=a.type])break;if((u=b.find[s])&&(r=u(a.matches[0].replace(te,ne),ee.test(o[0].type)&&ye(t.parentNode)||t))){if(o.splice(i,1),!(e=r.length&&xe(o)))return H.apply(n,r),n;break}}}return(l||f(e,c))(r,t,!E,n,!t||ee.test(e)&&ye(t.parentNode)||t),n},d.sortStable=k.split("").sort(D).join("")===k,d.detectDuplicates=!!l,T(),d.sortDetached=ce(function(e){return 1&e.compareDocumentPosition(C.createElement("fieldset"))}),ce(function(e){return e.innerHTML="<a href='#'></a>","#"===e.firstChild.getAttribute("href")})||fe("type|href|height|width",function(e,t,n){if(!n)return e.getAttribute(t,"type"===t.toLowerCase()?1:2)}),d.attributes&&ce(function(e){return e.innerHTML="<input/>",e.firstChild.setAttribute("value",""),""===e.firstChild.getAttribute("value")})||fe("value",function(e,t,n){if(!n&&"input"===e.nodeName.toLowerCase())return e.defaultValue}),ce(function(e){return null==e.getAttribute("disabled")})||fe(R,function(e,t,n){var r;if(!n)return!0===e[t]?t.toLowerCase():(r=e.getAttributeNode(t))&&r.specified?r.value:null}),se}(C);k.find=h,k.expr=h.selectors,k.expr[":"]=k.expr.pseudos,k.uniqueSort=k.unique=h.uniqueSort,k.text=h.getText,k.isXMLDoc=h.isXML,k.contains=h.contains,k.escapeSelector=h.escape;var T=function(e,t,n){var r=[],i=void 0!==n;while((e=e[t])&&9!==e.nodeType)if(1===e.nodeType){if(i&&k(e).is(n))break;r.push(e)}return r},S=function(e,t){for(var n=[];e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n},N=k.expr.match.needsContext;function A(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()}var D=/^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function j(e,n,r){return m(n)?k.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?k.grep(e,function(e){return e===n!==r}):"string"!=typeof n?k.grep(e,function(e){return-1<i.call(n,e)!==r}):k.filter(n,e,r)}k.filter=function(e,t,n){var r=t[0];return n&&(e=":not("+e+")"),1===t.length&&1===r.nodeType?k.find.matchesSelector(r,e)?[r]:[]:k.find.matches(e,k.grep(t,function(e){return 1===e.nodeType}))},k.fn.extend({find:function(e){var t,n,r=this.length,i=this;if("string"!=typeof e)return this.pushStack(k(e).filter(function(){for(t=0;t<r;t++)if(k.contains(i[t],this))return!0}));for(n=this.pushStack([]),t=0;t<r;t++)k.find(e,i[t],n);return 1<r?k.uniqueSort(n):n},filter:function(e){return this.pushStack(j(this,e||[],!1))},not:function(e){return this.pushStack(j(this,e||[],!0))},is:function(e){return!!j(this,"string"==typeof e&&N.test(e)?k(e):e||[],!1).length}});var q,L=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/;(k.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||q,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:L.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof k?t[0]:t,k.merge(this,k.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:E,!0)),D.test(r[1])&&k.isPlainObject(t))for(r in t)m(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=E.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):m(e)?void 0!==n.ready?n.ready(e):e(k):k.makeArray(e,this)}).prototype=k.fn,q=k(E);var H=/^(?:parents|prev(?:Until|All))/,O={children:!0,contents:!0,next:!0,prev:!0};function P(e,t){while((e=e[t])&&1!==e.nodeType);return e}k.fn.extend({has:function(e){var t=k(e,this),n=t.length;return this.filter(function(){for(var e=0;e<n;e++)if(k.contains(this,t[e]))return!0})},closest:function(e,t){var n,r=0,i=this.length,o=[],a="string"!=typeof e&&k(e);if(!N.test(e))for(;r<i;r++)for(n=this[r];n&&n!==t;n=n.parentNode)if(n.nodeType<11&&(a?-1<a.index(n):1===n.nodeType&&k.find.matchesSelector(n,e))){o.push(n);break}return this.pushStack(1<o.length?k.uniqueSort(o):o)},index:function(e){return e?"string"==typeof e?i.call(k(e),this[0]):i.call(this,e.jquery?e[0]:e):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){return this.pushStack(k.uniqueSort(k.merge(this.get(),k(e,t))))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}}),k.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return T(e,"parentNode")},parentsUntil:function(e,t,n){return T(e,"parentNode",n)},next:function(e){return P(e,"nextSibling")},prev:function(e){return P(e,"previousSibling")},nextAll:function(e){return T(e,"nextSibling")},prevAll:function(e){return T(e,"previousSibling")},nextUntil:function(e,t,n){return T(e,"nextSibling",n)},prevUntil:function(e,t,n){return T(e,"previousSibling",n)},siblings:function(e){return S((e.parentNode||{}).firstChild,e)},children:function(e){return S(e.firstChild)},contents:function(e){return"undefined"!=typeof e.contentDocument?e.contentDocument:(A(e,"template")&&(e=e.content||e),k.merge([],e.childNodes))}},function(r,i){k.fn[r]=function(e,t){var n=k.map(this,i,e);return"Until"!==r.slice(-5)&&(t=e),t&&"string"==typeof t&&(n=k.filter(t,n)),1<this.length&&(O[r]||k.uniqueSort(n),H.test(r)&&n.reverse()),this.pushStack(n)}});var R=/[^\x20\t\r\n\f]+/g;function M(e){return e}function I(e){throw e}function W(e,t,n,r){var i;try{e&&m(i=e.promise)?i.call(e).done(t).fail(n):e&&m(i=e.then)?i.call(e,t,n):t.apply(void 0,[e].slice(r))}catch(e){n.apply(void 0,[e])}}k.Callbacks=function(r){var e,n;r="string"==typeof r?(e=r,n={},k.each(e.match(R)||[],function(e,t){n[t]=!0}),n):k.extend({},r);var i,t,o,a,s=[],u=[],l=-1,c=function(){for(a=a||r.once,o=i=!0;u.length;l=-1){t=u.shift();while(++l<s.length)!1===s[l].apply(t[0],t[1])&&r.stopOnFalse&&(l=s.length,t=!1)}r.memory||(t=!1),i=!1,a&&(s=t?[]:"")},f={add:function(){return s&&(t&&!i&&(l=s.length-1,u.push(t)),function n(e){k.each(e,function(e,t){m(t)?r.unique&&f.has(t)||s.push(t):t&&t.length&&"string"!==w(t)&&n(t)})}(arguments),t&&!i&&c()),this},remove:function(){return k.each(arguments,function(e,t){var n;while(-1<(n=k.inArray(t,s,n)))s.splice(n,1),n<=l&&l--}),this},has:function(e){return e?-1<k.inArray(e,s):0<s.length},empty:function(){return s&&(s=[]),this},disable:function(){return a=u=[],s=t="",this},disabled:function(){return!s},lock:function(){return a=u=[],t||i||(s=t=""),this},locked:function(){return!!a},fireWith:function(e,t){return a||(t=[e,(t=t||[]).slice?t.slice():t],u.push(t),i||c()),this},fire:function(){return f.fireWith(this,arguments),this},fired:function(){return!!o}};return f},k.extend({Deferred:function(e){var o=[["notify","progress",k.Callbacks("memory"),k.Callbacks("memory"),2],["resolve","done",k.Callbacks("once memory"),k.Callbacks("once memory"),0,"resolved"],["reject","fail",k.Callbacks("once memory"),k.Callbacks("once memory"),1,"rejected"]],i="pending",a={state:function(){return i},always:function(){return s.done(arguments).fail(arguments),this},"catch":function(e){return a.then(null,e)},pipe:function(){var i=arguments;return k.Deferred(function(r){k.each(o,function(e,t){var n=m(i[t[4]])&&i[t[4]];s[t[1]](function(){var e=n&&n.apply(this,arguments);e&&m(e.promise)?e.promise().progress(r.notify).done(r.resolve).fail(r.reject):r[t[0]+"With"](this,n?[e]:arguments)})}),i=null}).promise()},then:function(t,n,r){var u=0;function l(i,o,a,s){return function(){var n=this,r=arguments,e=function(){var e,t;if(!(i<u)){if((e=a.apply(n,r))===o.promise())throw new TypeError("Thenable self-resolution");t=e&&("object"==typeof e||"function"==typeof e)&&e.then,m(t)?s?t.call(e,l(u,o,M,s),l(u,o,I,s)):(u++,t.call(e,l(u,o,M,s),l(u,o,I,s),l(u,o,M,o.notifyWith))):(a!==M&&(n=void 0,r=[e]),(s||o.resolveWith)(n,r))}},t=s?e:function(){try{e()}catch(e){k.Deferred.exceptionHook&&k.Deferred.exceptionHook(e,t.stackTrace),u<=i+1&&(a!==I&&(n=void 0,r=[e]),o.rejectWith(n,r))}};i?t():(k.Deferred.getStackHook&&(t.stackTrace=k.Deferred.getStackHook()),C.setTimeout(t))}}return k.Deferred(function(e){o[0][3].add(l(0,e,m(r)?r:M,e.notifyWith)),o[1][3].add(l(0,e,m(t)?t:M)),o[2][3].add(l(0,e,m(n)?n:I))}).promise()},promise:function(e){return null!=e?k.extend(e,a):a}},s={};return k.each(o,function(e,t){var n=t[2],r=t[5];a[t[1]]=n.add,r&&n.add(function(){i=r},o[3-e][2].disable,o[3-e][3].disable,o[0][2].lock,o[0][3].lock),n.add(t[3].fire),s[t[0]]=function(){return s[t[0]+"With"](this===s?void 0:this,arguments),this},s[t[0]+"With"]=n.fireWith}),a.promise(s),e&&e.call(s,s),s},when:function(e){var n=arguments.length,t=n,r=Array(t),i=s.call(arguments),o=k.Deferred(),a=function(t){return function(e){r[t]=this,i[t]=1<arguments.length?s.call(arguments):e,--n||o.resolveWith(r,i)}};if(n<=1&&(W(e,o.done(a(t)).resolve,o.reject,!n),"pending"===o.state()||m(i[t]&&i[t].then)))return o.then();while(t--)W(i[t],a(t),o.reject);return o.promise()}});var $=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;k.Deferred.exceptionHook=function(e,t){C.console&&C.console.warn&&e&&$.test(e.name)&&C.console.warn("jQuery.Deferred exception: "+e.message,e.stack,t)},k.readyException=function(e){C.setTimeout(function(){throw e})};var F=k.Deferred();function B(){E.removeEventListener("DOMContentLoaded",B),C.removeEventListener("load",B),k.ready()}k.fn.ready=function(e){return F.then(e)["catch"](function(e){k.readyException(e)}),this},k.extend({isReady:!1,readyWait:1,ready:function(e){(!0===e?--k.readyWait:k.isReady)||(k.isReady=!0)!==e&&0<--k.readyWait||F.resolveWith(E,[k])}}),k.ready.then=F.then,"complete"===E.readyState||"loading"!==E.readyState&&!E.documentElement.doScroll?C.setTimeout(k.ready):(E.addEventListener("DOMContentLoaded",B),C.addEventListener("load",B));var _=function(e,t,n,r,i,o,a){var s=0,u=e.length,l=null==n;if("object"===w(n))for(s in i=!0,n)_(e,t,s,n[s],!0,o,a);else if(void 0!==r&&(i=!0,m(r)||(a=!0),l&&(a?(t.call(e,r),t=null):(l=t,t=function(e,t,n){return l.call(k(e),n)})),t))for(;s<u;s++)t(e[s],n,a?r:r.call(e[s],s,t(e[s],n)));return i?e:l?t.call(e):u?t(e[0],n):o},z=/^-ms-/,U=/-([a-z])/g;function X(e,t){return t.toUpperCase()}function V(e){return e.replace(z,"ms-").replace(U,X)}var G=function(e){return 1===e.nodeType||9===e.nodeType||!+e.nodeType};function Y(){this.expando=k.expando+Y.uid++}Y.uid=1,Y.prototype={cache:function(e){var t=e[this.expando];return t||(t={},G(e)&&(e.nodeType?e[this.expando]=t:Object.defineProperty(e,this.expando,{value:t,configurable:!0}))),t},set:function(e,t,n){var r,i=this.cache(e);if("string"==typeof t)i[V(t)]=n;else for(r in t)i[V(r)]=t[r];return i},get:function(e,t){return void 0===t?this.cache(e):e[this.expando]&&e[this.expando][V(t)]},access:function(e,t,n){return void 0===t||t&&"string"==typeof t&&void 0===n?this.get(e,t):(this.set(e,t,n),void 0!==n?n:t)},remove:function(e,t){var n,r=e[this.expando];if(void 0!==r){if(void 0!==t){n=(t=Array.isArray(t)?t.map(V):(t=V(t))in r?[t]:t.match(R)||[]).length;while(n--)delete r[t[n]]}(void 0===t||k.isEmptyObject(r))&&(e.nodeType?e[this.expando]=void 0:delete e[this.expando])}},hasData:function(e){var t=e[this.expando];return void 0!==t&&!k.isEmptyObject(t)}};var Q=new Y,J=new Y,K=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,Z=/[A-Z]/g;function ee(e,t,n){var r,i;if(void 0===n&&1===e.nodeType)if(r="data-"+t.replace(Z,"-$&").toLowerCase(),"string"==typeof(n=e.getAttribute(r))){try{n="true"===(i=n)||"false"!==i&&("null"===i?null:i===+i+""?+i:K.test(i)?JSON.parse(i):i)}catch(e){}J.set(e,t,n)}else n=void 0;return n}k.extend({hasData:function(e){return J.hasData(e)||Q.hasData(e)},data:function(e,t,n){return J.access(e,t,n)},removeData:function(e,t){J.remove(e,t)},_data:function(e,t,n){return Q.access(e,t,n)},_removeData:function(e,t){Q.remove(e,t)}}),k.fn.extend({data:function(n,e){var t,r,i,o=this[0],a=o&&o.attributes;if(void 0===n){if(this.length&&(i=J.get(o),1===o.nodeType&&!Q.get(o,"hasDataAttrs"))){t=a.length;while(t--)a[t]&&0===(r=a[t].name).indexOf("data-")&&(r=V(r.slice(5)),ee(o,r,i[r]));Q.set(o,"hasDataAttrs",!0)}return i}return"object"==typeof n?this.each(function(){J.set(this,n)}):_(this,function(e){var t;if(o&&void 0===e)return void 0!==(t=J.get(o,n))?t:void 0!==(t=ee(o,n))?t:void 0;this.each(function(){J.set(this,n,e)})},null,e,1<arguments.length,null,!0)},removeData:function(e){return this.each(function(){J.remove(this,e)})}}),k.extend({queue:function(e,t,n){var r;if(e)return t=(t||"fx")+"queue",r=Q.get(e,t),n&&(!r||Array.isArray(n)?r=Q.access(e,t,k.makeArray(n)):r.push(n)),r||[]},dequeue:function(e,t){t=t||"fx";var n=k.queue(e,t),r=n.length,i=n.shift(),o=k._queueHooks(e,t);"inprogress"===i&&(i=n.shift(),r--),i&&("fx"===t&&n.unshift("inprogress"),delete o.stop,i.call(e,function(){k.dequeue(e,t)},o)),!r&&o&&o.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return Q.get(e,n)||Q.access(e,n,{empty:k.Callbacks("once memory").add(function(){Q.remove(e,[t+"queue",n])})})}}),k.fn.extend({queue:function(t,n){var e=2;return"string"!=typeof t&&(n=t,t="fx",e--),arguments.length<e?k.queue(this[0],t):void 0===n?this:this.each(function(){var e=k.queue(this,t,n);k._queueHooks(this,t),"fx"===t&&"inprogress"!==e[0]&&k.dequeue(this,t)})},dequeue:function(e){return this.each(function(){k.dequeue(this,e)})},clearQueue:function(e){return this.queue(e||"fx",[])},promise:function(e,t){var n,r=1,i=k.Deferred(),o=this,a=this.length,s=function(){--r||i.resolveWith(o,[o])};"string"!=typeof e&&(t=e,e=void 0),e=e||"fx";while(a--)(n=Q.get(o[a],e+"queueHooks"))&&n.empty&&(r++,n.empty.add(s));return s(),i.promise(t)}});var te=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,ne=new RegExp("^(?:([+-])=|)("+te+")([a-z%]*)$","i"),re=["Top","Right","Bottom","Left"],ie=E.documentElement,oe=function(e){return k.contains(e.ownerDocument,e)},ae={composed:!0};ie.getRootNode&&(oe=function(e){return k.contains(e.ownerDocument,e)||e.getRootNode(ae)===e.ownerDocument});var se=function(e,t){return"none"===(e=t||e).style.display||""===e.style.display&&oe(e)&&"none"===k.css(e,"display")},ue=function(e,t,n,r){var i,o,a={};for(o in t)a[o]=e.style[o],e.style[o]=t[o];for(o in i=n.apply(e,r||[]),t)e.style[o]=a[o];return i};function le(e,t,n,r){var i,o,a=20,s=r?function(){return r.cur()}:function(){return k.css(e,t,"")},u=s(),l=n&&n[3]||(k.cssNumber[t]?"":"px"),c=e.nodeType&&(k.cssNumber[t]||"px"!==l&&+u)&&ne.exec(k.css(e,t));if(c&&c[3]!==l){u/=2,l=l||c[3],c=+u||1;while(a--)k.style(e,t,c+l),(1-o)*(1-(o=s()/u||.5))<=0&&(a=0),c/=o;c*=2,k.style(e,t,c+l),n=n||[]}return n&&(c=+c||+u||0,i=n[1]?c+(n[1]+1)*n[2]:+n[2],r&&(r.unit=l,r.start=c,r.end=i)),i}var ce={};function fe(e,t){for(var n,r,i,o,a,s,u,l=[],c=0,f=e.length;c<f;c++)(r=e[c]).style&&(n=r.style.display,t?("none"===n&&(l[c]=Q.get(r,"display")||null,l[c]||(r.style.display="")),""===r.style.display&&se(r)&&(l[c]=(u=a=o=void 0,a=(i=r).ownerDocument,s=i.nodeName,(u=ce[s])||(o=a.body.appendChild(a.createElement(s)),u=k.css(o,"display"),o.parentNode.removeChild(o),"none"===u&&(u="block"),ce[s]=u)))):"none"!==n&&(l[c]="none",Q.set(r,"display",n)));for(c=0;c<f;c++)null!=l[c]&&(e[c].style.display=l[c]);return e}k.fn.extend({show:function(){return fe(this,!0)},hide:function(){return fe(this)},toggle:function(e){return"boolean"==typeof e?e?this.show():this.hide():this.each(function(){se(this)?k(this).show():k(this).hide()})}});var pe=/^(?:checkbox|radio)$/i,de=/<([a-z][^\/\0>\x20\t\r\n\f]*)/i,he=/^$|^module$|\/(?:java|ecma)script/i,ge={option:[1,"<select multiple='multiple'>","</select>"],thead:[1,"<table>","</table>"],col:[2,"<table><colgroup>","</colgroup></table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:[0,"",""]};function ve(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&A(e,t)?k.merge([e],n):n}function ye(e,t){for(var n=0,r=e.length;n<r;n++)Q.set(e[n],"globalEval",!t||Q.get(t[n],"globalEval"))}ge.optgroup=ge.option,ge.tbody=ge.tfoot=ge.colgroup=ge.caption=ge.thead,ge.th=ge.td;var me,xe,be=/<|&#?\w+;/;function we(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d<h;d++)if((o=e[d])||0===o)if("object"===w(o))k.merge(p,o.nodeType?[o]:o);else if(be.test(o)){a=a||f.appendChild(t.createElement("div")),s=(de.exec(o)||["",""])[1].toLowerCase(),u=ge[s]||ge._default,a.innerHTML=u[1]+k.htmlPrefilter(o)+u[2],c=u[0];while(c--)a=a.lastChild;k.merge(p,a.childNodes),(a=f.firstChild).textContent=""}else p.push(t.createTextNode(o));f.textContent="",d=0;while(o=p[d++])if(r&&-1<k.inArray(o,r))i&&i.push(o);else if(l=oe(o),a=ve(f.appendChild(o),"script"),l&&ye(a),n){c=0;while(o=a[c++])he.test(o.type||"")&&n.push(o)}return f}me=E.createDocumentFragment().appendChild(E.createElement("div")),(xe=E.createElement("input")).setAttribute("type","radio"),xe.setAttribute("checked","checked"),xe.setAttribute("name","t"),me.appendChild(xe),y.checkClone=me.cloneNode(!0).cloneNode(!0).lastChild.checked,me.innerHTML="<textarea>x</textarea>",y.noCloneChecked=!!me.cloneNode(!0).lastChild.defaultValue;var Te=/^key/,Ce=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,Ee=/^([^.]*)(?:\.(.+)|)/;function ke(){return!0}function Se(){return!1}function Ne(e,t){return e===function(){try{return E.activeElement}catch(e){}}()==("focus"===t)}function Ae(e,t,n,r,i,o){var a,s;if("object"==typeof t){for(s in"string"!=typeof n&&(r=r||n,n=void 0),t)Ae(e,s,n,r,t[s],o);return e}if(null==r&&null==i?(i=n,r=n=void 0):null==i&&("string"==typeof n?(i=r,r=void 0):(i=r,r=n,n=void 0)),!1===i)i=Se;else if(!i)return e;return 1===o&&(a=i,(i=function(e){return k().off(e),a.apply(this,arguments)}).guid=a.guid||(a.guid=k.guid++)),e.each(function(){k.event.add(this,t,i,r,n)})}function De(e,i,o){o?(Q.set(e,i,!1),k.event.add(e,i,{namespace:!1,handler:function(e){var t,n,r=Q.get(this,i);if(1&e.isTrigger&&this[i]){if(r.length)(k.event.special[i]||{}).delegateType&&e.stopPropagation();else if(r=s.call(arguments),Q.set(this,i,r),t=o(this,i),this[i](),r!==(n=Q.get(this,i))||t?Q.set(this,i,!1):n={},r!==n)return e.stopImmediatePropagation(),e.preventDefault(),n.value}else r.length&&(Q.set(this,i,{value:k.event.trigger(k.extend(r[0],k.Event.prototype),r.slice(1),this)}),e.stopImmediatePropagation())}})):void 0===Q.get(e,i)&&k.event.add(e,i,ke)}k.event={global:{},add:function(t,e,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,v=Q.get(t);if(v){n.handler&&(n=(o=n).handler,i=o.selector),i&&k.find.matchesSelector(ie,i),n.guid||(n.guid=k.guid++),(u=v.events)||(u=v.events={}),(a=v.handle)||(a=v.handle=function(e){return"undefined"!=typeof k&&k.event.triggered!==e.type?k.event.dispatch.apply(t,arguments):void 0}),l=(e=(e||"").match(R)||[""]).length;while(l--)d=g=(s=Ee.exec(e[l])||[])[1],h=(s[2]||"").split(".").sort(),d&&(f=k.event.special[d]||{},d=(i?f.delegateType:f.bindType)||d,f=k.event.special[d]||{},c=k.extend({type:d,origType:g,data:r,handler:n,guid:n.guid,selector:i,needsContext:i&&k.expr.match.needsContext.test(i),namespace:h.join(".")},o),(p=u[d])||((p=u[d]=[]).delegateCount=0,f.setup&&!1!==f.setup.call(t,r,h,a)||t.addEventListener&&t.addEventListener(d,a)),f.add&&(f.add.call(t,c),c.handler.guid||(c.handler.guid=n.guid)),i?p.splice(p.delegateCount++,0,c):p.push(c),k.event.global[d]=!0)}},remove:function(e,t,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,v=Q.hasData(e)&&Q.get(e);if(v&&(u=v.events)){l=(t=(t||"").match(R)||[""]).length;while(l--)if(d=g=(s=Ee.exec(t[l])||[])[1],h=(s[2]||"").split(".").sort(),d){f=k.event.special[d]||{},p=u[d=(r?f.delegateType:f.bindType)||d]||[],s=s[2]&&new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),a=o=p.length;while(o--)c=p[o],!i&&g!==c.origType||n&&n.guid!==c.guid||s&&!s.test(c.namespace)||r&&r!==c.selector&&("**"!==r||!c.selector)||(p.splice(o,1),c.selector&&p.delegateCount--,f.remove&&f.remove.call(e,c));a&&!p.length&&(f.teardown&&!1!==f.teardown.call(e,h,v.handle)||k.removeEvent(e,d,v.handle),delete u[d])}else for(d in u)k.event.remove(e,d+t[l],n,r,!0);k.isEmptyObject(u)&&Q.remove(e,"handle events")}},dispatch:function(e){var t,n,r,i,o,a,s=k.event.fix(e),u=new Array(arguments.length),l=(Q.get(this,"events")||{})[s.type]||[],c=k.event.special[s.type]||{};for(u[0]=s,t=1;t<arguments.length;t++)u[t]=arguments[t];if(s.delegateTarget=this,!c.preDispatch||!1!==c.preDispatch.call(this,s)){a=k.event.handlers.call(this,s,l),t=0;while((i=a[t++])&&!s.isPropagationStopped()){s.currentTarget=i.elem,n=0;while((o=i.handlers[n++])&&!s.isImmediatePropagationStopped())s.rnamespace&&!1!==o.namespace&&!s.rnamespace.test(o.namespace)||(s.handleObj=o,s.data=o.data,void 0!==(r=((k.event.special[o.origType]||{}).handle||o.handler).apply(i.elem,u))&&!1===(s.result=r)&&(s.preventDefault(),s.stopPropagation()))}return c.postDispatch&&c.postDispatch.call(this,s),s.result}},handlers:function(e,t){var n,r,i,o,a,s=[],u=t.delegateCount,l=e.target;if(u&&l.nodeType&&!("click"===e.type&&1<=e.button))for(;l!==this;l=l.parentNode||this)if(1===l.nodeType&&("click"!==e.type||!0!==l.disabled)){for(o=[],a={},n=0;n<u;n++)void 0===a[i=(r=t[n]).selector+" "]&&(a[i]=r.needsContext?-1<k(i,this).index(l):k.find(i,this,null,[l]).length),a[i]&&o.push(r);o.length&&s.push({elem:l,handlers:o})}return l=this,u<t.length&&s.push({elem:l,handlers:t.slice(u)}),s},addProp:function(t,e){Object.defineProperty(k.Event.prototype,t,{enumerable:!0,configurable:!0,get:m(e)?function(){if(this.originalEvent)return e(this.originalEvent)}:function(){if(this.originalEvent)return this.originalEvent[t]},set:function(e){Object.defineProperty(this,t,{enumerable:!0,configurable:!0,writable:!0,value:e})}})},fix:function(e){return e[k.expando]?e:new k.Event(e)},special:{load:{noBubble:!0},click:{setup:function(e){var t=this||e;return pe.test(t.type)&&t.click&&A(t,"input")&&De(t,"click",ke),!1},trigger:function(e){var t=this||e;return pe.test(t.type)&&t.click&&A(t,"input")&&De(t,"click"),!0},_default:function(e){var t=e.target;return pe.test(t.type)&&t.click&&A(t,"input")&&Q.get(t,"click")||A(t,"a")}},beforeunload:{postDispatch:function(e){void 0!==e.result&&e.originalEvent&&(e.originalEvent.returnValue=e.result)}}}},k.removeEvent=function(e,t,n){e.removeEventListener&&e.removeEventListener(t,n)},k.Event=function(e,t){if(!(this instanceof k.Event))return new k.Event(e,t);e&&e.type?(this.originalEvent=e,this.type=e.type,this.isDefaultPrevented=e.defaultPrevented||void 0===e.defaultPrevented&&!1===e.returnValue?ke:Se,this.target=e.target&&3===e.target.nodeType?e.target.parentNode:e.target,this.currentTarget=e.currentTarget,this.relatedTarget=e.relatedTarget):this.type=e,t&&k.extend(this,t),this.timeStamp=e&&e.timeStamp||Date.now(),this[k.expando]=!0},k.Event.prototype={constructor:k.Event,isDefaultPrevented:Se,isPropagationStopped:Se,isImmediatePropagationStopped:Se,isSimulated:!1,preventDefault:function(){var e=this.originalEvent;this.isDefaultPrevented=ke,e&&!this.isSimulated&&e.preventDefault()},stopPropagation:function(){var e=this.originalEvent;this.isPropagationStopped=ke,e&&!this.isSimulated&&e.stopPropagation()},stopImmediatePropagation:function(){var e=this.originalEvent;this.isImmediatePropagationStopped=ke,e&&!this.isSimulated&&e.stopImmediatePropagation(),this.stopPropagation()}},k.each({altKey:!0,bubbles:!0,cancelable:!0,changedTouches:!0,ctrlKey:!0,detail:!0,eventPhase:!0,metaKey:!0,pageX:!0,pageY:!0,shiftKey:!0,view:!0,"char":!0,code:!0,charCode:!0,key:!0,keyCode:!0,button:!0,buttons:!0,clientX:!0,clientY:!0,offsetX:!0,offsetY:!0,pointerId:!0,pointerType:!0,screenX:!0,screenY:!0,targetTouches:!0,toElement:!0,touches:!0,which:function(e){var t=e.button;return null==e.which&&Te.test(e.type)?null!=e.charCode?e.charCode:e.keyCode:!e.which&&void 0!==t&&Ce.test(e.type)?1&t?1:2&t?3:4&t?2:0:e.which}},k.event.addProp),k.each({focus:"focusin",blur:"focusout"},function(e,t){k.event.special[e]={setup:function(){return De(this,e,Ne),!1},trigger:function(){return De(this,e),!0},delegateType:t}}),k.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},function(e,i){k.event.special[e]={delegateType:i,bindType:i,handle:function(e){var t,n=e.relatedTarget,r=e.handleObj;return n&&(n===this||k.contains(this,n))||(e.type=r.origType,t=r.handler.apply(this,arguments),e.type=i),t}}}),k.fn.extend({on:function(e,t,n,r){return Ae(this,e,t,n,r)},one:function(e,t,n,r){return Ae(this,e,t,n,r,1)},off:function(e,t,n){var r,i;if(e&&e.preventDefault&&e.handleObj)return r=e.handleObj,k(e.delegateTarget).off(r.namespace?r.origType+"."+r.namespace:r.origType,r.selector,r.handler),this;if("object"==typeof e){for(i in e)this.off(i,t,e[i]);return this}return!1!==t&&"function"!=typeof t||(n=t,t=void 0),!1===n&&(n=Se),this.each(function(){k.event.remove(this,e,n,t)})}});var je=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([a-z][^\/\0>\x20\t\r\n\f]*)[^>]*)\/>/gi,qe=/<script|<style|<link/i,Le=/checked\s*(?:[^=]|=\s*.checked.)/i,He=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g;function Oe(e,t){return A(e,"table")&&A(11!==t.nodeType?t:t.firstChild,"tr")&&k(e).children("tbody")[0]||e}function Pe(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function Re(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Me(e,t){var n,r,i,o,a,s,u,l;if(1===t.nodeType){if(Q.hasData(e)&&(o=Q.access(e),a=Q.set(t,o),l=o.events))for(i in delete a.handle,a.events={},l)for(n=0,r=l[i].length;n<r;n++)k.event.add(t,i,l[i][n]);J.hasData(e)&&(s=J.access(e),u=k.extend({},s),J.set(t,u))}}function Ie(n,r,i,o){r=g.apply([],r);var e,t,a,s,u,l,c=0,f=n.length,p=f-1,d=r[0],h=m(d);if(h||1<f&&"string"==typeof d&&!y.checkClone&&Le.test(d))return n.each(function(e){var t=n.eq(e);h&&(r[0]=d.call(this,e,t.html())),Ie(t,r,i,o)});if(f&&(t=(e=we(r,n[0].ownerDocument,!1,n,o)).firstChild,1===e.childNodes.length&&(e=t),t||o)){for(s=(a=k.map(ve(e,"script"),Pe)).length;c<f;c++)u=e,c!==p&&(u=k.clone(u,!0,!0),s&&k.merge(a,ve(u,"script"))),i.call(n[c],u,c);if(s)for(l=a[a.length-1].ownerDocument,k.map(a,Re),c=0;c<s;c++)u=a[c],he.test(u.type||"")&&!Q.access(u,"globalEval")&&k.contains(l,u)&&(u.src&&"module"!==(u.type||"").toLowerCase()?k._evalUrl&&!u.noModule&&k._evalUrl(u.src,{nonce:u.nonce||u.getAttribute("nonce")}):b(u.textContent.replace(He,""),u,l))}return n}function We(e,t,n){for(var r,i=t?k.filter(t,e):e,o=0;null!=(r=i[o]);o++)n||1!==r.nodeType||k.cleanData(ve(r)),r.parentNode&&(n&&oe(r)&&ye(ve(r,"script")),r.parentNode.removeChild(r));return e}k.extend({htmlPrefilter:function(e){return e.replace(je,"<$1></$2>")},clone:function(e,t,n){var r,i,o,a,s,u,l,c=e.cloneNode(!0),f=oe(e);if(!(y.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||k.isXMLDoc(e)))for(a=ve(c),r=0,i=(o=ve(e)).length;r<i;r++)s=o[r],u=a[r],void 0,"input"===(l=u.nodeName.toLowerCase())&&pe.test(s.type)?u.checked=s.checked:"input"!==l&&"textarea"!==l||(u.defaultValue=s.defaultValue);if(t)if(n)for(o=o||ve(e),a=a||ve(c),r=0,i=o.length;r<i;r++)Me(o[r],a[r]);else Me(e,c);return 0<(a=ve(c,"script")).length&&ye(a,!f&&ve(e,"script")),c},cleanData:function(e){for(var t,n,r,i=k.event.special,o=0;void 0!==(n=e[o]);o++)if(G(n)){if(t=n[Q.expando]){if(t.events)for(r in t.events)i[r]?k.event.remove(n,r):k.removeEvent(n,r,t.handle);n[Q.expando]=void 0}n[J.expando]&&(n[J.expando]=void 0)}}}),k.fn.extend({detach:function(e){return We(this,e,!0)},remove:function(e){return We(this,e)},text:function(e){return _(this,function(e){return void 0===e?k.text(this):this.empty().each(function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=e)})},null,e,arguments.length)},append:function(){return Ie(this,arguments,function(e){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||Oe(this,e).appendChild(e)})},prepend:function(){return Ie(this,arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=Oe(this,e);t.insertBefore(e,t.firstChild)}})},before:function(){return Ie(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return Ie(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},empty:function(){for(var e,t=0;null!=(e=this[t]);t++)1===e.nodeType&&(k.cleanData(ve(e,!1)),e.textContent="");return this},clone:function(e,t){return e=null!=e&&e,t=null==t?e:t,this.map(function(){return k.clone(this,e,t)})},html:function(e){return _(this,function(e){var t=this[0]||{},n=0,r=this.length;if(void 0===e&&1===t.nodeType)return t.innerHTML;if("string"==typeof e&&!qe.test(e)&&!ge[(de.exec(e)||["",""])[1].toLowerCase()]){e=k.htmlPrefilter(e);try{for(;n<r;n++)1===(t=this[n]||{}).nodeType&&(k.cleanData(ve(t,!1)),t.innerHTML=e);t=0}catch(e){}}t&&this.empty().append(e)},null,e,arguments.length)},replaceWith:function(){var n=[];return Ie(this,arguments,function(e){var t=this.parentNode;k.inArray(this,n)<0&&(k.cleanData(ve(this)),t&&t.replaceChild(e,this))},n)}}),k.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(e,a){k.fn[e]=function(e){for(var t,n=[],r=k(e),i=r.length-1,o=0;o<=i;o++)t=o===i?this:this.clone(!0),k(r[o])[a](t),u.apply(n,t.get());return this.pushStack(n)}});var $e=new RegExp("^("+te+")(?!px)[a-z%]+$","i"),Fe=function(e){var t=e.ownerDocument.defaultView;return t&&t.opener||(t=C),t.getComputedStyle(e)},Be=new RegExp(re.join("|"),"i");function _e(e,t,n){var r,i,o,a,s=e.style;return(n=n||Fe(e))&&(""!==(a=n.getPropertyValue(t)||n[t])||oe(e)||(a=k.style(e,t)),!y.pixelBoxStyles()&&$e.test(a)&&Be.test(t)&&(r=s.width,i=s.minWidth,o=s.maxWidth,s.minWidth=s.maxWidth=s.width=a,a=n.width,s.width=r,s.minWidth=i,s.maxWidth=o)),void 0!==a?a+"":a}function ze(e,t){return{get:function(){if(!e())return(this.get=t).apply(this,arguments);delete this.get}}}!function(){function e(){if(u){s.style.cssText="position:absolute;left:-11111px;width:60px;margin-top:1px;padding:0;border:0",u.style.cssText="position:relative;display:block;box-sizing:border-box;overflow:scroll;margin:auto;border:1px;padding:1px;width:60%;top:1%",ie.appendChild(s).appendChild(u);var e=C.getComputedStyle(u);n="1%"!==e.top,a=12===t(e.marginLeft),u.style.right="60%",o=36===t(e.right),r=36===t(e.width),u.style.position="absolute",i=12===t(u.offsetWidth/3),ie.removeChild(s),u=null}}function t(e){return Math.round(parseFloat(e))}var n,r,i,o,a,s=E.createElement("div"),u=E.createElement("div");u.style&&(u.style.backgroundClip="content-box",u.cloneNode(!0).style.backgroundClip="",y.clearCloneStyle="content-box"===u.style.backgroundClip,k.extend(y,{boxSizingReliable:function(){return e(),r},pixelBoxStyles:function(){return e(),o},pixelPosition:function(){return e(),n},reliableMarginLeft:function(){return e(),a},scrollboxSize:function(){return e(),i}}))}();var Ue=["Webkit","Moz","ms"],Xe=E.createElement("div").style,Ve={};function Ge(e){var t=k.cssProps[e]||Ve[e];return t||(e in Xe?e:Ve[e]=function(e){var t=e[0].toUpperCase()+e.slice(1),n=Ue.length;while(n--)if((e=Ue[n]+t)in Xe)return e}(e)||e)}var Ye=/^(none|table(?!-c[ea]).+)/,Qe=/^--/,Je={position:"absolute",visibility:"hidden",display:"block"},Ke={letterSpacing:"0",fontWeight:"400"};function Ze(e,t,n){var r=ne.exec(t);return r?Math.max(0,r[2]-(n||0))+(r[3]||"px"):t}function et(e,t,n,r,i,o){var a="width"===t?1:0,s=0,u=0;if(n===(r?"border":"content"))return 0;for(;a<4;a+=2)"margin"===n&&(u+=k.css(e,n+re[a],!0,i)),r?("content"===n&&(u-=k.css(e,"padding"+re[a],!0,i)),"margin"!==n&&(u-=k.css(e,"border"+re[a]+"Width",!0,i))):(u+=k.css(e,"padding"+re[a],!0,i),"padding"!==n?u+=k.css(e,"border"+re[a]+"Width",!0,i):s+=k.css(e,"border"+re[a]+"Width",!0,i));return!r&&0<=o&&(u+=Math.max(0,Math.ceil(e["offset"+t[0].toUpperCase()+t.slice(1)]-o-u-s-.5))||0),u}function tt(e,t,n){var r=Fe(e),i=(!y.boxSizingReliable()||n)&&"border-box"===k.css(e,"boxSizing",!1,r),o=i,a=_e(e,t,r),s="offset"+t[0].toUpperCase()+t.slice(1);if($e.test(a)){if(!n)return a;a="auto"}return(!y.boxSizingReliable()&&i||"auto"===a||!parseFloat(a)&&"inline"===k.css(e,"display",!1,r))&&e.getClientRects().length&&(i="border-box"===k.css(e,"boxSizing",!1,r),(o=s in e)&&(a=e[s])),(a=parseFloat(a)||0)+et(e,t,n||(i?"border":"content"),o,r,a)+"px"}function nt(e,t,n,r,i){return new nt.prototype.init(e,t,n,r,i)}k.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=_e(e,"opacity");return""===n?"1":n}}}},cssNumber:{animationIterationCount:!0,columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,gridArea:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnStart:!0,gridRow:!0,gridRowEnd:!0,gridRowStart:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{},style:function(e,t,n,r){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var i,o,a,s=V(t),u=Qe.test(t),l=e.style;if(u||(t=Ge(s)),a=k.cssHooks[t]||k.cssHooks[s],void 0===n)return a&&"get"in a&&void 0!==(i=a.get(e,!1,r))?i:l[t];"string"===(o=typeof n)&&(i=ne.exec(n))&&i[1]&&(n=le(e,t,i),o="number"),null!=n&&n==n&&("number"!==o||u||(n+=i&&i[3]||(k.cssNumber[s]?"":"px")),y.clearCloneStyle||""!==n||0!==t.indexOf("background")||(l[t]="inherit"),a&&"set"in a&&void 0===(n=a.set(e,n,r))||(u?l.setProperty(t,n):l[t]=n))}},css:function(e,t,n,r){var i,o,a,s=V(t);return Qe.test(t)||(t=Ge(s)),(a=k.cssHooks[t]||k.cssHooks[s])&&"get"in a&&(i=a.get(e,!0,n)),void 0===i&&(i=_e(e,t,r)),"normal"===i&&t in Ke&&(i=Ke[t]),""===n||n?(o=parseFloat(i),!0===n||isFinite(o)?o||0:i):i}}),k.each(["height","width"],function(e,u){k.cssHooks[u]={get:function(e,t,n){if(t)return!Ye.test(k.css(e,"display"))||e.getClientRects().length&&e.getBoundingClientRect().width?tt(e,u,n):ue(e,Je,function(){return tt(e,u,n)})},set:function(e,t,n){var r,i=Fe(e),o=!y.scrollboxSize()&&"absolute"===i.position,a=(o||n)&&"border-box"===k.css(e,"boxSizing",!1,i),s=n?et(e,u,n,a,i):0;return a&&o&&(s-=Math.ceil(e["offset"+u[0].toUpperCase()+u.slice(1)]-parseFloat(i[u])-et(e,u,"border",!1,i)-.5)),s&&(r=ne.exec(t))&&"px"!==(r[3]||"px")&&(e.style[u]=t,t=k.css(e,u)),Ze(0,t,s)}}}),k.cssHooks.marginLeft=ze(y.reliableMarginLeft,function(e,t){if(t)return(parseFloat(_e(e,"marginLeft"))||e.getBoundingClientRect().left-ue(e,{marginLeft:0},function(){return e.getBoundingClientRect().left}))+"px"}),k.each({margin:"",padding:"",border:"Width"},function(i,o){k.cssHooks[i+o]={expand:function(e){for(var t=0,n={},r="string"==typeof e?e.split(" "):[e];t<4;t++)n[i+re[t]+o]=r[t]||r[t-2]||r[0];return n}},"margin"!==i&&(k.cssHooks[i+o].set=Ze)}),k.fn.extend({css:function(e,t){return _(this,function(e,t,n){var r,i,o={},a=0;if(Array.isArray(t)){for(r=Fe(e),i=t.length;a<i;a++)o[t[a]]=k.css(e,t[a],!1,r);return o}return void 0!==n?k.style(e,t,n):k.css(e,t)},e,t,1<arguments.length)}}),((k.Tween=nt).prototype={constructor:nt,init:function(e,t,n,r,i,o){this.elem=e,this.prop=n,this.easing=i||k.easing._default,this.options=t,this.start=this.now=this.cur(),this.end=r,this.unit=o||(k.cssNumber[n]?"":"px")},cur:function(){var e=nt.propHooks[this.prop];return e&&e.get?e.get(this):nt.propHooks._default.get(this)},run:function(e){var t,n=nt.propHooks[this.prop];return this.options.duration?this.pos=t=k.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):this.pos=t=e,this.now=(this.end-this.start)*t+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):nt.propHooks._default.set(this),this}}).init.prototype=nt.prototype,(nt.propHooks={_default:{get:function(e){var t;return 1!==e.elem.nodeType||null!=e.elem[e.prop]&&null==e.elem.style[e.prop]?e.elem[e.prop]:(t=k.css(e.elem,e.prop,""))&&"auto"!==t?t:0},set:function(e){k.fx.step[e.prop]?k.fx.step[e.prop](e):1!==e.elem.nodeType||!k.cssHooks[e.prop]&&null==e.elem.style[Ge(e.prop)]?e.elem[e.prop]=e.now:k.style(e.elem,e.prop,e.now+e.unit)}}}).scrollTop=nt.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},k.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2},_default:"swing"},k.fx=nt.prototype.init,k.fx.step={};var rt,it,ot,at,st=/^(?:toggle|show|hide)$/,ut=/queueHooks$/;function lt(){it&&(!1===E.hidden&&C.requestAnimationFrame?C.requestAnimationFrame(lt):C.setTimeout(lt,k.fx.interval),k.fx.tick())}function ct(){return C.setTimeout(function(){rt=void 0}),rt=Date.now()}function ft(e,t){var n,r=0,i={height:e};for(t=t?1:0;r<4;r+=2-t)i["margin"+(n=re[r])]=i["padding"+n]=e;return t&&(i.opacity=i.width=e),i}function pt(e,t,n){for(var r,i=(dt.tweeners[t]||[]).concat(dt.tweeners["*"]),o=0,a=i.length;o<a;o++)if(r=i[o].call(n,t,e))return r}function dt(o,e,t){var n,a,r=0,i=dt.prefilters.length,s=k.Deferred().always(function(){delete u.elem}),u=function(){if(a)return!1;for(var e=rt||ct(),t=Math.max(0,l.startTime+l.duration-e),n=1-(t/l.duration||0),r=0,i=l.tweens.length;r<i;r++)l.tweens[r].run(n);return s.notifyWith(o,[l,n,t]),n<1&&i?t:(i||s.notifyWith(o,[l,1,0]),s.resolveWith(o,[l]),!1)},l=s.promise({elem:o,props:k.extend({},e),opts:k.extend(!0,{specialEasing:{},easing:k.easing._default},t),originalProperties:e,originalOptions:t,startTime:rt||ct(),duration:t.duration,tweens:[],createTween:function(e,t){var n=k.Tween(o,l.opts,e,t,l.opts.specialEasing[e]||l.opts.easing);return l.tweens.push(n),n},stop:function(e){var t=0,n=e?l.tweens.length:0;if(a)return this;for(a=!0;t<n;t++)l.tweens[t].run(1);return e?(s.notifyWith(o,[l,1,0]),s.resolveWith(o,[l,e])):s.rejectWith(o,[l,e]),this}}),c=l.props;for(!function(e,t){var n,r,i,o,a;for(n in e)if(i=t[r=V(n)],o=e[n],Array.isArray(o)&&(i=o[1],o=e[n]=o[0]),n!==r&&(e[r]=o,delete e[n]),(a=k.cssHooks[r])&&"expand"in a)for(n in o=a.expand(o),delete e[r],o)n in e||(e[n]=o[n],t[n]=i);else t[r]=i}(c,l.opts.specialEasing);r<i;r++)if(n=dt.prefilters[r].call(l,o,c,l.opts))return m(n.stop)&&(k._queueHooks(l.elem,l.opts.queue).stop=n.stop.bind(n)),n;return k.map(c,pt,l),m(l.opts.start)&&l.opts.start.call(o,l),l.progress(l.opts.progress).done(l.opts.done,l.opts.complete).fail(l.opts.fail).always(l.opts.always),k.fx.timer(k.extend(u,{elem:o,anim:l,queue:l.opts.queue})),l}k.Animation=k.extend(dt,{tweeners:{"*":[function(e,t){var n=this.createTween(e,t);return le(n.elem,e,ne.exec(t),n),n}]},tweener:function(e,t){m(e)?(t=e,e=["*"]):e=e.match(R);for(var n,r=0,i=e.length;r<i;r++)n=e[r],dt.tweeners[n]=dt.tweeners[n]||[],dt.tweeners[n].unshift(t)},prefilters:[function(e,t,n){var r,i,o,a,s,u,l,c,f="width"in t||"height"in t,p=this,d={},h=e.style,g=e.nodeType&&se(e),v=Q.get(e,"fxshow");for(r in n.queue||(null==(a=k._queueHooks(e,"fx")).unqueued&&(a.unqueued=0,s=a.empty.fire,a.empty.fire=function(){a.unqueued||s()}),a.unqueued++,p.always(function(){p.always(function(){a.unqueued--,k.queue(e,"fx").length||a.empty.fire()})})),t)if(i=t[r],st.test(i)){if(delete t[r],o=o||"toggle"===i,i===(g?"hide":"show")){if("show"!==i||!v||void 0===v[r])continue;g=!0}d[r]=v&&v[r]||k.style(e,r)}if((u=!k.isEmptyObject(t))||!k.isEmptyObject(d))for(r in f&&1===e.nodeType&&(n.overflow=[h.overflow,h.overflowX,h.overflowY],null==(l=v&&v.display)&&(l=Q.get(e,"display")),"none"===(c=k.css(e,"display"))&&(l?c=l:(fe([e],!0),l=e.style.display||l,c=k.css(e,"display"),fe([e]))),("inline"===c||"inline-block"===c&&null!=l)&&"none"===k.css(e,"float")&&(u||(p.done(function(){h.display=l}),null==l&&(c=h.display,l="none"===c?"":c)),h.display="inline-block")),n.overflow&&(h.overflow="hidden",p.always(function(){h.overflow=n.overflow[0],h.overflowX=n.overflow[1],h.overflowY=n.overflow[2]})),u=!1,d)u||(v?"hidden"in v&&(g=v.hidden):v=Q.access(e,"fxshow",{display:l}),o&&(v.hidden=!g),g&&fe([e],!0),p.done(function(){for(r in g||fe([e]),Q.remove(e,"fxshow"),d)k.style(e,r,d[r])})),u=pt(g?v[r]:0,r,p),r in v||(v[r]=u.start,g&&(u.end=u.start,u.start=0))}],prefilter:function(e,t){t?dt.prefilters.unshift(e):dt.prefilters.push(e)}}),k.speed=function(e,t,n){var r=e&&"object"==typeof e?k.extend({},e):{complete:n||!n&&t||m(e)&&e,duration:e,easing:n&&t||t&&!m(t)&&t};return k.fx.off?r.duration=0:"number"!=typeof r.duration&&(r.duration in k.fx.speeds?r.duration=k.fx.speeds[r.duration]:r.duration=k.fx.speeds._default),null!=r.queue&&!0!==r.queue||(r.queue="fx"),r.old=r.complete,r.complete=function(){m(r.old)&&r.old.call(this),r.queue&&k.dequeue(this,r.queue)},r},k.fn.extend({fadeTo:function(e,t,n,r){return this.filter(se).css("opacity",0).show().end().animate({opacity:t},e,n,r)},animate:function(t,e,n,r){var i=k.isEmptyObject(t),o=k.speed(e,n,r),a=function(){var e=dt(this,k.extend({},t),o);(i||Q.get(this,"finish"))&&e.stop(!0)};return a.finish=a,i||!1===o.queue?this.each(a):this.queue(o.queue,a)},stop:function(i,e,o){var a=function(e){var t=e.stop;delete e.stop,t(o)};return"string"!=typeof i&&(o=e,e=i,i=void 0),e&&!1!==i&&this.queue(i||"fx",[]),this.each(function(){var e=!0,t=null!=i&&i+"queueHooks",n=k.timers,r=Q.get(this);if(t)r[t]&&r[t].stop&&a(r[t]);else for(t in r)r[t]&&r[t].stop&&ut.test(t)&&a(r[t]);for(t=n.length;t--;)n[t].elem!==this||null!=i&&n[t].queue!==i||(n[t].anim.stop(o),e=!1,n.splice(t,1));!e&&o||k.dequeue(this,i)})},finish:function(a){return!1!==a&&(a=a||"fx"),this.each(function(){var e,t=Q.get(this),n=t[a+"queue"],r=t[a+"queueHooks"],i=k.timers,o=n?n.length:0;for(t.finish=!0,k.queue(this,a,[]),r&&r.stop&&r.stop.call(this,!0),e=i.length;e--;)i[e].elem===this&&i[e].queue===a&&(i[e].anim.stop(!0),i.splice(e,1));for(e=0;e<o;e++)n[e]&&n[e].finish&&n[e].finish.call(this);delete t.finish})}}),k.each(["toggle","show","hide"],function(e,r){var i=k.fn[r];k.fn[r]=function(e,t,n){return null==e||"boolean"==typeof e?i.apply(this,arguments):this.animate(ft(r,!0),e,t,n)}}),k.each({slideDown:ft("show"),slideUp:ft("hide"),slideToggle:ft("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(e,r){k.fn[e]=function(e,t,n){return this.animate(r,e,t,n)}}),k.timers=[],k.fx.tick=function(){var e,t=0,n=k.timers;for(rt=Date.now();t<n.length;t++)(e=n[t])()||n[t]!==e||n.splice(t--,1);n.length||k.fx.stop(),rt=void 0},k.fx.timer=function(e){k.timers.push(e),k.fx.start()},k.fx.interval=13,k.fx.start=function(){it||(it=!0,lt())},k.fx.stop=function(){it=null},k.fx.speeds={slow:600,fast:200,_default:400},k.fn.delay=function(r,e){return r=k.fx&&k.fx.speeds[r]||r,e=e||"fx",this.queue(e,function(e,t){var n=C.setTimeout(e,r);t.stop=function(){C.clearTimeout(n)}})},ot=E.createElement("input"),at=E.createElement("select").appendChild(E.createElement("option")),ot.type="checkbox",y.checkOn=""!==ot.value,y.optSelected=at.selected,(ot=E.createElement("input")).value="t",ot.type="radio",y.radioValue="t"===ot.value;var ht,gt=k.expr.attrHandle;k.fn.extend({attr:function(e,t){return _(this,k.attr,e,t,1<arguments.length)},removeAttr:function(e){return this.each(function(){k.removeAttr(this,e)})}}),k.extend({attr:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return"undefined"==typeof e.getAttribute?k.prop(e,t,n):(1===o&&k.isXMLDoc(e)||(i=k.attrHooks[t.toLowerCase()]||(k.expr.match.bool.test(t)?ht:void 0)),void 0!==n?null===n?void k.removeAttr(e,t):i&&"set"in i&&void 0!==(r=i.set(e,n,t))?r:(e.setAttribute(t,n+""),n):i&&"get"in i&&null!==(r=i.get(e,t))?r:null==(r=k.find.attr(e,t))?void 0:r)},attrHooks:{type:{set:function(e,t){if(!y.radioValue&&"radio"===t&&A(e,"input")){var n=e.value;return e.setAttribute("type",t),n&&(e.value=n),t}}}},removeAttr:function(e,t){var n,r=0,i=t&&t.match(R);if(i&&1===e.nodeType)while(n=i[r++])e.removeAttribute(n)}}),ht={set:function(e,t,n){return!1===t?k.removeAttr(e,n):e.setAttribute(n,n),n}},k.each(k.expr.match.bool.source.match(/\w+/g),function(e,t){var a=gt[t]||k.find.attr;gt[t]=function(e,t,n){var r,i,o=t.toLowerCase();return n||(i=gt[o],gt[o]=r,r=null!=a(e,t,n)?o:null,gt[o]=i),r}});var vt=/^(?:input|select|textarea|button)$/i,yt=/^(?:a|area)$/i;function mt(e){return(e.match(R)||[]).join(" ")}function xt(e){return e.getAttribute&&e.getAttribute("class")||""}function bt(e){return Array.isArray(e)?e:"string"==typeof e&&e.match(R)||[]}k.fn.extend({prop:function(e,t){return _(this,k.prop,e,t,1<arguments.length)},removeProp:function(e){return this.each(function(){delete this[k.propFix[e]||e]})}}),k.extend({prop:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return 1===o&&k.isXMLDoc(e)||(t=k.propFix[t]||t,i=k.propHooks[t]),void 0!==n?i&&"set"in i&&void 0!==(r=i.set(e,n,t))?r:e[t]=n:i&&"get"in i&&null!==(r=i.get(e,t))?r:e[t]},propHooks:{tabIndex:{get:function(e){var t=k.find.attr(e,"tabindex");return t?parseInt(t,10):vt.test(e.nodeName)||yt.test(e.nodeName)&&e.href?0:-1}}},propFix:{"for":"htmlFor","class":"className"}}),y.optSelected||(k.propHooks.selected={get:function(e){var t=e.parentNode;return t&&t.parentNode&&t.parentNode.selectedIndex,null},set:function(e){var t=e.parentNode;t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex)}}),k.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){k.propFix[this.toLowerCase()]=this}),k.fn.extend({addClass:function(t){var e,n,r,i,o,a,s,u=0;if(m(t))return this.each(function(e){k(this).addClass(t.call(this,e,xt(this)))});if((e=bt(t)).length)while(n=this[u++])if(i=xt(n),r=1===n.nodeType&&" "+mt(i)+" "){a=0;while(o=e[a++])r.indexOf(" "+o+" ")<0&&(r+=o+" ");i!==(s=mt(r))&&n.setAttribute("class",s)}return this},removeClass:function(t){var e,n,r,i,o,a,s,u=0;if(m(t))return this.each(function(e){k(this).removeClass(t.call(this,e,xt(this)))});if(!arguments.length)return this.attr("class","");if((e=bt(t)).length)while(n=this[u++])if(i=xt(n),r=1===n.nodeType&&" "+mt(i)+" "){a=0;while(o=e[a++])while(-1<r.indexOf(" "+o+" "))r=r.replace(" "+o+" "," ");i!==(s=mt(r))&&n.setAttribute("class",s)}return this},toggleClass:function(i,t){var o=typeof i,a="string"===o||Array.isArray(i);return"boolean"==typeof t&&a?t?this.addClass(i):this.removeClass(i):m(i)?this.each(function(e){k(this).toggleClass(i.call(this,e,xt(this),t),t)}):this.each(function(){var e,t,n,r;if(a){t=0,n=k(this),r=bt(i);while(e=r[t++])n.hasClass(e)?n.removeClass(e):n.addClass(e)}else void 0!==i&&"boolean"!==o||((e=xt(this))&&Q.set(this,"__className__",e),this.setAttribute&&this.setAttribute("class",e||!1===i?"":Q.get(this,"__className__")||""))})},hasClass:function(e){var t,n,r=0;t=" "+e+" ";while(n=this[r++])if(1===n.nodeType&&-1<(" "+mt(xt(n))+" ").indexOf(t))return!0;return!1}});var wt=/\r/g;k.fn.extend({val:function(n){var r,e,i,t=this[0];return arguments.length?(i=m(n),this.each(function(e){var t;1===this.nodeType&&(null==(t=i?n.call(this,e,k(this).val()):n)?t="":"number"==typeof t?t+="":Array.isArray(t)&&(t=k.map(t,function(e){return null==e?"":e+""})),(r=k.valHooks[this.type]||k.valHooks[this.nodeName.toLowerCase()])&&"set"in r&&void 0!==r.set(this,t,"value")||(this.value=t))})):t?(r=k.valHooks[t.type]||k.valHooks[t.nodeName.toLowerCase()])&&"get"in r&&void 0!==(e=r.get(t,"value"))?e:"string"==typeof(e=t.value)?e.replace(wt,""):null==e?"":e:void 0}}),k.extend({valHooks:{option:{get:function(e){var t=k.find.attr(e,"value");return null!=t?t:mt(k.text(e))}},select:{get:function(e){var t,n,r,i=e.options,o=e.selectedIndex,a="select-one"===e.type,s=a?null:[],u=a?o+1:i.length;for(r=o<0?u:a?o:0;r<u;r++)if(((n=i[r]).selected||r===o)&&!n.disabled&&(!n.parentNode.disabled||!A(n.parentNode,"optgroup"))){if(t=k(n).val(),a)return t;s.push(t)}return s},set:function(e,t){var n,r,i=e.options,o=k.makeArray(t),a=i.length;while(a--)((r=i[a]).selected=-1<k.inArray(k.valHooks.option.get(r),o))&&(n=!0);return n||(e.selectedIndex=-1),o}}}}),k.each(["radio","checkbox"],function(){k.valHooks[this]={set:function(e,t){if(Array.isArray(t))return e.checked=-1<k.inArray(k(e).val(),t)}},y.checkOn||(k.valHooks[this].get=function(e){return null===e.getAttribute("value")?"on":e.value})}),y.focusin="onfocusin"in C;var Tt=/^(?:focusinfocus|focusoutblur)$/,Ct=function(e){e.stopPropagation()};k.extend(k.event,{trigger:function(e,t,n,r){var i,o,a,s,u,l,c,f,p=[n||E],d=v.call(e,"type")?e.type:e,h=v.call(e,"namespace")?e.namespace.split("."):[];if(o=f=a=n=n||E,3!==n.nodeType&&8!==n.nodeType&&!Tt.test(d+k.event.triggered)&&(-1<d.indexOf(".")&&(d=(h=d.split(".")).shift(),h.sort()),u=d.indexOf(":")<0&&"on"+d,(e=e[k.expando]?e:new k.Event(d,"object"==typeof e&&e)).isTrigger=r?2:3,e.namespace=h.join("."),e.rnamespace=e.namespace?new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,e.result=void 0,e.target||(e.target=n),t=null==t?[e]:k.makeArray(t,[e]),c=k.event.special[d]||{},r||!c.trigger||!1!==c.trigger.apply(n,t))){if(!r&&!c.noBubble&&!x(n)){for(s=c.delegateType||d,Tt.test(s+d)||(o=o.parentNode);o;o=o.parentNode)p.push(o),a=o;a===(n.ownerDocument||E)&&p.push(a.defaultView||a.parentWindow||C)}i=0;while((o=p[i++])&&!e.isPropagationStopped())f=o,e.type=1<i?s:c.bindType||d,(l=(Q.get(o,"events")||{})[e.type]&&Q.get(o,"handle"))&&l.apply(o,t),(l=u&&o[u])&&l.apply&&G(o)&&(e.result=l.apply(o,t),!1===e.result&&e.preventDefault());return e.type=d,r||e.isDefaultPrevented()||c._default&&!1!==c._default.apply(p.pop(),t)||!G(n)||u&&m(n[d])&&!x(n)&&((a=n[u])&&(n[u]=null),k.event.triggered=d,e.isPropagationStopped()&&f.addEventListener(d,Ct),n[d](),e.isPropagationStopped()&&f.removeEventListener(d,Ct),k.event.triggered=void 0,a&&(n[u]=a)),e.result}},simulate:function(e,t,n){var r=k.extend(new k.Event,n,{type:e,isSimulated:!0});k.event.trigger(r,null,t)}}),k.fn.extend({trigger:function(e,t){return this.each(function(){k.event.trigger(e,t,this)})},triggerHandler:function(e,t){var n=this[0];if(n)return k.event.trigger(e,t,n,!0)}}),y.focusin||k.each({focus:"focusin",blur:"focusout"},function(n,r){var i=function(e){k.event.simulate(r,e.target,k.event.fix(e))};k.event.special[r]={setup:function(){var e=this.ownerDocument||this,t=Q.access(e,r);t||e.addEventListener(n,i,!0),Q.access(e,r,(t||0)+1)},teardown:function(){var e=this.ownerDocument||this,t=Q.access(e,r)-1;t?Q.access(e,r,t):(e.removeEventListener(n,i,!0),Q.remove(e,r))}}});var Et=C.location,kt=Date.now(),St=/\?/;k.parseXML=function(e){var t;if(!e||"string"!=typeof e)return null;try{t=(new C.DOMParser).parseFromString(e,"text/xml")}catch(e){t=void 0}return t&&!t.getElementsByTagName("parsererror").length||k.error("Invalid XML: "+e),t};var Nt=/\[\]$/,At=/\r?\n/g,Dt=/^(?:submit|button|image|reset|file)$/i,jt=/^(?:input|select|textarea|keygen)/i;function qt(n,e,r,i){var t;if(Array.isArray(e))k.each(e,function(e,t){r||Nt.test(n)?i(n,t):qt(n+"["+("object"==typeof t&&null!=t?e:"")+"]",t,r,i)});else if(r||"object"!==w(e))i(n,e);else for(t in e)qt(n+"["+t+"]",e[t],r,i)}k.param=function(e,t){var n,r=[],i=function(e,t){var n=m(t)?t():t;r[r.length]=encodeURIComponent(e)+"="+encodeURIComponent(null==n?"":n)};if(null==e)return"";if(Array.isArray(e)||e.jquery&&!k.isPlainObject(e))k.each(e,function(){i(this.name,this.value)});else for(n in e)qt(n,e[n],t,i);return r.join("&")},k.fn.extend({serialize:function(){return k.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var e=k.prop(this,"elements");return e?k.makeArray(e):this}).filter(function(){var e=this.type;return this.name&&!k(this).is(":disabled")&&jt.test(this.nodeName)&&!Dt.test(e)&&(this.checked||!pe.test(e))}).map(function(e,t){var n=k(this).val();return null==n?null:Array.isArray(n)?k.map(n,function(e){return{name:t.name,value:e.replace(At,"\r\n")}}):{name:t.name,value:n.replace(At,"\r\n")}}).get()}});var Lt=/%20/g,Ht=/#.*$/,Ot=/([?&])_=[^&]*/,Pt=/^(.*?):[ \t]*([^\r\n]*)$/gm,Rt=/^(?:GET|HEAD)$/,Mt=/^\/\//,It={},Wt={},$t="*/".concat("*"),Ft=E.createElement("a");function Bt(o){return function(e,t){"string"!=typeof e&&(t=e,e="*");var n,r=0,i=e.toLowerCase().match(R)||[];if(m(t))while(n=i[r++])"+"===n[0]?(n=n.slice(1)||"*",(o[n]=o[n]||[]).unshift(t)):(o[n]=o[n]||[]).push(t)}}function _t(t,i,o,a){var s={},u=t===Wt;function l(e){var r;return s[e]=!0,k.each(t[e]||[],function(e,t){var n=t(i,o,a);return"string"!=typeof n||u||s[n]?u?!(r=n):void 0:(i.dataTypes.unshift(n),l(n),!1)}),r}return l(i.dataTypes[0])||!s["*"]&&l("*")}function zt(e,t){var n,r,i=k.ajaxSettings.flatOptions||{};for(n in t)void 0!==t[n]&&((i[n]?e:r||(r={}))[n]=t[n]);return r&&k.extend(!0,e,r),e}Ft.href=Et.href,k.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:Et.href,type:"GET",isLocal:/^(?:about|app|app-storage|.+-extension|file|res|widget):$/.test(Et.protocol),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":$t,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":JSON.parse,"text xml":k.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?zt(zt(e,k.ajaxSettings),t):zt(k.ajaxSettings,e)},ajaxPrefilter:Bt(It),ajaxTransport:Bt(Wt),ajax:function(e,t){"object"==typeof e&&(t=e,e=void 0),t=t||{};var c,f,p,n,d,r,h,g,i,o,v=k.ajaxSetup({},t),y=v.context||v,m=v.context&&(y.nodeType||y.jquery)?k(y):k.event,x=k.Deferred(),b=k.Callbacks("once memory"),w=v.statusCode||{},a={},s={},u="canceled",T={readyState:0,getResponseHeader:function(e){var t;if(h){if(!n){n={};while(t=Pt.exec(p))n[t[1].toLowerCase()+" "]=(n[t[1].toLowerCase()+" "]||[]).concat(t[2])}t=n[e.toLowerCase()+" "]}return null==t?null:t.join(", ")},getAllResponseHeaders:function(){return h?p:null},setRequestHeader:function(e,t){return null==h&&(e=s[e.toLowerCase()]=s[e.toLowerCase()]||e,a[e]=t),this},overrideMimeType:function(e){return null==h&&(v.mimeType=e),this},statusCode:function(e){var t;if(e)if(h)T.always(e[T.status]);else for(t in e)w[t]=[w[t],e[t]];return this},abort:function(e){var t=e||u;return c&&c.abort(t),l(0,t),this}};if(x.promise(T),v.url=((e||v.url||Et.href)+"").replace(Mt,Et.protocol+"//"),v.type=t.method||t.type||v.method||v.type,v.dataTypes=(v.dataType||"*").toLowerCase().match(R)||[""],null==v.crossDomain){r=E.createElement("a");try{r.href=v.url,r.href=r.href,v.crossDomain=Ft.protocol+"//"+Ft.host!=r.protocol+"//"+r.host}catch(e){v.crossDomain=!0}}if(v.data&&v.processData&&"string"!=typeof v.data&&(v.data=k.param(v.data,v.traditional)),_t(It,v,t,T),h)return T;for(i in(g=k.event&&v.global)&&0==k.active++&&k.event.trigger("ajaxStart"),v.type=v.type.toUpperCase(),v.hasContent=!Rt.test(v.type),f=v.url.replace(Ht,""),v.hasContent?v.data&&v.processData&&0===(v.contentType||"").indexOf("application/x-www-form-urlencoded")&&(v.data=v.data.replace(Lt,"+")):(o=v.url.slice(f.length),v.data&&(v.processData||"string"==typeof v.data)&&(f+=(St.test(f)?"&":"?")+v.data,delete v.data),!1===v.cache&&(f=f.replace(Ot,"$1"),o=(St.test(f)?"&":"?")+"_="+kt+++o),v.url=f+o),v.ifModified&&(k.lastModified[f]&&T.setRequestHeader("If-Modified-Since",k.lastModified[f]),k.etag[f]&&T.setRequestHeader("If-None-Match",k.etag[f])),(v.data&&v.hasContent&&!1!==v.contentType||t.contentType)&&T.setRequestHeader("Content-Type",v.contentType),T.setRequestHeader("Accept",v.dataTypes[0]&&v.accepts[v.dataTypes[0]]?v.accepts[v.dataTypes[0]]+("*"!==v.dataTypes[0]?", "+$t+"; q=0.01":""):v.accepts["*"]),v.headers)T.setRequestHeader(i,v.headers[i]);if(v.beforeSend&&(!1===v.beforeSend.call(y,T,v)||h))return T.abort();if(u="abort",b.add(v.complete),T.done(v.success),T.fail(v.error),c=_t(Wt,v,t,T)){if(T.readyState=1,g&&m.trigger("ajaxSend",[T,v]),h)return T;v.async&&0<v.timeout&&(d=C.setTimeout(function(){T.abort("timeout")},v.timeout));try{h=!1,c.send(a,l)}catch(e){if(h)throw e;l(-1,e)}}else l(-1,"No Transport");function l(e,t,n,r){var i,o,a,s,u,l=t;h||(h=!0,d&&C.clearTimeout(d),c=void 0,p=r||"",T.readyState=0<e?4:0,i=200<=e&&e<300||304===e,n&&(s=function(e,t,n){var r,i,o,a,s=e.contents,u=e.dataTypes;while("*"===u[0])u.shift(),void 0===r&&(r=e.mimeType||t.getResponseHeader("Content-Type"));if(r)for(i in s)if(s[i]&&s[i].test(r)){u.unshift(i);break}if(u[0]in n)o=u[0];else{for(i in n){if(!u[0]||e.converters[i+" "+u[0]]){o=i;break}a||(a=i)}o=o||a}if(o)return o!==u[0]&&u.unshift(o),n[o]}(v,T,n)),s=function(e,t,n,r){var i,o,a,s,u,l={},c=e.dataTypes.slice();if(c[1])for(a in e.converters)l[a.toLowerCase()]=e.converters[a];o=c.shift();while(o)if(e.responseFields[o]&&(n[e.responseFields[o]]=t),!u&&r&&e.dataFilter&&(t=e.dataFilter(t,e.dataType)),u=o,o=c.shift())if("*"===o)o=u;else if("*"!==u&&u!==o){if(!(a=l[u+" "+o]||l["* "+o]))for(i in l)if((s=i.split(" "))[1]===o&&(a=l[u+" "+s[0]]||l["* "+s[0]])){!0===a?a=l[i]:!0!==l[i]&&(o=s[0],c.unshift(s[1]));break}if(!0!==a)if(a&&e["throws"])t=a(t);else try{t=a(t)}catch(e){return{state:"parsererror",error:a?e:"No conversion from "+u+" to "+o}}}return{state:"success",data:t}}(v,s,T,i),i?(v.ifModified&&((u=T.getResponseHeader("Last-Modified"))&&(k.lastModified[f]=u),(u=T.getResponseHeader("etag"))&&(k.etag[f]=u)),204===e||"HEAD"===v.type?l="nocontent":304===e?l="notmodified":(l=s.state,o=s.data,i=!(a=s.error))):(a=l,!e&&l||(l="error",e<0&&(e=0))),T.status=e,T.statusText=(t||l)+"",i?x.resolveWith(y,[o,l,T]):x.rejectWith(y,[T,l,a]),T.statusCode(w),w=void 0,g&&m.trigger(i?"ajaxSuccess":"ajaxError",[T,v,i?o:a]),b.fireWith(y,[T,l]),g&&(m.trigger("ajaxComplete",[T,v]),--k.active||k.event.trigger("ajaxStop")))}return T},getJSON:function(e,t,n){return k.get(e,t,n,"json")},getScript:function(e,t){return k.get(e,void 0,t,"script")}}),k.each(["get","post"],function(e,i){k[i]=function(e,t,n,r){return m(t)&&(r=r||n,n=t,t=void 0),k.ajax(k.extend({url:e,type:i,dataType:r,data:t,success:n},k.isPlainObject(e)&&e))}}),k._evalUrl=function(e,t){return k.ajax({url:e,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,converters:{"text script":function(){}},dataFilter:function(e){k.globalEval(e,t)}})},k.fn.extend({wrapAll:function(e){var t;return this[0]&&(m(e)&&(e=e.call(this[0])),t=k(e,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){var e=this;while(e.firstElementChild)e=e.firstElementChild;return e}).append(this)),this},wrapInner:function(n){return m(n)?this.each(function(e){k(this).wrapInner(n.call(this,e))}):this.each(function(){var e=k(this),t=e.contents();t.length?t.wrapAll(n):e.append(n)})},wrap:function(t){var n=m(t);return this.each(function(e){k(this).wrapAll(n?t.call(this,e):t)})},unwrap:function(e){return this.parent(e).not("body").each(function(){k(this).replaceWith(this.childNodes)}),this}}),k.expr.pseudos.hidden=function(e){return!k.expr.pseudos.visible(e)},k.expr.pseudos.visible=function(e){return!!(e.offsetWidth||e.offsetHeight||e.getClientRects().length)},k.ajaxSettings.xhr=function(){try{return new C.XMLHttpRequest}catch(e){}};var Ut={0:200,1223:204},Xt=k.ajaxSettings.xhr();y.cors=!!Xt&&"withCredentials"in Xt,y.ajax=Xt=!!Xt,k.ajaxTransport(function(i){var o,a;if(y.cors||Xt&&!i.crossDomain)return{send:function(e,t){var n,r=i.xhr();if(r.open(i.type,i.url,i.async,i.username,i.password),i.xhrFields)for(n in i.xhrFields)r[n]=i.xhrFields[n];for(n in i.mimeType&&r.overrideMimeType&&r.overrideMimeType(i.mimeType),i.crossDomain||e["X-Requested-With"]||(e["X-Requested-With"]="XMLHttpRequest"),e)r.setRequestHeader(n,e[n]);o=function(e){return function(){o&&(o=a=r.onload=r.onerror=r.onabort=r.ontimeout=r.onreadystatechange=null,"abort"===e?r.abort():"error"===e?"number"!=typeof r.status?t(0,"error"):t(r.status,r.statusText):t(Ut[r.status]||r.status,r.statusText,"text"!==(r.responseType||"text")||"string"!=typeof r.responseText?{binary:r.response}:{text:r.responseText},r.getAllResponseHeaders()))}},r.onload=o(),a=r.onerror=r.ontimeout=o("error"),void 0!==r.onabort?r.onabort=a:r.onreadystatechange=function(){4===r.readyState&&C.setTimeout(function(){o&&a()})},o=o("abort");try{r.send(i.hasContent&&i.data||null)}catch(e){if(o)throw e}},abort:function(){o&&o()}}}),k.ajaxPrefilter(function(e){e.crossDomain&&(e.contents.script=!1)}),k.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(e){return k.globalEval(e),e}}}),k.ajaxPrefilter("script",function(e){void 0===e.cache&&(e.cache=!1),e.crossDomain&&(e.type="GET")}),k.ajaxTransport("script",function(n){var r,i;if(n.crossDomain||n.scriptAttrs)return{send:function(e,t){r=k("<script>").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),E.head.appendChild(r[0])},abort:function(){i&&i()}}});var Vt,Gt=[],Yt=/(=)\?(?=&|$)|\?\?/;k.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Gt.pop()||k.expando+"_"+kt++;return this[e]=!0,e}}),k.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Yt.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Yt.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=m(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Yt,"$1"+r):!1!==e.jsonp&&(e.url+=(St.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||k.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=C[r],C[r]=function(){o=arguments},n.always(function(){void 0===i?k(C).removeProp(r):C[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,Gt.push(r)),o&&m(i)&&i(o[0]),o=i=void 0}),"script"}),y.createHTMLDocument=((Vt=E.implementation.createHTMLDocument("").body).innerHTML="<form></form><form></form>",2===Vt.childNodes.length),k.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(y.createHTMLDocument?((r=(t=E.implementation.createHTMLDocument("")).createElement("base")).href=E.location.href,t.head.appendChild(r)):t=E),o=!n&&[],(i=D.exec(e))?[t.createElement(i[1])]:(i=we([e],t,o),o&&o.length&&k(o).remove(),k.merge([],i.childNodes)));var r,i,o},k.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1<s&&(r=mt(e.slice(s)),e=e.slice(0,s)),m(t)?(n=t,t=void 0):t&&"object"==typeof t&&(i="POST"),0<a.length&&k.ajax({url:e,type:i||"GET",dataType:"html",data:t}).done(function(e){o=arguments,a.html(r?k("<div>").append(k.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},k.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){k.fn[t]=function(e){return this.on(t,e)}}),k.expr.pseudos.animated=function(t){return k.grep(k.timers,function(e){return t===e.elem}).length},k.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=k.css(e,"position"),c=k(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=k.css(e,"top"),u=k.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),m(t)&&(t=t.call(e,n,k.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):c.css(f)}},k.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){k.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===k.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===k.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=k(e).offset()).top+=k.css(e,"borderTopWidth",!0),i.left+=k.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-k.css(r,"marginTop",!0),left:t.left-i.left-k.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===k.css(e,"position"))e=e.offsetParent;return e||ie})}}),k.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;k.fn[t]=function(e){return _(this,function(e,t,n){var r;if(x(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),k.each(["top","left"],function(e,n){k.cssHooks[n]=ze(y.pixelPosition,function(e,t){if(t)return t=_e(e,n),$e.test(t)?k(e).position()[n]+"px":t})}),k.each({Height:"height",Width:"width"},function(a,s){k.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){k.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return _(this,function(e,t,n){var r;return x(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?k.css(e,t,i):k.style(e,t,n,i)},s,n?e:void 0,n)}})}),k.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){k.fn[n]=function(e,t){return 0<arguments.length?this.on(n,null,e,t):this.trigger(n)}}),k.fn.extend({hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),k.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)}}),k.proxy=function(e,t){var n,r,i;if("string"==typeof t&&(n=e[t],t=e,e=n),m(e))return r=s.call(arguments,2),(i=function(){return e.apply(t||this,r.concat(s.call(arguments)))}).guid=e.guid=e.guid||k.guid++,i},k.holdReady=function(e){e?k.readyWait++:k.ready(!0)},k.isArray=Array.isArray,k.parseJSON=JSON.parse,k.nodeName=A,k.isFunction=m,k.isWindow=x,k.camelCase=V,k.type=w,k.now=Date.now,k.isNumeric=function(e){var t=k.type(e);return("number"===t||"string"===t)&&!isNaN(e-parseFloat(e))},"function"==typeof define&&define.amd&&define("jquery",[],function(){return k});var Qt=C.jQuery,Jt=C.$;return k.noConflict=function(e){return C.$===k&&(C.$=Jt),e&&C.jQuery===k&&(C.jQuery=Qt),k},e||(C.jQuery=C.$=k),k});
diff --git a/docs/_build/html/_static/language_data.js b/docs/_build/html/_static/language_data.js
deleted file mode 100644
index 34e19cc9d..000000000
--- a/docs/_build/html/_static/language_data.js
+++ /dev/null
@@ -1,118 +0,0 @@
-/*
- * language_data.js
- * ~~~~~~~~~~~~~~~~
- *
- * This script contains the language-specific data used by searchtools.js,
- * namely the list of stopwords, stemmer, scorer and splitter.
- *
- * :copyright: Copyright 2007-2019 by the Sphinx team, see AUTHORS.
- * :license: BSD, see LICENSE for details.
- *
- */
-
-var stopwords = ["aber","alle","allem","allen","aller","alles","als","also","am","an","ander","andere","anderem","anderen","anderer","anderes","anderm","andern","anderr","anders","auch","auf","aus","bei","bin","bis","bist","da","damit","dann","das","dasselbe","dazu","da\u00df","dein","deine","deinem","deinen","deiner","deines","dem","demselben","den","denn","denselben","der","derer","derselbe","derselben","des","desselben","dessen","dich","die","dies","diese","dieselbe","dieselben","diesem","diesen","dieser","dieses","dir","doch","dort","du","durch","ein","eine","einem","einen","einer","eines","einig","einige","einigem","einigen","einiger","einiges","einmal","er","es","etwas","euch","euer","eure","eurem","euren","eurer","eures","f\u00fcr","gegen","gewesen","hab","habe","haben","hat","hatte","hatten","hier","hin","hinter","ich","ihm","ihn","ihnen","ihr","ihre","ihrem","ihren","ihrer","ihres","im","in","indem","ins","ist","jede","jedem","jeden","jeder","jedes","jene","jenem","jenen","jener","jenes","jetzt","kann","kein","keine","keinem","keinen","keiner","keines","k\u00f6nnen","k\u00f6nnte","machen","man","manche","manchem","manchen","mancher","manches","mein","meine","meinem","meinen","meiner","meines","mich","mir","mit","muss","musste","nach","nicht","nichts","noch","nun","nur","ob","oder","ohne","sehr","sein","seine","seinem","seinen","seiner","seines","selbst","sich","sie","sind","so","solche","solchem","solchen","solcher","solches","soll","sollte","sondern","sonst","um","und","uns","unse","unsem","unsen","unser","unses","unter","viel","vom","von","vor","war","waren","warst","was","weg","weil","weiter","welche","welchem","welchen","welcher","welches","wenn","werde","werden","wie","wieder","will","wir","wird","wirst","wo","wollen","wollte","w\u00e4hrend","w\u00fcrde","w\u00fcrden","zu","zum","zur","zwar","zwischen","\u00fcber"];
-
-
-/* Non-minified version JS is _stemmer.js if file is provided */ 
-var JSX={};(function(j){function l(b,e){var a=function(){};a.prototype=e.prototype;var c=new a;for(var d in b){b[d].prototype=c}}function H(c,b){for(var a in b.prototype)if(b.prototype.hasOwnProperty(a))c.prototype[a]=b.prototype[a]}function g(a,b,d){function c(a,b,c){delete a[b];a[b]=c;return c}Object.defineProperty(a,b,{get:function(){return c(a,b,d())},set:function(d){c(a,b,d)},enumerable:true,configurable:true})}function I(a,b,c){return a[b]=a[b]/c|0}var C=parseInt;var r=parseFloat;function J(a){return a!==a}var z=isFinite;var y=encodeURIComponent;var x=decodeURIComponent;var w=encodeURI;var u=decodeURI;var t=Object.prototype.toString;var B=Object.prototype.hasOwnProperty;function i(){}j.require=function(b){var a=q[b];return a!==undefined?a:null};j.profilerIsRunning=function(){return i.getResults!=null};j.getProfileResults=function(){return(i.getResults||function(){return{}})()};j.postProfileResults=function(a,b){if(i.postResults==null)throw new Error('profiler has not been turned on');return i.postResults(a,b)};j.resetProfileResults=function(){if(i.resetResults==null)throw new Error('profiler has not been turned on');return i.resetResults()};j.DEBUG=false;function s(){};l([s],Error);function c(a,b,c){this.F=a.length;this.K=a;this.L=b;this.I=c;this.H=null;this.P=null};l([c],Object);function o(){};l([o],Object);function e(){var a;var b;var c;this.G={};a=this.D='';b=this._=0;c=this.A=a.length;this.E=0;this.C=b;this.B=c};l([e],o);function v(a,b){a.D=b.D;a._=b._;a.A=b.A;a.E=b.E;a.C=b.C;a.B=b.B};function f(b,d,c,e){var a;if(b._>=b.A){return false}a=b.D.charCodeAt(b._);if(a>e||a<c){return false}a-=c;if((d[a>>>3]&1<<(a&7))===0){return false}b._++;return true};function m(b,d,c,e){var a;if(b._<=b.E){return false}a=b.D.charCodeAt(b._-1);if(a>e||a<c){return false}a-=c;if((d[a>>>3]&1<<(a&7))===0){return false}b._--;return true};function n(a,d,c,e){var b;if(a._>=a.A){return false}b=a.D.charCodeAt(a._);if(b>e||b<c){a._++;return true}b-=c;if((d[b>>>3]&1<<(b&7))===0){a._++;return true}return false};function k(a,b,d){var c;if(a.A-a._<b){return false}if(a.D.slice(c=a._,c+b)!==d){return false}a._+=b;return true};function d(a,b,d){var c;if(a._-a.E<b){return false}if(a.D.slice((c=a._)-b,c)!==d){return false}a._-=b;return true};function p(f,m,p){var b;var d;var e;var n;var g;var k;var l;var i;var h;var c;var a;var j;var o;b=0;d=p;e=f._;n=f.A;g=0;k=0;l=false;while(true){i=b+(d-b>>>1);h=0;c=g<k?g:k;a=m[i];for(j=c;j<a.F;j++){if(e+c===n){h=-1;break}h=f.D.charCodeAt(e+c)-a.K.charCodeAt(j);if(h!==0){break}c++}if(h<0){d=i;k=c}else{b=i;g=c}if(d-b<=1){if(b>0){break}if(d===b){break}if(l){break}l=true}}while(true){a=m[b];if(g>=a.F){f._=e+a.F|0;if(a.H==null){return a.I}o=a.H(a.P);f._=e+a.F|0;if(o){return a.I}}b=a.L;if(b<0){return 0}}return-1};function h(d,m,p){var b;var g;var e;var n;var f;var k;var l;var i;var h;var c;var a;var j;var o;b=0;g=p;e=d._;n=d.E;f=0;k=0;l=false;while(true){i=b+(g-b>>1);h=0;c=f<k?f:k;a=m[i];for(j=a.F-1-c;j>=0;j--){if(e-c===n){h=-1;break}h=d.D.charCodeAt(e-1-c)-a.K.charCodeAt(j);if(h!==0){break}c++}if(h<0){g=i;k=c}else{b=i;f=c}if(g-b<=1){if(b>0){break}if(g===b){break}if(l){break}l=true}}while(true){a=m[b];if(f>=a.F){d._=e-a.F|0;if(a.H==null){return a.I}o=a.H(d);d._=e-a.F|0;if(o){return a.I}}b=a.L;if(b<0){return 0}}return-1};function D(a,b,d,e){var c;c=e.length-(d-b);a.D=a.D.slice(0,b)+e+a.D.slice(d);a.A+=c|0;if(a._>=d){a._+=c|0}else if(a._>b){a._=b}return c|0};function b(a,f){var b;var c;var d;var e;b=false;if((c=a.C)<0||c>(d=a.B)||d>(e=a.A)||e>a.D.length?false:true){D(a,a.C,a.B,f);b=true}return b};e.prototype.J=function(){return false};e.prototype.W=function(b){var a;var c;var d;var e;a=this.G['.'+b];if(a==null){c=this.D=b;d=this._=0;e=this.A=c.length;this.E=0;this.C=d;this.B=e;this.J();a=this.D;this.G['.'+b]=a}return a};e.prototype.stemWord=e.prototype.W;e.prototype.X=function(e){var d;var b;var c;var a;var f;var g;var h;d=[];for(b=0;b<e.length;b++){c=e[b];a=this.G['.'+c];if(a==null){f=this.D=c;g=this._=0;h=this.A=f.length;this.E=0;this.C=g;this.B=h;this.J();a=this.D;this.G['.'+c]=a}d.push(a)}return d};e.prototype.stemWords=e.prototype.X;function a(){e.call(this);this.I_x=0;this.I_p2=0;this.I_p1=0};l([a],e);a.prototype.M=function(a){this.I_x=a.I_x;this.I_p2=a.I_p2;this.I_p1=a.I_p1;v(this,a)};a.prototype.copy_from=a.prototype.M;a.prototype.U=function(){var m;var r;var n;var o;var d;var q;var e;var c;var g;var h;var i;var j;var l;var s;var p;m=this._;a:while(true){r=this._;e=true;b:while(e===true){e=false;c=true;c:while(c===true){c=false;n=this._;g=true;d:while(g===true){g=false;this.C=this._;if(!k(this,1,'ß')){break d}this.B=this._;if(!b(this,'ss')){return false}break c}s=this._=n;if(s>=this.A){break b}this._++}continue a}this._=r;break a}this._=m;b:while(true){o=this._;h=true;d:while(h===true){h=false;e:while(true){d=this._;i=true;a:while(i===true){i=false;if(!f(this,a.g_v,97,252)){break a}this.C=this._;j=true;f:while(j===true){j=false;q=this._;l=true;c:while(l===true){l=false;if(!k(this,1,'u')){break c}this.B=this._;if(!f(this,a.g_v,97,252)){break c}if(!b(this,'U')){return false}break f}this._=q;if(!k(this,1,'y')){break a}this.B=this._;if(!f(this,a.g_v,97,252)){break a}if(!b(this,'Y')){return false}}this._=d;break e}p=this._=d;if(p>=this.A){break d}this._++}continue b}this._=o;break b}return true};a.prototype.r_prelude=a.prototype.U;function G(c){var s;var n;var o;var p;var e;var r;var d;var g;var h;var i;var j;var l;var m;var t;var q;s=c._;a:while(true){n=c._;d=true;b:while(d===true){d=false;g=true;c:while(g===true){g=false;o=c._;h=true;d:while(h===true){h=false;c.C=c._;if(!k(c,1,'ß')){break d}c.B=c._;if(!b(c,'ss')){return false}break c}t=c._=o;if(t>=c.A){break b}c._++}continue a}c._=n;break a}c._=s;b:while(true){p=c._;i=true;d:while(i===true){i=false;e:while(true){e=c._;j=true;a:while(j===true){j=false;if(!f(c,a.g_v,97,252)){break a}c.C=c._;l=true;f:while(l===true){l=false;r=c._;m=true;c:while(m===true){m=false;if(!k(c,1,'u')){break c}c.B=c._;if(!f(c,a.g_v,97,252)){break c}if(!b(c,'U')){return false}break f}c._=r;if(!k(c,1,'y')){break a}c.B=c._;if(!f(c,a.g_v,97,252)){break a}if(!b(c,'Y')){return false}}c._=e;break e}q=c._=e;if(q>=c.A){break d}c._++}continue b}c._=p;break b}return true};a.prototype.S=function(){var j;var b;var d;var e;var c;var g;var h;var i;var l;var k;this.I_p1=i=this.A;this.I_p2=i;j=l=this._;b=l+3|0;if(0>b||b>i){return false}k=this._=b;this.I_x=k;this._=j;a:while(true){d=true;b:while(d===true){d=false;if(!f(this,a.g_v,97,252)){break b}break a}if(this._>=this.A){return false}this._++}a:while(true){e=true;b:while(e===true){e=false;if(!n(this,a.g_v,97,252)){break b}break a}if(this._>=this.A){return false}this._++}this.I_p1=this._;c=true;a:while(c===true){c=false;if(!(this.I_p1<this.I_x)){break a}this.I_p1=this.I_x}a:while(true){g=true;b:while(g===true){g=false;if(!f(this,a.g_v,97,252)){break b}break a}if(this._>=this.A){return false}this._++}a:while(true){h=true;b:while(h===true){h=false;if(!n(this,a.g_v,97,252)){break b}break a}if(this._>=this.A){return false}this._++}this.I_p2=this._;return true};a.prototype.r_mark_regions=a.prototype.S;function F(b){var k;var c;var e;var g;var d;var h;var i;var j;var m;var l;b.I_p1=j=b.A;b.I_p2=j;k=m=b._;c=m+3|0;if(0>c||c>j){return false}l=b._=c;b.I_x=l;b._=k;a:while(true){e=true;b:while(e===true){e=false;if(!f(b,a.g_v,97,252)){break b}break a}if(b._>=b.A){return false}b._++}a:while(true){g=true;b:while(g===true){g=false;if(!n(b,a.g_v,97,252)){break b}break a}if(b._>=b.A){return false}b._++}b.I_p1=b._;d=true;a:while(d===true){d=false;if(!(b.I_p1<b.I_x)){break a}b.I_p1=b.I_x}a:while(true){h=true;b:while(h===true){h=false;if(!f(b,a.g_v,97,252)){break b}break a}if(b._>=b.A){return false}b._++}a:while(true){i=true;b:while(i===true){i=false;if(!n(b,a.g_v,97,252)){break b}break a}if(b._>=b.A){return false}b._++}b.I_p2=b._;return true};a.prototype.T=function(){var c;var e;var d;b:while(true){e=this._;d=true;a:while(d===true){d=false;this.C=this._;c=p(this,a.a_0,6);if(c===0){break a}this.B=this._;switch(c){case 0:break a;case 1:if(!b(this,'y')){return false}break;case 2:if(!b(this,'u')){return false}break;case 3:if(!b(this,'a')){return false}break;case 4:if(!b(this,'o')){return false}break;case 5:if(!b(this,'u')){return false}break;case 6:if(this._>=this.A){break a}this._++;break}continue b}this._=e;break b}return true};a.prototype.r_postlude=a.prototype.T;function E(c){var d;var f;var e;b:while(true){f=c._;e=true;a:while(e===true){e=false;c.C=c._;d=p(c,a.a_0,6);if(d===0){break a}c.B=c._;switch(d){case 0:break a;case 1:if(!b(c,'y')){return false}break;case 2:if(!b(c,'u')){return false}break;case 3:if(!b(c,'a')){return false}break;case 4:if(!b(c,'o')){return false}break;case 5:if(!b(c,'u')){return false}break;case 6:if(c._>=c.A){break a}c._++;break}continue b}c._=f;break b}return true};a.prototype.Q=function(){return!(this.I_p1<=this._)?false:true};a.prototype.r_R1=a.prototype.Q;a.prototype.R=function(){return!(this.I_p2<=this._)?false:true};a.prototype.r_R2=a.prototype.R;a.prototype.V=function(){var c;var z;var n;var x;var y;var f;var A;var B;var p;var w;var g;var j;var k;var l;var e;var o;var i;var q;var r;var s;var t;var u;var v;var D;var E;var F;var G;var H;var I;var J;var K;var L;var M;var C;z=this.A-this._;j=true;a:while(j===true){j=false;this.B=this._;c=h(this,a.a_1,7);if(c===0){break a}this.C=D=this._;if(!(!(this.I_p1<=D)?false:true)){break a}switch(c){case 0:break a;case 1:if(!b(this,'')){return false}break;case 2:if(!b(this,'')){return false}n=this.A-this._;k=true;b:while(k===true){k=false;this.B=this._;if(!d(this,1,'s')){this._=this.A-n;break b}this.C=this._;if(!d(this,3,'nis')){this._=this.A-n;break b}if(!b(this,'')){return false}}break;case 3:if(!m(this,a.g_s_ending,98,116)){break a}if(!b(this,'')){return false}break}}G=this._=(F=this.A)-z;x=F-G;l=true;a:while(l===true){l=false;this.B=this._;c=h(this,a.a_2,4);if(c===0){break a}this.C=E=this._;if(!(!(this.I_p1<=E)?false:true)){break a}switch(c){case 0:break a;case 1:if(!b(this,'')){return false}break;case 2:if(!m(this,a.g_st_ending,98,116)){break a}e=this._-3|0;if(this.E>e||e>this.A){break a}this._=e;if(!b(this,'')){return false}break}}C=this._=(M=this.A)-x;y=M-C;o=true;a:while(o===true){o=false;this.B=this._;c=h(this,a.a_4,8);if(c===0){break a}this.C=H=this._;if(!(!(this.I_p2<=H)?false:true)){break a}switch(c){case 0:break a;case 1:if(!b(this,'')){return false}f=this.A-this._;i=true;b:while(i===true){i=false;this.B=this._;if(!d(this,2,'ig')){this._=this.A-f;break b}this.C=I=this._;A=this.A-I;q=true;c:while(q===true){q=false;if(!d(this,1,'e')){break c}this._=this.A-f;break b}J=this._=this.A-A;if(!(!(this.I_p2<=J)?false:true)){this._=this.A-f;break b}if(!b(this,'')){return false}}break;case 2:B=this.A-this._;r=true;b:while(r===true){r=false;if(!d(this,1,'e')){break b}break a}this._=this.A-B;if(!b(this,'')){return false}break;case 3:if(!b(this,'')){return false}p=this.A-this._;s=true;b:while(s===true){s=false;this.B=this._;t=true;c:while(t===true){t=false;w=this.A-this._;u=true;d:while(u===true){u=false;if(!d(this,2,'er')){break d}break c}this._=this.A-w;if(!d(this,2,'en')){this._=this.A-p;break b}}this.C=K=this._;if(!(!(this.I_p1<=K)?false:true)){this._=this.A-p;break b}if(!b(this,'')){return false}}break;case 4:if(!b(this,'')){return false}g=this.A-this._;v=true;b:while(v===true){v=false;this.B=this._;c=h(this,a.a_3,2);if(c===0){this._=this.A-g;break b}this.C=L=this._;if(!(!(this.I_p2<=L)?false:true)){this._=this.A-g;break b}switch(c){case 0:this._=this.A-g;break b;case 1:if(!b(this,'')){return false}break}}break}}this._=this.A-y;return true};a.prototype.r_standard_suffix=a.prototype.V;function A(c){var e;var A;var j;var y;var z;var g;var B;var C;var q;var x;var i;var k;var l;var n;var f;var p;var o;var r;var s;var t;var u;var v;var w;var E;var F;var G;var H;var I;var J;var K;var L;var M;var N;var D;A=c.A-c._;k=true;a:while(k===true){k=false;c.B=c._;e=h(c,a.a_1,7);if(e===0){break a}c.C=E=c._;if(!(!(c.I_p1<=E)?false:true)){break a}switch(e){case 0:break a;case 1:if(!b(c,'')){return false}break;case 2:if(!b(c,'')){return false}j=c.A-c._;l=true;b:while(l===true){l=false;c.B=c._;if(!d(c,1,'s')){c._=c.A-j;break b}c.C=c._;if(!d(c,3,'nis')){c._=c.A-j;break b}if(!b(c,'')){return false}}break;case 3:if(!m(c,a.g_s_ending,98,116)){break a}if(!b(c,'')){return false}break}}H=c._=(G=c.A)-A;y=G-H;n=true;a:while(n===true){n=false;c.B=c._;e=h(c,a.a_2,4);if(e===0){break a}c.C=F=c._;if(!(!(c.I_p1<=F)?false:true)){break a}switch(e){case 0:break a;case 1:if(!b(c,'')){return false}break;case 2:if(!m(c,a.g_st_ending,98,116)){break a}f=c._-3|0;if(c.E>f||f>c.A){break a}c._=f;if(!b(c,'')){return false}break}}D=c._=(N=c.A)-y;z=N-D;p=true;a:while(p===true){p=false;c.B=c._;e=h(c,a.a_4,8);if(e===0){break a}c.C=I=c._;if(!(!(c.I_p2<=I)?false:true)){break a}switch(e){case 0:break a;case 1:if(!b(c,'')){return false}g=c.A-c._;o=true;b:while(o===true){o=false;c.B=c._;if(!d(c,2,'ig')){c._=c.A-g;break b}c.C=J=c._;B=c.A-J;r=true;c:while(r===true){r=false;if(!d(c,1,'e')){break c}c._=c.A-g;break b}K=c._=c.A-B;if(!(!(c.I_p2<=K)?false:true)){c._=c.A-g;break b}if(!b(c,'')){return false}}break;case 2:C=c.A-c._;s=true;b:while(s===true){s=false;if(!d(c,1,'e')){break b}break a}c._=c.A-C;if(!b(c,'')){return false}break;case 3:if(!b(c,'')){return false}q=c.A-c._;t=true;b:while(t===true){t=false;c.B=c._;u=true;c:while(u===true){u=false;x=c.A-c._;v=true;d:while(v===true){v=false;if(!d(c,2,'er')){break d}break c}c._=c.A-x;if(!d(c,2,'en')){c._=c.A-q;break b}}c.C=L=c._;if(!(!(c.I_p1<=L)?false:true)){c._=c.A-q;break b}if(!b(c,'')){return false}}break;case 4:if(!b(c,'')){return false}i=c.A-c._;w=true;b:while(w===true){w=false;c.B=c._;e=h(c,a.a_3,2);if(e===0){c._=c.A-i;break b}c.C=M=c._;if(!(!(c.I_p2<=M)?false:true)){c._=c.A-i;break b}switch(e){case 0:c._=c.A-i;break b;case 1:if(!b(c,'')){return false}break}}break}}c._=c.A-z;return true};a.prototype.J=function(){var f;var g;var h;var b;var a;var c;var d;var i;var j;var e;f=this._;b=true;a:while(b===true){b=false;if(!G(this)){break a}}i=this._=f;g=i;a=true;a:while(a===true){a=false;if(!F(this)){break a}}j=this._=g;this.E=j;this._=this.A;c=true;a:while(c===true){c=false;if(!A(this)){break a}}e=this._=this.E;h=e;d=true;a:while(d===true){d=false;if(!E(this)){break a}}this._=h;return true};a.prototype.stem=a.prototype.J;a.prototype.N=function(b){return b instanceof a};a.prototype.equals=a.prototype.N;a.prototype.O=function(){var c;var a;var b;var d;c='GermanStemmer';a=0;for(b=0;b<c.length;b++){d=c.charCodeAt(b);a=(a<<5)-a+d;a=a&a}return a|0};a.prototype.hashCode=a.prototype.O;a.serialVersionUID=1;g(a,'methodObject',function(){return new a});g(a,'a_0',function(){return[new c('',-1,6),new c('U',0,2),new c('Y',0,1),new c('ä',0,3),new c('ö',0,4),new c('ü',0,5)]});g(a,'a_1',function(){return[new c('e',-1,2),new c('em',-1,1),new c('en',-1,2),new c('ern',-1,1),new c('er',-1,1),new c('s',-1,3),new c('es',5,2)]});g(a,'a_2',function(){return[new c('en',-1,1),new c('er',-1,1),new c('st',-1,2),new c('est',2,1)]});g(a,'a_3',function(){return[new c('ig',-1,1),new c('lich',-1,1)]});g(a,'a_4',function(){return[new c('end',-1,1),new c('ig',-1,2),new c('ung',-1,1),new c('lich',-1,3),new c('isch',-1,2),new c('ik',-1,2),new c('heit',-1,3),new c('keit',-1,4)]});g(a,'g_v',function(){return[17,65,16,1,0,0,0,0,0,0,0,0,0,0,0,0,8,0,32,8]});g(a,'g_s_ending',function(){return[117,30,5]});g(a,'g_st_ending',function(){return[117,30,4]});var q={'src/stemmer.jsx':{Stemmer:o},'src/german-stemmer.jsx':{GermanStemmer:a}}}(JSX))
-var Stemmer = JSX.require("src/german-stemmer.jsx").GermanStemmer;
-
-
-
-
-
-var splitChars = (function() {
-    var result = {};
-    var singles = [96, 180, 187, 191, 215, 247, 749, 885, 903, 907, 909, 930, 1014, 1648,
-         1748, 1809, 2416, 2473, 2481, 2526, 2601, 2609, 2612, 2615, 2653, 2702,
-         2706, 2729, 2737, 2740, 2857, 2865, 2868, 2910, 2928, 2948, 2961, 2971,
-         2973, 3085, 3089, 3113, 3124, 3213, 3217, 3241, 3252, 3295, 3341, 3345,
-         3369, 3506, 3516, 3633, 3715, 3721, 3736, 3744, 3748, 3750, 3756, 3761,
-         3781, 3912, 4239, 4347, 4681, 4695, 4697, 4745, 4785, 4799, 4801, 4823,
-         4881, 5760, 5901, 5997, 6313, 7405, 8024, 8026, 8028, 8030, 8117, 8125,
-         8133, 8181, 8468, 8485, 8487, 8489, 8494, 8527, 11311, 11359, 11687, 11695,
-         11703, 11711, 11719, 11727, 11735, 12448, 12539, 43010, 43014, 43019, 43587,
-         43696, 43713, 64286, 64297, 64311, 64317, 64319, 64322, 64325, 65141];
-    var i, j, start, end;
-    for (i = 0; i < singles.length; i++) {
-        result[singles[i]] = true;
-    }
-    var ranges = [[0, 47], [58, 64], [91, 94], [123, 169], [171, 177], [182, 184], [706, 709],
-         [722, 735], [741, 747], [751, 879], [888, 889], [894, 901], [1154, 1161],
-         [1318, 1328], [1367, 1368], [1370, 1376], [1416, 1487], [1515, 1519], [1523, 1568],
-         [1611, 1631], [1642, 1645], [1750, 1764], [1767, 1773], [1789, 1790], [1792, 1807],
-         [1840, 1868], [1958, 1968], [1970, 1983], [2027, 2035], [2038, 2041], [2043, 2047],
-         [2070, 2073], [2075, 2083], [2085, 2087], [2089, 2307], [2362, 2364], [2366, 2383],
-         [2385, 2391], [2402, 2405], [2419, 2424], [2432, 2436], [2445, 2446], [2449, 2450],
-         [2483, 2485], [2490, 2492], [2494, 2509], [2511, 2523], [2530, 2533], [2546, 2547],
-         [2554, 2564], [2571, 2574], [2577, 2578], [2618, 2648], [2655, 2661], [2672, 2673],
-         [2677, 2692], [2746, 2748], [2750, 2767], [2769, 2783], [2786, 2789], [2800, 2820],
-         [2829, 2830], [2833, 2834], [2874, 2876], [2878, 2907], [2914, 2917], [2930, 2946],
-         [2955, 2957], [2966, 2968], [2976, 2978], [2981, 2983], [2987, 2989], [3002, 3023],
-         [3025, 3045], [3059, 3076], [3130, 3132], [3134, 3159], [3162, 3167], [3170, 3173],
-         [3184, 3191], [3199, 3204], [3258, 3260], [3262, 3293], [3298, 3301], [3312, 3332],
-         [3386, 3388], [3390, 3423], [3426, 3429], [3446, 3449], [3456, 3460], [3479, 3481],
-         [3518, 3519], [3527, 3584], [3636, 3647], [3655, 3663], [3674, 3712], [3717, 3718],
-         [3723, 3724], [3726, 3731], [3752, 3753], [3764, 3772], [3774, 3775], [3783, 3791],
-         [3802, 3803], [3806, 3839], [3841, 3871], [3892, 3903], [3949, 3975], [3980, 4095],
-         [4139, 4158], [4170, 4175], [4182, 4185], [4190, 4192], [4194, 4196], [4199, 4205],
-         [4209, 4212], [4226, 4237], [4250, 4255], [4294, 4303], [4349, 4351], [4686, 4687],
-         [4702, 4703], [4750, 4751], [4790, 4791], [4806, 4807], [4886, 4887], [4955, 4968],
-         [4989, 4991], [5008, 5023], [5109, 5120], [5741, 5742], [5787, 5791], [5867, 5869],
-         [5873, 5887], [5906, 5919], [5938, 5951], [5970, 5983], [6001, 6015], [6068, 6102],
-         [6104, 6107], [6109, 6111], [6122, 6127], [6138, 6159], [6170, 6175], [6264, 6271],
-         [6315, 6319], [6390, 6399], [6429, 6469], [6510, 6511], [6517, 6527], [6572, 6592],
-         [6600, 6607], [6619, 6655], [6679, 6687], [6741, 6783], [6794, 6799], [6810, 6822],
-         [6824, 6916], [6964, 6980], [6988, 6991], [7002, 7042], [7073, 7085], [7098, 7167],
-         [7204, 7231], [7242, 7244], [7294, 7400], [7410, 7423], [7616, 7679], [7958, 7959],
-         [7966, 7967], [8006, 8007], [8014, 8015], [8062, 8063], [8127, 8129], [8141, 8143],
-         [8148, 8149], [8156, 8159], [8173, 8177], [8189, 8303], [8306, 8307], [8314, 8318],
-         [8330, 8335], [8341, 8449], [8451, 8454], [8456, 8457], [8470, 8472], [8478, 8483],
-         [8506, 8507], [8512, 8516], [8522, 8525], [8586, 9311], [9372, 9449], [9472, 10101],
-         [10132, 11263], [11493, 11498], [11503, 11516], [11518, 11519], [11558, 11567],
-         [11622, 11630], [11632, 11647], [11671, 11679], [11743, 11822], [11824, 12292],
-         [12296, 12320], [12330, 12336], [12342, 12343], [12349, 12352], [12439, 12444],
-         [12544, 12548], [12590, 12592], [12687, 12689], [12694, 12703], [12728, 12783],
-         [12800, 12831], [12842, 12880], [12896, 12927], [12938, 12976], [12992, 13311],
-         [19894, 19967], [40908, 40959], [42125, 42191], [42238, 42239], [42509, 42511],
-         [42540, 42559], [42592, 42593], [42607, 42622], [42648, 42655], [42736, 42774],
-         [42784, 42785], [42889, 42890], [42893, 43002], [43043, 43055], [43062, 43071],
-         [43124, 43137], [43188, 43215], [43226, 43249], [43256, 43258], [43260, 43263],
-         [43302, 43311], [43335, 43359], [43389, 43395], [43443, 43470], [43482, 43519],
-         [43561, 43583], [43596, 43599], [43610, 43615], [43639, 43641], [43643, 43647],
-         [43698, 43700], [43703, 43704], [43710, 43711], [43715, 43738], [43742, 43967],
-         [44003, 44015], [44026, 44031], [55204, 55215], [55239, 55242], [55292, 55295],
-         [57344, 63743], [64046, 64047], [64110, 64111], [64218, 64255], [64263, 64274],
-         [64280, 64284], [64434, 64466], [64830, 64847], [64912, 64913], [64968, 65007],
-         [65020, 65135], [65277, 65295], [65306, 65312], [65339, 65344], [65371, 65381],
-         [65471, 65473], [65480, 65481], [65488, 65489], [65496, 65497]];
-    for (i = 0; i < ranges.length; i++) {
-        start = ranges[i][0];
-        end = ranges[i][1];
-        for (j = start; j <= end; j++) {
-            result[j] = true;
-        }
-    }
-    return result;
-})();
-
-function splitQuery(query) {
-    var result = [];
-    var start = -1;
-    for (var i = 0; i < query.length; i++) {
-        if (splitChars[query.charCodeAt(i)]) {
-            if (start !== -1) {
-                result.push(query.slice(start, i));
-                start = -1;
-            }
-        } else if (start === -1) {
-            start = i;
-        }
-    }
-    if (start !== -1) {
-        result.push(query.slice(start));
-    }
-    return result;
-}
-
-
diff --git a/docs/_build/html/_static/minus.png b/docs/_build/html/_static/minus.png
deleted file mode 100644
index d96755fdaf8bb2214971e0db9c1fd3077d7c419d..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 90
zcmeAS@N?(olHy`uVBq!ia0vp^+#t*WBp7;*Yy1LIik>cxAr*|t7R?Mi>2?kWtu=nj
kDsEF_5m^0CR;1wuP-*O&G^0G}KYk!hp00i_>zopr08q^qX#fBK

diff --git a/docs/_build/html/_static/plus.png b/docs/_build/html/_static/plus.png
deleted file mode 100644
index 7107cec93a979b9a5f64843235a16651d563ce2d..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 90
zcmeAS@N?(olHy`uVBq!ia0vp^+#t*WBp7;*Yy1LIik>cxAr*|t7R?Mi>2?kWtu>-2
m3q%Vub%g%s<8sJhVPMczOq}xhg9DJoz~JfX=d#Wzp$Pyb1r*Kz

diff --git a/docs/_build/html/_static/pygments.css b/docs/_build/html/_static/pygments.css
deleted file mode 100644
index dd6621d88..000000000
--- a/docs/_build/html/_static/pygments.css
+++ /dev/null
@@ -1,77 +0,0 @@
-.highlight .hll { background-color: #ffffcc }
-.highlight  { background: #f8f8f8; }
-.highlight .c { color: #8f5902; font-style: italic } /* Comment */
-.highlight .err { color: #a40000; border: 1px solid #ef2929 } /* Error */
-.highlight .g { color: #000000 } /* Generic */
-.highlight .k { color: #004461; font-weight: bold } /* Keyword */
-.highlight .l { color: #000000 } /* Literal */
-.highlight .n { color: #000000 } /* Name */
-.highlight .o { color: #582800 } /* Operator */
-.highlight .x { color: #000000 } /* Other */
-.highlight .p { color: #000000; font-weight: bold } /* Punctuation */
-.highlight .ch { color: #8f5902; font-style: italic } /* Comment.Hashbang */
-.highlight .cm { color: #8f5902; font-style: italic } /* Comment.Multiline */
-.highlight .cp { color: #8f5902 } /* Comment.Preproc */
-.highlight .cpf { color: #8f5902; font-style: italic } /* Comment.PreprocFile */
-.highlight .c1 { color: #8f5902; font-style: italic } /* Comment.Single */
-.highlight .cs { color: #8f5902; font-style: italic } /* Comment.Special */
-.highlight .gd { color: #a40000 } /* Generic.Deleted */
-.highlight .ge { color: #000000; font-style: italic } /* Generic.Emph */
-.highlight .gr { color: #ef2929 } /* Generic.Error */
-.highlight .gh { color: #000080; font-weight: bold } /* Generic.Heading */
-.highlight .gi { color: #00A000 } /* Generic.Inserted */
-.highlight .go { color: #888888 } /* Generic.Output */
-.highlight .gp { color: #745334 } /* Generic.Prompt */
-.highlight .gs { color: #000000; font-weight: bold } /* Generic.Strong */
-.highlight .gu { color: #800080; font-weight: bold } /* Generic.Subheading */
-.highlight .gt { color: #a40000; font-weight: bold } /* Generic.Traceback */
-.highlight .kc { color: #004461; font-weight: bold } /* Keyword.Constant */
-.highlight .kd { color: #004461; font-weight: bold } /* Keyword.Declaration */
-.highlight .kn { color: #004461; font-weight: bold } /* Keyword.Namespace */
-.highlight .kp { color: #004461; font-weight: bold } /* Keyword.Pseudo */
-.highlight .kr { color: #004461; font-weight: bold } /* Keyword.Reserved */
-.highlight .kt { color: #004461; font-weight: bold } /* Keyword.Type */
-.highlight .ld { color: #000000 } /* Literal.Date */
-.highlight .m { color: #990000 } /* Literal.Number */
-.highlight .s { color: #4e9a06 } /* Literal.String */
-.highlight .na { color: #c4a000 } /* Name.Attribute */
-.highlight .nb { color: #004461 } /* Name.Builtin */
-.highlight .nc { color: #000000 } /* Name.Class */
-.highlight .no { color: #000000 } /* Name.Constant */
-.highlight .nd { color: #888888 } /* Name.Decorator */
-.highlight .ni { color: #ce5c00 } /* Name.Entity */
-.highlight .ne { color: #cc0000; font-weight: bold } /* Name.Exception */
-.highlight .nf { color: #000000 } /* Name.Function */
-.highlight .nl { color: #f57900 } /* Name.Label */
-.highlight .nn { color: #000000 } /* Name.Namespace */
-.highlight .nx { color: #000000 } /* Name.Other */
-.highlight .py { color: #000000 } /* Name.Property */
-.highlight .nt { color: #004461; font-weight: bold } /* Name.Tag */
-.highlight .nv { color: #000000 } /* Name.Variable */
-.highlight .ow { color: #004461; font-weight: bold } /* Operator.Word */
-.highlight .w { color: #f8f8f8; text-decoration: underline } /* Text.Whitespace */
-.highlight .mb { color: #990000 } /* Literal.Number.Bin */
-.highlight .mf { color: #990000 } /* Literal.Number.Float */
-.highlight .mh { color: #990000 } /* Literal.Number.Hex */
-.highlight .mi { color: #990000 } /* Literal.Number.Integer */
-.highlight .mo { color: #990000 } /* Literal.Number.Oct */
-.highlight .sa { color: #4e9a06 } /* Literal.String.Affix */
-.highlight .sb { color: #4e9a06 } /* Literal.String.Backtick */
-.highlight .sc { color: #4e9a06 } /* Literal.String.Char */
-.highlight .dl { color: #4e9a06 } /* Literal.String.Delimiter */
-.highlight .sd { color: #8f5902; font-style: italic } /* Literal.String.Doc */
-.highlight .s2 { color: #4e9a06 } /* Literal.String.Double */
-.highlight .se { color: #4e9a06 } /* Literal.String.Escape */
-.highlight .sh { color: #4e9a06 } /* Literal.String.Heredoc */
-.highlight .si { color: #4e9a06 } /* Literal.String.Interpol */
-.highlight .sx { color: #4e9a06 } /* Literal.String.Other */
-.highlight .sr { color: #4e9a06 } /* Literal.String.Regex */
-.highlight .s1 { color: #4e9a06 } /* Literal.String.Single */
-.highlight .ss { color: #4e9a06 } /* Literal.String.Symbol */
-.highlight .bp { color: #3465a4 } /* Name.Builtin.Pseudo */
-.highlight .fm { color: #000000 } /* Name.Function.Magic */
-.highlight .vc { color: #000000 } /* Name.Variable.Class */
-.highlight .vg { color: #000000 } /* Name.Variable.Global */
-.highlight .vi { color: #000000 } /* Name.Variable.Instance */
-.highlight .vm { color: #000000 } /* Name.Variable.Magic */
-.highlight .il { color: #990000 } /* Literal.Number.Integer.Long */
\ No newline at end of file
diff --git a/docs/_build/html/_static/searchtools.js b/docs/_build/html/_static/searchtools.js
deleted file mode 100644
index 6031f9913..000000000
--- a/docs/_build/html/_static/searchtools.js
+++ /dev/null
@@ -1,506 +0,0 @@
-/*
- * searchtools.js
- * ~~~~~~~~~~~~~~~~
- *
- * Sphinx JavaScript utilities for the full-text search.
- *
- * :copyright: Copyright 2007-2019 by the Sphinx team, see AUTHORS.
- * :license: BSD, see LICENSE for details.
- *
- */
-
-if (!Scorer) {
-  /**
-   * Simple result scoring code.
-   */
-  var Scorer = {
-    // Implement the following function to further tweak the score for each result
-    // The function takes a result array [filename, title, anchor, descr, score]
-    // and returns the new score.
-    /*
-    score: function(result) {
-      return result[4];
-    },
-    */
-
-    // query matches the full name of an object
-    objNameMatch: 11,
-    // or matches in the last dotted part of the object name
-    objPartialMatch: 6,
-    // Additive scores depending on the priority of the object
-    objPrio: {0:  15,   // used to be importantResults
-              1:  5,   // used to be objectResults
-              2: -5},  // used to be unimportantResults
-    //  Used when the priority is not in the mapping.
-    objPrioDefault: 0,
-
-    // query found in title
-    title: 15,
-    partialTitle: 7,
-    // query found in terms
-    term: 5,
-    partialTerm: 2
-  };
-}
-
-if (!splitQuery) {
-  function splitQuery(query) {
-    return query.split(/\s+/);
-  }
-}
-
-/**
- * Search Module
- */
-var Search = {
-
-  _index : null,
-  _queued_query : null,
-  _pulse_status : -1,
-
-  htmlToText : function(htmlString) {
-      var htmlElement = document.createElement('span');
-      htmlElement.innerHTML = htmlString;
-      $(htmlElement).find('.headerlink').remove();
-      docContent = $(htmlElement).find('[role=main]')[0];
-      return docContent.textContent || docContent.innerText;
-  },
-
-  init : function() {
-      var params = $.getQueryParameters();
-      if (params.q) {
-          var query = params.q[0];
-          $('input[name="q"]')[0].value = query;
-          this.performSearch(query);
-      }
-  },
-
-  loadIndex : function(url) {
-    $.ajax({type: "GET", url: url, data: null,
-            dataType: "script", cache: true,
-            complete: function(jqxhr, textstatus) {
-              if (textstatus != "success") {
-                document.getElementById("searchindexloader").src = url;
-              }
-            }});
-  },
-
-  setIndex : function(index) {
-    var q;
-    this._index = index;
-    if ((q = this._queued_query) !== null) {
-      this._queued_query = null;
-      Search.query(q);
-    }
-  },
-
-  hasIndex : function() {
-      return this._index !== null;
-  },
-
-  deferQuery : function(query) {
-      this._queued_query = query;
-  },
-
-  stopPulse : function() {
-      this._pulse_status = 0;
-  },
-
-  startPulse : function() {
-    if (this._pulse_status >= 0)
-        return;
-    function pulse() {
-      var i;
-      Search._pulse_status = (Search._pulse_status + 1) % 4;
-      var dotString = '';
-      for (i = 0; i < Search._pulse_status; i++)
-        dotString += '.';
-      Search.dots.text(dotString);
-      if (Search._pulse_status > -1)
-        window.setTimeout(pulse, 500);
-    }
-    pulse();
-  },
-
-  /**
-   * perform a search for something (or wait until index is loaded)
-   */
-  performSearch : function(query) {
-    // create the required interface elements
-    this.out = $('#search-results');
-    this.title = $('<h2>' + _('Searching') + '</h2>').appendTo(this.out);
-    this.dots = $('<span></span>').appendTo(this.title);
-    this.status = $('<p class="search-summary">&nbsp;</p>').appendTo(this.out);
-    this.output = $('<ul class="search"/>').appendTo(this.out);
-
-    $('#search-progress').text(_('Preparing search...'));
-    this.startPulse();
-
-    // index already loaded, the browser was quick!
-    if (this.hasIndex())
-      this.query(query);
-    else
-      this.deferQuery(query);
-  },
-
-  /**
-   * execute search (requires search index to be loaded)
-   */
-  query : function(query) {
-    var i;
-
-    // stem the searchterms and add them to the correct list
-    var stemmer = new Stemmer();
-    var searchterms = [];
-    var excluded = [];
-    var hlterms = [];
-    var tmp = splitQuery(query);
-    var objectterms = [];
-    for (i = 0; i < tmp.length; i++) {
-      if (tmp[i] !== "") {
-          objectterms.push(tmp[i].toLowerCase());
-      }
-
-      if ($u.indexOf(stopwords, tmp[i].toLowerCase()) != -1 || tmp[i].match(/^\d+$/) ||
-          tmp[i] === "") {
-        // skip this "word"
-        continue;
-      }
-      // stem the word
-      var word = stemmer.stemWord(tmp[i].toLowerCase());
-      // prevent stemmer from cutting word smaller than two chars
-      if(word.length < 3 && tmp[i].length >= 3) {
-        word = tmp[i];
-      }
-      var toAppend;
-      // select the correct list
-      if (word[0] == '-') {
-        toAppend = excluded;
-        word = word.substr(1);
-      }
-      else {
-        toAppend = searchterms;
-        hlterms.push(tmp[i].toLowerCase());
-      }
-      // only add if not already in the list
-      if (!$u.contains(toAppend, word))
-        toAppend.push(word);
-    }
-    var highlightstring = '?highlight=' + $.urlencode(hlterms.join(" "));
-
-    // console.debug('SEARCH: searching for:');
-    // console.info('required: ', searchterms);
-    // console.info('excluded: ', excluded);
-
-    // prepare search
-    var terms = this._index.terms;
-    var titleterms = this._index.titleterms;
-
-    // array of [filename, title, anchor, descr, score]
-    var results = [];
-    $('#search-progress').empty();
-
-    // lookup as object
-    for (i = 0; i < objectterms.length; i++) {
-      var others = [].concat(objectterms.slice(0, i),
-                             objectterms.slice(i+1, objectterms.length));
-      results = results.concat(this.performObjectSearch(objectterms[i], others));
-    }
-
-    // lookup as search terms in fulltext
-    results = results.concat(this.performTermsSearch(searchterms, excluded, terms, titleterms));
-
-    // let the scorer override scores with a custom scoring function
-    if (Scorer.score) {
-      for (i = 0; i < results.length; i++)
-        results[i][4] = Scorer.score(results[i]);
-    }
-
-    // now sort the results by score (in opposite order of appearance, since the
-    // display function below uses pop() to retrieve items) and then
-    // alphabetically
-    results.sort(function(a, b) {
-      var left = a[4];
-      var right = b[4];
-      if (left > right) {
-        return 1;
-      } else if (left < right) {
-        return -1;
-      } else {
-        // same score: sort alphabetically
-        left = a[1].toLowerCase();
-        right = b[1].toLowerCase();
-        return (left > right) ? -1 : ((left < right) ? 1 : 0);
-      }
-    });
-
-    // for debugging
-    //Search.lastresults = results.slice();  // a copy
-    //console.info('search results:', Search.lastresults);
-
-    // print the results
-    var resultCount = results.length;
-    function displayNextItem() {
-      // results left, load the summary and display it
-      if (results.length) {
-        var item = results.pop();
-        var listItem = $('<li style="display:none"></li>');
-        if (DOCUMENTATION_OPTIONS.FILE_SUFFIX === '') {
-          // dirhtml builder
-          var dirname = item[0] + '/';
-          if (dirname.match(/\/index\/$/)) {
-            dirname = dirname.substring(0, dirname.length-6);
-          } else if (dirname == 'index/') {
-            dirname = '';
-          }
-          listItem.append($('<a/>').attr('href',
-            DOCUMENTATION_OPTIONS.URL_ROOT + dirname +
-            highlightstring + item[2]).html(item[1]));
-        } else {
-          // normal html builders
-          listItem.append($('<a/>').attr('href',
-            item[0] + DOCUMENTATION_OPTIONS.FILE_SUFFIX +
-            highlightstring + item[2]).html(item[1]));
-        }
-        if (item[3]) {
-          listItem.append($('<span> (' + item[3] + ')</span>'));
-          Search.output.append(listItem);
-          listItem.slideDown(5, function() {
-            displayNextItem();
-          });
-        } else if (DOCUMENTATION_OPTIONS.HAS_SOURCE) {
-          $.ajax({url: DOCUMENTATION_OPTIONS.URL_ROOT + item[0] + DOCUMENTATION_OPTIONS.FILE_SUFFIX,
-                  dataType: "text",
-                  complete: function(jqxhr, textstatus) {
-                    var data = jqxhr.responseText;
-                    if (data !== '' && data !== undefined) {
-                      listItem.append(Search.makeSearchSummary(data, searchterms, hlterms));
-                    }
-                    Search.output.append(listItem);
-                    listItem.slideDown(5, function() {
-                      displayNextItem();
-                    });
-                  }});
-        } else {
-          // no source available, just display title
-          Search.output.append(listItem);
-          listItem.slideDown(5, function() {
-            displayNextItem();
-          });
-        }
-      }
-      // search finished, update title and status message
-      else {
-        Search.stopPulse();
-        Search.title.text(_('Search Results'));
-        if (!resultCount)
-          Search.status.text(_('Your search did not match any documents. Please make sure that all words are spelled correctly and that you\'ve selected enough categories.'));
-        else
-            Search.status.text(_('Search finished, found %s page(s) matching the search query.').replace('%s', resultCount));
-        Search.status.fadeIn(500);
-      }
-    }
-    displayNextItem();
-  },
-
-  /**
-   * search for object names
-   */
-  performObjectSearch : function(object, otherterms) {
-    var filenames = this._index.filenames;
-    var docnames = this._index.docnames;
-    var objects = this._index.objects;
-    var objnames = this._index.objnames;
-    var titles = this._index.titles;
-
-    var i;
-    var results = [];
-
-    for (var prefix in objects) {
-      for (var name in objects[prefix]) {
-        var fullname = (prefix ? prefix + '.' : '') + name;
-        var fullnameLower = fullname.toLowerCase()
-        if (fullnameLower.indexOf(object) > -1) {
-          var score = 0;
-          var parts = fullnameLower.split('.');
-          // check for different match types: exact matches of full name or
-          // "last name" (i.e. last dotted part)
-          if (fullnameLower == object || parts[parts.length - 1] == object) {
-            score += Scorer.objNameMatch;
-          // matches in last name
-          } else if (parts[parts.length - 1].indexOf(object) > -1) {
-            score += Scorer.objPartialMatch;
-          }
-          var match = objects[prefix][name];
-          var objname = objnames[match[1]][2];
-          var title = titles[match[0]];
-          // If more than one term searched for, we require other words to be
-          // found in the name/title/description
-          if (otherterms.length > 0) {
-            var haystack = (prefix + ' ' + name + ' ' +
-                            objname + ' ' + title).toLowerCase();
-            var allfound = true;
-            for (i = 0; i < otherterms.length; i++) {
-              if (haystack.indexOf(otherterms[i]) == -1) {
-                allfound = false;
-                break;
-              }
-            }
-            if (!allfound) {
-              continue;
-            }
-          }
-          var descr = objname + _(', in ') + title;
-
-          var anchor = match[3];
-          if (anchor === '')
-            anchor = fullname;
-          else if (anchor == '-')
-            anchor = objnames[match[1]][1] + '-' + fullname;
-          // add custom score for some objects according to scorer
-          if (Scorer.objPrio.hasOwnProperty(match[2])) {
-            score += Scorer.objPrio[match[2]];
-          } else {
-            score += Scorer.objPrioDefault;
-          }
-          results.push([docnames[match[0]], fullname, '#'+anchor, descr, score, filenames[match[0]]]);
-        }
-      }
-    }
-
-    return results;
-  },
-
-  /**
-   * search for full-text terms in the index
-   */
-  performTermsSearch : function(searchterms, excluded, terms, titleterms) {
-    var docnames = this._index.docnames;
-    var filenames = this._index.filenames;
-    var titles = this._index.titles;
-
-    var i, j, file;
-    var fileMap = {};
-    var scoreMap = {};
-    var results = [];
-
-    // perform the search on the required terms
-    for (i = 0; i < searchterms.length; i++) {
-      var word = searchterms[i];
-      var files = [];
-      var _o = [
-        {files: terms[word], score: Scorer.term},
-        {files: titleterms[word], score: Scorer.title}
-      ];
-      // add support for partial matches
-      if (word.length > 2) {
-        for (var w in terms) {
-          if (w.match(word) && !terms[word]) {
-            _o.push({files: terms[w], score: Scorer.partialTerm})
-          }
-        }
-        for (var w in titleterms) {
-          if (w.match(word) && !titleterms[word]) {
-              _o.push({files: titleterms[w], score: Scorer.partialTitle})
-          }
-        }
-      }
-
-      // no match but word was a required one
-      if ($u.every(_o, function(o){return o.files === undefined;})) {
-        break;
-      }
-      // found search word in contents
-      $u.each(_o, function(o) {
-        var _files = o.files;
-        if (_files === undefined)
-          return
-
-        if (_files.length === undefined)
-          _files = [_files];
-        files = files.concat(_files);
-
-        // set score for the word in each file to Scorer.term
-        for (j = 0; j < _files.length; j++) {
-          file = _files[j];
-          if (!(file in scoreMap))
-            scoreMap[file] = {}
-          scoreMap[file][word] = o.score;
-        }
-      });
-
-      // create the mapping
-      for (j = 0; j < files.length; j++) {
-        file = files[j];
-        if (file in fileMap)
-          fileMap[file].push(word);
-        else
-          fileMap[file] = [word];
-      }
-    }
-
-    // now check if the files don't contain excluded terms
-    for (file in fileMap) {
-      var valid = true;
-
-      // check if all requirements are matched
-      var filteredTermCount = // as search terms with length < 3 are discarded: ignore
-        searchterms.filter(function(term){return term.length > 2}).length
-      if (
-        fileMap[file].length != searchterms.length &&
-        fileMap[file].length != filteredTermCount
-      ) continue;
-
-      // ensure that none of the excluded terms is in the search result
-      for (i = 0; i < excluded.length; i++) {
-        if (terms[excluded[i]] == file ||
-            titleterms[excluded[i]] == file ||
-            $u.contains(terms[excluded[i]] || [], file) ||
-            $u.contains(titleterms[excluded[i]] || [], file)) {
-          valid = false;
-          break;
-        }
-      }
-
-      // if we have still a valid result we can add it to the result list
-      if (valid) {
-        // select one (max) score for the file.
-        // for better ranking, we should calculate ranking by using words statistics like basic tf-idf...
-        var score = $u.max($u.map(fileMap[file], function(w){return scoreMap[file][w]}));
-        results.push([docnames[file], titles[file], '', null, score, filenames[file]]);
-      }
-    }
-    return results;
-  },
-
-  /**
-   * helper function to return a node containing the
-   * search summary for a given text. keywords is a list
-   * of stemmed words, hlwords is the list of normal, unstemmed
-   * words. the first one is used to find the occurrence, the
-   * latter for highlighting it.
-   */
-  makeSearchSummary : function(htmlText, keywords, hlwords) {
-    var text = Search.htmlToText(htmlText);
-    var textLower = text.toLowerCase();
-    var start = 0;
-    $.each(keywords, function() {
-      var i = textLower.indexOf(this.toLowerCase());
-      if (i > -1)
-        start = i;
-    });
-    start = Math.max(start - 120, 0);
-    var excerpt = ((start > 0) ? '...' : '') +
-      $.trim(text.substr(start, 240)) +
-      ((start + 240 - text.length) ? '...' : '');
-    var rv = $('<div class="context"></div>').text(excerpt);
-    $.each(hlwords, function() {
-      rv = rv.highlightText(this, 'highlighted');
-    });
-    return rv;
-  }
-};
-
-$(document).ready(function() {
-  Search.init();
-});
diff --git a/docs/_build/html/_static/translations.js b/docs/_build/html/_static/translations.js
deleted file mode 100644
index 3234903a2..000000000
--- a/docs/_build/html/_static/translations.js
+++ /dev/null
@@ -1 +0,0 @@
-Documentation.addTranslations({"locale": "de", "messages": {"%(filename)s &#8212; %(docstitle)s": "", "&#169; <a href=\"%(path)s\">Copyright</a> %(copyright)s.": "", "&#169; Copyright %(copyright)s.": "", ", in ": ", in ", "About these documents": "\u00dcber dieses Dokument", "Automatically generated list of changes in version %(version)s": "Automatisch generierte Liste der \u00c4nderungen in Version %(version)s", "C API changes": "C API-\u00c4nderungen", "Changes in Version %(version)s &#8212; %(docstitle)s": "", "Collapse sidebar": "Seitenleiste einklappen", "Complete Table of Contents": "Vollst\u00e4ndiges Inhaltsverzeichnis", "Contents": "Inhalt", "Copyright": "Copyright", "Created using <a href=\"http://sphinx-doc.org/\">Sphinx</a> %(sphinx_version)s.": "Mit <a href=\"http://sphinx-doc.org/\">Sphinx</a> %(sphinx_version)s erstellt.", "Expand sidebar": "Seitenleiste ausklappen", "From here you can search these documents. Enter your search\n    words into the box below and click \"search\". Note that the search\n    function will automatically search for all of the words. Pages\n    containing fewer words won't appear in the result list.": "Von hier aus k\u00f6nnen Sie die Dokumentation durchsuchen. Geben Sie Ihre Suchbegriffe in das untenstehende Feld ein und klicken Sie auf \"Suchen\". Bitte beachten Sie, dass die Suchfunktion automatisch nach allen Worten sucht. Seiten, die nicht alle Worte enthalten, erscheinen nicht in der Ergebnisliste.", "Full index on one page": "Gesamtes Stichwortverzeichnis auf einer Seite", "General Index": "Stichwortverzeichnis", "Global Module Index": "Globaler Modulindex", "Go": "Los", "Hide Search Matches": "Suchergebnisse ausblenden", "Index": "Stichwortverzeichnis", "Index &ndash; %(key)s": "Stichwortverzeichnis &ndash; %(key)s", "Index pages by letter": "Stichwortverzeichnis nach Anfangsbuchstabe", "Indices and tables:": "Verzeichnisse und Tabellen:", "Last updated on %(last_updated)s.": "Zuletzt aktualisiert am %(last_updated)s.", "Library changes": "Bibliotheks-\u00c4nderungen", "Navigation": "Navigation", "Next topic": "N\u00e4chstes Thema", "Other changes": "Andere \u00c4nderungen", "Overview": "\u00dcbersicht", "Permalink to this definition": "Link zu dieser Definition", "Permalink to this headline": "Link zu dieser \u00dcberschrift", "Please activate JavaScript to enable the search\n    functionality.": "Bitte aktivieren Sie JavaScript, wenn Sie die Suchfunktion nutzen wollen.", "Preparing search...": "Suche wird vorbereitet...", "Previous topic": "Vorheriges Thema", "Quick search": "Schnellsuche", "Search": "Suche", "Search Page": "Suche", "Search Results": "Suchergebnisse", "Search finished, found %s page(s) matching the search query.": "Die Suche ist fertig, es wurde(n) %s Seite(n) mit Treffern gefunden.", "Search within %(docstitle)s": "Suche in %(docstitle)s", "Searching": "Suchen", "Show Source": "Quellcode anzeigen", "Table of Contents": "Inhaltsverzeichnis", "This Page": "Diese Seite", "Welcome! This is": "Willkommen! Dies ist", "Your search did not match any documents. Please make sure that all words are spelled correctly and that you've selected enough categories.": "Ihre Suche ergab keine Treffer. Bitte stellen Sie sicher, dass alle W\u00f6rter richtig geschrieben sind und gen\u00fcgend Kategorien ausgew\u00e4hlt sind.", "all functions, classes, terms": "alle Funktionen, Klassen, Begriffe", "can be huge": "kann gro\u00df sein", "last updated": "zuletzt aktualisiert", "lists all sections and subsections": "Liste aller Kapitel und Unterkapitel", "next chapter": "n\u00e4chstes Kapitel", "previous chapter": "vorheriges Kapitel", "quick access to all modules": "schneller Zugriff auf alle Module", "search": "suchen", "search this documentation": "durchsuche diese Dokumentation", "the documentation for": "die Dokumentation f\u00fcr"}, "plural_expr": "(n != 1)"});
\ No newline at end of file
diff --git a/docs/_build/html/_static/underscore-1.3.1.js b/docs/_build/html/_static/underscore-1.3.1.js
deleted file mode 100644
index 208d4cd89..000000000
--- a/docs/_build/html/_static/underscore-1.3.1.js
+++ /dev/null
@@ -1,999 +0,0 @@
-//     Underscore.js 1.3.1
-//     (c) 2009-2012 Jeremy Ashkenas, DocumentCloud Inc.
-//     Underscore is freely distributable under the MIT license.
-//     Portions of Underscore are inspired or borrowed from Prototype,
-//     Oliver Steele's Functional, and John Resig's Micro-Templating.
-//     For all details and documentation:
-//     http://documentcloud.github.com/underscore
-
-(function() {
-
-  // Baseline setup
-  // --------------
-
-  // Establish the root object, `window` in the browser, or `global` on the server.
-  var root = this;
-
-  // Save the previous value of the `_` variable.
-  var previousUnderscore = root._;
-
-  // Establish the object that gets returned to break out of a loop iteration.
-  var breaker = {};
-
-  // Save bytes in the minified (but not gzipped) version:
-  var ArrayProto = Array.prototype, ObjProto = Object.prototype, FuncProto = Function.prototype;
-
-  // Create quick reference variables for speed access to core prototypes.
-  var slice            = ArrayProto.slice,
-      unshift          = ArrayProto.unshift,
-      toString         = ObjProto.toString,
-      hasOwnProperty   = ObjProto.hasOwnProperty;
-
-  // All **ECMAScript 5** native function implementations that we hope to use
-  // are declared here.
-  var
-    nativeForEach      = ArrayProto.forEach,
-    nativeMap          = ArrayProto.map,
-    nativeReduce       = ArrayProto.reduce,
-    nativeReduceRight  = ArrayProto.reduceRight,
-    nativeFilter       = ArrayProto.filter,
-    nativeEvery        = ArrayProto.every,
-    nativeSome         = ArrayProto.some,
-    nativeIndexOf      = ArrayProto.indexOf,
-    nativeLastIndexOf  = ArrayProto.lastIndexOf,
-    nativeIsArray      = Array.isArray,
-    nativeKeys         = Object.keys,
-    nativeBind         = FuncProto.bind;
-
-  // Create a safe reference to the Underscore object for use below.
-  var _ = function(obj) { return new wrapper(obj); };
-
-  // Export the Underscore object for **Node.js**, with
-  // backwards-compatibility for the old `require()` API. If we're in
-  // the browser, add `_` as a global object via a string identifier,
-  // for Closure Compiler "advanced" mode.
-  if (typeof exports !== 'undefined') {
-    if (typeof module !== 'undefined' && module.exports) {
-      exports = module.exports = _;
-    }
-    exports._ = _;
-  } else {
-    root['_'] = _;
-  }
-
-  // Current version.
-  _.VERSION = '1.3.1';
-
-  // Collection Functions
-  // --------------------
-
-  // The cornerstone, an `each` implementation, aka `forEach`.
-  // Handles objects with the built-in `forEach`, arrays, and raw objects.
-  // Delegates to **ECMAScript 5**'s native `forEach` if available.
-  var each = _.each = _.forEach = function(obj, iterator, context) {
-    if (obj == null) return;
-    if (nativeForEach && obj.forEach === nativeForEach) {
-      obj.forEach(iterator, context);
-    } else if (obj.length === +obj.length) {
-      for (var i = 0, l = obj.length; i < l; i++) {
-        if (i in obj && iterator.call(context, obj[i], i, obj) === breaker) return;
-      }
-    } else {
-      for (var key in obj) {
-        if (_.has(obj, key)) {
-          if (iterator.call(context, obj[key], key, obj) === breaker) return;
-        }
-      }
-    }
-  };
-
-  // Return the results of applying the iterator to each element.
-  // Delegates to **ECMAScript 5**'s native `map` if available.
-  _.map = _.collect = function(obj, iterator, context) {
-    var results = [];
-    if (obj == null) return results;
-    if (nativeMap && obj.map === nativeMap) return obj.map(iterator, context);
-    each(obj, function(value, index, list) {
-      results[results.length] = iterator.call(context, value, index, list);
-    });
-    if (obj.length === +obj.length) results.length = obj.length;
-    return results;
-  };
-
-  // **Reduce** builds up a single result from a list of values, aka `inject`,
-  // or `foldl`. Delegates to **ECMAScript 5**'s native `reduce` if available.
-  _.reduce = _.foldl = _.inject = function(obj, iterator, memo, context) {
-    var initial = arguments.length > 2;
-    if (obj == null) obj = [];
-    if (nativeReduce && obj.reduce === nativeReduce) {
-      if (context) iterator = _.bind(iterator, context);
-      return initial ? obj.reduce(iterator, memo) : obj.reduce(iterator);
-    }
-    each(obj, function(value, index, list) {
-      if (!initial) {
-        memo = value;
-        initial = true;
-      } else {
-        memo = iterator.call(context, memo, value, index, list);
-      }
-    });
-    if (!initial) throw new TypeError('Reduce of empty array with no initial value');
-    return memo;
-  };
-
-  // The right-associative version of reduce, also known as `foldr`.
-  // Delegates to **ECMAScript 5**'s native `reduceRight` if available.
-  _.reduceRight = _.foldr = function(obj, iterator, memo, context) {
-    var initial = arguments.length > 2;
-    if (obj == null) obj = [];
-    if (nativeReduceRight && obj.reduceRight === nativeReduceRight) {
-      if (context) iterator = _.bind(iterator, context);
-      return initial ? obj.reduceRight(iterator, memo) : obj.reduceRight(iterator);
-    }
-    var reversed = _.toArray(obj).reverse();
-    if (context && !initial) iterator = _.bind(iterator, context);
-    return initial ? _.reduce(reversed, iterator, memo, context) : _.reduce(reversed, iterator);
-  };
-
-  // Return the first value which passes a truth test. Aliased as `detect`.
-  _.find = _.detect = function(obj, iterator, context) {
-    var result;
-    any(obj, function(value, index, list) {
-      if (iterator.call(context, value, index, list)) {
-        result = value;
-        return true;
-      }
-    });
-    return result;
-  };
-
-  // Return all the elements that pass a truth test.
-  // Delegates to **ECMAScript 5**'s native `filter` if available.
-  // Aliased as `select`.
-  _.filter = _.select = function(obj, iterator, context) {
-    var results = [];
-    if (obj == null) return results;
-    if (nativeFilter && obj.filter === nativeFilter) return obj.filter(iterator, context);
-    each(obj, function(value, index, list) {
-      if (iterator.call(context, value, index, list)) results[results.length] = value;
-    });
-    return results;
-  };
-
-  // Return all the elements for which a truth test fails.
-  _.reject = function(obj, iterator, context) {
-    var results = [];
-    if (obj == null) return results;
-    each(obj, function(value, index, list) {
-      if (!iterator.call(context, value, index, list)) results[results.length] = value;
-    });
-    return results;
-  };
-
-  // Determine whether all of the elements match a truth test.
-  // Delegates to **ECMAScript 5**'s native `every` if available.
-  // Aliased as `all`.
-  _.every = _.all = function(obj, iterator, context) {
-    var result = true;
-    if (obj == null) return result;
-    if (nativeEvery && obj.every === nativeEvery) return obj.every(iterator, context);
-    each(obj, function(value, index, list) {
-      if (!(result = result && iterator.call(context, value, index, list))) return breaker;
-    });
-    return result;
-  };
-
-  // Determine if at least one element in the object matches a truth test.
-  // Delegates to **ECMAScript 5**'s native `some` if available.
-  // Aliased as `any`.
-  var any = _.some = _.any = function(obj, iterator, context) {
-    iterator || (iterator = _.identity);
-    var result = false;
-    if (obj == null) return result;
-    if (nativeSome && obj.some === nativeSome) return obj.some(iterator, context);
-    each(obj, function(value, index, list) {
-      if (result || (result = iterator.call(context, value, index, list))) return breaker;
-    });
-    return !!result;
-  };
-
-  // Determine if a given value is included in the array or object using `===`.
-  // Aliased as `contains`.
-  _.include = _.contains = function(obj, target) {
-    var found = false;
-    if (obj == null) return found;
-    if (nativeIndexOf && obj.indexOf === nativeIndexOf) return obj.indexOf(target) != -1;
-    found = any(obj, function(value) {
-      return value === target;
-    });
-    return found;
-  };
-
-  // Invoke a method (with arguments) on every item in a collection.
-  _.invoke = function(obj, method) {
-    var args = slice.call(arguments, 2);
-    return _.map(obj, function(value) {
-      return (_.isFunction(method) ? method || value : value[method]).apply(value, args);
-    });
-  };
-
-  // Convenience version of a common use case of `map`: fetching a property.
-  _.pluck = function(obj, key) {
-    return _.map(obj, function(value){ return value[key]; });
-  };
-
-  // Return the maximum element or (element-based computation).
-  _.max = function(obj, iterator, context) {
-    if (!iterator && _.isArray(obj)) return Math.max.apply(Math, obj);
-    if (!iterator && _.isEmpty(obj)) return -Infinity;
-    var result = {computed : -Infinity};
-    each(obj, function(value, index, list) {
-      var computed = iterator ? iterator.call(context, value, index, list) : value;
-      computed >= result.computed && (result = {value : value, computed : computed});
-    });
-    return result.value;
-  };
-
-  // Return the minimum element (or element-based computation).
-  _.min = function(obj, iterator, context) {
-    if (!iterator && _.isArray(obj)) return Math.min.apply(Math, obj);
-    if (!iterator && _.isEmpty(obj)) return Infinity;
-    var result = {computed : Infinity};
-    each(obj, function(value, index, list) {
-      var computed = iterator ? iterator.call(context, value, index, list) : value;
-      computed < result.computed && (result = {value : value, computed : computed});
-    });
-    return result.value;
-  };
-
-  // Shuffle an array.
-  _.shuffle = function(obj) {
-    var shuffled = [], rand;
-    each(obj, function(value, index, list) {
-      if (index == 0) {
-        shuffled[0] = value;
-      } else {
-        rand = Math.floor(Math.random() * (index + 1));
-        shuffled[index] = shuffled[rand];
-        shuffled[rand] = value;
-      }
-    });
-    return shuffled;
-  };
-
-  // Sort the object's values by a criterion produced by an iterator.
-  _.sortBy = function(obj, iterator, context) {
-    return _.pluck(_.map(obj, function(value, index, list) {
-      return {
-        value : value,
-        criteria : iterator.call(context, value, index, list)
-      };
-    }).sort(function(left, right) {
-      var a = left.criteria, b = right.criteria;
-      return a < b ? -1 : a > b ? 1 : 0;
-    }), 'value');
-  };
-
-  // Groups the object's values by a criterion. Pass either a string attribute
-  // to group by, or a function that returns the criterion.
-  _.groupBy = function(obj, val) {
-    var result = {};
-    var iterator = _.isFunction(val) ? val : function(obj) { return obj[val]; };
-    each(obj, function(value, index) {
-      var key = iterator(value, index);
-      (result[key] || (result[key] = [])).push(value);
-    });
-    return result;
-  };
-
-  // Use a comparator function to figure out at what index an object should
-  // be inserted so as to maintain order. Uses binary search.
-  _.sortedIndex = function(array, obj, iterator) {
-    iterator || (iterator = _.identity);
-    var low = 0, high = array.length;
-    while (low < high) {
-      var mid = (low + high) >> 1;
-      iterator(array[mid]) < iterator(obj) ? low = mid + 1 : high = mid;
-    }
-    return low;
-  };
-
-  // Safely convert anything iterable into a real, live array.
-  _.toArray = function(iterable) {
-    if (!iterable)                return [];
-    if (iterable.toArray)         return iterable.toArray();
-    if (_.isArray(iterable))      return slice.call(iterable);
-    if (_.isArguments(iterable))  return slice.call(iterable);
-    return _.values(iterable);
-  };
-
-  // Return the number of elements in an object.
-  _.size = function(obj) {
-    return _.toArray(obj).length;
-  };
-
-  // Array Functions
-  // ---------------
-
-  // Get the first element of an array. Passing **n** will return the first N
-  // values in the array. Aliased as `head`. The **guard** check allows it to work
-  // with `_.map`.
-  _.first = _.head = function(array, n, guard) {
-    return (n != null) && !guard ? slice.call(array, 0, n) : array[0];
-  };
-
-  // Returns everything but the last entry of the array. Especcialy useful on
-  // the arguments object. Passing **n** will return all the values in
-  // the array, excluding the last N. The **guard** check allows it to work with
-  // `_.map`.
-  _.initial = function(array, n, guard) {
-    return slice.call(array, 0, array.length - ((n == null) || guard ? 1 : n));
-  };
-
-  // Get the last element of an array. Passing **n** will return the last N
-  // values in the array. The **guard** check allows it to work with `_.map`.
-  _.last = function(array, n, guard) {
-    if ((n != null) && !guard) {
-      return slice.call(array, Math.max(array.length - n, 0));
-    } else {
-      return array[array.length - 1];
-    }
-  };
-
-  // Returns everything but the first entry of the array. Aliased as `tail`.
-  // Especially useful on the arguments object. Passing an **index** will return
-  // the rest of the values in the array from that index onward. The **guard**
-  // check allows it to work with `_.map`.
-  _.rest = _.tail = function(array, index, guard) {
-    return slice.call(array, (index == null) || guard ? 1 : index);
-  };
-
-  // Trim out all falsy values from an array.
-  _.compact = function(array) {
-    return _.filter(array, function(value){ return !!value; });
-  };
-
-  // Return a completely flattened version of an array.
-  _.flatten = function(array, shallow) {
-    return _.reduce(array, function(memo, value) {
-      if (_.isArray(value)) return memo.concat(shallow ? value : _.flatten(value));
-      memo[memo.length] = value;
-      return memo;
-    }, []);
-  };
-
-  // Return a version of the array that does not contain the specified value(s).
-  _.without = function(array) {
-    return _.difference(array, slice.call(arguments, 1));
-  };
-
-  // Produce a duplicate-free version of the array. If the array has already
-  // been sorted, you have the option of using a faster algorithm.
-  // Aliased as `unique`.
-  _.uniq = _.unique = function(array, isSorted, iterator) {
-    var initial = iterator ? _.map(array, iterator) : array;
-    var result = [];
-    _.reduce(initial, function(memo, el, i) {
-      if (0 == i || (isSorted === true ? _.last(memo) != el : !_.include(memo, el))) {
-        memo[memo.length] = el;
-        result[result.length] = array[i];
-      }
-      return memo;
-    }, []);
-    return result;
-  };
-
-  // Produce an array that contains the union: each distinct element from all of
-  // the passed-in arrays.
-  _.union = function() {
-    return _.uniq(_.flatten(arguments, true));
-  };
-
-  // Produce an array that contains every item shared between all the
-  // passed-in arrays. (Aliased as "intersect" for back-compat.)
-  _.intersection = _.intersect = function(array) {
-    var rest = slice.call(arguments, 1);
-    return _.filter(_.uniq(array), function(item) {
-      return _.every(rest, function(other) {
-        return _.indexOf(other, item) >= 0;
-      });
-    });
-  };
-
-  // Take the difference between one array and a number of other arrays.
-  // Only the elements present in just the first array will remain.
-  _.difference = function(array) {
-    var rest = _.flatten(slice.call(arguments, 1));
-    return _.filter(array, function(value){ return !_.include(rest, value); });
-  };
-
-  // Zip together multiple lists into a single array -- elements that share
-  // an index go together.
-  _.zip = function() {
-    var args = slice.call(arguments);
-    var length = _.max(_.pluck(args, 'length'));
-    var results = new Array(length);
-    for (var i = 0; i < length; i++) results[i] = _.pluck(args, "" + i);
-    return results;
-  };
-
-  // If the browser doesn't supply us with indexOf (I'm looking at you, **MSIE**),
-  // we need this function. Return the position of the first occurrence of an
-  // item in an array, or -1 if the item is not included in the array.
-  // Delegates to **ECMAScript 5**'s native `indexOf` if available.
-  // If the array is large and already in sort order, pass `true`
-  // for **isSorted** to use binary search.
-  _.indexOf = function(array, item, isSorted) {
-    if (array == null) return -1;
-    var i, l;
-    if (isSorted) {
-      i = _.sortedIndex(array, item);
-      return array[i] === item ? i : -1;
-    }
-    if (nativeIndexOf && array.indexOf === nativeIndexOf) return array.indexOf(item);
-    for (i = 0, l = array.length; i < l; i++) if (i in array && array[i] === item) return i;
-    return -1;
-  };
-
-  // Delegates to **ECMAScript 5**'s native `lastIndexOf` if available.
-  _.lastIndexOf = function(array, item) {
-    if (array == null) return -1;
-    if (nativeLastIndexOf && array.lastIndexOf === nativeLastIndexOf) return array.lastIndexOf(item);
-    var i = array.length;
-    while (i--) if (i in array && array[i] === item) return i;
-    return -1;
-  };
-
-  // Generate an integer Array containing an arithmetic progression. A port of
-  // the native Python `range()` function. See
-  // [the Python documentation](http://docs.python.org/library/functions.html#range).
-  _.range = function(start, stop, step) {
-    if (arguments.length <= 1) {
-      stop = start || 0;
-      start = 0;
-    }
-    step = arguments[2] || 1;
-
-    var len = Math.max(Math.ceil((stop - start) / step), 0);
-    var idx = 0;
-    var range = new Array(len);
-
-    while(idx < len) {
-      range[idx++] = start;
-      start += step;
-    }
-
-    return range;
-  };
-
-  // Function (ahem) Functions
-  // ------------------
-
-  // Reusable constructor function for prototype setting.
-  var ctor = function(){};
-
-  // Create a function bound to a given object (assigning `this`, and arguments,
-  // optionally). Binding with arguments is also known as `curry`.
-  // Delegates to **ECMAScript 5**'s native `Function.bind` if available.
-  // We check for `func.bind` first, to fail fast when `func` is undefined.
-  _.bind = function bind(func, context) {
-    var bound, args;
-    if (func.bind === nativeBind && nativeBind) return nativeBind.apply(func, slice.call(arguments, 1));
-    if (!_.isFunction(func)) throw new TypeError;
-    args = slice.call(arguments, 2);
-    return bound = function() {
-      if (!(this instanceof bound)) return func.apply(context, args.concat(slice.call(arguments)));
-      ctor.prototype = func.prototype;
-      var self = new ctor;
-      var result = func.apply(self, args.concat(slice.call(arguments)));
-      if (Object(result) === result) return result;
-      return self;
-    };
-  };
-
-  // Bind all of an object's methods to that object. Useful for ensuring that
-  // all callbacks defined on an object belong to it.
-  _.bindAll = function(obj) {
-    var funcs = slice.call(arguments, 1);
-    if (funcs.length == 0) funcs = _.functions(obj);
-    each(funcs, function(f) { obj[f] = _.bind(obj[f], obj); });
-    return obj;
-  };
-
-  // Memoize an expensive function by storing its results.
-  _.memoize = function(func, hasher) {
-    var memo = {};
-    hasher || (hasher = _.identity);
-    return function() {
-      var key = hasher.apply(this, arguments);
-      return _.has(memo, key) ? memo[key] : (memo[key] = func.apply(this, arguments));
-    };
-  };
-
-  // Delays a function for the given number of milliseconds, and then calls
-  // it with the arguments supplied.
-  _.delay = function(func, wait) {
-    var args = slice.call(arguments, 2);
-    return setTimeout(function(){ return func.apply(func, args); }, wait);
-  };
-
-  // Defers a function, scheduling it to run after the current call stack has
-  // cleared.
-  _.defer = function(func) {
-    return _.delay.apply(_, [func, 1].concat(slice.call(arguments, 1)));
-  };
-
-  // Returns a function, that, when invoked, will only be triggered at most once
-  // during a given window of time.
-  _.throttle = function(func, wait) {
-    var context, args, timeout, throttling, more;
-    var whenDone = _.debounce(function(){ more = throttling = false; }, wait);
-    return function() {
-      context = this; args = arguments;
-      var later = function() {
-        timeout = null;
-        if (more) func.apply(context, args);
-        whenDone();
-      };
-      if (!timeout) timeout = setTimeout(later, wait);
-      if (throttling) {
-        more = true;
-      } else {
-        func.apply(context, args);
-      }
-      whenDone();
-      throttling = true;
-    };
-  };
-
-  // Returns a function, that, as long as it continues to be invoked, will not
-  // be triggered. The function will be called after it stops being called for
-  // N milliseconds.
-  _.debounce = function(func, wait) {
-    var timeout;
-    return function() {
-      var context = this, args = arguments;
-      var later = function() {
-        timeout = null;
-        func.apply(context, args);
-      };
-      clearTimeout(timeout);
-      timeout = setTimeout(later, wait);
-    };
-  };
-
-  // Returns a function that will be executed at most one time, no matter how
-  // often you call it. Useful for lazy initialization.
-  _.once = function(func) {
-    var ran = false, memo;
-    return function() {
-      if (ran) return memo;
-      ran = true;
-      return memo = func.apply(this, arguments);
-    };
-  };
-
-  // Returns the first function passed as an argument to the second,
-  // allowing you to adjust arguments, run code before and after, and
-  // conditionally execute the original function.
-  _.wrap = function(func, wrapper) {
-    return function() {
-      var args = [func].concat(slice.call(arguments, 0));
-      return wrapper.apply(this, args);
-    };
-  };
-
-  // Returns a function that is the composition of a list of functions, each
-  // consuming the return value of the function that follows.
-  _.compose = function() {
-    var funcs = arguments;
-    return function() {
-      var args = arguments;
-      for (var i = funcs.length - 1; i >= 0; i--) {
-        args = [funcs[i].apply(this, args)];
-      }
-      return args[0];
-    };
-  };
-
-  // Returns a function that will only be executed after being called N times.
-  _.after = function(times, func) {
-    if (times <= 0) return func();
-    return function() {
-      if (--times < 1) { return func.apply(this, arguments); }
-    };
-  };
-
-  // Object Functions
-  // ----------------
-
-  // Retrieve the names of an object's properties.
-  // Delegates to **ECMAScript 5**'s native `Object.keys`
-  _.keys = nativeKeys || function(obj) {
-    if (obj !== Object(obj)) throw new TypeError('Invalid object');
-    var keys = [];
-    for (var key in obj) if (_.has(obj, key)) keys[keys.length] = key;
-    return keys;
-  };
-
-  // Retrieve the values of an object's properties.
-  _.values = function(obj) {
-    return _.map(obj, _.identity);
-  };
-
-  // Return a sorted list of the function names available on the object.
-  // Aliased as `methods`
-  _.functions = _.methods = function(obj) {
-    var names = [];
-    for (var key in obj) {
-      if (_.isFunction(obj[key])) names.push(key);
-    }
-    return names.sort();
-  };
-
-  // Extend a given object with all the properties in passed-in object(s).
-  _.extend = function(obj) {
-    each(slice.call(arguments, 1), function(source) {
-      for (var prop in source) {
-        obj[prop] = source[prop];
-      }
-    });
-    return obj;
-  };
-
-  // Fill in a given object with default properties.
-  _.defaults = function(obj) {
-    each(slice.call(arguments, 1), function(source) {
-      for (var prop in source) {
-        if (obj[prop] == null) obj[prop] = source[prop];
-      }
-    });
-    return obj;
-  };
-
-  // Create a (shallow-cloned) duplicate of an object.
-  _.clone = function(obj) {
-    if (!_.isObject(obj)) return obj;
-    return _.isArray(obj) ? obj.slice() : _.extend({}, obj);
-  };
-
-  // Invokes interceptor with the obj, and then returns obj.
-  // The primary purpose of this method is to "tap into" a method chain, in
-  // order to perform operations on intermediate results within the chain.
-  _.tap = function(obj, interceptor) {
-    interceptor(obj);
-    return obj;
-  };
-
-  // Internal recursive comparison function.
-  function eq(a, b, stack) {
-    // Identical objects are equal. `0 === -0`, but they aren't identical.
-    // See the Harmony `egal` proposal: http://wiki.ecmascript.org/doku.php?id=harmony:egal.
-    if (a === b) return a !== 0 || 1 / a == 1 / b;
-    // A strict comparison is necessary because `null == undefined`.
-    if (a == null || b == null) return a === b;
-    // Unwrap any wrapped objects.
-    if (a._chain) a = a._wrapped;
-    if (b._chain) b = b._wrapped;
-    // Invoke a custom `isEqual` method if one is provided.
-    if (a.isEqual && _.isFunction(a.isEqual)) return a.isEqual(b);
-    if (b.isEqual && _.isFunction(b.isEqual)) return b.isEqual(a);
-    // Compare `[[Class]]` names.
-    var className = toString.call(a);
-    if (className != toString.call(b)) return false;
-    switch (className) {
-      // Strings, numbers, dates, and booleans are compared by value.
-      case '[object String]':
-        // Primitives and their corresponding object wrappers are equivalent; thus, `"5"` is
-        // equivalent to `new String("5")`.
-        return a == String(b);
-      case '[object Number]':
-        // `NaN`s are equivalent, but non-reflexive. An `egal` comparison is performed for
-        // other numeric values.
-        return a != +a ? b != +b : (a == 0 ? 1 / a == 1 / b : a == +b);
-      case '[object Date]':
-      case '[object Boolean]':
-        // Coerce dates and booleans to numeric primitive values. Dates are compared by their
-        // millisecond representations. Note that invalid dates with millisecond representations
-        // of `NaN` are not equivalent.
-        return +a == +b;
-      // RegExps are compared by their source patterns and flags.
-      case '[object RegExp]':
-        return a.source == b.source &&
-               a.global == b.global &&
-               a.multiline == b.multiline &&
-               a.ignoreCase == b.ignoreCase;
-    }
-    if (typeof a != 'object' || typeof b != 'object') return false;
-    // Assume equality for cyclic structures. The algorithm for detecting cyclic
-    // structures is adapted from ES 5.1 section 15.12.3, abstract operation `JO`.
-    var length = stack.length;
-    while (length--) {
-      // Linear search. Performance is inversely proportional to the number of
-      // unique nested structures.
-      if (stack[length] == a) return true;
-    }
-    // Add the first object to the stack of traversed objects.
-    stack.push(a);
-    var size = 0, result = true;
-    // Recursively compare objects and arrays.
-    if (className == '[object Array]') {
-      // Compare array lengths to determine if a deep comparison is necessary.
-      size = a.length;
-      result = size == b.length;
-      if (result) {
-        // Deep compare the contents, ignoring non-numeric properties.
-        while (size--) {
-          // Ensure commutative equality for sparse arrays.
-          if (!(result = size in a == size in b && eq(a[size], b[size], stack))) break;
-        }
-      }
-    } else {
-      // Objects with different constructors are not equivalent.
-      if ('constructor' in a != 'constructor' in b || a.constructor != b.constructor) return false;
-      // Deep compare objects.
-      for (var key in a) {
-        if (_.has(a, key)) {
-          // Count the expected number of properties.
-          size++;
-          // Deep compare each member.
-          if (!(result = _.has(b, key) && eq(a[key], b[key], stack))) break;
-        }
-      }
-      // Ensure that both objects contain the same number of properties.
-      if (result) {
-        for (key in b) {
-          if (_.has(b, key) && !(size--)) break;
-        }
-        result = !size;
-      }
-    }
-    // Remove the first object from the stack of traversed objects.
-    stack.pop();
-    return result;
-  }
-
-  // Perform a deep comparison to check if two objects are equal.
-  _.isEqual = function(a, b) {
-    return eq(a, b, []);
-  };
-
-  // Is a given array, string, or object empty?
-  // An "empty" object has no enumerable own-properties.
-  _.isEmpty = function(obj) {
-    if (_.isArray(obj) || _.isString(obj)) return obj.length === 0;
-    for (var key in obj) if (_.has(obj, key)) return false;
-    return true;
-  };
-
-  // Is a given value a DOM element?
-  _.isElement = function(obj) {
-    return !!(obj && obj.nodeType == 1);
-  };
-
-  // Is a given value an array?
-  // Delegates to ECMA5's native Array.isArray
-  _.isArray = nativeIsArray || function(obj) {
-    return toString.call(obj) == '[object Array]';
-  };
-
-  // Is a given variable an object?
-  _.isObject = function(obj) {
-    return obj === Object(obj);
-  };
-
-  // Is a given variable an arguments object?
-  _.isArguments = function(obj) {
-    return toString.call(obj) == '[object Arguments]';
-  };
-  if (!_.isArguments(arguments)) {
-    _.isArguments = function(obj) {
-      return !!(obj && _.has(obj, 'callee'));
-    };
-  }
-
-  // Is a given value a function?
-  _.isFunction = function(obj) {
-    return toString.call(obj) == '[object Function]';
-  };
-
-  // Is a given value a string?
-  _.isString = function(obj) {
-    return toString.call(obj) == '[object String]';
-  };
-
-  // Is a given value a number?
-  _.isNumber = function(obj) {
-    return toString.call(obj) == '[object Number]';
-  };
-
-  // Is the given value `NaN`?
-  _.isNaN = function(obj) {
-    // `NaN` is the only value for which `===` is not reflexive.
-    return obj !== obj;
-  };
-
-  // Is a given value a boolean?
-  _.isBoolean = function(obj) {
-    return obj === true || obj === false || toString.call(obj) == '[object Boolean]';
-  };
-
-  // Is a given value a date?
-  _.isDate = function(obj) {
-    return toString.call(obj) == '[object Date]';
-  };
-
-  // Is the given value a regular expression?
-  _.isRegExp = function(obj) {
-    return toString.call(obj) == '[object RegExp]';
-  };
-
-  // Is a given value equal to null?
-  _.isNull = function(obj) {
-    return obj === null;
-  };
-
-  // Is a given variable undefined?
-  _.isUndefined = function(obj) {
-    return obj === void 0;
-  };
-
-  // Has own property?
-  _.has = function(obj, key) {
-    return hasOwnProperty.call(obj, key);
-  };
-
-  // Utility Functions
-  // -----------------
-
-  // Run Underscore.js in *noConflict* mode, returning the `_` variable to its
-  // previous owner. Returns a reference to the Underscore object.
-  _.noConflict = function() {
-    root._ = previousUnderscore;
-    return this;
-  };
-
-  // Keep the identity function around for default iterators.
-  _.identity = function(value) {
-    return value;
-  };
-
-  // Run a function **n** times.
-  _.times = function (n, iterator, context) {
-    for (var i = 0; i < n; i++) iterator.call(context, i);
-  };
-
-  // Escape a string for HTML interpolation.
-  _.escape = function(string) {
-    return (''+string).replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;').replace(/"/g, '&quot;').replace(/'/g, '&#x27;').replace(/\//g,'&#x2F;');
-  };
-
-  // Add your own custom functions to the Underscore object, ensuring that
-  // they're correctly added to the OOP wrapper as well.
-  _.mixin = function(obj) {
-    each(_.functions(obj), function(name){
-      addToWrapper(name, _[name] = obj[name]);
-    });
-  };
-
-  // Generate a unique integer id (unique within the entire client session).
-  // Useful for temporary DOM ids.
-  var idCounter = 0;
-  _.uniqueId = function(prefix) {
-    var id = idCounter++;
-    return prefix ? prefix + id : id;
-  };
-
-  // By default, Underscore uses ERB-style template delimiters, change the
-  // following template settings to use alternative delimiters.
-  _.templateSettings = {
-    evaluate    : /<%([\s\S]+?)%>/g,
-    interpolate : /<%=([\s\S]+?)%>/g,
-    escape      : /<%-([\s\S]+?)%>/g
-  };
-
-  // When customizing `templateSettings`, if you don't want to define an
-  // interpolation, evaluation or escaping regex, we need one that is
-  // guaranteed not to match.
-  var noMatch = /.^/;
-
-  // Within an interpolation, evaluation, or escaping, remove HTML escaping
-  // that had been previously added.
-  var unescape = function(code) {
-    return code.replace(/\\\\/g, '\\').replace(/\\'/g, "'");
-  };
-
-  // JavaScript micro-templating, similar to John Resig's implementation.
-  // Underscore templating handles arbitrary delimiters, preserves whitespace,
-  // and correctly escapes quotes within interpolated code.
-  _.template = function(str, data) {
-    var c  = _.templateSettings;
-    var tmpl = 'var __p=[],print=function(){__p.push.apply(__p,arguments);};' +
-      'with(obj||{}){__p.push(\'' +
-      str.replace(/\\/g, '\\\\')
-         .replace(/'/g, "\\'")
-         .replace(c.escape || noMatch, function(match, code) {
-           return "',_.escape(" + unescape(code) + "),'";
-         })
-         .replace(c.interpolate || noMatch, function(match, code) {
-           return "'," + unescape(code) + ",'";
-         })
-         .replace(c.evaluate || noMatch, function(match, code) {
-           return "');" + unescape(code).replace(/[\r\n\t]/g, ' ') + ";__p.push('";
-         })
-         .replace(/\r/g, '\\r')
-         .replace(/\n/g, '\\n')
-         .replace(/\t/g, '\\t')
-         + "');}return __p.join('');";
-    var func = new Function('obj', '_', tmpl);
-    if (data) return func(data, _);
-    return function(data) {
-      return func.call(this, data, _);
-    };
-  };
-
-  // Add a "chain" function, which will delegate to the wrapper.
-  _.chain = function(obj) {
-    return _(obj).chain();
-  };
-
-  // The OOP Wrapper
-  // ---------------
-
-  // If Underscore is called as a function, it returns a wrapped object that
-  // can be used OO-style. This wrapper holds altered versions of all the
-  // underscore functions. Wrapped objects may be chained.
-  var wrapper = function(obj) { this._wrapped = obj; };
-
-  // Expose `wrapper.prototype` as `_.prototype`
-  _.prototype = wrapper.prototype;
-
-  // Helper function to continue chaining intermediate results.
-  var result = function(obj, chain) {
-    return chain ? _(obj).chain() : obj;
-  };
-
-  // A method to easily add functions to the OOP wrapper.
-  var addToWrapper = function(name, func) {
-    wrapper.prototype[name] = function() {
-      var args = slice.call(arguments);
-      unshift.call(args, this._wrapped);
-      return result(func.apply(_, args), this._chain);
-    };
-  };
-
-  // Add all of the Underscore functions to the wrapper object.
-  _.mixin(_);
-
-  // Add all mutator Array functions to the wrapper.
-  each(['pop', 'push', 'reverse', 'shift', 'sort', 'splice', 'unshift'], function(name) {
-    var method = ArrayProto[name];
-    wrapper.prototype[name] = function() {
-      var wrapped = this._wrapped;
-      method.apply(wrapped, arguments);
-      var length = wrapped.length;
-      if ((name == 'shift' || name == 'splice') && length === 0) delete wrapped[0];
-      return result(wrapped, this._chain);
-    };
-  });
-
-  // Add all accessor Array functions to the wrapper.
-  each(['concat', 'join', 'slice'], function(name) {
-    var method = ArrayProto[name];
-    wrapper.prototype[name] = function() {
-      return result(method.apply(this._wrapped, arguments), this._chain);
-    };
-  });
-
-  // Start chaining a wrapped Underscore object.
-  wrapper.prototype.chain = function() {
-    this._chain = true;
-    return this;
-  };
-
-  // Extracts the result from a wrapped and chained object.
-  wrapper.prototype.value = function() {
-    return this._wrapped;
-  };
-
-}).call(this);
diff --git a/docs/_build/html/_static/underscore.js b/docs/_build/html/_static/underscore.js
deleted file mode 100644
index 5b55f32be..000000000
--- a/docs/_build/html/_static/underscore.js
+++ /dev/null
@@ -1,31 +0,0 @@
-// Underscore.js 1.3.1
-// (c) 2009-2012 Jeremy Ashkenas, DocumentCloud Inc.
-// Underscore is freely distributable under the MIT license.
-// Portions of Underscore are inspired or borrowed from Prototype,
-// Oliver Steele's Functional, and John Resig's Micro-Templating.
-// For all details and documentation:
-// http://documentcloud.github.com/underscore
-(function(){function q(a,c,d){if(a===c)return a!==0||1/a==1/c;if(a==null||c==null)return a===c;if(a._chain)a=a._wrapped;if(c._chain)c=c._wrapped;if(a.isEqual&&b.isFunction(a.isEqual))return a.isEqual(c);if(c.isEqual&&b.isFunction(c.isEqual))return c.isEqual(a);var e=l.call(a);if(e!=l.call(c))return false;switch(e){case "[object String]":return a==String(c);case "[object Number]":return a!=+a?c!=+c:a==0?1/a==1/c:a==+c;case "[object Date]":case "[object Boolean]":return+a==+c;case "[object RegExp]":return a.source==
-c.source&&a.global==c.global&&a.multiline==c.multiline&&a.ignoreCase==c.ignoreCase}if(typeof a!="object"||typeof c!="object")return false;for(var f=d.length;f--;)if(d[f]==a)return true;d.push(a);var f=0,g=true;if(e=="[object Array]"){if(f=a.length,g=f==c.length)for(;f--;)if(!(g=f in a==f in c&&q(a[f],c[f],d)))break}else{if("constructor"in a!="constructor"in c||a.constructor!=c.constructor)return false;for(var h in a)if(b.has(a,h)&&(f++,!(g=b.has(c,h)&&q(a[h],c[h],d))))break;if(g){for(h in c)if(b.has(c,
-h)&&!f--)break;g=!f}}d.pop();return g}var r=this,G=r._,n={},k=Array.prototype,o=Object.prototype,i=k.slice,H=k.unshift,l=o.toString,I=o.hasOwnProperty,w=k.forEach,x=k.map,y=k.reduce,z=k.reduceRight,A=k.filter,B=k.every,C=k.some,p=k.indexOf,D=k.lastIndexOf,o=Array.isArray,J=Object.keys,s=Function.prototype.bind,b=function(a){return new m(a)};if(typeof exports!=="undefined"){if(typeof module!=="undefined"&&module.exports)exports=module.exports=b;exports._=b}else r._=b;b.VERSION="1.3.1";var j=b.each=
-b.forEach=function(a,c,d){if(a!=null)if(w&&a.forEach===w)a.forEach(c,d);else if(a.length===+a.length)for(var e=0,f=a.length;e<f;e++){if(e in a&&c.call(d,a[e],e,a)===n)break}else for(e in a)if(b.has(a,e)&&c.call(d,a[e],e,a)===n)break};b.map=b.collect=function(a,c,b){var e=[];if(a==null)return e;if(x&&a.map===x)return a.map(c,b);j(a,function(a,g,h){e[e.length]=c.call(b,a,g,h)});if(a.length===+a.length)e.length=a.length;return e};b.reduce=b.foldl=b.inject=function(a,c,d,e){var f=arguments.length>2;a==
-null&&(a=[]);if(y&&a.reduce===y)return e&&(c=b.bind(c,e)),f?a.reduce(c,d):a.reduce(c);j(a,function(a,b,i){f?d=c.call(e,d,a,b,i):(d=a,f=true)});if(!f)throw new TypeError("Reduce of empty array with no initial value");return d};b.reduceRight=b.foldr=function(a,c,d,e){var f=arguments.length>2;a==null&&(a=[]);if(z&&a.reduceRight===z)return e&&(c=b.bind(c,e)),f?a.reduceRight(c,d):a.reduceRight(c);var g=b.toArray(a).reverse();e&&!f&&(c=b.bind(c,e));return f?b.reduce(g,c,d,e):b.reduce(g,c)};b.find=b.detect=
-function(a,c,b){var e;E(a,function(a,g,h){if(c.call(b,a,g,h))return e=a,true});return e};b.filter=b.select=function(a,c,b){var e=[];if(a==null)return e;if(A&&a.filter===A)return a.filter(c,b);j(a,function(a,g,h){c.call(b,a,g,h)&&(e[e.length]=a)});return e};b.reject=function(a,c,b){var e=[];if(a==null)return e;j(a,function(a,g,h){c.call(b,a,g,h)||(e[e.length]=a)});return e};b.every=b.all=function(a,c,b){var e=true;if(a==null)return e;if(B&&a.every===B)return a.every(c,b);j(a,function(a,g,h){if(!(e=
-e&&c.call(b,a,g,h)))return n});return e};var E=b.some=b.any=function(a,c,d){c||(c=b.identity);var e=false;if(a==null)return e;if(C&&a.some===C)return a.some(c,d);j(a,function(a,b,h){if(e||(e=c.call(d,a,b,h)))return n});return!!e};b.include=b.contains=function(a,c){var b=false;if(a==null)return b;return p&&a.indexOf===p?a.indexOf(c)!=-1:b=E(a,function(a){return a===c})};b.invoke=function(a,c){var d=i.call(arguments,2);return b.map(a,function(a){return(b.isFunction(c)?c||a:a[c]).apply(a,d)})};b.pluck=
-function(a,c){return b.map(a,function(a){return a[c]})};b.max=function(a,c,d){if(!c&&b.isArray(a))return Math.max.apply(Math,a);if(!c&&b.isEmpty(a))return-Infinity;var e={computed:-Infinity};j(a,function(a,b,h){b=c?c.call(d,a,b,h):a;b>=e.computed&&(e={value:a,computed:b})});return e.value};b.min=function(a,c,d){if(!c&&b.isArray(a))return Math.min.apply(Math,a);if(!c&&b.isEmpty(a))return Infinity;var e={computed:Infinity};j(a,function(a,b,h){b=c?c.call(d,a,b,h):a;b<e.computed&&(e={value:a,computed:b})});
-return e.value};b.shuffle=function(a){var b=[],d;j(a,function(a,f){f==0?b[0]=a:(d=Math.floor(Math.random()*(f+1)),b[f]=b[d],b[d]=a)});return b};b.sortBy=function(a,c,d){return b.pluck(b.map(a,function(a,b,g){return{value:a,criteria:c.call(d,a,b,g)}}).sort(function(a,b){var c=a.criteria,d=b.criteria;return c<d?-1:c>d?1:0}),"value")};b.groupBy=function(a,c){var d={},e=b.isFunction(c)?c:function(a){return a[c]};j(a,function(a,b){var c=e(a,b);(d[c]||(d[c]=[])).push(a)});return d};b.sortedIndex=function(a,
-c,d){d||(d=b.identity);for(var e=0,f=a.length;e<f;){var g=e+f>>1;d(a[g])<d(c)?e=g+1:f=g}return e};b.toArray=function(a){return!a?[]:a.toArray?a.toArray():b.isArray(a)?i.call(a):b.isArguments(a)?i.call(a):b.values(a)};b.size=function(a){return b.toArray(a).length};b.first=b.head=function(a,b,d){return b!=null&&!d?i.call(a,0,b):a[0]};b.initial=function(a,b,d){return i.call(a,0,a.length-(b==null||d?1:b))};b.last=function(a,b,d){return b!=null&&!d?i.call(a,Math.max(a.length-b,0)):a[a.length-1]};b.rest=
-b.tail=function(a,b,d){return i.call(a,b==null||d?1:b)};b.compact=function(a){return b.filter(a,function(a){return!!a})};b.flatten=function(a,c){return b.reduce(a,function(a,e){if(b.isArray(e))return a.concat(c?e:b.flatten(e));a[a.length]=e;return a},[])};b.without=function(a){return b.difference(a,i.call(arguments,1))};b.uniq=b.unique=function(a,c,d){var d=d?b.map(a,d):a,e=[];b.reduce(d,function(d,g,h){if(0==h||(c===true?b.last(d)!=g:!b.include(d,g)))d[d.length]=g,e[e.length]=a[h];return d},[]);
-return e};b.union=function(){return b.uniq(b.flatten(arguments,true))};b.intersection=b.intersect=function(a){var c=i.call(arguments,1);return b.filter(b.uniq(a),function(a){return b.every(c,function(c){return b.indexOf(c,a)>=0})})};b.difference=function(a){var c=b.flatten(i.call(arguments,1));return b.filter(a,function(a){return!b.include(c,a)})};b.zip=function(){for(var a=i.call(arguments),c=b.max(b.pluck(a,"length")),d=Array(c),e=0;e<c;e++)d[e]=b.pluck(a,""+e);return d};b.indexOf=function(a,c,
-d){if(a==null)return-1;var e;if(d)return d=b.sortedIndex(a,c),a[d]===c?d:-1;if(p&&a.indexOf===p)return a.indexOf(c);for(d=0,e=a.length;d<e;d++)if(d in a&&a[d]===c)return d;return-1};b.lastIndexOf=function(a,b){if(a==null)return-1;if(D&&a.lastIndexOf===D)return a.lastIndexOf(b);for(var d=a.length;d--;)if(d in a&&a[d]===b)return d;return-1};b.range=function(a,b,d){arguments.length<=1&&(b=a||0,a=0);for(var d=arguments[2]||1,e=Math.max(Math.ceil((b-a)/d),0),f=0,g=Array(e);f<e;)g[f++]=a,a+=d;return g};
-var F=function(){};b.bind=function(a,c){var d,e;if(a.bind===s&&s)return s.apply(a,i.call(arguments,1));if(!b.isFunction(a))throw new TypeError;e=i.call(arguments,2);return d=function(){if(!(this instanceof d))return a.apply(c,e.concat(i.call(arguments)));F.prototype=a.prototype;var b=new F,g=a.apply(b,e.concat(i.call(arguments)));return Object(g)===g?g:b}};b.bindAll=function(a){var c=i.call(arguments,1);c.length==0&&(c=b.functions(a));j(c,function(c){a[c]=b.bind(a[c],a)});return a};b.memoize=function(a,
-c){var d={};c||(c=b.identity);return function(){var e=c.apply(this,arguments);return b.has(d,e)?d[e]:d[e]=a.apply(this,arguments)}};b.delay=function(a,b){var d=i.call(arguments,2);return setTimeout(function(){return a.apply(a,d)},b)};b.defer=function(a){return b.delay.apply(b,[a,1].concat(i.call(arguments,1)))};b.throttle=function(a,c){var d,e,f,g,h,i=b.debounce(function(){h=g=false},c);return function(){d=this;e=arguments;var b;f||(f=setTimeout(function(){f=null;h&&a.apply(d,e);i()},c));g?h=true:
-a.apply(d,e);i();g=true}};b.debounce=function(a,b){var d;return function(){var e=this,f=arguments;clearTimeout(d);d=setTimeout(function(){d=null;a.apply(e,f)},b)}};b.once=function(a){var b=false,d;return function(){if(b)return d;b=true;return d=a.apply(this,arguments)}};b.wrap=function(a,b){return function(){var d=[a].concat(i.call(arguments,0));return b.apply(this,d)}};b.compose=function(){var a=arguments;return function(){for(var b=arguments,d=a.length-1;d>=0;d--)b=[a[d].apply(this,b)];return b[0]}};
-b.after=function(a,b){return a<=0?b():function(){if(--a<1)return b.apply(this,arguments)}};b.keys=J||function(a){if(a!==Object(a))throw new TypeError("Invalid object");var c=[],d;for(d in a)b.has(a,d)&&(c[c.length]=d);return c};b.values=function(a){return b.map(a,b.identity)};b.functions=b.methods=function(a){var c=[],d;for(d in a)b.isFunction(a[d])&&c.push(d);return c.sort()};b.extend=function(a){j(i.call(arguments,1),function(b){for(var d in b)a[d]=b[d]});return a};b.defaults=function(a){j(i.call(arguments,
-1),function(b){for(var d in b)a[d]==null&&(a[d]=b[d])});return a};b.clone=function(a){return!b.isObject(a)?a:b.isArray(a)?a.slice():b.extend({},a)};b.tap=function(a,b){b(a);return a};b.isEqual=function(a,b){return q(a,b,[])};b.isEmpty=function(a){if(b.isArray(a)||b.isString(a))return a.length===0;for(var c in a)if(b.has(a,c))return false;return true};b.isElement=function(a){return!!(a&&a.nodeType==1)};b.isArray=o||function(a){return l.call(a)=="[object Array]"};b.isObject=function(a){return a===Object(a)};
-b.isArguments=function(a){return l.call(a)=="[object Arguments]"};if(!b.isArguments(arguments))b.isArguments=function(a){return!(!a||!b.has(a,"callee"))};b.isFunction=function(a){return l.call(a)=="[object Function]"};b.isString=function(a){return l.call(a)=="[object String]"};b.isNumber=function(a){return l.call(a)=="[object Number]"};b.isNaN=function(a){return a!==a};b.isBoolean=function(a){return a===true||a===false||l.call(a)=="[object Boolean]"};b.isDate=function(a){return l.call(a)=="[object Date]"};
-b.isRegExp=function(a){return l.call(a)=="[object RegExp]"};b.isNull=function(a){return a===null};b.isUndefined=function(a){return a===void 0};b.has=function(a,b){return I.call(a,b)};b.noConflict=function(){r._=G;return this};b.identity=function(a){return a};b.times=function(a,b,d){for(var e=0;e<a;e++)b.call(d,e)};b.escape=function(a){return(""+a).replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&#x27;").replace(/\//g,"&#x2F;")};b.mixin=function(a){j(b.functions(a),
-function(c){K(c,b[c]=a[c])})};var L=0;b.uniqueId=function(a){var b=L++;return a?a+b:b};b.templateSettings={evaluate:/<%([\s\S]+?)%>/g,interpolate:/<%=([\s\S]+?)%>/g,escape:/<%-([\s\S]+?)%>/g};var t=/.^/,u=function(a){return a.replace(/\\\\/g,"\\").replace(/\\'/g,"'")};b.template=function(a,c){var d=b.templateSettings,d="var __p=[],print=function(){__p.push.apply(__p,arguments);};with(obj||{}){__p.push('"+a.replace(/\\/g,"\\\\").replace(/'/g,"\\'").replace(d.escape||t,function(a,b){return"',_.escape("+
-u(b)+"),'"}).replace(d.interpolate||t,function(a,b){return"',"+u(b)+",'"}).replace(d.evaluate||t,function(a,b){return"');"+u(b).replace(/[\r\n\t]/g," ")+";__p.push('"}).replace(/\r/g,"\\r").replace(/\n/g,"\\n").replace(/\t/g,"\\t")+"');}return __p.join('');",e=new Function("obj","_",d);return c?e(c,b):function(a){return e.call(this,a,b)}};b.chain=function(a){return b(a).chain()};var m=function(a){this._wrapped=a};b.prototype=m.prototype;var v=function(a,c){return c?b(a).chain():a},K=function(a,c){m.prototype[a]=
-function(){var a=i.call(arguments);H.call(a,this._wrapped);return v(c.apply(b,a),this._chain)}};b.mixin(b);j("pop,push,reverse,shift,sort,splice,unshift".split(","),function(a){var b=k[a];m.prototype[a]=function(){var d=this._wrapped;b.apply(d,arguments);var e=d.length;(a=="shift"||a=="splice")&&e===0&&delete d[0];return v(d,this._chain)}});j(["concat","join","slice"],function(a){var b=k[a];m.prototype[a]=function(){return v(b.apply(this._wrapped,arguments),this._chain)}});m.prototype.chain=function(){this._chain=
-true;return this};m.prototype.value=function(){return this._wrapped}}).call(this);
diff --git a/docs/_build/html/api/aub.html b/docs/_build/html/api/aub.html
deleted file mode 100644
index 3f0f46e17..000000000
--- a/docs/_build/html/api/aub.html
+++ /dev/null
@@ -1,177 +0,0 @@
-
-<!DOCTYPE html>
-
-<html xmlns="http://www.w3.org/1999/xhtml" lang="de">
-  <head>
-    <meta charset="utf-8" />
-    <title>AUB (Antrag auf Unterrichtbefreiung) &#8212; SchoolApps Version 1.0.2-dev Dokumentation</title>
-    <link rel="stylesheet" href="../_static/alabaster.css" type="text/css" />
-    <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
-    <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
-    <script type="text/javascript" src="../_static/jquery.js"></script>
-    <script type="text/javascript" src="../_static/underscore.js"></script>
-    <script type="text/javascript" src="../_static/doctools.js"></script>
-    <script type="text/javascript" src="../_static/language_data.js"></script>
-    <script type="text/javascript" src="../_static/translations.js"></script>
-    <link rel="index" title="Stichwortverzeichnis" href="../genindex.html" />
-    <link rel="search" title="Suche" href="../search.html" />
-    <link rel="next" title="Development Guide" href="../dev/dev.html" />
-    <link rel="prev" title="App: Dashboard" href="dashboard.html" />
-   
-  <link rel="stylesheet" href="../_static/custom.css" type="text/css" />
-  
-  
-  <meta name="viewport" content="width=device-width, initial-scale=0.9, maximum-scale=0.9" />
-
-  </head><body>
-  
-
-    <div class="document">
-      <div class="documentwrapper">
-        <div class="bodywrapper">
-          
-
-          <div class="body" role="main">
-            
-  <div class="section" id="aub-antrag-auf-unterrichtbefreiung">
-<h1>AUB (Antrag auf Unterrichtbefreiung)<a class="headerlink" href="#aub-antrag-auf-unterrichtbefreiung" title="Link zu dieser Überschrift">¶</a></h1>
-<div class="section" id="stichworte">
-<h2>Stichworte<a class="headerlink" href="#stichworte" title="Link zu dieser Überschrift">¶</a></h2>
-<div class="section" id="workflow">
-<h3>Workflow<a class="headerlink" href="#workflow" title="Link zu dieser Überschrift">¶</a></h3>
-<ol class="arabic simple">
-<li><p>Lehrer füllt Antragsformular aus</p>
-<ul class="simple">
-<li><p>Beginn Datum (DateField)</p></li>
-<li><p>Beginn Stunde oder Uhrzeit (Int 1..9 / Time)</p></li>
-<li><p>Ende Datum (DateField)</p></li>
-<li><p>Ende Stunde oder Uhrzeit (Int 1..9 / Time)</p></li>
-<li><p>Beschreibung/Begründung (TextField)</p></li>
-<li><p>Antragsteller (Lehrerkürzel) wird automatisch aus angemeldetem Benutzer generiert</p></li>
-</ul>
-</li>
-<li><dl class="simple">
-<dt>Schulleiter erhält Anträge und a. bewilligt oder b. lehnt ab</dt><dd><ol class="loweralpha simple">
-<li><dl class="simple">
-<dt>Stellvertreter prüft Antrag und i. bewilligt oder ii. lehnt ab</dt><dd><ol class="lowerroman simple">
-<li><p>Lehrkraft erhält Benachrichtigung über Bewilligung</p></li>
-<li><p>Lehrkraft erhält Benachrichtigung über Ablehnung</p></li>
-</ol>
-</dd>
-</dl>
-</li>
-<li><p>Lehrkraft erhält Benachrichtigung über Ablehnung</p></li>
-</ol>
-</dd>
-</dl>
-</li>
-</ol>
-<span class="target" id="module-aub.models"></span><dl class="class">
-<dt id="aub.models.Aub">
-<em class="property">class </em><code class="sig-prename descclassname">aub.models.</code><code class="sig-name descname">Aub</code><span class="sig-paren">(</span><em class="sig-param">id</em>, <em class="sig-param">from_date</em>, <em class="sig-param">from_time</em>, <em class="sig-param">to_date</em>, <em class="sig-param">to_time</em>, <em class="sig-param">description</em>, <em class="sig-param">status_id</em>, <em class="sig-param">created_by</em>, <em class="sig-param">created_at</em><span class="sig-paren">)</span><a class="headerlink" href="#aub.models.Aub" title="Link zu dieser Definition">¶</a></dt>
-<dd><dl class="exception">
-<dt id="aub.models.Aub.DoesNotExist">
-<em class="property">exception </em><code class="sig-name descname">DoesNotExist</code><a class="headerlink" href="#aub.models.Aub.DoesNotExist" title="Link zu dieser Definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="exception">
-<dt id="aub.models.Aub.MultipleObjectsReturned">
-<em class="property">exception </em><code class="sig-name descname">MultipleObjectsReturned</code><a class="headerlink" href="#aub.models.Aub.MultipleObjectsReturned" title="Link zu dieser Definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="aub.models.Aub.all_users">
-<em class="property">static </em><code class="sig-name descname">all_users</code><span class="sig-paren">(</span><span class="sig-paren">)</span> &#x2192; List[django.contrib.auth.models.User]<a class="headerlink" href="#aub.models.Aub.all_users" title="Link zu dieser Definition">¶</a></dt>
-<dd><dl class="field-list simple">
-<dt class="field-odd">Rückgabe</dt>
-<dd class="field-odd"><p>List of all users that have created an AUB already</p>
-</dd>
-<dt class="field-even">Rückgabetyp</dt>
-<dd class="field-even"><p>list</p>
-</dd>
-</dl>
-</dd></dl>
-
-</dd></dl>
-
-</div>
-</div>
-</div>
-
-
-          </div>
-          
-        </div>
-      </div>
-      <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
-        <div class="sphinxsidebarwrapper">
-<h1 class="logo"><a href="../index.html">SchoolApps</a></h1>
-
-
-
-
-
-
-
-
-<h3>Navigation</h3>
-<p class="caption"><span class="caption-text">Inhalt:</span></p>
-<ul class="current">
-<li class="toctree-l1"><a class="reference internal" href="dashboard.html">App: Dashboard</a></li>
-<li class="toctree-l1 current"><a class="current reference internal" href="#">AUB (Antrag auf Unterrichtbefreiung)</a><ul>
-<li class="toctree-l2"><a class="reference internal" href="#stichworte">Stichworte</a></li>
-</ul>
-</li>
-<li class="toctree-l1"><a class="reference internal" href="../dev/dev.html">Development Guide</a></li>
-<li class="toctree-l1"><a class="reference internal" href="../dev/git.html">Git Management Guide</a></li>
-<li class="toctree-l1"><a class="reference internal" href="../dev/doc.html">Dokumentation</a></li>
-</ul>
-
-<div class="relations">
-<h3>Related Topics</h3>
-<ul>
-  <li><a href="../index.html">Documentation overview</a><ul>
-      <li>Previous: <a href="dashboard.html" title="vorheriges Kapitel">App: Dashboard</a></li>
-      <li>Next: <a href="../dev/dev.html" title="nächstes Kapitel">Development Guide</a></li>
-  </ul></li>
-</ul>
-</div>
-<div id="searchbox" style="display: none" role="search">
-  <h3 id="searchlabel">Schnellsuche</h3>
-    <div class="searchformwrapper">
-    <form class="search" action="../search.html" method="get">
-      <input type="text" name="q" aria-labelledby="searchlabel" />
-      <input type="submit" value="Los" />
-    </form>
-    </div>
-</div>
-<script type="text/javascript">$('#searchbox').show(0);</script>
-
-
-
-
-
-
-
-
-        </div>
-      </div>
-      <div class="clearer"></div>
-    </div>
-    <div class="footer">
-      &copy; 2019, Hangzhi Yu, Julian Leucker, Jonathan Weth, Frank Poetzsch-Heffter.
-      
-      |
-      Powered by <a href="http://sphinx-doc.org/">Sphinx 2.2.1</a>
-      &amp; <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a>
-      
-      |
-      <a href="../_sources/api/aub.rst.txt"
-          rel="nofollow">Page source</a>
-    </div>
-
-    
-
-    
-  </body>
-</html>
\ No newline at end of file
diff --git a/docs/_build/html/api/dashboard.html b/docs/_build/html/api/dashboard.html
deleted file mode 100644
index c03a81ebb..000000000
--- a/docs/_build/html/api/dashboard.html
+++ /dev/null
@@ -1,466 +0,0 @@
-
-<!DOCTYPE html>
-
-<html xmlns="http://www.w3.org/1999/xhtml" lang="de">
-  <head>
-    <meta charset="utf-8" />
-    <title>App: Dashboard &#8212; SchoolApps Version 1.0.2-dev Dokumentation</title>
-    <link rel="stylesheet" href="../_static/alabaster.css" type="text/css" />
-    <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
-    <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
-    <script type="text/javascript" src="../_static/jquery.js"></script>
-    <script type="text/javascript" src="../_static/underscore.js"></script>
-    <script type="text/javascript" src="../_static/doctools.js"></script>
-    <script type="text/javascript" src="../_static/language_data.js"></script>
-    <script type="text/javascript" src="../_static/translations.js"></script>
-    <link rel="index" title="Stichwortverzeichnis" href="../genindex.html" />
-    <link rel="search" title="Suche" href="../search.html" />
-    <link rel="next" title="AUB (Antrag auf Unterrichtbefreiung)" href="aub.html" />
-    <link rel="prev" title="Dokumentation von SchoolApps" href="../index.html" />
-   
-  <link rel="stylesheet" href="../_static/custom.css" type="text/css" />
-  
-  
-  <meta name="viewport" content="width=device-width, initial-scale=0.9, maximum-scale=0.9" />
-
-  </head><body>
-  
-
-    <div class="document">
-      <div class="documentwrapper">
-        <div class="bodywrapper">
-          
-
-          <div class="body" role="main">
-            
-  <div class="section" id="app-dashboard">
-<h1>App: Dashboard<a class="headerlink" href="#app-dashboard" title="Link zu dieser Überschrift">¶</a></h1>
-<p>Das Dashboard dient dazu, den Benutzer zu begrüßen (Startseite)
-und seine letzten Aktivitäten anzuzeigen.</p>
-<p>Außerdem zeigt das Dashboard aktuelle Nachrichten für den Benutzer an.</p>
-<div class="section" id="aktivitaten">
-<h2>Aktivitäten<a class="headerlink" href="#aktivitaten" title="Link zu dieser Überschrift">¶</a></h2>
-<dl class="simple">
-<dt>Definition einer Aktivität</dt><dd><p>Als Aktivität gilt alles, was der Nutzer selbst macht, d.h., aktiv.</p>
-</dd>
-</dl>
-<dl class="class">
-<dt id="dashboard.models.Activity">
-<em class="property">class </em><code class="sig-prename descclassname">dashboard.models.</code><code class="sig-name descname">Activity</code><span class="sig-paren">(</span><em class="sig-param">*args</em>, <em class="sig-param">**kwargs</em><span class="sig-paren">)</span><a class="headerlink" href="#dashboard.models.Activity" title="Link zu dieser Definition">¶</a></dt>
-<dd><p>An user-based Activity.</p>
-<p>An activity is something a user did active. The event have to be important in order to want saving it as an <a class="reference internal" href="#dashboard.models.Activity" title="dashboard.models.Activity"><code class="xref py py-class docutils literal notranslate"><span class="pre">Activity</span></code></a>.</p>
-<p><strong>Register An Activity:</strong></p>
-<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="kn">import</span> <span class="nn">dashboard.models</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="kn">from</span> <span class="nn">dashboard.apps</span> <span class="k">import</span> <span class="n">DashboardConfig</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="n">Activity</span><span class="o">.</span><span class="n">register</span><span class="p">(</span><span class="n">title</span><span class="o">=</span><span class="s2">&quot;Example Title&quot;</span><span class="p">,</span> <span class="n">description</span><span class="o">=</span><span class="s2">&quot;Example description.&quot;</span><span class="p">,</span> <span class="n">app</span><span class="o">=</span><span class="n">DashboardConfig</span><span class="o">.</span><span class="n">verbose_name</span><span class="p">,</span> <span class="n">user</span><span class="o">=</span><span class="n">user</span><span class="p">)</span>
-</pre></div>
-</div>
-<div class="admonition warning">
-<p class="admonition-title">Warnung</p>
-<p>You have to replace <code class="docutils literal notranslate"><span class="pre">DashboardConfig</span></code> with the config object of the app in which the activity „happened“.</p>
-</div>
-<dl class="exception">
-<dt id="dashboard.models.Activity.DoesNotExist">
-<em class="property">exception </em><code class="sig-name descname">DoesNotExist</code><a class="headerlink" href="#dashboard.models.Activity.DoesNotExist" title="Link zu dieser Definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="exception">
-<dt id="dashboard.models.Activity.MultipleObjectsReturned">
-<em class="property">exception </em><code class="sig-name descname">MultipleObjectsReturned</code><a class="headerlink" href="#dashboard.models.Activity.MultipleObjectsReturned" title="Link zu dieser Definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="attribute">
-<dt id="dashboard.models.Activity.app">
-<code class="sig-name descname">app</code><a class="headerlink" href="#dashboard.models.Activity.app" title="Link zu dieser Definition">¶</a></dt>
-<dd><p>App label (get via <code class="docutils literal notranslate"><span class="pre">app_config.verbose_name</span></code>, see also <a class="reference internal" href="#dashboard.models.Activity" title="dashboard.models.Activity"><code class="xref py py-class docutils literal notranslate"><span class="pre">Activity</span></code></a>)</p>
-</dd></dl>
-
-<dl class="attribute">
-<dt id="dashboard.models.Activity.created_at">
-<code class="sig-name descname">created_at</code><a class="headerlink" href="#dashboard.models.Activity.created_at" title="Link zu dieser Definition">¶</a></dt>
-<dd><p>Automatic filled timestamp</p>
-</dd></dl>
-
-<dl class="attribute">
-<dt id="dashboard.models.Activity.description">
-<code class="sig-name descname">description</code><a class="headerlink" href="#dashboard.models.Activity.description" title="Link zu dieser Definition">¶</a></dt>
-<dd><p>Longer description with details (str)</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="dashboard.models.Activity.register">
-<em class="property">static </em><code class="sig-name descname">register</code><span class="sig-paren">(</span><em class="sig-param">user</em>, <em class="sig-param">title</em>, <em class="sig-param">description</em>, <em class="sig-param">app='SchoolApps'</em><span class="sig-paren">)</span><a class="headerlink" href="#dashboard.models.Activity.register" title="Link zu dieser Definition">¶</a></dt>
-<dd><p>Creates an new <a class="reference internal" href="#dashboard.models.Activity" title="dashboard.models.Activity"><code class="xref py py-class docutils literal notranslate"><span class="pre">Activity</span></code></a></p>
-<dl class="field-list simple">
-<dt class="field-odd">Parameter</dt>
-<dd class="field-odd"><ul class="simple">
-<li><p><strong>user</strong> (<em>User</em>) – User which caused the activity</p></li>
-<li><p><strong>title</strong> (<em>str</em>) – Short title which identifies which type of activity happened</p></li>
-<li><p><strong>description</strong> (<em>str</em>) – Longer description with details</p></li>
-<li><p><strong>app</strong> (<em>str</em><em>, </em><em>optional</em>) – App label</p></li>
-</ul>
-</dd>
-<dt class="field-even">Rückgabe</dt>
-<dd class="field-even"><p>Created <a class="reference internal" href="#dashboard.models.Activity" title="dashboard.models.Activity"><code class="xref py py-class docutils literal notranslate"><span class="pre">Activity</span></code></a></p>
-</dd>
-<dt class="field-odd">Rückgabetyp</dt>
-<dd class="field-odd"><p><a class="reference internal" href="#dashboard.models.Activity" title="dashboard.models.Activity">Activity</a></p>
-</dd>
-</dl>
-</dd></dl>
-
-<dl class="attribute">
-<dt id="dashboard.models.Activity.title">
-<code class="sig-name descname">title</code><a class="headerlink" href="#dashboard.models.Activity.title" title="Link zu dieser Definition">¶</a></dt>
-<dd><p>Short title which identifies which type of activity happened (str)</p>
-</dd></dl>
-
-<dl class="attribute">
-<dt id="dashboard.models.Activity.user">
-<code class="sig-name descname">user</code><a class="headerlink" href="#dashboard.models.Activity.user" title="Link zu dieser Definition">¶</a></dt>
-<dd><p>User which caused the activity (Django <code class="xref py py-class docutils literal notranslate"><span class="pre">User</span></code>)</p>
-</dd></dl>
-
-</dd></dl>
-
-</div>
-<div class="section" id="benachrichtigungen">
-<h2>Benachrichtigungen<a class="headerlink" href="#benachrichtigungen" title="Link zu dieser Überschrift">¶</a></h2>
-<dl class="simple">
-<dt>Definition einer Benachrichtigung</dt><dd><p>Eine Benachrichtigung für einen Nutzer wird erstellt, wenn eine Aktion, die diesen betrifft,
-die er aber nicht selbst durchgeführt hat, passiert ist, um den Nutzer zu informieren.</p>
-</dd>
-</dl>
-<dl class="class">
-<dt id="dashboard.models.Notification">
-<em class="property">class </em><code class="sig-prename descclassname">dashboard.models.</code><code class="sig-name descname">Notification</code><span class="sig-paren">(</span><em class="sig-param">*args</em>, <em class="sig-param">**kwargs</em><span class="sig-paren">)</span><a class="headerlink" href="#dashboard.models.Notification" title="Link zu dieser Definition">¶</a></dt>
-<dd><p>An user-adressed Notification.</p>
-<blockquote>
-<div><p>An notification notifies an user about actions related to him, but not done by him.</p>
-</div></blockquote>
-<p><strong>Register An Notification:</strong></p>
-<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="kn">import</span> <span class="nn">dashboard.models</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="kn">from</span> <span class="nn">dashboard.apps</span> <span class="k">import</span> <span class="n">DashboardConfig</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="n">Notification</span><span class="o">.</span><span class="n">register</span><span class="p">(</span><span class="n">title</span><span class="o">=</span><span class="s2">&quot;Example Title&quot;</span><span class="p">,</span> <span class="n">description</span><span class="o">=</span><span class="s2">&quot;Example description.&quot;</span><span class="p">,</span> <span class="n">app</span><span class="o">=</span><span class="n">DashboardConfig</span><span class="o">.</span><span class="n">verbose_name</span><span class="p">,</span> <span class="n">user</span><span class="o">=</span><span class="n">user</span><span class="p">,</span> <span class="n">link</span><span class="o">=</span><span class="n">request</span><span class="o">.</span><span class="n">build_absolute_uri</span><span class="p">(</span><span class="n">link</span><span class="p">))</span>
-</pre></div>
-</div>
-<div class="admonition warning">
-<p class="admonition-title">Warnung</p>
-<p>You have to replace <code class="docutils literal notranslate"><span class="pre">DashboardConfig</span></code> with the config object of the app in which the notification was caused.</p>
-</div>
-<dl class="exception">
-<dt id="dashboard.models.Notification.DoesNotExist">
-<em class="property">exception </em><code class="sig-name descname">DoesNotExist</code><a class="headerlink" href="#dashboard.models.Notification.DoesNotExist" title="Link zu dieser Definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="exception">
-<dt id="dashboard.models.Notification.MultipleObjectsReturned">
-<em class="property">exception </em><code class="sig-name descname">MultipleObjectsReturned</code><a class="headerlink" href="#dashboard.models.Notification.MultipleObjectsReturned" title="Link zu dieser Definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="attribute">
-<dt id="dashboard.models.Notification.app">
-<code class="sig-name descname">app</code><a class="headerlink" href="#dashboard.models.Notification.app" title="Link zu dieser Definition">¶</a></dt>
-<dd><p>App label (get via <code class="docutils literal notranslate"><span class="pre">app_config.verbose_name</span></code>, see also <a class="reference internal" href="#dashboard.models.Activity" title="dashboard.models.Activity"><code class="xref py py-class docutils literal notranslate"><span class="pre">Activity</span></code></a>)</p>
-</dd></dl>
-
-<dl class="attribute">
-<dt id="dashboard.models.Notification.created_at">
-<code class="sig-name descname">created_at</code><a class="headerlink" href="#dashboard.models.Notification.created_at" title="Link zu dieser Definition">¶</a></dt>
-<dd><p>Automatic filled timestamp</p>
-</dd></dl>
-
-<dl class="attribute">
-<dt id="dashboard.models.Notification.description">
-<code class="sig-name descname">description</code><a class="headerlink" href="#dashboard.models.Notification.description" title="Link zu dieser Definition">¶</a></dt>
-<dd><p>Longer description with details about happened things</p>
-</dd></dl>
-
-<dl class="attribute">
-<dt id="dashboard.models.Notification.link">
-<code class="sig-name descname">link</code><a class="headerlink" href="#dashboard.models.Notification.link" title="Link zu dieser Definition">¶</a></dt>
-<dd><p>Absolute URL to details page (not relative!, str, optional)</p>
-</dd></dl>
-
-<dl class="attribute">
-<dt id="dashboard.models.Notification.read">
-<code class="sig-name descname">read</code><a class="headerlink" href="#dashboard.models.Notification.read" title="Link zu dieser Definition">¶</a></dt>
-<dd><p>Mark whether user read notification (bool)</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="dashboard.models.Notification.register">
-<em class="property">static </em><code class="sig-name descname">register</code><span class="sig-paren">(</span><em class="sig-param">user</em>, <em class="sig-param">title</em>, <em class="sig-param">description</em>, <em class="sig-param">app='SchoolApps'</em>, <em class="sig-param">link=''</em><span class="sig-paren">)</span><a class="headerlink" href="#dashboard.models.Notification.register" title="Link zu dieser Definition">¶</a></dt>
-<dd><p><strong>Creates an new</strong> <a class="reference internal" href="#dashboard.models.Notification" title="dashboard.models.Notification"><code class="xref py py-class docutils literal notranslate"><span class="pre">Notification</span></code></a> and <strong>sends a email</strong> to corresponding user to notify him/her</p>
-<dl class="field-list simple">
-<dt class="field-odd">Parameter</dt>
-<dd class="field-odd"><ul class="simple">
-<li><p><strong>user</strong> (<em>User</em>) – User to be notified</p></li>
-<li><p><strong>title</strong> (<em>str</em>) – Short title which identifies what happened</p></li>
-<li><p><strong>description</strong> (<em>str</em>) – Longer description with details about happened things</p></li>
-<li><p><strong>app</strong> (<em>str</em><em>, </em><em>optional</em>) – App label</p></li>
-<li><p><strong>link</strong> (<em>str</em><em>, </em><em>optional</em>) – Absolute URL to details page (not relative!)</p></li>
-</ul>
-</dd>
-<dt class="field-even">Rückgabe</dt>
-<dd class="field-even"><p>Created <a class="reference internal" href="#dashboard.models.Notification" title="dashboard.models.Notification"><code class="xref py py-class docutils literal notranslate"><span class="pre">Notification</span></code></a></p>
-</dd>
-<dt class="field-odd">Rückgabetyp</dt>
-<dd class="field-odd"><p><a class="reference internal" href="#dashboard.models.Notification" title="dashboard.models.Notification">Notification</a></p>
-</dd>
-</dl>
-</dd></dl>
-
-<dl class="method">
-<dt id="dashboard.models.Notification.send_email">
-<code class="sig-name descname">send_email</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#dashboard.models.Notification.send_email" title="Link zu dieser Definition">¶</a></dt>
-<dd><p>Sends an email to user with all information about the notification in order to notify him/her</p>
-</dd></dl>
-
-<dl class="attribute">
-<dt id="dashboard.models.Notification.title">
-<code class="sig-name descname">title</code><a class="headerlink" href="#dashboard.models.Notification.title" title="Link zu dieser Definition">¶</a></dt>
-<dd><p>Short title which identifies what happened (str)</p>
-</dd></dl>
-
-<dl class="attribute">
-<dt id="dashboard.models.Notification.user">
-<code class="sig-name descname">user</code><a class="headerlink" href="#dashboard.models.Notification.user" title="Link zu dieser Definition">¶</a></dt>
-<dd><p>User to notify (Django <code class="xref py py-class docutils literal notranslate"><span class="pre">User</span></code>)</p>
-</dd></dl>
-
-</dd></dl>
-
-<div class="section" id="hinweis-zum-erstellen-von-absoluten-urls-auf-der-basis-relativer-urls">
-<h3>Hinweis zum Erstellen von absoluten URLs auf der Basis relativer URLs<a class="headerlink" href="#hinweis-zum-erstellen-von-absoluten-urls-auf-der-basis-relativer-urls" title="Link zu dieser Überschrift">¶</a></h3>
-<p>Dies wird durch übergabe eines dynamischen Linkes (z. B. /aub/1) an die Methode <code class="xref py py-func docutils literal notranslate"><span class="pre">request.build_absolute_uri()</span></code> <a class="footnote-reference brackets" href="#id3" id="id1">1</a> erreicht.</p>
-<p>Um einen dynamischen Link durch den Namen einer Django-URL zu „errechnen“, dient die Funktion <code class="xref py py-func docutils literal notranslate"><span class="pre">reverse()</span></code> <a class="footnote-reference brackets" href="#id4" id="id2">2</a>.</p>
-<div class="admonition seealso">
-<p class="admonition-title">Siehe auch</p>
-<dl class="footnote brackets">
-<dt class="label" id="id3"><span class="brackets"><a class="fn-backref" href="#id1">1</a></span></dt>
-<dd><p><a class="reference external" href="https://docs.djangoproject.com/en/2.1/ref/request-response/#django.http.HttpRequest.build_absolute_uri">https://docs.djangoproject.com/en/2.1/ref/request-response/#django.http.HttpRequest.build_absolute_uri</a></p>
-</dd>
-<dt class="label" id="id4"><span class="brackets"><a class="fn-backref" href="#id2">2</a></span></dt>
-<dd><p><a class="reference external" href="https://docs.djangoproject.com/en/2.1/ref/urlresolvers/#reverse">https://docs.djangoproject.com/en/2.1/ref/urlresolvers/#reverse</a></p>
-</dd>
-</dl>
-</div>
-</div>
-</div>
-<div class="section" id="caches">
-<h2>Caches<a class="headerlink" href="#caches" title="Link zu dieser Überschrift">¶</a></h2>
-<p>SchoolApps benutzt eine angepasste Version des Django-Cache-Systems, welches dabei um eine Verwaltungsfunktion für verschiedene Caches ergänzt wurde.</p>
-<dl class="simple">
-<dt>Sitecache</dt><dd><p>Ein Seitencache basiert auf dem Django-Decorator <code class="xref py py-func docutils literal notranslate"><span class="pre">&#64;cache_page()</span></code>  und cacht die HTML-Ausgabe des entsprechenden Views.</p>
-</dd>
-<dt>Variablencache</dt><dd><p>Ein Variablencache nutzt die Low-Level-Cache-API von Django und speichert den Inhalt einer Variable.</p>
-</dd>
-</dl>
-<div class="section" id="verwaltung">
-<h3>Verwaltung<a class="headerlink" href="#verwaltung" title="Link zu dieser Überschrift">¶</a></h3>
-<p>Jedes gecachte Objekt (ob Sitecache oder Variablencache) benötigt ein Cache-Objekt in der DB. Bei Cacheinhalten für die nur eine Variable gespeichert werden muss oder ein View, wird die Datei <cite>caches.py</cite> verwendet, wo der Cache als Konstante gespeichert ist:</p>
-<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="o">&lt;</span><span class="n">EXAMPLE_CACHE</span><span class="o">&gt;</span><span class="p">,</span> <span class="n">_</span> <span class="o">=</span> <span class="n">Cache</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">get_or_create</span><span class="p">(</span><span class="nb">id</span><span class="o">=</span><span class="s2">&quot;&lt;example_cache&gt;&quot;</span><span class="p">,</span>
-                                                 <span class="n">defaults</span><span class="o">=</span><span class="p">{</span>
-                                                     <span class="s2">&quot;site_cache&quot;</span><span class="p">:</span> <span class="o">&lt;</span><span class="kc">True</span><span class="o">/</span><span class="kc">False</span><span class="o">&gt;</span><span class="p">,</span>
-                                                     <span class="s2">&quot;name&quot;</span><span class="p">:</span> <span class="s2">&quot;&lt;Readable name&gt;&quot;</span><span class="p">,</span>
-                                                     <span class="s2">&quot;expiration_time&quot;</span><span class="p">:</span> <span class="o">&lt;</span><span class="mi">10</span><span class="o">&gt;</span><span class="p">})</span> <span class="c1"># in seconds</span>
-</pre></div>
-</div>
-</div>
-<div class="section" id="verwendung">
-<h3>Verwendung<a class="headerlink" href="#verwendung" title="Link zu dieser Überschrift">¶</a></h3>
-<div class="section" id="variablencache">
-<h4>Variablencache<a class="headerlink" href="#variablencache" title="Link zu dieser Überschrift">¶</a></h4>
-<p>Für Variablencaches kann mit der Funktion <code class="xref py py-func docutils literal notranslate"><span class="pre">get()</span></code> eines Cache-Objektes der aktuelle Inhalt des Caches abgefragt werden.
-Bei abgelaufenen Caches wird <code class="docutils literal notranslate"><span class="pre">False</span></code> zurückgeben, dann ist der Wert neu zu berechnen
-und mit <code class="xref py py-func docutils literal notranslate"><span class="pre">update()</span></code> zu aktualisieren, wobei die Aktualisierungszeit automatisch zurückgesetzt wird.</p>
-</div>
-<div class="section" id="sitecache">
-<h4>Sitecache<a class="headerlink" href="#sitecache" title="Link zu dieser Überschrift">¶</a></h4>
-<p>Für einen Sitecache kann folgender Decorator zum entsprechenden View hinzugefügt werden:</p>
-<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="nd">@cache_page</span><span class="p">(</span><span class="o">&lt;</span><span class="n">EXAMPLE_CACHE</span><span class="o">&gt;.</span><span class="n">expiration_time</span><span class="p">)</span>
-</pre></div>
-</div>
-</div>
-</div>
-<div class="section" id="hintergrundaktualisierung">
-<h3>Hintergrundaktualisierung<a class="headerlink" href="#hintergrundaktualisierung" title="Link zu dieser Überschrift">¶</a></h3>
-</div>
-<div class="section" id="api">
-<h3>API<a class="headerlink" href="#api" title="Link zu dieser Überschrift">¶</a></h3>
-<dl class="class">
-<dt id="dashboard.models.Cache">
-<em class="property">class </em><code class="sig-prename descclassname">dashboard.models.</code><code class="sig-name descname">Cache</code><span class="sig-paren">(</span><em class="sig-param">id</em>, <em class="sig-param">name</em>, <em class="sig-param">expiration_time</em>, <em class="sig-param">last_time_updated</em>, <em class="sig-param">site_cache</em>, <em class="sig-param">needed_until</em><span class="sig-paren">)</span><a class="headerlink" href="#dashboard.models.Cache" title="Link zu dieser Definition">¶</a></dt>
-<dd><dl class="exception">
-<dt id="dashboard.models.Cache.DoesNotExist">
-<em class="property">exception </em><code class="sig-name descname">DoesNotExist</code><a class="headerlink" href="#dashboard.models.Cache.DoesNotExist" title="Link zu dieser Definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="exception">
-<dt id="dashboard.models.Cache.MultipleObjectsReturned">
-<em class="property">exception </em><code class="sig-name descname">MultipleObjectsReturned</code><a class="headerlink" href="#dashboard.models.Cache.MultipleObjectsReturned" title="Link zu dieser Definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="dashboard.models.Cache.delete">
-<code class="sig-name descname">delete</code><span class="sig-paren">(</span><em class="sig-param">*args</em>, <em class="sig-param">**kwargs</em><span class="sig-paren">)</span><a class="headerlink" href="#dashboard.models.Cache.delete" title="Link zu dieser Definition">¶</a></dt>
-<dd><p>Overrides model function delete to delete cache entry, too</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="dashboard.models.Cache.is_expired">
-<code class="sig-name descname">is_expired</code><span class="sig-paren">(</span><span class="sig-paren">)</span> &#x2192; bool<a class="headerlink" href="#dashboard.models.Cache.is_expired" title="Link zu dieser Definition">¶</a></dt>
-<dd><p>Checks whether a cache is expired
-:return: Is cache expired?</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="dashboard.models.Cache.is_needed">
-<code class="sig-name descname">is_needed</code><span class="sig-paren">(</span><span class="sig-paren">)</span> &#x2192; bool<a class="headerlink" href="#dashboard.models.Cache.is_needed" title="Link zu dieser Definition">¶</a></dt>
-<dd><p>Checks whether a plan can be deleted
-:return: Is cache needed?</p>
-</dd></dl>
-
-</dd></dl>
-
-</div>
-<div class="section" id="module-dashboard.caches">
-<span id="verschiedene-caches"></span><h3>Verschiedene Caches<a class="headerlink" href="#module-dashboard.caches" title="Link zu dieser Überschrift">¶</a></h3>
-<dl class="data">
-<dt id="dashboard.caches.BACKGROUND_CACHE_REFRESH">
-<code class="sig-prename descclassname">dashboard.caches.</code><code class="sig-name descname">BACKGROUND_CACHE_REFRESH</code><em class="property"> = &lt;Cache: Hintergrundaktualisierung der Variablencaches&gt;</em><a class="headerlink" href="#dashboard.caches.BACKGROUND_CACHE_REFRESH" title="Link zu dieser Definition">¶</a></dt>
-<dd><p>Time when cache was updated in background last time (no cache, only change time) <em>[SPECIAL]</em></p>
-</dd></dl>
-
-<dl class="data">
-<dt id="dashboard.caches.CURRENT_EVENTS_CACHE">
-<code class="sig-prename descclassname">dashboard.caches.</code><code class="sig-name descname">CURRENT_EVENTS_CACHE</code><em class="property"> = &lt;Cache: Aktuelle Termine&gt;</em><a class="headerlink" href="#dashboard.caches.CURRENT_EVENTS_CACHE" title="Link zu dieser Definition">¶</a></dt>
-<dd><p>Cache for current events from calendar <em>[VAR]</em></p>
-</dd></dl>
-
-<dl class="data">
-<dt id="dashboard.caches.DRIVE_CACHE">
-<code class="sig-prename descclassname">dashboard.caches.</code><code class="sig-name descname">DRIVE_CACHE</code><em class="property"> = &lt;Cache: Zwischenspeicher für teachers, rooms, classses, etc.&gt;</em><a class="headerlink" href="#dashboard.caches.DRIVE_CACHE" title="Link zu dieser Definition">¶</a></dt>
-<dd><p>Cache for drive with teachers, rooms, classes, subjects <em>[VAR]</em></p>
-</dd></dl>
-
-<dl class="data">
-<dt id="dashboard.caches.EXPIRATION_TIME_CACHE_FOR_PLAN_CACHES">
-<code class="sig-prename descclassname">dashboard.caches.</code><code class="sig-name descname">EXPIRATION_TIME_CACHE_FOR_PLAN_CACHES</code><em class="property"> = &lt;Cache: Ablaufzeit für Plan-Caches&gt;</em><a class="headerlink" href="#dashboard.caches.EXPIRATION_TIME_CACHE_FOR_PLAN_CACHES" title="Link zu dieser Definition">¶</a></dt>
-<dd><p>Expiration time for plan caches (no cache, only expiration time) <em>[SPECIAL]</em></p>
-</dd></dl>
-
-<dl class="data">
-<dt id="dashboard.caches.LATEST_ARTICLE_CACHE">
-<code class="sig-prename descclassname">dashboard.caches.</code><code class="sig-name descname">LATEST_ARTICLE_CACHE</code><em class="property"> = &lt;Cache: Letzter Artikel von der Homepage&gt;</em><a class="headerlink" href="#dashboard.caches.LATEST_ARTICLE_CACHE" title="Link zu dieser Definition">¶</a></dt>
-<dd><p>Cache for latest article from homepage <em>[VAR]</em></p>
-</dd></dl>
-
-<dl class="data">
-<dt id="dashboard.caches.PARSED_LESSONS_CACHE">
-<code class="sig-prename descclassname">dashboard.caches.</code><code class="sig-name descname">PARSED_LESSONS_CACHE</code><em class="property"> = &lt;Cache: Geparste Stunden (Regelplan)&gt;</em><a class="headerlink" href="#dashboard.caches.PARSED_LESSONS_CACHE" title="Link zu dieser Definition">¶</a></dt>
-<dd><p>Cache for parsed lessons <em>[VAR]</em></p>
-</dd></dl>
-
-<dl class="data">
-<dt id="dashboard.caches.PLAN_VIEW_CACHE">
-<code class="sig-prename descclassname">dashboard.caches.</code><code class="sig-name descname">PLAN_VIEW_CACHE</code><em class="property"> = &lt;Cache: Wochenplan (Regelplan/SMART PLAN)&gt;</em><a class="headerlink" href="#dashboard.caches.PLAN_VIEW_CACHE" title="Link zu dieser Definition">¶</a></dt>
-<dd><p>Cache for plan view <em>[SITE]</em></p>
-</dd></dl>
-
-<dl class="data">
-<dt id="dashboard.caches.SUBS_VIEW_CACHE">
-<code class="sig-prename descclassname">dashboard.caches.</code><code class="sig-name descname">SUBS_VIEW_CACHE</code><em class="property"> = &lt;Cache: Vertretungen (Tabellenansicht)&gt;</em><a class="headerlink" href="#dashboard.caches.SUBS_VIEW_CACHE" title="Link zu dieser Definition">¶</a></dt>
-<dd><p>Cache for substitutions view <em>[SITE]</em></p>
-</dd></dl>
-
-<div class="admonition seealso">
-<p class="admonition-title">Siehe auch</p>
-<ul class="simple">
-<li><p><a class="reference external" href="https://docs.djangoproject.com/en/2.2/topics/cache/">https://docs.djangoproject.com/en/2.2/topics/cache/</a></p></li>
-</ul>
-</div>
-</div>
-</div>
-</div>
-
-
-          </div>
-          
-        </div>
-      </div>
-      <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
-        <div class="sphinxsidebarwrapper">
-<h1 class="logo"><a href="../index.html">SchoolApps</a></h1>
-
-
-
-
-
-
-
-
-<h3>Navigation</h3>
-<p class="caption"><span class="caption-text">Inhalt:</span></p>
-<ul class="current">
-<li class="toctree-l1 current"><a class="current reference internal" href="#">App: Dashboard</a><ul>
-<li class="toctree-l2"><a class="reference internal" href="#aktivitaten">Aktivitäten</a></li>
-<li class="toctree-l2"><a class="reference internal" href="#benachrichtigungen">Benachrichtigungen</a></li>
-<li class="toctree-l2"><a class="reference internal" href="#caches">Caches</a></li>
-</ul>
-</li>
-<li class="toctree-l1"><a class="reference internal" href="aub.html">AUB (Antrag auf Unterrichtbefreiung)</a></li>
-<li class="toctree-l1"><a class="reference internal" href="../dev/dev.html">Development Guide</a></li>
-<li class="toctree-l1"><a class="reference internal" href="../dev/git.html">Git Management Guide</a></li>
-<li class="toctree-l1"><a class="reference internal" href="../dev/doc.html">Dokumentation</a></li>
-</ul>
-
-<div class="relations">
-<h3>Related Topics</h3>
-<ul>
-  <li><a href="../index.html">Documentation overview</a><ul>
-      <li>Previous: <a href="../index.html" title="vorheriges Kapitel">Dokumentation von SchoolApps</a></li>
-      <li>Next: <a href="aub.html" title="nächstes Kapitel">AUB (Antrag auf Unterrichtbefreiung)</a></li>
-  </ul></li>
-</ul>
-</div>
-<div id="searchbox" style="display: none" role="search">
-  <h3 id="searchlabel">Schnellsuche</h3>
-    <div class="searchformwrapper">
-    <form class="search" action="../search.html" method="get">
-      <input type="text" name="q" aria-labelledby="searchlabel" />
-      <input type="submit" value="Los" />
-    </form>
-    </div>
-</div>
-<script type="text/javascript">$('#searchbox').show(0);</script>
-
-
-
-
-
-
-
-
-        </div>
-      </div>
-      <div class="clearer"></div>
-    </div>
-    <div class="footer">
-      &copy; 2019, Hangzhi Yu, Julian Leucker, Jonathan Weth, Frank Poetzsch-Heffter.
-      
-      |
-      Powered by <a href="http://sphinx-doc.org/">Sphinx 2.2.1</a>
-      &amp; <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a>
-      
-      |
-      <a href="../_sources/api/dashboard.rst.txt"
-          rel="nofollow">Page source</a>
-    </div>
-
-    
-
-    
-  </body>
-</html>
\ No newline at end of file
diff --git a/docs/_build/html/dev/dev.html b/docs/_build/html/dev/dev.html
deleted file mode 100644
index 7716d9af3..000000000
--- a/docs/_build/html/dev/dev.html
+++ /dev/null
@@ -1,164 +0,0 @@
-
-<!DOCTYPE html>
-
-<html xmlns="http://www.w3.org/1999/xhtml" lang="de">
-  <head>
-    <meta charset="utf-8" />
-    <title>Development Guide &#8212; SchoolApps Version 1.0.2-dev Dokumentation</title>
-    <link rel="stylesheet" href="../_static/alabaster.css" type="text/css" />
-    <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
-    <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
-    <script type="text/javascript" src="../_static/jquery.js"></script>
-    <script type="text/javascript" src="../_static/underscore.js"></script>
-    <script type="text/javascript" src="../_static/doctools.js"></script>
-    <script type="text/javascript" src="../_static/language_data.js"></script>
-    <script type="text/javascript" src="../_static/translations.js"></script>
-    <link rel="index" title="Stichwortverzeichnis" href="../genindex.html" />
-    <link rel="search" title="Suche" href="../search.html" />
-    <link rel="next" title="Git Management Guide" href="git.html" />
-    <link rel="prev" title="App: Dashboard" href="../api/dashboard.html" />
-   
-  <link rel="stylesheet" href="../_static/custom.css" type="text/css" />
-  
-  
-  <meta name="viewport" content="width=device-width, initial-scale=0.9, maximum-scale=0.9" />
-
-  </head><body>
-  
-
-    <div class="document">
-      <div class="documentwrapper">
-        <div class="bodywrapper">
-          
-
-          <div class="body" role="main">
-            
-  <div class="section" id="development-guide">
-<h1>Development Guide<a class="headerlink" href="#development-guide" title="Link zu dieser Überschrift">¶</a></h1>
-<p>Diese Anleitung soll für einen einheitliches Development und einheitlichen Code in SchoolApps sorgen.</p>
-<div class="section" id="versionsverwaltung-einsatz-von-git">
-<h2>Versionsverwaltung – Einsatz von Git<a class="headerlink" href="#versionsverwaltung-einsatz-von-git" title="Link zu dieser Überschrift">¶</a></h2>
-<p>Es wird mit <strong>Git</strong> gearbeitet. Die Verwendung ist Pflicht, die Regelungen im Git-Management Guide sind zu beachten. Alle Veränderungen sollten nach Beendigung der Arbeit an SchoolApps direkt im entsprechenden Featurebranch committed und gepusht werden, auch wenn sie noch nicht fertig oder lauffähig sind, um Datenverlust vorzubeugen (hierbei unbedingt den Bereich Branches im Git-Management Guide beachten).</p>
-</div>
-<div class="section" id="codestyle">
-<h2>Codestyle<a class="headerlink" href="#codestyle" title="Link zu dieser Überschrift">¶</a></h2>
-<p>Grundsätzlich wird <strong>auf englisch gecodet</strong>: Englische Variablen, englische Kommentare und englische Commits. Die Oberfläche wird natürlich auf deutsch lokalisiert. Lediglich Issues auf GitHub und die Dokumentation werden auf deutsch verfasst.</p>
-<p>Weiterhin gilt es, die <strong>PEP-8-Richtlinien</strong> der Python Foundation einzuhalten, sie sorgen für einen sauberen, einheitlichen und übersichtlichen Stil.</p>
-<p><strong>Tipp:</strong> Viele Editoren können die Pythonskripte auch automatisch nach PEP8 formatieren – meistens klappt das sehr gut (siehe auch „Editoren/IDEs“).</p>
-</div>
-<div class="section" id="editoren-ides">
-<h2>Editoren/IDEs<a class="headerlink" href="#editoren-ides" title="Link zu dieser Überschrift">¶</a></h2>
-<p>Natürlich kann man auch im Texteditor des jeweiligen Betriebssystemes oder in der IDLE von Python programmieren.
-Allerdings empfiehlt es sich gerade bei so großen (Django-)Projekten wie SchoolApps einen vernünftigen <strong>Editor</strong> oder eine <strong>IDE</strong> (Integrated Development Environment) zu benutzen.
-Folgende Software ist sehr empfehlenswert:</p>
-<blockquote>
-<div><dl class="simple">
-<dt>Atom</dt><dd><p>Ein Opensource-Editor von GitHub. Einfache Bedienung, gute Syntaxhervorhebung, mit Plugins auch Autovervollständigung und Codeformatierung</p>
-</dd>
-<dt>Visual Code</dt><dd><p>Ein Opensource-Projekt von Microsoft. Sehr ähnlich zu Atom.</p>
-</dd>
-<dt>PyCharm Community/Professional Edition</dt><dd><p>Kommerzielles Programm, gibt es in einer OpenSource-Version (Community) sowie einer Bezahlversion (Professional). Alle Funktionen von VisualCode und Atom enthalten, zudem wird in der Professional Edition Django von Haus aus unterstützt. TIPP: Die Professional Edition gibt es für den Bildungsbereich kostenlos.</p>
-</dd>
-</dl>
-</div></blockquote>
-</div>
-<div class="section" id="dokumentation">
-<h2>Dokumentation<a class="headerlink" href="#dokumentation" title="Link zu dieser Überschrift">¶</a></h2>
-<blockquote>
-<div><p>„It was hard to write, it should be hard to read.“</p>
-</div></blockquote>
-<p>Alle Programmierer hassen es – dennoch ist <strong>Kommentieren</strong> die beste Dokumentationsmöglichkeit, damit andere Leute den eigenen Quellcode lesen können.</p>
-<p>Alle Funktionen (Klassen, etc.) sollten mit Docstrings versehen sein.
-Docstrings werden nach dem folgenden Schema aufgebaut: <a class="reference external" href="https://sphinx-rtd-tutorial.readthedocs.io/en/latest/docstrings.html">https://sphinx-rtd-tutorial.readthedocs.io/en/latest/docstrings.html</a></p>
-<p>Jede App, die sich in ihrer Funktion bzw. Funktionsweise nicht selbst erklärt, sollte einen Eintrag in der Dokumentation besitzen,
-die den Programmierer über Sinn und Zweck aufklärt. Dies gilt insbesondere, wenn diese App auch Funktionen für andere Apps bereitstellt.
-Diese sollten in der Dokumentation gesondert erwähnt und sauber dokumentiert werden. Weitere Informationen zur Dokumentation gibt es unter <a class="reference internal" href="doc.html"><span class="doc">Dokumentation</span></a>.</p>
-<p>In der <strong>Install.md</strong> (im Wurzelverzeichnis) sollten alle Schritte zur Installation dokumentiert werden.
-Insbesondere gilt das, wenn man eine neue Bibliothek für eine bestimmte Funktionalität benötigt. Diese muss sofort aufgeführt werden, damit andere Entwickler den Code ohne großes Basteln zum Laufen bekommen.</p>
-</div>
-<div class="section" id="problem-bug-idee-issues-verwenden">
-<h2>Problem, Bug, Idee? – Issues verwenden!<a class="headerlink" href="#problem-bug-idee-issues-verwenden" title="Link zu dieser Überschrift">¶</a></h2>
-<p>Hier sei nochmal auf den Bereich „Issues“ im <a class="reference internal" href="git.html"><span class="doc">Git Management Guide</span></a> hingewiesen – unbedingt beachten!</p>
-</div>
-</div>
-
-
-          </div>
-          
-        </div>
-      </div>
-      <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
-        <div class="sphinxsidebarwrapper">
-<h1 class="logo"><a href="../index.html">SchoolApps</a></h1>
-
-
-
-
-
-
-
-
-<h3>Navigation</h3>
-<p class="caption"><span class="caption-text">Inhalt:</span></p>
-<ul class="current">
-<li class="toctree-l1"><a class="reference internal" href="../api/dashboard.html">App: Dashboard</a></li>
-<li class="toctree-l1 current"><a class="current reference internal" href="#">Development Guide</a><ul>
-<li class="toctree-l2"><a class="reference internal" href="#versionsverwaltung-einsatz-von-git">Versionsverwaltung – Einsatz von Git</a></li>
-<li class="toctree-l2"><a class="reference internal" href="#codestyle">Codestyle</a></li>
-<li class="toctree-l2"><a class="reference internal" href="#editoren-ides">Editoren/IDEs</a></li>
-<li class="toctree-l2"><a class="reference internal" href="#dokumentation">Dokumentation</a></li>
-<li class="toctree-l2"><a class="reference internal" href="#problem-bug-idee-issues-verwenden">Problem, Bug, Idee? – Issues verwenden!</a></li>
-</ul>
-</li>
-<li class="toctree-l1"><a class="reference internal" href="git.html">Git Management Guide</a></li>
-<li class="toctree-l1"><a class="reference internal" href="doc.html">Dokumentation</a></li>
-</ul>
-
-<div class="relations">
-<h3>Related Topics</h3>
-<ul>
-  <li><a href="../index.html">Documentation overview</a><ul>
-      <li>Previous: <a href="../api/dashboard.html" title="vorheriges Kapitel">App: Dashboard</a></li>
-      <li>Next: <a href="git.html" title="nächstes Kapitel">Git Management Guide</a></li>
-  </ul></li>
-</ul>
-</div>
-<div id="searchbox" style="display: none" role="search">
-  <h3 id="searchlabel">Schnellsuche</h3>
-    <div class="searchformwrapper">
-    <form class="search" action="../search.html" method="get">
-      <input type="text" name="q" aria-labelledby="searchlabel" />
-      <input type="submit" value="Los" />
-    </form>
-    </div>
-</div>
-<script type="text/javascript">$('#searchbox').show(0);</script>
-
-
-
-
-
-
-
-
-        </div>
-      </div>
-      <div class="clearer"></div>
-    </div>
-    <div class="footer">
-      &copy; 2019, Hangzhi Yu, Julian Leucker, Jonathan Weth, Frank Poetzsch-Heffter.
-      
-      |
-      Powered by <a href="http://sphinx-doc.org/">Sphinx 2.2.1</a>
-      &amp; <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a>
-      
-      |
-      <a href="../_sources/dev/dev.rst.txt"
-          rel="nofollow">Page source</a>
-    </div>
-
-    
-
-    
-  </body>
-</html>
\ No newline at end of file
diff --git a/docs/_build/html/dev/doc.html b/docs/_build/html/dev/doc.html
deleted file mode 100644
index 056c97cde..000000000
--- a/docs/_build/html/dev/doc.html
+++ /dev/null
@@ -1,148 +0,0 @@
-
-<!DOCTYPE html>
-
-<html xmlns="http://www.w3.org/1999/xhtml" lang="de">
-  <head>
-    <meta charset="utf-8" />
-    <title>Dokumentation &#8212; SchoolApps Version 1.0.2-dev Dokumentation</title>
-    <link rel="stylesheet" href="../_static/alabaster.css" type="text/css" />
-    <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
-    <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
-    <script type="text/javascript" src="../_static/jquery.js"></script>
-    <script type="text/javascript" src="../_static/underscore.js"></script>
-    <script type="text/javascript" src="../_static/doctools.js"></script>
-    <script type="text/javascript" src="../_static/language_data.js"></script>
-    <script type="text/javascript" src="../_static/translations.js"></script>
-    <link rel="index" title="Stichwortverzeichnis" href="../genindex.html" />
-    <link rel="search" title="Suche" href="../search.html" />
-    <link rel="prev" title="Git Management Guide" href="git.html" />
-   
-  <link rel="stylesheet" href="../_static/custom.css" type="text/css" />
-  
-  
-  <meta name="viewport" content="width=device-width, initial-scale=0.9, maximum-scale=0.9" />
-
-  </head><body>
-  
-
-    <div class="document">
-      <div class="documentwrapper">
-        <div class="bodywrapper">
-          
-
-          <div class="body" role="main">
-            
-  <div class="section" id="dokumentation">
-<h1>Dokumentation<a class="headerlink" href="#dokumentation" title="Link zu dieser Überschrift">¶</a></h1>
-<p>Zur Dokumentation wird das Tool sphinx eingesetzt. Die gesamte Dokumentation liegt im Unterordner <code class="docutils literal notranslate"><span class="pre">docs</span></code>.</p>
-<ul class="simple">
-<li><p>Formatierung in reStructuredText</p></li>
-<li><dl class="simple">
-<dt>Erstellen der HTML-Ausgabe</dt><dd><p><code class="docutils literal notranslate"><span class="pre">make</span> <span class="pre">html</span></code>, Ergebnis in <code class="docutils literal notranslate"><span class="pre">docs/_build/html</span></code></p>
-</dd>
-</dl>
-</li>
-</ul>
-<div class="section" id="docstrings">
-<h2>Docstrings<a class="headerlink" href="#docstrings" title="Link zu dieser Überschrift">¶</a></h2>
-<p>Struktur bei Funktionen</p>
-<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="sd">&quot;&quot;&quot; [Summary]</span>
-
-<span class="sd">:param [ParamName]: [ParamDescription], defaults to [DefaultParamVal]</span>
-<span class="sd">:type [ParamName]: [ParamType](, optional)</span>
-<span class="sd">...</span>
-<span class="sd">:raises [ErrorType]: [ErrorDescription]</span>
-<span class="sd">...</span>
-<span class="sd">:return: [ReturnDescription]</span>
-<span class="sd">:rtype: [ReturnType]</span>
-<span class="sd">&quot;&quot;&quot;</span>
-</pre></div>
-</div>
-<p>Struktur bei Klassen</p>
-<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="sd">&quot;&quot;&quot; [Summary]</span>
-
-<span class="sd">&quot;&quot;&quot;</span>
-</pre></div>
-</div>
-<p>Struktur bei Variablen</p>
-<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="c1">#: [Summary]</span>
-</pre></div>
-</div>
-</div>
-</div>
-
-
-          </div>
-          
-        </div>
-      </div>
-      <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
-        <div class="sphinxsidebarwrapper">
-<h1 class="logo"><a href="../index.html">SchoolApps</a></h1>
-
-
-
-
-
-
-
-
-<h3>Navigation</h3>
-<p class="caption"><span class="caption-text">Inhalt:</span></p>
-<ul class="current">
-<li class="toctree-l1"><a class="reference internal" href="../api/dashboard.html">App: Dashboard</a></li>
-<li class="toctree-l1"><a class="reference internal" href="dev.html">Development Guide</a></li>
-<li class="toctree-l1"><a class="reference internal" href="git.html">Git Management Guide</a></li>
-<li class="toctree-l1 current"><a class="current reference internal" href="#">Dokumentation</a><ul>
-<li class="toctree-l2"><a class="reference internal" href="#docstrings">Docstrings</a></li>
-</ul>
-</li>
-</ul>
-
-<div class="relations">
-<h3>Related Topics</h3>
-<ul>
-  <li><a href="../index.html">Documentation overview</a><ul>
-      <li>Previous: <a href="git.html" title="vorheriges Kapitel">Git Management Guide</a></li>
-  </ul></li>
-</ul>
-</div>
-<div id="searchbox" style="display: none" role="search">
-  <h3 id="searchlabel">Schnellsuche</h3>
-    <div class="searchformwrapper">
-    <form class="search" action="../search.html" method="get">
-      <input type="text" name="q" aria-labelledby="searchlabel" />
-      <input type="submit" value="Los" />
-    </form>
-    </div>
-</div>
-<script type="text/javascript">$('#searchbox').show(0);</script>
-
-
-
-
-
-
-
-
-        </div>
-      </div>
-      <div class="clearer"></div>
-    </div>
-    <div class="footer">
-      &copy; 2019, Hangzhi Yu, Julian Leucker, Jonathan Weth, Frank Poetzsch-Heffter.
-      
-      |
-      Powered by <a href="http://sphinx-doc.org/">Sphinx 2.2.1</a>
-      &amp; <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a>
-      
-      |
-      <a href="../_sources/dev/doc.rst.txt"
-          rel="nofollow">Page source</a>
-    </div>
-
-    
-
-    
-  </body>
-</html>
\ No newline at end of file
diff --git a/docs/_build/html/dev/git.html b/docs/_build/html/dev/git.html
deleted file mode 100644
index 818b769db..000000000
--- a/docs/_build/html/dev/git.html
+++ /dev/null
@@ -1,228 +0,0 @@
-
-<!DOCTYPE html>
-
-<html xmlns="http://www.w3.org/1999/xhtml" lang="de">
-  <head>
-    <meta charset="utf-8" />
-    <title>Git Management Guide &#8212; SchoolApps Version 1.0.2-dev Dokumentation</title>
-    <link rel="stylesheet" href="../_static/alabaster.css" type="text/css" />
-    <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
-    <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
-    <script type="text/javascript" src="../_static/jquery.js"></script>
-    <script type="text/javascript" src="../_static/underscore.js"></script>
-    <script type="text/javascript" src="../_static/doctools.js"></script>
-    <script type="text/javascript" src="../_static/language_data.js"></script>
-    <script type="text/javascript" src="../_static/translations.js"></script>
-    <link rel="index" title="Stichwortverzeichnis" href="../genindex.html" />
-    <link rel="search" title="Suche" href="../search.html" />
-    <link rel="next" title="Dokumentation" href="doc.html" />
-    <link rel="prev" title="Development Guide" href="dev.html" />
-   
-  <link rel="stylesheet" href="../_static/custom.css" type="text/css" />
-  
-  
-  <meta name="viewport" content="width=device-width, initial-scale=0.9, maximum-scale=0.9" />
-
-  </head><body>
-  
-
-    <div class="document">
-      <div class="documentwrapper">
-        <div class="bodywrapper">
-          
-
-          <div class="body" role="main">
-            
-  <div class="section" id="git-management-guide">
-<h1>Git Management Guide<a class="headerlink" href="#git-management-guide" title="Link zu dieser Überschrift">¶</a></h1>
-<p>Diese Anleitung soll bei der Benutzung von Git im Projekt SchoolApps helfen.</p>
-<div class="section" id="hinweis">
-<h2>Hinweis<a class="headerlink" href="#hinweis" title="Link zu dieser Überschrift">¶</a></h2>
-<p>Hilfe und Informationen zu Git allgemein gibt es u. a. bei dieser Anleitung:</p>
-<blockquote>
-<div><p><a class="reference external" href="https://rogerdudler.github.io/git-guide/index.de.html">https://rogerdudler.github.io/git-guide/index.de.html</a></p>
-</div></blockquote>
-</div>
-<div class="section" id="git-hosting-von-schoolapps">
-<h2>Git-Hosting von SchoolApps<a class="headerlink" href="#git-hosting-von-schoolapps" title="Link zu dieser Überschrift">¶</a></h2>
-<p>Die aktuelle Version von SchoolApps ist auf GitHub in der Organisation Katharineum gehosted:</p>
-<blockquote>
-<div><p><a class="reference external" href="https://github.com/Katharineum/school-apps">https://github.com/Katharineum/school-apps</a></p>
-</div></blockquote>
-<p>Das Cloning sowie Pullen und Pushen kann wahlweise mittels SSH oder HTTPS erfolgen (genaueres in der obigen Anleitung).</p>
-<div class="admonition note">
-<p class="admonition-title">Bemerkung</p>
-<p>Der Zugriff auf das Repository wird von Herrn Poetzsch-Heffter (&#64;poetzsch, <a class="reference external" href="mailto:p-h&#37;&#52;&#48;katharineum&#46;de">p-h<span>&#64;</span>katharineum<span>&#46;</span>de</a>) geregelt.</p>
-</div>
-</div>
-<div class="section" id="clonen-und-ersteinrichtung">
-<h2>Clonen und Ersteinrichtung<a class="headerlink" href="#clonen-und-ersteinrichtung" title="Link zu dieser Überschrift">¶</a></h2>
-<dl>
-<dt>Clonen:</dt><dd><p><code class="docutils literal notranslate"><span class="pre">git</span> <span class="pre">clone</span> <span class="pre">https://github.com/Katharineum/school-apps</span></code></p>
-<p>oder <code class="docutils literal notranslate"><span class="pre">git</span> <span class="pre">clone</span> <span class="pre">git&#64;github.com:Katharineum/school-apps.git</span></code></p>
-</dd>
-</dl>
-<p>Um sich eine Entwicklungsumgebung für SchoolApps einzurichten, wird die Anleitung auf</p>
-<blockquote>
-<div><p><a class="reference external" href="https://github.com/Katharineum/school-apps/blob/dev/README.md">https://github.com/Katharineum/school-apps/blob/dev/README.md</a></p>
-</div></blockquote>
-<p>unter dem Reiter Installation empfohlen.</p>
-</div>
-<div class="section" id="was-gibt-es-zu-tun-issues">
-<h2>Was gibt es zu tun? – Issues<a class="headerlink" href="#was-gibt-es-zu-tun-issues" title="Link zu dieser Überschrift">¶</a></h2>
-<div class="section" id="issues-anlegen">
-<h3>Issues anlegen<a class="headerlink" href="#issues-anlegen" title="Link zu dieser Überschrift">¶</a></h3>
-<p>Wenn einem in der SchoolApps etwas auffällt was getan werden sollte (Bug, Rechtschreibfehler, Zusätzliche Funktionen, etc.), dann muss ein Issue auf GitHub erstellt werden. Dies gilt auch, wenn man sich sicher ist, das Problem lösen zu können.</p>
-<div class="section" id="wichtig-beim-erstellen-eines-issues">
-<h4>Wichtig beim Erstellen eines Issues:<a class="headerlink" href="#wichtig-beim-erstellen-eines-issues" title="Link zu dieser Überschrift">¶</a></h4>
-<ul>
-<li><p>Aussagekräftigen Titel verwenden (deutsch)</p></li>
-<li><p>Problem detailliert beschreiben, falls vorhanden, Lösungsmöglichkeit(en) nennen (deutsch)</p></li>
-<li><p><strong>Assignees (Zuständigkeit)</strong> → Wenn man das Problem selbst lösen will bzw. sich darum kümmern will, empfiehlt es sich, sich selbst einzutragen. Damit ist man auch für die Lösung verantwortlich. Wenn man weiß, dass dieses Problem genau von einer bestimmten Person gelöst werden kann bzw. diese dafür zuständig ist, wird diese eingetragen. Es können auch mehrere Personen eingetragen werden.</p></li>
-<li><p><strong>Labels (Kategorisierung)</strong>  →  Es gibt zwei Arten von Labels:</p>
-<ul class="simple">
-<li><p><strong>Bereichslabel</strong> → Hier wird der Teil der Software genannt, der von dem Issue betroffen ist (im Regelfall eine Django-App, manchmal auch <em>whole project</em>)</p></li>
-<li><p><strong>Kategorisierungslabel</strong> → Hier wird die Art des Issue festgelegt.</p>
-<ul>
-<li><p><em>bug</em> → Ein eindeutiger Fehler. (Sicherheits-/ Funktionsbeinträchtigend)</p></li>
-<li><p><em>beauty mistake</em> → Schönheitsfehler. (Meist Designtechnisch)</p></li>
-<li><p><em>refactoring</em> → Code(-style) verbessern, umprogrammieren.</p></li>
-<li><p><em>it works but it is wrong</em> → Unsauber gelöste Probleme, fehlende Komponenten.</p></li>
-<li><p><em>new feature</em> → Neue Funktionen.</p></li>
-<li><p><em>discussion</em> → Zu diskussieren. Diese Issues <em>sollen nicht</em> umgesetzt werden, bis dieses Label entfernt wurde.</p></li>
-</ul>
-</li>
-</ul>
-<p>Es können auch mehrere Bereichs- bzw. Kategorisierungslabel gleichzeitig verwendet werden.</p>
-</li>
-<li><p><strong>Projects</strong> → Die passende Zuordnung eines GitHub-Projekts für das Kanbansystem.</p></li>
-<li><p><strong>Milestones</strong> → Die Version der Software, zu der dieses Problem gelöst werden muss.</p></li>
-</ul>
-</div>
-</div>
-<div class="section" id="issues-bearbeiten-losen">
-<h3>Issues bearbeiten/lösen<a class="headerlink" href="#issues-bearbeiten-losen" title="Link zu dieser Überschrift">¶</a></h3>
-<p>In der Issue-Liste auf GitHub kann jeder sehen, was es aktuell zu tun gibt.
-Vorzugsweise kümmert man sich um Issues auf dem eigenen Spezial- bzw. Aufgabengebiet. Wenn einem Issue bereits jemand zugeteilt ist, ist unbedingt Rücksprache zur betreffenden Person zu halten (Assignees).
-Das eigentliche Lösen (im Regelfall Programmieren) erfolgt als feature-Branch  (siehe unten).</p>
-</div>
-</div>
-<div class="section" id="am-code-arbeiten-die-branches">
-<h2>Am Code arbeiten – Die Branches<a class="headerlink" href="#am-code-arbeiten-die-branches" title="Link zu dieser Überschrift">¶</a></h2>
-<p>Der Hauptbranch ist der <strong>dev</strong>. In ihm ist immer die aktuelle Entwicklung von SchoolApps gespeichert. Er wird bei jeder stabilen Version im <strong>server-Branch</strong> veröffentlicht. Dieser stellt den aktuellen Stand auf dem Server da.</p>
-<p>In keinem dieser Branches wird aktiv commited (Ausnahmen bestätigen die Regel), sie werden nur über <strong>Pull Requests</strong> „gefüttert“.</p>
-<p>Alle Arbeiten am Code werden in vom dev-Branch abgezweigten Arbeits-Branches durchgeführt. Ein Branch entspricht dabei einer Funktion bzw. einem Issue. Wenn jemand gleichzeitig an mehreren, nicht zusammenhängend Issues arbeitet, wechselt dieser auch die Branches.</p>
-<p>Die <strong>Namenskonvention</strong> für diesen Arbeits-Branch ist wie folgt:</p>
-<ul class="simple">
-<li><dl class="simple">
-<dt>Ist die Änderung, die programmiert wird, ein neues Feature, so wird der Branch so benannt:</dt><dd><p><code class="docutils literal notranslate"><span class="pre">feature/&lt;der-name-des-feature-auf-englisch&gt;</span></code> (Bindestriche, kleingeschrieben)</p>
-</dd>
-</dl>
-</li>
-<li><dl class="simple">
-<dt>Ist die Änderung, die programmiert wird, ein Bugfix, so wird der Branch so benannt:</dt><dd><p><code class="docutils literal notranslate"><span class="pre">bugfix/&lt;beschreibung-des-bugs-auf-englisch&gt;</span></code> (Bindestriche, kleingeschrieben)</p>
-</dd>
-</dl>
-</li>
-<li><dl class="simple">
-<dt>Ist die Änderung, die programmiert wird, ein Code-Refactoring, so wird der Branch so benannt:</dt><dd><p><code class="docutils literal notranslate"><span class="pre">refactor/&lt;der-name-des-feature-auf-englisch&gt;</span></code> (Bindestriche, kleingeschrieben)</p>
-</dd>
-</dl>
-</li>
-</ul>
-</div>
-<div class="section" id="am-code-arbeiten-committen">
-<h2>Am Code arbeiten – Committen<a class="headerlink" href="#am-code-arbeiten-committen" title="Link zu dieser Überschrift">¶</a></h2>
-<p>Nochmal zur Erinnerung: Es wird nur in feature-Branches direkt committed.
-Die Commits erfolgen im Gegensatz zu Issues auf <strong>englisch</strong>, bei Bezug zu einem Issue wird das <strong>Issue mit Hashtag</strong> genannt.</p>
-<p>Beispiel: <code class="docutils literal notranslate"><span class="pre">Solve</span> <span class="pre">LDAP</span> <span class="pre">connection</span> <span class="pre">problems</span> <span class="pre">(issue</span> <span class="pre">#10)</span></code></p>
-</div>
-<div class="section" id="am-code-arbeiten-mergen-pull-requests">
-<h2>Am Code arbeiten – Mergen/Pull Requests<a class="headerlink" href="#am-code-arbeiten-mergen-pull-requests" title="Link zu dieser Überschrift">¶</a></h2>
-<p>Ist man der Meinung, dass die Arbeiten am feature-Branch abgeschlossen sind, stellt man auf GitHub ein <strong>Pull Request</strong> und lässt die Arbeiten vom Rest des Entwicklerteams absegnen.
-Dies ist unbedingt zu befolgen.</p>
-</div>
-</div>
-
-
-          </div>
-          
-        </div>
-      </div>
-      <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
-        <div class="sphinxsidebarwrapper">
-<h1 class="logo"><a href="../index.html">SchoolApps</a></h1>
-
-
-
-
-
-
-
-
-<h3>Navigation</h3>
-<p class="caption"><span class="caption-text">Inhalt:</span></p>
-<ul class="current">
-<li class="toctree-l1"><a class="reference internal" href="../api/dashboard.html">App: Dashboard</a></li>
-<li class="toctree-l1"><a class="reference internal" href="dev.html">Development Guide</a></li>
-<li class="toctree-l1 current"><a class="current reference internal" href="#">Git Management Guide</a><ul>
-<li class="toctree-l2"><a class="reference internal" href="#hinweis">Hinweis</a></li>
-<li class="toctree-l2"><a class="reference internal" href="#git-hosting-von-schoolapps">Git-Hosting von SchoolApps</a></li>
-<li class="toctree-l2"><a class="reference internal" href="#clonen-und-ersteinrichtung">Clonen und Ersteinrichtung</a></li>
-<li class="toctree-l2"><a class="reference internal" href="#was-gibt-es-zu-tun-issues">Was gibt es zu tun? – Issues</a></li>
-<li class="toctree-l2"><a class="reference internal" href="#am-code-arbeiten-die-branches">Am Code arbeiten – Die Branches</a></li>
-<li class="toctree-l2"><a class="reference internal" href="#am-code-arbeiten-committen">Am Code arbeiten – Committen</a></li>
-<li class="toctree-l2"><a class="reference internal" href="#am-code-arbeiten-mergen-pull-requests">Am Code arbeiten – Mergen/Pull Requests</a></li>
-</ul>
-</li>
-<li class="toctree-l1"><a class="reference internal" href="doc.html">Dokumentation</a></li>
-</ul>
-
-<div class="relations">
-<h3>Related Topics</h3>
-<ul>
-  <li><a href="../index.html">Documentation overview</a><ul>
-      <li>Previous: <a href="dev.html" title="vorheriges Kapitel">Development Guide</a></li>
-      <li>Next: <a href="doc.html" title="nächstes Kapitel">Dokumentation</a></li>
-  </ul></li>
-</ul>
-</div>
-<div id="searchbox" style="display: none" role="search">
-  <h3 id="searchlabel">Schnellsuche</h3>
-    <div class="searchformwrapper">
-    <form class="search" action="../search.html" method="get">
-      <input type="text" name="q" aria-labelledby="searchlabel" />
-      <input type="submit" value="Los" />
-    </form>
-    </div>
-</div>
-<script type="text/javascript">$('#searchbox').show(0);</script>
-
-
-
-
-
-
-
-
-        </div>
-      </div>
-      <div class="clearer"></div>
-    </div>
-    <div class="footer">
-      &copy; 2019, Hangzhi Yu, Julian Leucker, Jonathan Weth, Frank Poetzsch-Heffter.
-      
-      |
-      Powered by <a href="http://sphinx-doc.org/">Sphinx 2.2.1</a>
-      &amp; <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a>
-      
-      |
-      <a href="../_sources/dev/git.rst.txt"
-          rel="nofollow">Page source</a>
-    </div>
-
-    
-
-    
-  </body>
-</html>
\ No newline at end of file
diff --git a/docs/_build/html/dev/index.html b/docs/_build/html/dev/index.html
deleted file mode 100644
index 55ef910f8..000000000
--- a/docs/_build/html/dev/index.html
+++ /dev/null
@@ -1,155 +0,0 @@
-
-<!DOCTYPE html>
-
-<html xmlns="http://www.w3.org/1999/xhtml" lang="de">
-  <head>
-    <meta charset="utf-8" />
-    <title>Development Guide &#8212; SchoolApps Version 1.0.2-dev Dokumentation</title>
-    <link rel="stylesheet" href="../_static/alabaster.css" type="text/css" />
-    <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
-    <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
-    <script type="text/javascript" src="../_static/jquery.js"></script>
-    <script type="text/javascript" src="../_static/underscore.js"></script>
-    <script type="text/javascript" src="../_static/doctools.js"></script>
-    <script type="text/javascript" src="../_static/language_data.js"></script>
-    <script type="text/javascript" src="../_static/translations.js"></script>
-    <link rel="index" title="Stichwortverzeichnis" href="../genindex.html" />
-    <link rel="search" title="Suche" href="../search.html" />
-    <link rel="prev" title="Dokumentation von SchoolApps" href="../index.html" />
-   
-  <link rel="stylesheet" href="../_static/custom.css" type="text/css" />
-  
-  
-  <meta name="viewport" content="width=device-width, initial-scale=0.9, maximum-scale=0.9" />
-
-  </head><body>
-  
-
-    <div class="document">
-      <div class="documentwrapper">
-        <div class="bodywrapper">
-          
-
-          <div class="body" role="main">
-            
-  <div class="section" id="development-guide">
-<h1>Development Guide<a class="headerlink" href="#development-guide" title="Link zu dieser Überschrift">¶</a></h1>
-<p>Diese Anleitung soll für einen einheitliches Development und einheitlichen Code in SchoolApps sorgen.</p>
-<div class="section" id="versionsverwaltung-einsatz-von-git">
-<h2>Versionsverwaltung – Einsatz von Git<a class="headerlink" href="#versionsverwaltung-einsatz-von-git" title="Link zu dieser Überschrift">¶</a></h2>
-<p>Es wird mit <strong>Git</strong> gearbeitet. Die Verwendung ist Pflicht, die Regelungen im Git-Management Guide sind zu beachten. Alle Veränderungen sollten nach Beendigung der Arbeit an SchoolApps direkt im entsprechenden Featurebranch committed und gepusht werden, auch wenn sie noch nicht fertig oder lauffähig sind, um Datenverlust vorzubeugen (hierbei unbedingt den Bereich Branches im Git-Management Guide beachten).</p>
-</div>
-<div class="section" id="codestyle">
-<h2>Codestyle<a class="headerlink" href="#codestyle" title="Link zu dieser Überschrift">¶</a></h2>
-<p>Grundsätzlich wird <strong>auf englisch gecodet</strong>: Englische Variablen, englische Kommentare und englische Commits. Die Oberfläche wird natürlich auf deutsch lokalisiert. Lediglich Issues auf GitHub und die Dokumentation werden auf deutsch verfasst.</p>
-<p>Weiterhin gilt es, die <strong>PEP-8-Richtlinien</strong> der Python Foundation einzuhalten, sie sorgen für einen sauberen, einheitlichen und übersichtlichen Stil.</p>
-<p><strong>Tipp:</strong> Viele Editoren können die Pythonskripte auch automatisch nach PEP8 formatieren – meistens klappt das sehr gut (siehe auch „Editoren/IDEs“).</p>
-</div>
-<div class="section" id="editoren-ides">
-<h2>Editoren/IDEs<a class="headerlink" href="#editoren-ides" title="Link zu dieser Überschrift">¶</a></h2>
-<p>Natürlich kann man auch im Texteditor des jeweiligen Betriebssystemes oder in der IDLE von Python programmieren.
-Allerdings empfiehlt es sich gerade bei so großen (Django-)Projekten wie SchoolApps einen vernünftigen <strong>Editor</strong> oder eine <strong>IDE</strong> (Integrated Development Environment) zu benutzen.
-Folgende Software ist sehr empfehlenswert:</p>
-<blockquote>
-<div><dl class="simple">
-<dt>Atom</dt><dd><p>Ein Opensource-Editor von GitHub. Einfache Bedienung, gute Syntaxhervorhebung, mit Plugins auch Autovervollständigung und Codeformatierung</p>
-</dd>
-<dt>Visual Code</dt><dd><p>Ein Opensource-Projekt von Microsoft. Sehr ähnlich zu Atom.</p>
-</dd>
-<dt>PyCharm Community/Professional Edition</dt><dd><p>Kommerzielles Programm, gibt es in einer OpenSource-Version (Community) sowie einer Bezahlversion (Professional). Alle Funktionen von VisualCode und Atom enthalten, zudem wird in der Professional Edition Django von Haus aus unterstützt. TIPP: Die Professional Edition gibt es für den Bildungsbereich kostenlos.</p>
-</dd>
-</dl>
-</div></blockquote>
-</div>
-<div class="section" id="dokumentation">
-<h2>Dokumentation<a class="headerlink" href="#dokumentation" title="Link zu dieser Überschrift">¶</a></h2>
-<blockquote>
-<div><p>„It was hard to write, it should be hard to read.“</p>
-</div></blockquote>
-<p>Alle Programmierer hassen es – dennoch ist <strong>Kommentieren</strong> die beste Dokumentationsmöglichkeit, damit andere Leute den eigenen Quellcode lesen können.</p>
-<p>Alle Funktionen (Klassen, etc.) sollten mit Docstrings versehen sein. Docstrings werden nach dem folgenden Schema aufgebaut: <a class="reference external" href="https://sphinx-rtd-tutorial.readthedocs.io/en/latest/docstrings.html">https://sphinx-rtd-tutorial.readthedocs.io/en/latest/docstrings.html</a></p>
-<p>Jede App, die sich in ihrer Funktion bzw. Funktionsweise nicht selbst erklärt, sollte eine <strong>README</strong> besitzen, die den Programmierer über Sinn und Zweck aufklärt. Dies gilt insbesondere, wenn diese App auch Funktionen für andere Apps bereitstellt. Diese sollten in der README gesondert erwähnt und sauber dokumentiert werden.</p>
-<p>In der <strong>Install.md</strong> (im Wurzelverzeichnis) sollten alle Schritte zur Installation dokumentiert werden. Insbesondere gilt das, wenn man eine neue Bibliothek für eine bestimmte Funktionalität benötigt. Diese muss sofort aufgeführt werden, damit andere Entwickler den Code ohne großes Basteln zum Laufen bekommen.</p>
-</div>
-<div class="section" id="problem-bug-idee-issues-verwenden">
-<h2>Problem, Bug, Idee? – Issues verwenden!<a class="headerlink" href="#problem-bug-idee-issues-verwenden" title="Link zu dieser Überschrift">¶</a></h2>
-<p>Hier sei nochmal auf den Bereich „Issues“ im Git-Management Guide hingewiesen – unbedingt beachten!</p>
-</div>
-</div>
-
-
-          </div>
-          
-        </div>
-      </div>
-      <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
-        <div class="sphinxsidebarwrapper">
-<h1 class="logo"><a href="../index.html">SchoolApps</a></h1>
-
-
-
-
-
-
-
-
-<h3>Navigation</h3>
-<p class="caption"><span class="caption-text">Inhalt:</span></p>
-<ul class="current">
-<li class="toctree-l1 current"><a class="current reference internal" href="#">Development Guide</a><ul>
-<li class="toctree-l2"><a class="reference internal" href="#versionsverwaltung-einsatz-von-git">Versionsverwaltung – Einsatz von Git</a></li>
-<li class="toctree-l2"><a class="reference internal" href="#codestyle">Codestyle</a></li>
-<li class="toctree-l2"><a class="reference internal" href="#editoren-ides">Editoren/IDEs</a></li>
-<li class="toctree-l2"><a class="reference internal" href="#dokumentation">Dokumentation</a></li>
-<li class="toctree-l2"><a class="reference internal" href="#problem-bug-idee-issues-verwenden">Problem, Bug, Idee? – Issues verwenden!</a></li>
-</ul>
-</li>
-</ul>
-
-<div class="relations">
-<h3>Related Topics</h3>
-<ul>
-  <li><a href="../index.html">Documentation overview</a><ul>
-      <li>Previous: <a href="../index.html" title="vorheriges Kapitel">Dokumentation von SchoolApps</a></li>
-  </ul></li>
-</ul>
-</div>
-<div id="searchbox" style="display: none" role="search">
-  <h3 id="searchlabel">Schnellsuche</h3>
-    <div class="searchformwrapper">
-    <form class="search" action="../search.html" method="get">
-      <input type="text" name="q" aria-labelledby="searchlabel" />
-      <input type="submit" value="Los" />
-    </form>
-    </div>
-</div>
-<script type="text/javascript">$('#searchbox').show(0);</script>
-
-
-
-
-
-
-
-
-        </div>
-      </div>
-      <div class="clearer"></div>
-    </div>
-    <div class="footer">
-      &copy; 2019, Hangzhi Yu, Julian Leucker, Jonathan Weth, Frank Poetzsch-Heffter.
-      
-      |
-      Powered by <a href="http://sphinx-doc.org/">Sphinx 2.2.1</a>
-      &amp; <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a>
-      
-      |
-      <a href="../_sources/dev/index.rst.txt"
-          rel="nofollow">Page source</a>
-    </div>
-
-    
-
-    
-  </body>
-</html>
\ No newline at end of file
diff --git a/docs/_build/html/genindex.html b/docs/_build/html/genindex.html
deleted file mode 100644
index 49faf436b..000000000
--- a/docs/_build/html/genindex.html
+++ /dev/null
@@ -1,345 +0,0 @@
-
-
-<!DOCTYPE html>
-
-<html xmlns="http://www.w3.org/1999/xhtml" lang="de">
-  <head>
-    <meta charset="utf-8" />
-    <title>Stichwortverzeichnis &#8212; SchoolApps Version 1.0.2-dev Dokumentation</title>
-    <link rel="stylesheet" href="_static/alabaster.css" type="text/css" />
-    <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
-    <script type="text/javascript" id="documentation_options" data-url_root="./" src="_static/documentation_options.js"></script>
-    <script type="text/javascript" src="_static/jquery.js"></script>
-    <script type="text/javascript" src="_static/underscore.js"></script>
-    <script type="text/javascript" src="_static/doctools.js"></script>
-    <script type="text/javascript" src="_static/language_data.js"></script>
-    <script type="text/javascript" src="_static/translations.js"></script>
-    <link rel="index" title="Stichwortverzeichnis" href="#" />
-    <link rel="search" title="Suche" href="search.html" />
-   
-  <link rel="stylesheet" href="_static/custom.css" type="text/css" />
-  
-  
-  <meta name="viewport" content="width=device-width, initial-scale=0.9, maximum-scale=0.9" />
-
-  </head><body>
-  
-
-    <div class="document">
-      <div class="documentwrapper">
-        <div class="bodywrapper">
-          
-
-          <div class="body" role="main">
-            
-
-<h1 id="index">Stichwortverzeichnis</h1>
-
-<div class="genindex-jumpbox">
- <a href="#A"><strong>A</strong></a>
- | <a href="#B"><strong>B</strong></a>
- | <a href="#C"><strong>C</strong></a>
- | <a href="#D"><strong>D</strong></a>
- | <a href="#E"><strong>E</strong></a>
- | <a href="#F"><strong>F</strong></a>
- | <a href="#G"><strong>G</strong></a>
- | <a href="#I"><strong>I</strong></a>
- | <a href="#L"><strong>L</strong></a>
- | <a href="#N"><strong>N</strong></a>
- | <a href="#P"><strong>P</strong></a>
- | <a href="#R"><strong>R</strong></a>
- | <a href="#S"><strong>S</strong></a>
- | <a href="#T"><strong>T</strong></a>
- | <a href="#U"><strong>U</strong></a>
- 
-</div>
-<h2 id="A">A</h2>
-<table style="width: 100%" class="indextable genindextable"><tr>
-  <td style="width: 33%; vertical-align: top;"><ul>
-      <li><a href="api/dashboard.html#dashboard.models.Activity">Activity (Klasse in dashboard.models)</a>
-</li>
-      <li><a href="api/dashboard.html#dashboard.models.Activity.DoesNotExist">Activity.DoesNotExist</a>
-</li>
-      <li><a href="api/dashboard.html#dashboard.models.Activity.MultipleObjectsReturned">Activity.MultipleObjectsReturned</a>
-</li>
-      <li><a href="api/aub.html#aub.models.Aub.all_users">all_users() (statische Methode von aub.models.Aub)</a>
-</li>
-      <li><a href="api/dashboard.html#dashboard.models.Activity.app">app (Attribut von dashboard.models.Activity)</a>
-
-      <ul>
-        <li><a href="api/dashboard.html#dashboard.models.Notification.app">(Attribut von dashboard.models.Notification)</a>
-</li>
-      </ul></li>
-  </ul></td>
-  <td style="width: 33%; vertical-align: top;"><ul>
-      <li><a href="api/aub.html#aub.models.Aub">Aub (Klasse in aub.models)</a>
-</li>
-      <li><a href="api/aub.html#aub.models.Aub.DoesNotExist">Aub.DoesNotExist</a>
-</li>
-      <li><a href="api/aub.html#module-aub.models">aub.models (Modul)</a>
-</li>
-      <li><a href="api/aub.html#aub.models.Aub.MultipleObjectsReturned">Aub.MultipleObjectsReturned</a>
-</li>
-  </ul></td>
-</tr></table>
-
-<h2 id="B">B</h2>
-<table style="width: 100%" class="indextable genindextable"><tr>
-  <td style="width: 33%; vertical-align: top;"><ul>
-      <li><a href="api/dashboard.html#dashboard.caches.BACKGROUND_CACHE_REFRESH">BACKGROUND_CACHE_REFRESH (in Modul dashboard.caches)</a>
-</li>
-  </ul></td>
-</tr></table>
-
-<h2 id="C">C</h2>
-<table style="width: 100%" class="indextable genindextable"><tr>
-  <td style="width: 33%; vertical-align: top;"><ul>
-      <li><a href="api/dashboard.html#dashboard.models.Cache">Cache (Klasse in dashboard.models)</a>
-</li>
-      <li><a href="api/dashboard.html#dashboard.models.Cache.DoesNotExist">Cache.DoesNotExist</a>
-</li>
-      <li><a href="api/dashboard.html#dashboard.models.Cache.MultipleObjectsReturned">Cache.MultipleObjectsReturned</a>
-</li>
-  </ul></td>
-  <td style="width: 33%; vertical-align: top;"><ul>
-      <li><a href="api/dashboard.html#dashboard.models.Activity.created_at">created_at (Attribut von dashboard.models.Activity)</a>
-
-      <ul>
-        <li><a href="api/dashboard.html#dashboard.models.Notification.created_at">(Attribut von dashboard.models.Notification)</a>
-</li>
-      </ul></li>
-      <li><a href="api/dashboard.html#dashboard.caches.CURRENT_EVENTS_CACHE">CURRENT_EVENTS_CACHE (in Modul dashboard.caches)</a>
-</li>
-  </ul></td>
-</tr></table>
-
-<h2 id="D">D</h2>
-<table style="width: 100%" class="indextable genindextable"><tr>
-  <td style="width: 33%; vertical-align: top;"><ul>
-      <li><a href="api/dashboard.html#module-dashboard.caches">dashboard.caches (Modul)</a>
-</li>
-      <li><a href="api/dashboard.html#dashboard.models.Cache.delete">delete() (Methode von dashboard.models.Cache)</a>
-</li>
-  </ul></td>
-  <td style="width: 33%; vertical-align: top;"><ul>
-      <li><a href="api/dashboard.html#dashboard.models.Activity.description">description (Attribut von dashboard.models.Activity)</a>
-
-      <ul>
-        <li><a href="api/dashboard.html#dashboard.models.Notification.description">(Attribut von dashboard.models.Notification)</a>
-</li>
-      </ul></li>
-      <li><a href="api/dashboard.html#dashboard.caches.DRIVE_CACHE">DRIVE_CACHE (in Modul dashboard.caches)</a>
-</li>
-  </ul></td>
-</tr></table>
-
-<h2 id="E">E</h2>
-<table style="width: 100%" class="indextable genindextable"><tr>
-  <td style="width: 33%; vertical-align: top;"><ul>
-      <li><a href="api/dashboard.html#dashboard.caches.EXPIRATION_TIME_CACHE_FOR_PLAN_CACHES">EXPIRATION_TIME_CACHE_FOR_PLAN_CACHES (in Modul dashboard.caches)</a>
-</li>
-  </ul></td>
-</tr></table>
-
-<h2 id="F">F</h2>
-<table style="width: 100%" class="indextable genindextable"><tr>
-  <td style="width: 33%; vertical-align: top;"><ul>
-      <li><a href="index.html#untisconnect.api.format_classes">format_classes() (im Modul untisconnect.api)</a>
-</li>
-  </ul></td>
-</tr></table>
-
-<h2 id="G">G</h2>
-<table style="width: 100%" class="indextable genindextable"><tr>
-  <td style="width: 33%; vertical-align: top;"><ul>
-      <li><a href="index.html#untisconnect.sub.generate_sub_table">generate_sub_table() (im Modul untisconnect.sub)</a>
-</li>
-  </ul></td>
-  <td style="width: 33%; vertical-align: top;"><ul>
-      <li><a href="index.html#untisconnect.sub.get_header_information">get_header_information() (im Modul untisconnect.sub)</a>
-</li>
-  </ul></td>
-</tr></table>
-
-<h2 id="I">I</h2>
-<table style="width: 100%" class="indextable genindextable"><tr>
-  <td style="width: 33%; vertical-align: top;"><ul>
-      <li><a href="api/dashboard.html#dashboard.models.Cache.is_expired">is_expired() (Methode von dashboard.models.Cache)</a>
-</li>
-  </ul></td>
-  <td style="width: 33%; vertical-align: top;"><ul>
-      <li><a href="api/dashboard.html#dashboard.models.Cache.is_needed">is_needed() (Methode von dashboard.models.Cache)</a>
-</li>
-  </ul></td>
-</tr></table>
-
-<h2 id="L">L</h2>
-<table style="width: 100%" class="indextable genindextable"><tr>
-  <td style="width: 33%; vertical-align: top;"><ul>
-      <li><a href="api/dashboard.html#dashboard.caches.LATEST_ARTICLE_CACHE">LATEST_ARTICLE_CACHE (in Modul dashboard.caches)</a>
-</li>
-  </ul></td>
-  <td style="width: 33%; vertical-align: top;"><ul>
-      <li><a href="api/dashboard.html#dashboard.models.Notification.link">link (Attribut von dashboard.models.Notification)</a>
-</li>
-  </ul></td>
-</tr></table>
-
-<h2 id="N">N</h2>
-<table style="width: 100%" class="indextable genindextable"><tr>
-  <td style="width: 33%; vertical-align: top;"><ul>
-      <li><a href="api/dashboard.html#dashboard.models.Notification">Notification (Klasse in dashboard.models)</a>
-</li>
-  </ul></td>
-  <td style="width: 33%; vertical-align: top;"><ul>
-      <li><a href="api/dashboard.html#dashboard.models.Notification.DoesNotExist">Notification.DoesNotExist</a>
-</li>
-      <li><a href="api/dashboard.html#dashboard.models.Notification.MultipleObjectsReturned">Notification.MultipleObjectsReturned</a>
-</li>
-  </ul></td>
-</tr></table>
-
-<h2 id="P">P</h2>
-<table style="width: 100%" class="indextable genindextable"><tr>
-  <td style="width: 33%; vertical-align: top;"><ul>
-      <li><a href="index.html#untisconnect.sub.parse_type_of_untis_flags">parse_type_of_untis_flags() (im Modul untisconnect.sub)</a>
-</li>
-  </ul></td>
-  <td style="width: 33%; vertical-align: top;"><ul>
-      <li><a href="api/dashboard.html#dashboard.caches.PARSED_LESSONS_CACHE">PARSED_LESSONS_CACHE (in Modul dashboard.caches)</a>
-</li>
-      <li><a href="api/dashboard.html#dashboard.caches.PLAN_VIEW_CACHE">PLAN_VIEW_CACHE (in Modul dashboard.caches)</a>
-</li>
-  </ul></td>
-</tr></table>
-
-<h2 id="R">R</h2>
-<table style="width: 100%" class="indextable genindextable"><tr>
-  <td style="width: 33%; vertical-align: top;"><ul>
-      <li><a href="api/dashboard.html#dashboard.models.Notification.read">read (Attribut von dashboard.models.Notification)</a>
-</li>
-  </ul></td>
-  <td style="width: 33%; vertical-align: top;"><ul>
-      <li><a href="api/dashboard.html#dashboard.models.Activity.register">register() (statische Methode von dashboard.models.Activity)</a>
-
-      <ul>
-        <li><a href="api/dashboard.html#dashboard.models.Notification.register">(statische Methode von dashboard.models.Notification)</a>
-</li>
-      </ul></li>
-  </ul></td>
-</tr></table>
-
-<h2 id="S">S</h2>
-<table style="width: 100%" class="indextable genindextable"><tr>
-  <td style="width: 33%; vertical-align: top;"><ul>
-      <li><a href="api/dashboard.html#dashboard.models.Notification.send_email">send_email() (Methode von dashboard.models.Notification)</a>
-</li>
-  </ul></td>
-  <td style="width: 33%; vertical-align: top;"><ul>
-      <li><a href="api/dashboard.html#dashboard.caches.SUBS_VIEW_CACHE">SUBS_VIEW_CACHE (in Modul dashboard.caches)</a>
-</li>
-      <li><a href="index.html#untisconnect.sub.substitutions_sorter">substitutions_sorter() (im Modul untisconnect.sub)</a>
-</li>
-  </ul></td>
-</tr></table>
-
-<h2 id="T">T</h2>
-<table style="width: 100%" class="indextable genindextable"><tr>
-  <td style="width: 33%; vertical-align: top;"><ul>
-      <li><a href="api/dashboard.html#dashboard.models.Activity.title">title (Attribut von dashboard.models.Activity)</a>
-
-      <ul>
-        <li><a href="api/dashboard.html#dashboard.models.Notification.title">(Attribut von dashboard.models.Notification)</a>
-</li>
-      </ul></li>
-  </ul></td>
-</tr></table>
-
-<h2 id="U">U</h2>
-<table style="width: 100%" class="indextable genindextable"><tr>
-  <td style="width: 33%; vertical-align: top;"><ul>
-      <li><a href="index.html#module-untisconnect.api">untisconnect.api (Modul)</a>
-</li>
-      <li><a href="index.html#module-untisconnect.sub">untisconnect.sub (Modul)</a>
-</li>
-  </ul></td>
-  <td style="width: 33%; vertical-align: top;"><ul>
-      <li><a href="api/dashboard.html#dashboard.models.Activity.user">user (Attribut von dashboard.models.Activity)</a>
-
-      <ul>
-        <li><a href="api/dashboard.html#dashboard.models.Notification.user">(Attribut von dashboard.models.Notification)</a>
-</li>
-      </ul></li>
-  </ul></td>
-</tr></table>
-
-
-
-          </div>
-          
-        </div>
-      </div>
-      <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
-        <div class="sphinxsidebarwrapper">
-<h1 class="logo"><a href="index.html">SchoolApps</a></h1>
-
-
-
-
-
-
-
-
-<h3>Navigation</h3>
-<p class="caption"><span class="caption-text">Inhalt:</span></p>
-<ul>
-<li class="toctree-l1"><a class="reference internal" href="api/dashboard.html">App: Dashboard</a></li>
-<li class="toctree-l1"><a class="reference internal" href="api/aub.html">AUB (Antrag auf Unterrichtbefreiung)</a></li>
-<li class="toctree-l1"><a class="reference internal" href="dev/dev.html">Development Guide</a></li>
-<li class="toctree-l1"><a class="reference internal" href="dev/git.html">Git Management Guide</a></li>
-<li class="toctree-l1"><a class="reference internal" href="dev/doc.html">Dokumentation</a></li>
-</ul>
-
-<div class="relations">
-<h3>Related Topics</h3>
-<ul>
-  <li><a href="index.html">Documentation overview</a><ul>
-  </ul></li>
-</ul>
-</div>
-<div id="searchbox" style="display: none" role="search">
-  <h3 id="searchlabel">Schnellsuche</h3>
-    <div class="searchformwrapper">
-    <form class="search" action="search.html" method="get">
-      <input type="text" name="q" aria-labelledby="searchlabel" />
-      <input type="submit" value="Los" />
-    </form>
-    </div>
-</div>
-<script type="text/javascript">$('#searchbox').show(0);</script>
-
-
-
-
-
-
-
-
-        </div>
-      </div>
-      <div class="clearer"></div>
-    </div>
-    <div class="footer">
-      &copy; 2019, Hangzhi Yu, Julian Leucker, Jonathan Weth, Frank Poetzsch-Heffter.
-      
-      |
-      Powered by <a href="http://sphinx-doc.org/">Sphinx 2.2.1</a>
-      &amp; <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a>
-      
-    </div>
-
-    
-
-    
-  </body>
-</html>
\ No newline at end of file
diff --git a/docs/_build/html/index.html b/docs/_build/html/index.html
deleted file mode 100644
index d181ae07f..000000000
--- a/docs/_build/html/index.html
+++ /dev/null
@@ -1,213 +0,0 @@
-
-<!DOCTYPE html>
-
-<html xmlns="http://www.w3.org/1999/xhtml" lang="de">
-  <head>
-    <meta charset="utf-8" />
-    <title>Dokumentation von SchoolApps &#8212; SchoolApps Version 1.0.2-dev Dokumentation</title>
-    <link rel="stylesheet" href="_static/alabaster.css" type="text/css" />
-    <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
-    <script type="text/javascript" id="documentation_options" data-url_root="./" src="_static/documentation_options.js"></script>
-    <script type="text/javascript" src="_static/jquery.js"></script>
-    <script type="text/javascript" src="_static/underscore.js"></script>
-    <script type="text/javascript" src="_static/doctools.js"></script>
-    <script type="text/javascript" src="_static/language_data.js"></script>
-    <script type="text/javascript" src="_static/translations.js"></script>
-    <link rel="index" title="Stichwortverzeichnis" href="genindex.html" />
-    <link rel="search" title="Suche" href="search.html" />
-    <link rel="next" title="App: Dashboard" href="api/dashboard.html" />
-   
-  <link rel="stylesheet" href="_static/custom.css" type="text/css" />
-  
-  
-  <meta name="viewport" content="width=device-width, initial-scale=0.9, maximum-scale=0.9" />
-
-  </head><body>
-  
-
-    <div class="document">
-      <div class="documentwrapper">
-        <div class="bodywrapper">
-          
-
-          <div class="body" role="main">
-            
-  <div class="section" id="dokumentation-von-schoolapps">
-<h1>Dokumentation von SchoolApps<a class="headerlink" href="#dokumentation-von-schoolapps" title="Link zu dieser Überschrift">¶</a></h1>
-<div class="toctree-wrapper compound">
-<p class="caption"><span class="caption-text">Inhalt:</span></p>
-<ul>
-<li class="toctree-l1"><a class="reference internal" href="api/dashboard.html">App: Dashboard</a><ul>
-<li class="toctree-l2"><a class="reference internal" href="api/dashboard.html#aktivitaten">Aktivitäten</a></li>
-<li class="toctree-l2"><a class="reference internal" href="api/dashboard.html#benachrichtigungen">Benachrichtigungen</a></li>
-<li class="toctree-l2"><a class="reference internal" href="api/dashboard.html#caches">Caches</a></li>
-</ul>
-</li>
-<li class="toctree-l1"><a class="reference internal" href="api/aub.html">AUB (Antrag auf Unterrichtbefreiung)</a><ul>
-<li class="toctree-l2"><a class="reference internal" href="api/aub.html#stichworte">Stichworte</a></li>
-</ul>
-</li>
-<li class="toctree-l1"><a class="reference internal" href="dev/dev.html">Development Guide</a><ul>
-<li class="toctree-l2"><a class="reference internal" href="dev/dev.html#versionsverwaltung-einsatz-von-git">Versionsverwaltung – Einsatz von Git</a></li>
-<li class="toctree-l2"><a class="reference internal" href="dev/dev.html#codestyle">Codestyle</a></li>
-<li class="toctree-l2"><a class="reference internal" href="dev/dev.html#editoren-ides">Editoren/IDEs</a></li>
-<li class="toctree-l2"><a class="reference internal" href="dev/dev.html#dokumentation">Dokumentation</a></li>
-<li class="toctree-l2"><a class="reference internal" href="dev/dev.html#problem-bug-idee-issues-verwenden">Problem, Bug, Idee? – Issues verwenden!</a></li>
-</ul>
-</li>
-<li class="toctree-l1"><a class="reference internal" href="dev/git.html">Git Management Guide</a><ul>
-<li class="toctree-l2"><a class="reference internal" href="dev/git.html#hinweis">Hinweis</a></li>
-<li class="toctree-l2"><a class="reference internal" href="dev/git.html#git-hosting-von-schoolapps">Git-Hosting von SchoolApps</a></li>
-<li class="toctree-l2"><a class="reference internal" href="dev/git.html#clonen-und-ersteinrichtung">Clonen und Ersteinrichtung</a></li>
-<li class="toctree-l2"><a class="reference internal" href="dev/git.html#was-gibt-es-zu-tun-issues">Was gibt es zu tun? – Issues</a></li>
-<li class="toctree-l2"><a class="reference internal" href="dev/git.html#am-code-arbeiten-die-branches">Am Code arbeiten – Die Branches</a></li>
-<li class="toctree-l2"><a class="reference internal" href="dev/git.html#am-code-arbeiten-committen">Am Code arbeiten – Committen</a></li>
-<li class="toctree-l2"><a class="reference internal" href="dev/git.html#am-code-arbeiten-mergen-pull-requests">Am Code arbeiten – Mergen/Pull Requests</a></li>
-</ul>
-</li>
-<li class="toctree-l1"><a class="reference internal" href="dev/doc.html">Dokumentation</a><ul>
-<li class="toctree-l2"><a class="reference internal" href="dev/doc.html#docstrings">Docstrings</a></li>
-</ul>
-</li>
-</ul>
-</div>
-<span class="target" id="module-untisconnect.api"></span><dl class="function">
-<dt id="untisconnect.api.format_classes">
-<code class="sig-prename descclassname">untisconnect.api.</code><code class="sig-name descname">format_classes</code><span class="sig-paren">(</span><em class="sig-param">classes</em><span class="sig-paren">)</span><a class="headerlink" href="#untisconnect.api.format_classes" title="Link zu dieser Definition">¶</a></dt>
-<dd><p>Formats a list of Class objects to a combined string</p>
-<p>example return: „9abcd“ for classes 9a, 9b, 9c and 9d</p>
-<dl class="field-list simple">
-<dt class="field-odd">Parameter</dt>
-<dd class="field-odd"><p><strong>classes</strong> – Class list</p>
-</dd>
-<dt class="field-even">Rückgabe</dt>
-<dd class="field-even"><p>combined string</p>
-</dd>
-</dl>
-</dd></dl>
-
-<span class="target" id="module-untisconnect.sub"></span><dl class="function">
-<dt id="untisconnect.sub.generate_sub_table">
-<code class="sig-prename descclassname">untisconnect.sub.</code><code class="sig-name descname">generate_sub_table</code><span class="sig-paren">(</span><em class="sig-param">subs</em>, <em class="sig-param">events=[]</em><span class="sig-paren">)</span><a class="headerlink" href="#untisconnect.sub.generate_sub_table" title="Link zu dieser Definition">¶</a></dt>
-<dd><p>Parse substitutions and prepare than for displaying in plan</p>
-<dl class="field-list simple">
-<dt class="field-odd">Parameter</dt>
-<dd class="field-odd"><ul class="simple">
-<li><p><strong>subs</strong> – Substitutions to parse</p></li>
-<li><p><strong>events</strong> – Events to include in table</p></li>
-</ul>
-</dd>
-<dt class="field-even">Rückgabe</dt>
-<dd class="field-even"><p>A list of SubRow objects</p>
-</dd>
-</dl>
-</dd></dl>
-
-<dl class="function">
-<dt id="untisconnect.sub.get_header_information">
-<code class="sig-prename descclassname">untisconnect.sub.</code><code class="sig-name descname">get_header_information</code><span class="sig-paren">(</span><em class="sig-param">subs</em>, <em class="sig-param">date</em>, <em class="sig-param">events=[]</em><span class="sig-paren">)</span><a class="headerlink" href="#untisconnect.sub.get_header_information" title="Link zu dieser Definition">¶</a></dt>
-<dd><p>Get header information like affected teachers/classes and missing teachers/classes for a given date
-:param date: The date as datetime object
-:param subs: All subs for the given date
-:return: HeaderInformation object with all kind of information</p>
-</dd></dl>
-
-<dl class="function">
-<dt id="untisconnect.sub.parse_type_of_untis_flags">
-<code class="sig-prename descclassname">untisconnect.sub.</code><code class="sig-name descname">parse_type_of_untis_flags</code><span class="sig-paren">(</span><em class="sig-param">flags</em><span class="sig-paren">)</span><a class="headerlink" href="#untisconnect.sub.parse_type_of_untis_flags" title="Link zu dieser Definition">¶</a></dt>
-<dd><p>Get type of substitution by parsing UNTIS flags
-:param flags: UNTIS flags (string)
-:return: type (int, constants are provided)</p>
-</dd></dl>
-
-<dl class="function">
-<dt id="untisconnect.sub.substitutions_sorter">
-<code class="sig-prename descclassname">untisconnect.sub.</code><code class="sig-name descname">substitutions_sorter</code><span class="sig-paren">(</span><em class="sig-param">sub</em><span class="sig-paren">)</span><a class="headerlink" href="#untisconnect.sub.substitutions_sorter" title="Link zu dieser Definition">¶</a></dt>
-<dd><p>Sorting helper (sort function) for substitutions
-:param sub: Substitution to sort
-:return: A string for sorting by</p>
-</dd></dl>
-
-</div>
-<div class="section" id="index">
-<h1>Index<a class="headerlink" href="#index" title="Link zu dieser Überschrift">¶</a></h1>
-<ul class="simple">
-<li><p><a class="reference internal" href="genindex.html"><span class="std std-ref">Stichwortverzeichnis</span></a></p></li>
-<li><p><a class="reference internal" href="py-modindex.html"><span class="std std-ref">Modulindex</span></a></p></li>
-<li><p><a class="reference internal" href="search.html"><span class="std std-ref">Suche</span></a></p></li>
-</ul>
-</div>
-
-
-          </div>
-          
-        </div>
-      </div>
-      <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
-        <div class="sphinxsidebarwrapper">
-<h1 class="logo"><a href="#">SchoolApps</a></h1>
-
-
-
-
-
-
-
-
-<h3>Navigation</h3>
-<p class="caption"><span class="caption-text">Inhalt:</span></p>
-<ul>
-<li class="toctree-l1"><a class="reference internal" href="api/dashboard.html">App: Dashboard</a></li>
-<li class="toctree-l1"><a class="reference internal" href="api/aub.html">AUB (Antrag auf Unterrichtbefreiung)</a></li>
-<li class="toctree-l1"><a class="reference internal" href="dev/dev.html">Development Guide</a></li>
-<li class="toctree-l1"><a class="reference internal" href="dev/git.html">Git Management Guide</a></li>
-<li class="toctree-l1"><a class="reference internal" href="dev/doc.html">Dokumentation</a></li>
-</ul>
-
-<div class="relations">
-<h3>Related Topics</h3>
-<ul>
-  <li><a href="#">Documentation overview</a><ul>
-      <li>Next: <a href="api/dashboard.html" title="nächstes Kapitel">App: Dashboard</a></li>
-  </ul></li>
-</ul>
-</div>
-<div id="searchbox" style="display: none" role="search">
-  <h3 id="searchlabel">Schnellsuche</h3>
-    <div class="searchformwrapper">
-    <form class="search" action="search.html" method="get">
-      <input type="text" name="q" aria-labelledby="searchlabel" />
-      <input type="submit" value="Los" />
-    </form>
-    </div>
-</div>
-<script type="text/javascript">$('#searchbox').show(0);</script>
-
-
-
-
-
-
-
-
-        </div>
-      </div>
-      <div class="clearer"></div>
-    </div>
-    <div class="footer">
-      &copy; 2019, Hangzhi Yu, Julian Leucker, Jonathan Weth, Frank Poetzsch-Heffter.
-      
-      |
-      Powered by <a href="http://sphinx-doc.org/">Sphinx 2.2.1</a>
-      &amp; <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a>
-      
-      |
-      <a href="_sources/index.rst.txt"
-          rel="nofollow">Page source</a>
-    </div>
-
-    
-
-    
-  </body>
-</html>
\ No newline at end of file
diff --git a/docs/_build/html/objects.inv b/docs/_build/html/objects.inv
deleted file mode 100644
index 3910f2f29c71c967428964aec68eeefd03e34518..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 877
zcmV-z1CsnBAX9K?X>NERX>N99Zgg*Qc_4OWa&u{KZXhxWBOp+6Z)#;@bUGkYV`y)0
zY(a2va|$CMR%LQ?X>V>iAPOTORA^-&a%F8{X>Md?av*PJAarPHb0B7EY-J#6b0A}H
zZE$jBb8}^6Aa!$TZf78RY-wUH3V7PBm(6n9AQXl7ehOyVMZ2)mZnINtCGpfh8Oct&
zV-Q?hG#E61T)R(SB;>}D(`h7mp^OCge8A;!O-P=Mc8Y;8C_CP|w_E`Ff=I@1i0ex2
zPJHmK!;fe<Ab-P0L7o&6Du^-YYh7^}I+`dj3uVItH@48hfkI}vlJC&Yb76TVV43^`
zYE1+-*AiG;3=sn72DD!)*i^B%RE(H3QAD#5B{YT0#JmPH)6<lW?t<~RhiJK8Oz=1u
zKZZC8@1rn&ESQW~QjOmrzKI&IqbOXgaQN*0#va!JGl{0pVP|#t<7pZNtLbuqSJQdL
z!S~AuKh1)L|BO3uXTd6rS2&1P)A6kP^qzt!4kvgP#_@8|JxAqQo~PmW&V+b<7k4C_
z3`;HFb9-!_u{PTO9=cYr7N@Wkmt<MNAl7Q0<QBRxs0LzzVPbou7#OO#Urk?@hONsy
z=!=5WiekBSwWse~iptj&GA>-*#fhcxDmL__D|^sG-78q=v_~Gm4TeL;wVz0Lhy-9A
z87{qi!znr0w(Ulp>#wq3HQ<%Et;X(AK5Cr)C8UPCLK&&?1eY&Y0l8(eD}j0xw;IWS
zWEggYi~g)$#j-|fQ8069xuHr*=Wb_6Ub`}K$>4BtRcuN|8>M%|;_~47OXnt+v^p7Q
zj0>^x7x6aZImu`X60~zXb|2W1#AogOV>*DvsWTI3%%z`wW%d@3jA#Sc9y7pdgUfEb
z5oFsk0mWn7*5^gI!A9xInEysp_kLt7yJd=^Vf|kL6s+&ir$Aawwus~#w3ZI3IZbT>
z8x1^{+s}iVADXDTQBaU&w`g)|8!*`4xaV9{HTm!f>_Mn(2hyU4oHOtW7ui%OS}D{^
zUWAwXP)2XLZAQB$AN}C^=0uV$oDJbjQKqR>36g*)bf;D?jIB$;FPGsx=-=SpB{zdt
zRW;U`pf)eGcTY@HrG!g}890l+F=BQco;o~ZUO2h@9vC2+ruBH=R?RPWKc|B~vmrv|
DLK~fw

diff --git a/docs/_build/html/py-modindex.html b/docs/_build/html/py-modindex.html
deleted file mode 100644
index 6d168fc56..000000000
--- a/docs/_build/html/py-modindex.html
+++ /dev/null
@@ -1,164 +0,0 @@
-
-<!DOCTYPE html>
-
-<html xmlns="http://www.w3.org/1999/xhtml" lang="de">
-  <head>
-    <meta charset="utf-8" />
-    <title>Python-Modulindex &#8212; SchoolApps Version 1.0.2-dev Dokumentation</title>
-    <link rel="stylesheet" href="_static/alabaster.css" type="text/css" />
-    <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
-    <script type="text/javascript" id="documentation_options" data-url_root="./" src="_static/documentation_options.js"></script>
-    <script type="text/javascript" src="_static/jquery.js"></script>
-    <script type="text/javascript" src="_static/underscore.js"></script>
-    <script type="text/javascript" src="_static/doctools.js"></script>
-    <script type="text/javascript" src="_static/language_data.js"></script>
-    <script type="text/javascript" src="_static/translations.js"></script>
-    <link rel="index" title="Stichwortverzeichnis" href="genindex.html" />
-    <link rel="search" title="Suche" href="search.html" />
-
-   
-  <link rel="stylesheet" href="_static/custom.css" type="text/css" />
-  
-  
-  <meta name="viewport" content="width=device-width, initial-scale=0.9, maximum-scale=0.9" />
-
-
-
-  </head><body>
-  
-
-    <div class="document">
-      <div class="documentwrapper">
-        <div class="bodywrapper">
-          
-
-          <div class="body" role="main">
-            
-
-   <h1>Python-Modulindex</h1>
-
-   <div class="modindex-jumpbox">
-   <a href="#cap-a"><strong>a</strong></a> | 
-   <a href="#cap-d"><strong>d</strong></a> | 
-   <a href="#cap-u"><strong>u</strong></a>
-   </div>
-
-   <table class="indextable modindextable">
-     <tr class="pcap"><td></td><td>&#160;</td><td></td></tr>
-     <tr class="cap" id="cap-a"><td></td><td>
-       <strong>a</strong></td><td></td></tr>
-     <tr>
-       <td><img src="_static/minus.png" class="toggler"
-              id="toggle-1" style="display: none" alt="-" /></td>
-       <td>
-       <code class="xref">aub</code></td><td>
-       <em></em></td></tr>
-     <tr class="cg-1">
-       <td></td>
-       <td>&#160;&#160;&#160;
-       <a href="api/aub.html#module-aub.models"><code class="xref">aub.models</code></a></td><td>
-       <em></em></td></tr>
-     <tr class="pcap"><td></td><td>&#160;</td><td></td></tr>
-     <tr class="cap" id="cap-d"><td></td><td>
-       <strong>d</strong></td><td></td></tr>
-     <tr>
-       <td><img src="_static/minus.png" class="toggler"
-              id="toggle-2" style="display: none" alt="-" /></td>
-       <td>
-       <code class="xref">dashboard</code></td><td>
-       <em></em></td></tr>
-     <tr class="cg-2">
-       <td></td>
-       <td>&#160;&#160;&#160;
-       <a href="api/dashboard.html#module-dashboard.caches"><code class="xref">dashboard.caches</code></a></td><td>
-       <em></em></td></tr>
-     <tr class="pcap"><td></td><td>&#160;</td><td></td></tr>
-     <tr class="cap" id="cap-u"><td></td><td>
-       <strong>u</strong></td><td></td></tr>
-     <tr>
-       <td><img src="_static/minus.png" class="toggler"
-              id="toggle-3" style="display: none" alt="-" /></td>
-       <td>
-       <code class="xref">untisconnect</code></td><td>
-       <em></em></td></tr>
-     <tr class="cg-3">
-       <td></td>
-       <td>&#160;&#160;&#160;
-       <a href="index.html#module-untisconnect.api"><code class="xref">untisconnect.api</code></a></td><td>
-       <em></em></td></tr>
-     <tr class="cg-3">
-       <td></td>
-       <td>&#160;&#160;&#160;
-       <a href="index.html#module-untisconnect.sub"><code class="xref">untisconnect.sub</code></a></td><td>
-       <em></em></td></tr>
-   </table>
-
-
-          </div>
-          
-        </div>
-      </div>
-      <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
-        <div class="sphinxsidebarwrapper">
-<h1 class="logo"><a href="index.html">SchoolApps</a></h1>
-
-
-
-
-
-
-
-
-<h3>Navigation</h3>
-<p class="caption"><span class="caption-text">Inhalt:</span></p>
-<ul>
-<li class="toctree-l1"><a class="reference internal" href="api/dashboard.html">App: Dashboard</a></li>
-<li class="toctree-l1"><a class="reference internal" href="api/aub.html">AUB (Antrag auf Unterrichtbefreiung)</a></li>
-<li class="toctree-l1"><a class="reference internal" href="dev/dev.html">Development Guide</a></li>
-<li class="toctree-l1"><a class="reference internal" href="dev/git.html">Git Management Guide</a></li>
-<li class="toctree-l1"><a class="reference internal" href="dev/doc.html">Dokumentation</a></li>
-</ul>
-
-<div class="relations">
-<h3>Related Topics</h3>
-<ul>
-  <li><a href="index.html">Documentation overview</a><ul>
-  </ul></li>
-</ul>
-</div>
-<div id="searchbox" style="display: none" role="search">
-  <h3 id="searchlabel">Schnellsuche</h3>
-    <div class="searchformwrapper">
-    <form class="search" action="search.html" method="get">
-      <input type="text" name="q" aria-labelledby="searchlabel" />
-      <input type="submit" value="Los" />
-    </form>
-    </div>
-</div>
-<script type="text/javascript">$('#searchbox').show(0);</script>
-
-
-
-
-
-
-
-
-        </div>
-      </div>
-      <div class="clearer"></div>
-    </div>
-    <div class="footer">
-      &copy; 2019, Hangzhi Yu, Julian Leucker, Jonathan Weth, Frank Poetzsch-Heffter.
-      
-      |
-      Powered by <a href="http://sphinx-doc.org/">Sphinx 2.2.1</a>
-      &amp; <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a>
-      
-    </div>
-
-    
-
-    
-  </body>
-</html>
\ No newline at end of file
diff --git a/docs/_build/html/search.html b/docs/_build/html/search.html
deleted file mode 100644
index de64c277e..000000000
--- a/docs/_build/html/search.html
+++ /dev/null
@@ -1,116 +0,0 @@
-
-<!DOCTYPE html>
-
-<html xmlns="http://www.w3.org/1999/xhtml" lang="de">
-  <head>
-    <meta charset="utf-8" />
-    <title>Suche &#8212; SchoolApps Version 1.0.2-dev Dokumentation</title>
-    <link rel="stylesheet" href="_static/alabaster.css" type="text/css" />
-    <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
-    
-    <script type="text/javascript" id="documentation_options" data-url_root="./" src="_static/documentation_options.js"></script>
-    <script type="text/javascript" src="_static/jquery.js"></script>
-    <script type="text/javascript" src="_static/underscore.js"></script>
-    <script type="text/javascript" src="_static/doctools.js"></script>
-    <script type="text/javascript" src="_static/language_data.js"></script>
-    <script type="text/javascript" src="_static/translations.js"></script>
-    <script type="text/javascript" src="_static/searchtools.js"></script>
-    <link rel="index" title="Stichwortverzeichnis" href="genindex.html" />
-    <link rel="search" title="Suche" href="#" />
-  <script type="text/javascript" src="searchindex.js" defer></script>
-  
-   
-  <link rel="stylesheet" href="_static/custom.css" type="text/css" />
-  
-  
-  <meta name="viewport" content="width=device-width, initial-scale=0.9, maximum-scale=0.9" />
-
-
-  </head><body>
-  
-
-    <div class="document">
-      <div class="documentwrapper">
-        <div class="bodywrapper">
-          
-
-          <div class="body" role="main">
-            
-  <h1 id="search-documentation">Suche</h1>
-  <div id="fallback" class="admonition warning">
-  <script type="text/javascript">$('#fallback').hide();</script>
-  <p>
-    Bitte aktivieren Sie JavaScript, wenn Sie die Suchfunktion nutzen wollen.
-  </p>
-  </div>
-  <p>
-    Von hier aus können Sie die Dokumentation durchsuchen. Geben Sie Ihre Suchbegriffe in das untenstehende Feld ein und klicken Sie auf "Suchen". Bitte beachten Sie, dass die Suchfunktion automatisch nach allen Worten sucht. Seiten, die nicht alle Worte enthalten, erscheinen nicht in der Ergebnisliste.
-  </p>
-  <form action="" method="get">
-    <input type="text" name="q" aria-labelledby="search-documentation" value="" />
-    <input type="submit" value="suchen" />
-    <span id="search-progress" style="padding-left: 10px"></span>
-  </form>
-  
-  <div id="search-results">
-  
-  </div>
-
-          </div>
-          
-        </div>
-      </div>
-      <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
-        <div class="sphinxsidebarwrapper">
-<h1 class="logo"><a href="index.html">SchoolApps</a></h1>
-
-
-
-
-
-
-
-
-<h3>Navigation</h3>
-<p class="caption"><span class="caption-text">Inhalt:</span></p>
-<ul>
-<li class="toctree-l1"><a class="reference internal" href="api/dashboard.html">App: Dashboard</a></li>
-<li class="toctree-l1"><a class="reference internal" href="api/aub.html">AUB (Antrag auf Unterrichtbefreiung)</a></li>
-<li class="toctree-l1"><a class="reference internal" href="dev/dev.html">Development Guide</a></li>
-<li class="toctree-l1"><a class="reference internal" href="dev/git.html">Git Management Guide</a></li>
-<li class="toctree-l1"><a class="reference internal" href="dev/doc.html">Dokumentation</a></li>
-</ul>
-
-<div class="relations">
-<h3>Related Topics</h3>
-<ul>
-  <li><a href="index.html">Documentation overview</a><ul>
-  </ul></li>
-</ul>
-</div>
-
-
-
-
-
-
-
-
-        </div>
-      </div>
-      <div class="clearer"></div>
-    </div>
-    <div class="footer">
-      &copy; 2019, Hangzhi Yu, Julian Leucker, Jonathan Weth, Frank Poetzsch-Heffter.
-      
-      |
-      Powered by <a href="http://sphinx-doc.org/">Sphinx 2.2.1</a>
-      &amp; <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a>
-      
-    </div>
-
-    
-
-    
-  </body>
-</html>
\ No newline at end of file
diff --git a/docs/_build/html/searchindex.js b/docs/_build/html/searchindex.js
deleted file mode 100644
index 1a023661c..000000000
--- a/docs/_build/html/searchindex.js
+++ /dev/null
@@ -1 +0,0 @@
-Search.setIndex({docnames:["api/aub","api/dashboard","dev/dev","dev/doc","dev/git","index"],envversion:{"sphinx.domains.c":1,"sphinx.domains.changeset":1,"sphinx.domains.citation":1,"sphinx.domains.cpp":1,"sphinx.domains.javascript":1,"sphinx.domains.math":2,"sphinx.domains.python":1,"sphinx.domains.rst":1,"sphinx.domains.std":1,sphinx:56},filenames:["api/aub.rst","api/dashboard.rst","dev/dev.rst","dev/doc.rst","dev/git.rst","index.rst"],objects:{"aub.models":{Aub:[0,1,1,""]},"aub.models.Aub":{DoesNotExist:[0,2,1,""],MultipleObjectsReturned:[0,2,1,""],all_users:[0,3,1,""]},"dashboard.caches":{BACKGROUND_CACHE_REFRESH:[1,4,1,""],CURRENT_EVENTS_CACHE:[1,4,1,""],DRIVE_CACHE:[1,4,1,""],EXPIRATION_TIME_CACHE_FOR_PLAN_CACHES:[1,4,1,""],LATEST_ARTICLE_CACHE:[1,4,1,""],PARSED_LESSONS_CACHE:[1,4,1,""],PLAN_VIEW_CACHE:[1,4,1,""],SUBS_VIEW_CACHE:[1,4,1,""]},"dashboard.models":{Activity:[1,1,1,""],Cache:[1,1,1,""],Notification:[1,1,1,""]},"dashboard.models.Activity":{DoesNotExist:[1,2,1,""],MultipleObjectsReturned:[1,2,1,""],app:[1,5,1,""],created_at:[1,5,1,""],description:[1,5,1,""],register:[1,3,1,""],title:[1,5,1,""],user:[1,5,1,""]},"dashboard.models.Cache":{"delete":[1,3,1,""],DoesNotExist:[1,2,1,""],MultipleObjectsReturned:[1,2,1,""],is_expired:[1,3,1,""],is_needed:[1,3,1,""]},"dashboard.models.Notification":{DoesNotExist:[1,2,1,""],MultipleObjectsReturned:[1,2,1,""],app:[1,5,1,""],created_at:[1,5,1,""],description:[1,5,1,""],link:[1,5,1,""],read:[1,5,1,""],register:[1,3,1,""],send_email:[1,3,1,""],title:[1,5,1,""],user:[1,5,1,""]},"untisconnect.api":{format_classes:[5,6,1,""]},"untisconnect.sub":{generate_sub_table:[5,6,1,""],get_header_information:[5,6,1,""],parse_type_of_untis_flags:[5,6,1,""],substitutions_sorter:[5,6,1,""]},aub:{models:[0,0,0,"-"]},dashboard:{caches:[1,0,0,"-"]},untisconnect:{api:[5,0,0,"-"],sub:[5,0,0,"-"]}},objnames:{"0":["py","module","Python-Modul"],"1":["py","class","Python-Klasse"],"2":["py","exception","Python-Exception"],"3":["py","method","Python-Methode"],"4":["py","data","Python-Wert"],"5":["py","attribute","Python-Attribut"],"6":["py","function","Python-Funktion"]},objtypes:{"0":"py:module","1":"py:class","2":"py:exception","3":"py:method","4":"py:data","5":"py:attribute","6":"py:function"},terms:{"9abcd":5,"\u00c4nderung":4,"abstract":[],"class":[0,1,5],"default":[1,3],"finally":[],"for":[1,5],"function":[1,5],"import":1,"int":[0,5],"long":1,"new":[1,4],"return":[1,3,5],"short":1,"static":[0,1],"this":[],"true":1,"var":1,"with":[1,5],Als:1,Bei:1,Damit:4,Das:[1,4],Der:4,Die:[2,3,5],Dies:[1,2,4],Diese:[2,4],Dieser:4,Ein:[1,2,4],Eine:1,Hier:[2,4],Ist:4,Meine:[],Sehr:2,Sicherheits:4,Viele:2,Was:5,Wenn:4,Zur:3,_beauty:[],_bug_:[],_build:3,_discussion_:[],_it:[],_new:[],_refactoring_:[],_whol:[],abgefragt:1,abgelauf:1,abgeschloss:4,abgezweigt:4,ablaufzeit:1,ablehn:0,about:1,absegn:4,absolut:[],access:[],accessor:[],act:[],action:1,activ:1,activity:1,adapt:[],addition:[],adressed:1,affected:5,ahnlich:2,aktion:1,aktiv:[1,4],aktivitat:5,aktualisi:1,aktualisierungszeit:1,aktuell:[1,4],all:[0,1,2,4,5],all_us:0,allerding:2,allgemein:4,allowed:[],already:0,and:[1,2,5],angegeb:[],angemeldet:0,angepasst:1,anleg:[],anleit:[2,4],anoth:[],antrag:5,antragsformular:0,antragstell:0,anzuzeig:1,api:5,app:[2,4,5],app_conf:1,apps:[1,2,4],arbeit:[2,5],arbeitet:4,are:5,arg:1,argument:[],art:4,articl:1,artikel:1,assigne:4,atom:2,aub:[1,5],auffallt:4,aufgabengebiet:4,aufgebaut:2,aufgefuhrt:2,aufklart:2,ausgab:[1,3],ausnahm:4,aussagekraft:4,ausserd:1,auth:0,automat:[0,1,2],automatic:1,autovervollstand:2,background:1,background_cache_refresh:1,bas:[],based:1,basic:[],basiert:1,basteln:2,beacht:2,bearbeit:[],beauty:4,bedien:2,beendig:2,befolg:4,beginn:0,begrund:0,begruss:1,beim:[],beispiel:4,bekomm:2,benachricht:[0,5],benannt:4,benotigt:[1,2],benutz:[0,1,2,4],benutzt:1,berechn:1,bereich:[2,4],bereichslabel:4,bereit:4,bereitstellt:2,beschreib:[0,4],besitz:2,best:2,bestat:4,bestimmt:[2,4],betreff:4,betriebssystem:2,betrifft:1,betroff:4,betwe:[],bewill:0,bewilligt:0,bezahlversion:2,bezug:4,bibliothek:2,bildungsbereich:2,bindestrich:4,blksiz:[],blob:4,block:[],blocking:[],blockingioerror:[],bool:1,both:[],branch:[2,5],buff:[],buffer_siz:[],buffered:[],bufferediobas:[],bufferedrandom:[],bufferedread:[],bufferedrwpair:[],bufferedwrit:[],buffering:[],bug:[4,5],bugfix:4,build_absolute_uri:1,builtin:[],but:[1,4],byt:[],bytesio:[],bzw:[2,4],cach:5,cache_pag:1,cacheinhalt:1,cacht:1,calendar:1,can:1,caused:1,chang:1,check:1,child:[],childr:[],classs:1,clon:5,cloning:4,closed:[],cod:[2,5],codeformatier:2,codestyl:5,com:[1,4],combined:5,commit:[2,4],commited:4,committ:5,committed:[2,4],community:2,completely:[],config:1,connection:4,constant:5,contain:[],containing:[],contrib:0,corresponding:1,counterpart:[],creat:1,created:[0,1],created_at:[0,1],created_by:0,current:1,current_events_cach:1,dabei:[1,4],dafur:4,darum:4,dashboard:5,dashboardconf:1,dass:4,dat:5,data:[],databas:[],datefield:0,datei:1,datenverlust:2,datetim:5,datetimefield:[],datum:0,deal:[],decoding:[],decorator:1,def:[],default_buffer_siz:[],defaultparamval:3,deferred:[],defin:[],defined:[],definition:1,delet:1,deleted:1,dennoch:2,description:[0,1],designtechn:4,detail:1,detailliert:4,deutsch:[2,4],dev:4,developing:[],development:5,did:1,dient:1,differenc:[],directiv:[],direkt:[2,4],discussion:4,diskussi:4,displaying:5,django:[0,1,2,4],djangoproject:1,docs:[1,3],docstring:[2,5],does:[],doesnotexist:[0,1],dokumentationsmog:2,dokumentiert:2,don:1,driv:1,drive_cach:1,durchgefuhrt:[1,4],dynam:1,edition:2,editor:5,eig:[2,4],eigent:4,eindeut:4,einfach:2,eingesetzt:3,eingetrag:4,einheit:2,einsatz:5,eintrag:2,einzuhalt:2,einzuricht:4,einzutrag:4,email:1,empfehlenswert:2,empfiehlt:[2,4],empfohl:4,encoding:[],end:0,englisch:[2,4],entfernt:4,enthalt:2,entry:1,entsprech:[1,2],entspricht:4,entwickl:[2,4],entwicklerteam:4,entwicklungsumgeb:4,environment:2,erfolg:4,erfolgt:4,erganzt:1,ergebnis:3,erhalt:0,erinner:4,erklart:2,errechn:1,erreicht:1,errordescription:3,errortyp:3,ersteinricht:5,erstell:3,erstellt:[1,4],erwahnt:2,etc:[1,2,4],event:[1,5],exampl:[1,5],example_cach:1,exception:[0,1],executed:[],expiration:1,expiration_tim:1,expiration_time_cache_for_plan_cach:1,expired:1,extend:[],extending:[],fall:4,fals:1,featur:4,feature_:[],featurebranch:2,fehl:4,fehlend:4,fertig:2,festgelegt:4,field:[],fil:[],fileio:[],filled:1,first:[],flag:5,folgend:[1,2],folgt:4,foreignkey:[],formartier:[],format:5,format_class:5,formati:2,formatier:3,forward:[],forwardmanytoonedescriptor:[],forwardonetoonedescriptor:[],foundation:2,from:1,from_dat:0,from_tim:0,fullt:0,func:[],funktion:[1,2,3,4],funktionalitat:2,funktionsbeintracht:4,funktionsweis:2,fur:[1,2,4],gearbeitet:2,gecacht:1,gecodet:2,gefuttert:4,gegensatz:4,gehosted:4,gelost:4,genannt:4,genau:4,generate_sub_tabl:5,generell:[],generiert:0,geparst:1,gepusht:2,gerad:2,geregelt:4,gesamt:3,gesondert:2,gespeichert:[1,4],get:[1,5],get_cache_for_plan:[],get_header_information:5,get_next_by_created_at:[],get_or_creat:1,get_previous_by_created_at:[],getan:4,gibt:[2,5],gilt:[1,2,4],git:5,github:[2,4],giv:5,gleichzeit:4,gross:2,grundsatz:2,guid:5,gut:2,halt:4,handling:[],happened:1,hard:2,hashtag:4,hass:2,hauptbranch:4,haus:2,hav:[0,1],head:5,headerinformation:5,hefft:4,helf:4,help:5,her:1,herrn:4,hierarchy:[],hierbei:2,hilf:4,him:1,hingewies:2,hintergrundaktualisier:[],hinweis:5,hinzugefugt:1,homepag:1,hosting:5,how:[],howev:[],html:[1,2,3,4],http:1,httprequ:1,https:[1,2,4],ide:5,identifi:1,ides:5,idl:2,imm:4,implementation:[],important:1,importi:[],includ:5,index:4,information:[1,2,4,5],informi:1,inhalt:[1,5],inherit:[],initial_byt:[],insbesond:2,install:2,installation:[2,4],instanc:[],integrated:2,intended:[],interfac:[],into:[],iobas:[],is_expired:1,is_needed:1,is_next:[],issu:5,its:[],jed:[1,2,4],jemand:4,jeweil:2,kanbansyst:4,kategorisier:4,kategorisierungslabel:4,katharineum:4,keyword:[],kind:5,klappt:2,klass:[2,3],kleingeschrieb:4,kommentar:2,kommenti:2,kommerziell:2,komponent:4,konn:[2,4],konstant:1,kostenlos:2,kumm:4,kummert:4,kwarg:1,label:[1,4],lasst:4,last:1,last_time_updated:1,lat:[1,2],latest_article_cach:1,lauf:2,lauffah:2,ldap:4,least:[],ledig:2,lehnt:0,lehr:0,lehrerkurzel:0,lehrkraft:0,les:2,lesson:1,letzt:1,leut:2,level:1,liegt:3,lik:5,liking:[],link:1,list:[0,4,5],literatur:[],loading:[],lokalisiert:2,los:[],losung:4,losungsmog:4,low:1,macht:1,main:[],mak:3,manag:[],management:[2,5],manchmal:4,many:[],mark:1,may:[],mehr:4,meinung:4,meist:[2,4],memory:[],merg:5,method:1,microsoft:2,mileston:4,missing:5,mistak:4,mistake_:[],mittel:4,mod:[],model:[0,1],modul:[],modulindex:5,monday:[],monday_of_week:[],multipleobjectsreturned:[0,1],nachricht:1,nam:[1,4],namenskonvention:4,natur:2,needed:1,needed_until:1,nenn:4,neu:[1,2,4],nev:[],new_valu:[],nochmal:[2,4],non:[],not:1,notifi:1,notification:1,notified:1,notify:1,nov:[],nutz:1,nutzt:1,oberflach:2,obig:4,object:[1,5],objekt:1,obtained:[],ohn:2,omitting:[],one:[],only:1,open:[],opensourc:2,operation:[],optional:[1,3],ord:1,organisation:4,oserror:[],overrid:1,pag:1,param:[3,5],paramdescription:3,paramet:[1,5],paramnam:3,paramtyp:3,parent:[],pars:5,parse_type_of_untis_flag:5,parsed:1,parsed_lessons_cach:1,parsing:5,part:[],passend:4,passiert:1,pep8:2,pep:2,person:4,pflicht:2,plan:[1,5],plan_cach:[],plan_view_cach:1,plugin:2,poetzsch:4,possibl:[],prepar:5,probl:[4,5],problem:4,professional:2,programm:2,programmi:[2,4],programmiert:4,project:4,project_:[],projekt:[2,4],provid:[],provided:5,pruft:0,pull:5,push:4,pycharm:2,python:2,pythonskript:2,quellcod:2,query:[],quickstart:[],rais:3,random:[],raw:[],rawiobas:[],read:[1,2],readabl:1,reading:[],readinto:[],readm:4,readthedocs:2,ready:[],rechtschreibfehl:4,ref:1,refactor:4,refactoring:4,regel:[2,4],regelfall:4,regelplan:1,regist:1,register_notification:[],registri:[],reit:4,related:1,related_nam:[],relation:[],relativ:[],replac:1,repository:4,requ:[1,5],respectively:[],respons:1,rest:4,restructedtext:[],restructuredtext:3,returndescription:3,returntyp:3,revers:1,richtlini:2,rogerdudl:4,room:1,root:[],rtd:2,rtyp:3,ruckgab:[0,1,5],ruckgabetyp:[0,1],rucksprach:4,saub:2,sav:[],saving:1,schema:2,schonheitsfehl:4,school:4,schoolapps:[1,2],schritt:2,schulleit:0,second:1,see:1,seh:4,sei:2,seitencach:1,selb:[1,2,4],send:1,send_email:1,separation:[],serv:4,should:2,sicher:4,sid:[],sieh:[2,4],simpl:[],simply:[],sinn:2,sit:1,site_cach:1,siz:[],smart:1,sofort:2,softwar:[2,4],sollen:4,sollt:[2,4],solv:4,something:1,sorg:2,sort:5,sorting:5,sowi:[2,4],special:1,specification:[],speichert:1,spezial:4,sphinx:[2,3],ssh:4,stabil:4,stand:4,startseit:1,stat:[],status_id:0,stellt:4,stellvertret:0,stichwort:5,stichwortverzeichnis:5,stil:2,str:1,stream:[],string:5,stringio:[],struktur:3,stund:[0,1],styl:4,sub:5,subclass:[],subject:1,subrow:5,subs_view_cach:1,substitution:[1,5],substitutions_sort:5,such:5,summary:3,support:[],syntaxhervorheb:2,system:1,tabellenansicht:1,tabl:5,teach:[1,5],teil:4,termin:1,text:[],texteditor:2,textfield:0,textiobas:[],textiowrapp:[],than:5,that:0,the:[1,5],their:[],ther:[],they:[],thing:1,tim:[0,1],timestamp:1,tipp:2,titel:4,titl:1,to_dat:0,to_tim:0,toctre:[],too:1,tool:3,top:[],topics:1,tue:[],tun:5,tutorial:2,typ:[1,3,5],type_class:[],type_room:[],type_teach:[],typical:[],uber:[0,2,4],ubergab:1,ubersicht:2,uhrzeit:0,umgesetzt:4,umprogrammi:4,unbedingt:[2,4],underlying:[],unlik:[],unsaub:4,unsupportedoperation:[],unt:[2,4],unterordn:3,unterrichtbefrei:5,unterstutzt:2,untis:5,untisconnect:5,updat:1,updated:1,url:[],urlresolv:1,used:[],user:[0,1],user_id:[],uses:[],valu:[],variabl:[1,2,3],verander:2,verantwort:4,verbess:4,verbose_nam:1,verfasst:2,vernunft:2,veroffentlicht:4,verschick:[],verschied:[],verseh:2,version:[1,2,4],versionsverwalt:5,vertret:1,verwaltungsfunktion:1,verwend:[4,5],verwendet:[1,4],via:1,view:1,views:1,visual:2,visualcod:2,vorhand:4,vorzubeug:2,vorzugsweis:4,wahlweis:4,want:1,wechselt:4,week:[],weiss:4,weit:2,weiterhin:2,welch:1,werd:[1,2,4],wert:1,what:1,when:1,wheth:1,which:1,whol:4,wichtig:[],wobei:1,wochenplan:1,work:4,would:[],wrap:[],wrapp:[],writ:2,writabl:[],writing:[],wrong:4,wrong_:[],wurd:[1,4],wurzelverzeichnis:2,you:1,your:[],zeigt:1,zud:2,zugeteilt:4,zugriff:4,zuordnung:4,zuruckgeb:1,zuruckgesetzt:1,zusammenhang:4,zusatz:4,zustand:4,zweck:2,zwei:4,zwischenspeich:1},titles:["AUB (Antrag auf Unterrichtbefreiung)","REBUSDynSelect: Dashboard","Development Guide","Dokumentation","Git Management Guide","Dokumentation von SchoolApps"],titleterms:{Die:4,Eine:[],Was:4,absolut:1,aktivitat:1,and:[],anleg:4,antrag:0,api:1,app:1,arbeit:4,aub:0,basis:1,bearbeit:4,beim:4,benachricht:1,branch:4,bug:2,cach:1,clon:4,cod:4,codestyl:2,committ:4,dashboard:1,developing:[],development:2,docstring:3,documentation:[],dokumentation:[2,3,5],editor:2,einsatz:2,ersteinricht:4,erstell:[1,4],gibt:4,git:[2,4],guid:[2,4],hintergrundaktualisier:1,hinweis:[1,4],hosting:4,ide:2,ides:2,index:5,indic:[],issu:[2,4],los:4,management:4,merg:4,probl:2,pull:4,registri:[],relativ:1,requ:4,schoolapps:[4,5],sitecach:1,sss:[],stichwort:0,tabl:[],tun:4,unterrichtbefrei:0,url:1,variablencach:1,verschick:[],verschied:1,versionsverwalt:2,verwalt:1,verwend:[1,2],welcom:[],wichtig:4,workflow:0}})
\ No newline at end of file
diff --git a/docs/_build/latex/LICRcyr2utf8.xdy b/docs/_build/latex/LICRcyr2utf8.xdy
deleted file mode 100644
index a9ca1c82c..000000000
--- a/docs/_build/latex/LICRcyr2utf8.xdy
+++ /dev/null
@@ -1,101 +0,0 @@
-;; -*- coding: utf-8; mode: Lisp; -*-
-;; style file for xindy
-;; filename: LICRcyr2utf8.xdy
-;; description: style file for xindy which maps back LaTeX Internal
-;;   Character Representation of Cyrillic to utf-8
-;; usage: for use with pdflatex produced .idx files.
-;; Contributed by the Sphinx team, July 2018.
-(merge-rule "\IeC {\'\CYRG }" "Ѓ" :string)
-(merge-rule "\IeC {\'\CYRK }" "Ќ" :string)
-(merge-rule "\IeC {\'\cyrg }" "Ñ“" :string)
-(merge-rule "\IeC {\'\cyrk }" "ќ" :string)
-(merge-rule "\IeC {\CYRA }" "А" :string)
-(merge-rule "\IeC {\CYRB }" "Б" :string)
-(merge-rule "\IeC {\CYRC }" "Ц" :string)
-(merge-rule "\IeC {\CYRCH }" "Ч" :string)
-(merge-rule "\IeC {\CYRD }" "Д" :string)
-(merge-rule "\IeC {\CYRDJE }" "Ђ" :string)
-(merge-rule "\IeC {\CYRDZE }" "Ð…" :string)
-(merge-rule "\IeC {\CYRDZHE }" "Џ" :string)
-(merge-rule "\IeC {\CYRE }" "Е" :string)
-(merge-rule "\IeC {\CYREREV }" "Э" :string)
-(merge-rule "\IeC {\CYRERY }" "Ы" :string)
-(merge-rule "\IeC {\CYRF }" "Ф" :string)
-(merge-rule "\IeC {\CYRG }" "Г" :string)
-(merge-rule "\IeC {\CYRGUP }" "Ґ" :string)
-(merge-rule "\IeC {\CYRH }" "Ð¥" :string)
-(merge-rule "\IeC {\CYRHRDSN }" "Ъ" :string)
-(merge-rule "\IeC {\CYRI }" "И" :string)
-(merge-rule "\IeC {\CYRIE }" "Є" :string)
-(merge-rule "\IeC {\CYRII }" "І" :string)
-(merge-rule "\IeC {\CYRISHRT }" "Й" :string)
-(merge-rule "\IeC {\CYRJE }" "Ј" :string)
-(merge-rule "\IeC {\CYRK }" "К" :string)
-(merge-rule "\IeC {\CYRL }" "Л" :string)
-(merge-rule "\IeC {\CYRLJE }" "Љ" :string)
-(merge-rule "\IeC {\CYRM }" "М" :string)
-(merge-rule "\IeC {\CYRN }" "Н" :string)
-(merge-rule "\IeC {\CYRNJE }" "Њ" :string)
-(merge-rule "\IeC {\CYRO }" "О" :string)
-(merge-rule "\IeC {\CYRP }" "П" :string)
-(merge-rule "\IeC {\CYRR }" "Р" :string)
-(merge-rule "\IeC {\CYRS }" "С" :string)
-(merge-rule "\IeC {\CYRSFTSN }" "Ь" :string)
-(merge-rule "\IeC {\CYRSH }" "Ш" :string)
-(merge-rule "\IeC {\CYRSHCH }" "Щ" :string)
-(merge-rule "\IeC {\CYRT }" "Т" :string)
-(merge-rule "\IeC {\CYRTSHE }" "Ћ" :string)
-(merge-rule "\IeC {\CYRU }" "У" :string)
-(merge-rule "\IeC {\CYRUSHRT }" "ÐŽ" :string)
-(merge-rule "\IeC {\CYRV }" "Ð’" :string)
-(merge-rule "\IeC {\CYRYA }" "Я" :string)
-(merge-rule "\IeC {\CYRYI }" "Ї" :string)
-(merge-rule "\IeC {\CYRYO }" "Ё" :string)
-(merge-rule "\IeC {\CYRYU }" "Ю" :string)
-(merge-rule "\IeC {\CYRZ }" "З" :string)
-(merge-rule "\IeC {\CYRZH }" "Ж" :string)
-(merge-rule "\IeC {\cyra }" "а" :string)
-(merge-rule "\IeC {\cyrb }" "б" :string)
-(merge-rule "\IeC {\cyrc }" "ц" :string)
-(merge-rule "\IeC {\cyrch }" "ч" :string)
-(merge-rule "\IeC {\cyrd }" "д" :string)
-(merge-rule "\IeC {\cyrdje }" "Ñ’" :string)
-(merge-rule "\IeC {\cyrdze }" "Ñ•" :string)
-(merge-rule "\IeC {\cyrdzhe }" "ÑŸ" :string)
-(merge-rule "\IeC {\cyre }" "е" :string)
-(merge-rule "\IeC {\cyrerev }" "э" :string)
-(merge-rule "\IeC {\cyrery }" "Ñ‹" :string)
-(merge-rule "\IeC {\cyrf }" "Ñ„" :string)
-(merge-rule "\IeC {\cyrg }" "г" :string)
-(merge-rule "\IeC {\cyrgup }" "Ò‘" :string)
-(merge-rule "\IeC {\cyrh }" "Ñ…" :string)
-(merge-rule "\IeC {\cyrhrdsn }" "ÑŠ" :string)
-(merge-rule "\IeC {\cyri }" "и" :string)
-(merge-rule "\IeC {\cyrie }" "Ñ”" :string)
-(merge-rule "\IeC {\cyrii }" "Ñ–" :string)
-(merge-rule "\IeC {\cyrishrt }" "й" :string)
-(merge-rule "\IeC {\cyrje }" "ј" :string)
-(merge-rule "\IeC {\cyrk }" "к" :string)
-(merge-rule "\IeC {\cyrl }" "л" :string)
-(merge-rule "\IeC {\cyrlje }" "Ñ™" :string)
-(merge-rule "\IeC {\cyrm }" "м" :string)
-(merge-rule "\IeC {\cyrn }" "н" :string)
-(merge-rule "\IeC {\cyrnje }" "Ñš" :string)
-(merge-rule "\IeC {\cyro }" "о" :string)
-(merge-rule "\IeC {\cyrp }" "п" :string)
-(merge-rule "\IeC {\cyrr }" "Ñ€" :string)
-(merge-rule "\IeC {\cyrs }" "с" :string)
-(merge-rule "\IeC {\cyrsftsn }" "ь" :string)
-(merge-rule "\IeC {\cyrsh }" "ш" :string)
-(merge-rule "\IeC {\cyrshch }" "щ" :string)
-(merge-rule "\IeC {\cyrt }" "Ñ‚" :string)
-(merge-rule "\IeC {\cyrtshe }" "Ñ›" :string)
-(merge-rule "\IeC {\cyru }" "у" :string)
-(merge-rule "\IeC {\cyrushrt }" "Ñž" :string)
-(merge-rule "\IeC {\cyrv }" "в" :string)
-(merge-rule "\IeC {\cyrya }" "я" :string)
-(merge-rule "\IeC {\cyryi }" "Ñ—" :string)
-(merge-rule "\IeC {\cyryo }" "Ñ‘" :string)
-(merge-rule "\IeC {\cyryu }" "ÑŽ" :string)
-(merge-rule "\IeC {\cyrz }" "з" :string)
-(merge-rule "\IeC {\cyrzh }" "ж" :string)
diff --git a/docs/_build/latex/LICRlatin2utf8.xdy b/docs/_build/latex/LICRlatin2utf8.xdy
deleted file mode 100644
index 31c80f97c..000000000
--- a/docs/_build/latex/LICRlatin2utf8.xdy
+++ /dev/null
@@ -1,239 +0,0 @@
-;; style file for xindy
-;; filename: LICRlatin2utf8.xdy
-;; description: style file for xindy which maps back LaTeX Internal
-;;   Character Representation of letters (as arising in .idx index
-;;   file) to UTF-8 encoding for correct sorting by xindy.
-;; usage: for use with the pdflatex engine,
-;;        *not* for use with xelatex or lualatex.
-;;
-;; This is based upon xindy's distributed file tex/inputenc/utf8.xdy.
-;; The modifications include:
-;;
-;; - Updates for compatibility with current LaTeX macro encoding.
-;;
-;; - Systematic usage of the \IeC {...} mark-up, because mark-up in
-;;   tex/inputenc/utf8.xdy was using it on seemingly random basis, and
-;;   Sphinx coercing of xindy usability for both Latin and Cyrillic scripts
-;;   with pdflatex requires its systematic presence here.
-;;
-;; - Support for some extra letters: Ÿ, Ŋ, ŋ, Œ, œ, IJ, ij, ȷ and ẞ.
-;;
-;;   Indeed Sphinx needs to support for pdflatex engine all Unicode letters
-;;   available in TeX T1 font encoding.  The above letters are found in
-;;   that encoding but not in the Latin1, 2, 3 charsets which are those
-;;   covered by original tex/inputenc/utf8.xdy.
-;;
-;; - There is a problem that È· is not supported out-of-the box by LaTeX
-;;   with inputenc, one must add explicitely
-;;       \DeclareUnicodeCharacter{0237}{\j}
-;;   to preamble of LaTeX document.  However this character is not supported
-;;   by the TeX "times" font used by default by Sphinx for pdflatex engine.
-;;
-;;     **Update**: since LaTeX 2018/12/01, the \j as well as \SS, \k{} and
-;;                  \.{} need no extra user declaration anymore.
-;;
-;; - ẞ needs \DeclareUnicodeCharacter{1E9E}{\SS} (but ß needs no extra set-up).
-;;
-;; - U+02DB (Ë›) and U+02D9 (Ë™) are also not supported by inputenc
-;;   out of the box and require
-;;       \DeclareUnicodeCharacter{02DB}{\k{}}
-;;       \DeclareUnicodeCharacter{02D9}{\.{}}
-;;   to be added to preamble.
-;;
-;; - U+0127 ħ and U+0126 Ħ are absent from TeX T1+TS1 font encodings.
-;;
-;; - Characters ÅŠ and Å‹ are not supported by TeX font "times" used by
-;;   default by Sphinx for pdflatex engine but they are supported by
-;;   some TeX fonts, in particular by the default LaTeX font for T1
-;;   encoding.
-;;
-;; - " and ~ must be escaped as ~" and resp. ~~ in xindy merge rules.
-;;
-;; Contributed by the Sphinx team, July 2018.
-;;
-;; See sphinx.xdy for superior figures, as they are escaped by LaTeX writer.
-(merge-rule "\IeC {\textonesuperior }" "¹" :string)
-(merge-rule "\IeC {\texttwosuperior }" "²" :string)
-(merge-rule "\IeC {\textthreesuperior }" "³" :string)
-(merge-rule "\IeC {\'a}" "á" :string)
-(merge-rule "\IeC {\'A}" "Á" :string)
-(merge-rule "\IeC {\`a}" "à" :string)
-(merge-rule "\IeC {\`A}" "À" :string)
-(merge-rule "\IeC {\^a}" "â" :string)
-(merge-rule "\IeC {\^A}" "Â" :string)
-(merge-rule "\IeC {\~"a}" "ä" :string)
-(merge-rule "\IeC {\~"A}" "Ä" :string)
-(merge-rule "\IeC {\~~a}" "ã" :string)
-(merge-rule "\IeC {\~~A}" "Ã" :string)
-(merge-rule "\IeC {\c c}" "ç" :string)
-(merge-rule "\IeC {\c C}" "Ç" :string)
-(merge-rule "\IeC {\'c}" "ć" :string)
-(merge-rule "\IeC {\'C}" "Ć" :string)
-(merge-rule "\IeC {\^c}" "ĉ" :string)
-(merge-rule "\IeC {\^C}" "Ĉ" :string)
-(merge-rule "\IeC {\.c}" "Ä‹" :string)
-(merge-rule "\IeC {\.C}" "ÄŠ" :string)
-(merge-rule "\IeC {\c s}" "ÅŸ" :string)
-(merge-rule "\IeC {\c S}" "Åž" :string)
-(merge-rule "\IeC {\c t}" "Å£" :string)
-(merge-rule "\IeC {\c T}" "Å¢" :string)
-(merge-rule "\IeC {\-}" "­" :string); soft hyphen
-(merge-rule "\IeC {\textdiv }" "÷" :string)
-(merge-rule "\IeC {\'e}" "é" :string)
-(merge-rule "\IeC {\'E}" "É" :string)
-(merge-rule "\IeC {\`e}" "è" :string)
-(merge-rule "\IeC {\`E}" "È" :string)
-(merge-rule "\IeC {\^e}" "ê" :string)
-(merge-rule "\IeC {\^E}" "Ê" :string)
-(merge-rule "\IeC {\~"e}" "ë" :string)
-(merge-rule "\IeC {\~"E}" "Ë" :string)
-(merge-rule "\IeC {\^g}" "ĝ" :string)
-(merge-rule "\IeC {\^G}" "Ĝ" :string)
-(merge-rule "\IeC {\.g}" "Ä¡" :string)
-(merge-rule "\IeC {\.G}" "Ä " :string)
-(merge-rule "\IeC {\^h}" "Ä¥" :string)
-(merge-rule "\IeC {\^H}" "Ĥ" :string)
-(merge-rule "\IeC {\H o}" "Å‘" :string)
-(merge-rule "\IeC {\H O}" "Ő" :string)
-(merge-rule "\IeC {\textacutedbl }" "˝" :string)
-(merge-rule "\IeC {\H u}" "ű" :string)
-(merge-rule "\IeC {\H U}" "Å°" :string)
-(merge-rule "\IeC {\ae }" "æ" :string)
-(merge-rule "\IeC {\AE }" "Æ" :string)
-(merge-rule "\IeC {\textcopyright }" "©" :string)
-(merge-rule "\IeC {\c \ }" "¸" :string)
-(merge-rule "\IeC {\dh }" "ð" :string)
-(merge-rule "\IeC {\DH }" "Ð" :string)
-(merge-rule "\IeC {\dj }" "Ä‘" :string)
-(merge-rule "\IeC {\DJ }" "Đ" :string)
-(merge-rule "\IeC {\guillemotleft }" "«" :string)
-(merge-rule "\IeC {\guillemotright }" "»" :string)
-(merge-rule "\IeC {\'\i }" "í" :string)
-(merge-rule "\IeC {\`\i }" "ì" :string)
-(merge-rule "\IeC {\^\i }" "î" :string)
-(merge-rule "\IeC {\~"\i }" "ï" :string)
-(merge-rule "\IeC {\i }" "ı" :string)
-(merge-rule "\IeC {\^\j }" "ĵ" :string)
-(merge-rule "\IeC {\k {}}" "Ë›" :string)
-(merge-rule "\IeC {\l }" "Å‚" :string)
-(merge-rule "\IeC {\L }" "Ł" :string)
-(merge-rule "\IeC {\nobreakspace }" " " :string)
-(merge-rule "\IeC {\o }" "ø" :string)
-(merge-rule "\IeC {\O }" "Ø" :string)
-(merge-rule "\IeC {\textsterling }" "£" :string)
-(merge-rule "\IeC {\textparagraph }" "¶" :string)
-(merge-rule "\IeC {\ss }" "ß" :string)
-(merge-rule "\IeC {\textsection }" "§" :string)
-(merge-rule "\IeC {\textbrokenbar }" "¦" :string)
-(merge-rule "\IeC {\textcent }" "¢" :string)
-(merge-rule "\IeC {\textcurrency }" "¤" :string)
-(merge-rule "\IeC {\textdegree }" "°" :string)
-(merge-rule "\IeC {\textexclamdown }" "¡" :string)
-(merge-rule "\IeC {\texthbar }" "ħ" :string)
-(merge-rule "\IeC {\textHbar }" "Ħ" :string)
-(merge-rule "\IeC {\textonehalf }" "½" :string)
-(merge-rule "\IeC {\textonequarter }" "¼" :string)
-(merge-rule "\IeC {\textordfeminine }" "ª" :string)
-(merge-rule "\IeC {\textordmasculine }" "º" :string)
-(merge-rule "\IeC {\textperiodcentered }" "·" :string)
-(merge-rule "\IeC {\textquestiondown }" "¿" :string)
-(merge-rule "\IeC {\textregistered }" "®" :string)
-(merge-rule "\IeC {\textthreequarters }" "¾" :string)
-(merge-rule "\IeC {\textyen }" "Â¥" :string)
-(merge-rule "\IeC {\th }" "þ" :string)
-(merge-rule "\IeC {\TH }" "Þ" :string)
-(merge-rule "\IeC {\'I}" "Í" :string)
-(merge-rule "\IeC {\`I}" "Ì" :string)
-(merge-rule "\IeC {\^I}" "ÃŽ" :string)
-(merge-rule "\IeC {\~"I}" "Ï" :string)
-(merge-rule "\IeC {\.I}" "Ä°" :string)
-(merge-rule "\IeC {\^J}" "Ä´" :string)
-(merge-rule "\IeC {\k a}" "Ä…" :string)
-(merge-rule "\IeC {\k A}" "Ä„" :string)
-(merge-rule "\IeC {\k e}" "Ä™" :string)
-(merge-rule "\IeC {\k E}" "Ę" :string)
-(merge-rule "\IeC {\'l}" "ĺ" :string)
-(merge-rule "\IeC {\'L}" "Ĺ" :string)
-(merge-rule "\IeC {\textlnot }" "¬" :string)
-(merge-rule "\IeC {\textmu }" "µ" :string)
-(merge-rule "\IeC {\'n}" "Å„" :string)
-(merge-rule "\IeC {\'N}" "Ń" :string)
-(merge-rule "\IeC {\~~n}" "ñ" :string)
-(merge-rule "\IeC {\~~N}" "Ñ" :string)
-(merge-rule "\IeC {\'o}" "ó" :string)
-(merge-rule "\IeC {\'O}" "Ó" :string)
-(merge-rule "\IeC {\`o}" "ò" :string)
-(merge-rule "\IeC {\`O}" "Ã’" :string)
-(merge-rule "\IeC {\^o}" "ô" :string)
-(merge-rule "\IeC {\^O}" "Ô" :string)
-(merge-rule "\IeC {\~"o}" "ö" :string)
-(merge-rule "\IeC {\~"O}" "Ö" :string)
-(merge-rule "\IeC {\~~o}" "õ" :string)
-(merge-rule "\IeC {\~~O}" "Õ" :string)
-(merge-rule "\IeC {\textpm }" "±" :string)
-(merge-rule "\IeC {\r a}" "Ã¥" :string)
-(merge-rule "\IeC {\r A}" "Ã…" :string)
-(merge-rule "\IeC {\'r}" "Å•" :string)
-(merge-rule "\IeC {\'R}" "Å”" :string)
-(merge-rule "\IeC {\r u}" "ů" :string)
-(merge-rule "\IeC {\r U}" "Å®" :string)
-(merge-rule "\IeC {\'s}" "Å›" :string)
-(merge-rule "\IeC {\'S}" "Åš" :string)
-(merge-rule "\IeC {\^s}" "ŝ" :string)
-(merge-rule "\IeC {\^S}" "Ŝ" :string)
-(merge-rule "\IeC {\textasciidieresis }" "¨" :string)
-(merge-rule "\IeC {\textasciimacron }" "¯" :string)
-(merge-rule "\IeC {\.{}}" "Ë™" :string)
-(merge-rule "\IeC {\textasciiacute }" "´" :string)
-(merge-rule "\IeC {\texttimes }" "×" :string)
-(merge-rule "\IeC {\u a}" "ă" :string)
-(merge-rule "\IeC {\u A}" "Ä‚" :string)
-(merge-rule "\IeC {\u g}" "ÄŸ" :string)
-(merge-rule "\IeC {\u G}" "Äž" :string)
-(merge-rule "\IeC {\textasciibreve }" "˘" :string)
-(merge-rule "\IeC {\'u}" "ú" :string)
-(merge-rule "\IeC {\'U}" "Ú" :string)
-(merge-rule "\IeC {\`u}" "ù" :string)
-(merge-rule "\IeC {\`U}" "Ù" :string)
-(merge-rule "\IeC {\^u}" "û" :string)
-(merge-rule "\IeC {\^U}" "Û" :string)
-(merge-rule "\IeC {\~"u}" "ü" :string)
-(merge-rule "\IeC {\~"U}" "Ü" :string)
-(merge-rule "\IeC {\u u}" "Å­" :string)
-(merge-rule "\IeC {\u U}" "Ŭ" :string)
-(merge-rule "\IeC {\v c}" "č" :string)
-(merge-rule "\IeC {\v C}" "Č" :string)
-(merge-rule "\IeC {\v d}" "ď" :string)
-(merge-rule "\IeC {\v D}" "ÄŽ" :string)
-(merge-rule "\IeC {\v e}" "Ä›" :string)
-(merge-rule "\IeC {\v E}" "Äš" :string)
-(merge-rule "\IeC {\v l}" "ľ" :string)
-(merge-rule "\IeC {\v L}" "Ľ" :string)
-(merge-rule "\IeC {\v n}" "ň" :string)
-(merge-rule "\IeC {\v N}" "Ň" :string)
-(merge-rule "\IeC {\v r}" "Å™" :string)
-(merge-rule "\IeC {\v R}" "Ř" :string)
-(merge-rule "\IeC {\v s}" "Å¡" :string)
-(merge-rule "\IeC {\v S}" "Å " :string)
-(merge-rule "\IeC {\textasciicaron }" "ˇ" :string)
-(merge-rule "\IeC {\v t}" "Å¥" :string)
-(merge-rule "\IeC {\v T}" "Ť" :string)
-(merge-rule "\IeC {\v z}" "ž" :string)
-(merge-rule "\IeC {\v Z}" "Ž" :string)
-(merge-rule "\IeC {\'y}" "ý" :string)
-(merge-rule "\IeC {\'Y}" "Ý" :string)
-(merge-rule "\IeC {\~"y}" "ÿ" :string)
-(merge-rule "\IeC {\'z}" "ź" :string)
-(merge-rule "\IeC {\'Z}" "Ź" :string)
-(merge-rule "\IeC {\.z}" "ż" :string)
-(merge-rule "\IeC {\.Z}" "Å»" :string)
-;; letters not in Latin1, 2, 3 but available in TeX T1 font encoding
-(merge-rule "\IeC {\~"Y}" "Ÿ" :string)
-(merge-rule "\IeC {\NG }" "ÅŠ" :string)
-(merge-rule "\IeC {\ng }" "Å‹" :string)
-(merge-rule "\IeC {\OE }" "Å’" :string)
-(merge-rule "\IeC {\oe }" "Å“" :string)
-(merge-rule "\IeC {\IJ }" "IJ" :string)
-(merge-rule "\IeC {\ij }" "ij" :string)
-(merge-rule "\IeC {\j }" "È·" :string)
-(merge-rule "\IeC {\SS }" "ẞ" :string)
diff --git a/docs/_build/latex/LatinRules.xdy b/docs/_build/latex/LatinRules.xdy
deleted file mode 100644
index 99f14a2ee..000000000
--- a/docs/_build/latex/LatinRules.xdy
+++ /dev/null
@@ -1,607 +0,0 @@
-;; style file for xindy
-;; filename: LatinRules.xdy
-;;
-;; It is based upon xindy's files lang/general/utf8.xdy and
-;; lang/general/utf8-lang.xdy which implement
-;; "a general sorting order for Western European languages"
-;;
-;; The aim for Sphinx is to be able to index in a Cyrillic document
-;; also terms using the Latin alphabets, inclusive of letters
-;; with diacritics.  To this effect the xindy rules from lang/general
-;; got manually re-coded to avoid collisions with the encoding
-;; done by xindy for sorting words in Cyrillic languages, which was
-;; observed not to use bytes with octal encoding 0o266 or higher.
-;;
-;; So here we use only 0o266 or higher bytes.
-;; (Ŋ, ŋ, IJ, and ij are absent from
-;; lang/general/utf8.xdy and not included here)
-;; Contributed by the Sphinx team, 2018.
-
-(define-letter-group "A" :prefixes ("¶"))
-(define-letter-group "B" :after "A" :prefixes ("·"))
-(define-letter-group "C" :after "B" :prefixes ("¸"))
-(define-letter-group "D" :after "C" :prefixes ("¹"))
-(define-letter-group "E" :after "D" :prefixes ("º"))
-(define-letter-group "F" :after "E" :prefixes ("»"))
-(define-letter-group "G" :after "F" :prefixes ("¼"))
-(define-letter-group "H" :after "G" :prefixes ("½"))
-(define-letter-group "I" :after "H" :prefixes ("¾"))
-(define-letter-group "J" :after "I" :prefixes ("¿"))
-(define-letter-group "K" :after "J" :prefixes ("À"))
-(define-letter-group "L" :after "K" :prefixes ("Á"))
-(define-letter-group "M" :after "L" :prefixes ("Â"))
-(define-letter-group "N" :after "M" :prefixes ("Ã"))
-(define-letter-group "O" :after "N" :prefixes ("Ä"))
-(define-letter-group "P" :after "O" :prefixes ("È"))
-(define-letter-group "Q" :after "P" :prefixes ("Ê"))
-(define-letter-group "R" :after "Q" :prefixes ("Ë"))
-(define-letter-group "S" :after "R" :prefixes ("Ð"))
-(define-letter-group "T" :after "S" :prefixes ("Ú"))
-(define-letter-group "U" :after "T" :prefixes ("à"))
-(define-letter-group "V" :after "U" :prefixes ("å"))
-(define-letter-group "W" :after "V" :prefixes ("æ"))
-(define-letter-group "X" :after "W" :prefixes ("ë"))
-(define-letter-group "Y" :after "X" :prefixes ("í"))
-(define-letter-group "Z" :after "Y" :prefixes ("ð"))
-
-(define-rule-set "sphinx-xy-alphabetize"
-
-  :rules  (("À" "¶" :string)
-           ("Ä‚" "¶" :string)
-           ("â" "¶" :string)
-           ("Ä" "¶" :string)
-           ("à" "¶" :string)
-           ("Ã…" "¶" :string)
-           ("Ã" "¶" :string)
-           ("Á" "¶" :string)
-           ("á" "¶" :string)
-           ("ã" "¶" :string)
-           ("Â" "¶" :string)
-           ("ă" "¶" :string)
-           ("Ã¥" "¶" :string)
-           ("Ä…" "¶" :string)
-           ("ä" "¶" :string)
-           ("Ä„" "¶" :string)
-           ("æ" "¶º" :string)
-           ("Æ" "¶º" :string)
-           ("ć" "¸" :string)
-           ("ĉ" "¸" :string)
-           ("ç" "¸" :string)
-           ("ÄŒ" "¸" :string)
-           ("č" "¸" :string)
-           ("Ĉ" "¸" :string)
-           ("Ç" "¸" :string)
-           ("Ć" "¸" :string)
-           ("ď" "¹" :string)
-           ("Đ" "¹" :string)
-           ("ÄŽ" "¹" :string)
-           ("Ä‘" "¹" :string)
-           ("ê" "º" :string)
-           ("Ę" "º" :string)
-           ("Äš" "º" :string)
-           ("ë" "º" :string)
-           ("Ä›" "º" :string)
-           ("é" "º" :string)
-           ("È" "º" :string)
-           ("Ë" "º" :string)
-           ("É" "º" :string)
-           ("è" "º" :string)
-           ("Ê" "º" :string)
-           ("Ä™" "º" :string)
-           ("ĝ" "¼" :string)
-           ("ÄŸ" "¼" :string)
-           ("Äž" "¼" :string)
-           ("Äœ" "¼" :string)
-           ("Ä¥" "½" :string)
-           ("Ĥ" "½" :string)
-           ("Ï" "¾" :string)
-           ("Í" "¾" :string)
-           ("ï" "¾" :string)
-           ("ÃŽ" "¾" :string)
-           ("î" "¾" :string)
-           ("ı" "¾" :string)
-           ("Ä°" "¾" :string)
-           ("í" "¾" :string)
-           ("ÃŒ" "¾" :string)
-           ("ì" "¾" :string)
-           ("Ä´" "¿" :string)
-           ("ĵ" "¿" :string)
-           ("Å‚" "Á" :string)
-           ("Ł" "Á" :string)
-           ("ľ" "Á" :string)
-           ("Ľ" "Á" :string)
-           ("Å„" "Ã" :string)
-           ("Ń" "Ã" :string)
-           ("ñ" "Ã" :string)
-           ("ň" "Ã" :string)
-           ("Ñ" "Ã" :string)
-           ("Ň" "Ã" :string)
-           ("Õ" "Ä" :string)
-           ("Ő" "Ä" :string)
-           ("ó" "Ä" :string)
-           ("ö" "Ä" :string)
-           ("ô" "Ä" :string)
-           ("Å‘" "Ä" :string)
-           ("Ø" "Ä" :string)
-           ("Ö" "Ä" :string)
-           ("õ" "Ä" :string)
-           ("Ô" "Ä" :string)
-           ("ø" "Ä" :string)
-           ("Ó" "Ä" :string)
-           ("Ã’" "Ä" :string)
-           ("ò" "Ä" :string)
-           ("œ" "ĺ" :string)
-           ("Œ" "ĺ" :string)
-           ("Ř" "Ë" :string)
-           ("Å™" "Ë" :string)
-           ("Å”" "Ë" :string)
-           ("Å•" "Ë" :string)
-           ("ŝ" "Ð" :string)
-           ("Åš" "Ð" :string)
-           ("È™" "Ð" :string)
-           ("ÅŸ" "Ð" :string)
-           ("Åœ" "Ð" :string)
-           ("Å›" "Ð" :string)
-           ("Ș" "Ð" :string)
-           ("Å¡" "Ð" :string)
-           ("Åž" "Ð" :string)
-           ("Å " "Ð" :string)
-           ("ß" "ÐÐ" :string)
-           ("Èš" "Ú" :string)
-           ("Ť" "Ú" :string)
-           ("È›" "Ú" :string)
-           ("Å¥" "Ú" :string)
-           ("û" "à" :string)
-           ("Å­" "à" :string)
-           ("ů" "à" :string)
-           ("ű" "à" :string)
-           ("ù" "à" :string)
-           ("Ŭ" "à" :string)
-           ("Ù" "à" :string)
-           ("Å°" "à" :string)
-           ("Ãœ" "à" :string)
-           ("Å®" "à" :string)
-           ("ú" "à" :string)
-           ("Ú" "à" :string)
-           ("Û" "à" :string)
-           ("ü" "à" :string)
-           ("ÿ" "í" :string)
-           ("Ý" "í" :string)
-           ("Ÿ" "í" :string)
-           ("ý" "í" :string)
-           ("Å»" "ð" :string)
-           ("Ž" "ð" :string)
-           ("Ź" "ð" :string)
-           ("ž" "ð" :string)
-           ("ż" "ð" :string)
-           ("ź" "ð" :string)
-           ("a" "¶" :string)
-           ("A" "¶" :string)
-           ("b" "·" :string)
-           ("B" "·" :string)
-           ("c" "¸" :string)
-           ("C" "¸" :string)
-           ("d" "¹" :string)
-           ("D" "¹" :string)
-           ("e" "º" :string)
-           ("E" "º" :string)
-           ("F" "»" :string)
-           ("f" "»" :string)
-           ("G" "¼" :string)
-           ("g" "¼" :string)
-           ("H" "½" :string)
-           ("h" "½" :string)
-           ("i" "¾" :string)
-           ("I" "¾" :string)
-           ("J" "¿" :string)
-           ("j" "¿" :string)
-           ("K" "À" :string)
-           ("k" "À" :string)
-           ("L" "Á" :string)
-           ("l" "Á" :string)
-           ("M" "Â" :string)
-           ("m" "Â" :string)
-           ("n" "Ã" :string)
-           ("N" "Ã" :string)
-           ("O" "Ä" :string)
-           ("o" "Ä" :string)
-           ("p" "È" :string)
-           ("P" "È" :string)
-           ("Q" "Ê" :string)
-           ("q" "Ê" :string)
-           ("r" "Ë" :string)
-           ("R" "Ë" :string)
-           ("S" "Ð" :string)
-           ("s" "Ð" :string)
-           ("t" "Ú" :string)
-           ("T" "Ú" :string)
-           ("u" "à" :string)
-           ("U" "à" :string)
-           ("v" "å" :string)
-           ("V" "å" :string)
-           ("W" "æ" :string)
-           ("w" "æ" :string)
-           ("x" "ë" :string)
-           ("X" "ë" :string)
-           ("Y" "í" :string)
-           ("y" "í" :string)
-           ("z" "ð" :string)
-           ("Z" "ð" :string)
-           ))
-
-(define-rule-set "sphinx-xy-resolve-diacritics"
-
-  :rules  (("Ĥ" "£" :string)
-           ("ó" "£" :string)
-           ("ľ" "£" :string)
-           ("Ř" "£" :string)
-           ("ĝ" "£" :string)
-           ("ď" "£" :string)
-           ("Äš" "£" :string)
-           ("Ä¥" "£" :string)
-           ("ÄŒ" "£" :string)
-           ("Ä´" "£" :string)
-           ("Ä›" "£" :string)
-           ("ž" "£" :string)
-           ("ÄŽ" "£" :string)
-           ("Å™" "£" :string)
-           ("Ž" "£" :string)
-           ("ı" "£" :string)
-           ("Ť" "£" :string)
-           ("á" "£" :string)
-           ("č" "£" :string)
-           ("Á" "£" :string)
-           ("ň" "£" :string)
-           ("Å " "£" :string)
-           ("Ň" "£" :string)
-           ("ĵ" "£" :string)
-           ("Å¥" "£" :string)
-           ("Ó" "£" :string)
-           ("ý" "£" :string)
-           ("Äœ" "£" :string)
-           ("Ú" "£" :string)
-           ("Ľ" "£" :string)
-           ("Å¡" "£" :string)
-           ("Ý" "£" :string)
-           ("ú" "£" :string)
-           ("Åš" "¤" :string)
-           ("ć" "¤" :string)
-           ("Ł" "¤" :string)
-           ("Å‚" "¤" :string)
-           ("Å„" "¤" :string)
-           ("À" "¤" :string)
-           ("Ź" "¤" :string)
-           ("à" "¤" :string)
-           ("Ń" "¤" :string)
-           ("Đ" "¤" :string)
-           ("ÿ" "¤" :string)
-           ("Å›" "¤" :string)
-           ("Äž" "¤" :string)
-           ("ÄŸ" "¤" :string)
-           ("Ù" "¤" :string)
-           ("Ä°" "¤" :string)
-           ("Ä‘" "¤" :string)
-           ("ù" "¤" :string)
-           ("Èš" "¤" :string)
-           ("é" "¤" :string)
-           ("Å•" "¤" :string)
-           ("Ć" "¤" :string)
-           ("È›" "¤" :string)
-           ("ò" "¤" :string)
-           ("ź" "¤" :string)
-           ("Ã’" "¤" :string)
-           ("Ÿ" "¤" :string)
-           ("Å”" "¤" :string)
-           ("É" "¤" :string)
-           ("ĉ" "¥" :string)
-           ("ô" "¥" :string)
-           ("Í" "¥" :string)
-           ("ŝ" "¥" :string)
-           ("Å»" "¥" :string)
-           ("Ä‚" "¥" :string)
-           ("Åœ" "¥" :string)
-           ("ñ" "¥" :string)
-           ("Å­" "¥" :string)
-           ("í" "¥" :string)
-           ("È" "¥" :string)
-           ("Ô" "¥" :string)
-           ("Ŭ" "¥" :string)
-           ("ż" "¥" :string)
-           ("Ñ" "¥" :string)
-           ("è" "¥" :string)
-           ("Ĉ" "¥" :string)
-           ("ă" "¥" :string)
-           ("â" "¦" :string)
-           ("û" "¦" :string)
-           ("ê" "¦" :string)
-           ("Õ" "¦" :string)
-           ("õ" "¦" :string)
-           ("È™" "¦" :string)
-           ("ç" "¦" :string)
-           ("Â" "¦" :string)
-           ("Ê" "¦" :string)
-           ("Û" "¦" :string)
-           ("Ç" "¦" :string)
-           ("ì" "¦" :string)
-           ("ÃŒ" "¦" :string)
-           ("Ș" "¦" :string)
-           ("ö" "§" :string)
-           ("Ö" "§" :string)
-           ("ÅŸ" "§" :string)
-           ("ů" "§" :string)
-           ("ë" "§" :string)
-           ("ã" "§" :string)
-           ("î" "§" :string)
-           ("ÃŽ" "§" :string)
-           ("Ã" "§" :string)
-           ("Åž" "§" :string)
-           ("Å®" "§" :string)
-           ("Ë" "§" :string)
-           ("ï" "¨" :string)
-           ("Ő" "¨" :string)
-           ("Ï" "¨" :string)
-           ("Ę" "¨" :string)
-           ("Å‘" "¨" :string)
-           ("Ãœ" "¨" :string)
-           ("Ã…" "¨" :string)
-           ("ü" "¨" :string)
-           ("Ä™" "¨" :string)
-           ("Ã¥" "¨" :string)
-           ("Ä" "©" :string)
-           ("ű" "©" :string)
-           ("Ø" "©" :string)
-           ("ø" "©" :string)
-           ("Å°" "©" :string)
-           ("ä" "©" :string)
-           ("Ä„" "ª" :string)
-           ("Ä…" "ª" :string)
-           ("Å“" "ÿ" :string)
-           ("ß" "ÿ" :string)
-           ("Æ" "ÿ" :string)
-           ("Å’" "ÿ" :string)
-           ("æ" "ÿ" :string)
-           ("e" "¢" :string)
-           ("t" "¢" :string)
-           ("L" "¢" :string)
-           ("Y" "¢" :string)
-           ("J" "¢" :string)
-           ("a" "¢" :string)
-           ("p" "¢" :string)
-           ("u" "¢" :string)
-           ("j" "¢" :string)
-           ("b" "¢" :string)
-           ("G" "¢" :string)
-           ("U" "¢" :string)
-           ("F" "¢" :string)
-           ("H" "¢" :string)
-           ("i" "¢" :string)
-           ("z" "¢" :string)
-           ("c" "¢" :string)
-           ("l" "¢" :string)
-           ("A" "¢" :string)
-           ("Q" "¢" :string)
-           ("w" "¢" :string)
-           ("D" "¢" :string)
-           ("R" "¢" :string)
-           ("d" "¢" :string)
-           ("s" "¢" :string)
-           ("r" "¢" :string)
-           ("k" "¢" :string)
-           ("v" "¢" :string)
-           ("m" "¢" :string)
-           ("P" "¢" :string)
-           ("y" "¢" :string)
-           ("K" "¢" :string)
-           ("q" "¢" :string)
-           ("S" "¢" :string)
-           ("I" "¢" :string)
-           ("C" "¢" :string)
-           ("M" "¢" :string)
-           ("Z" "¢" :string)
-           ("T" "¢" :string)
-           ("W" "¢" :string)
-           ("B" "¢" :string)
-           ("h" "¢" :string)
-           ("x" "¢" :string)
-           ("X" "¢" :string)
-           ("f" "¢" :string)
-           ("E" "¢" :string)
-           ("V" "¢" :string)
-           ("N" "¢" :string)
-           ("O" "¢" :string)
-           ("o" "¢" :string)
-           ("g" "¢" :string)
-           ("n" "¢" :string)
-           ))
-
-(define-rule-set "sphinx-xy-resolve-case"
-
-  :rules  (("Ú" "8" :string)
-           ("Ÿ" "8" :string)
-           ("Ç" "8" :string)
-           ("Ĉ" "8" :string)
-           ("Å”" "8" :string)
-           ("Ľ" "8" :string)
-           ("Å®" "8" :string)
-           ("Ý" "8" :string)
-           ("É" "8" :string)
-           ("Ë" "8" :string)
-           ("Ș" "8" :string)
-           ("Ì" "8" :string)
-           ("Ê" "8" :string)
-           ("Ň" "8" :string)
-           ("Ä„" "8" :string)
-           ("Å " "8" :string)
-           ("Û" "8" :string)
-           ("Åž" "8" :string)
-           ("Ć" "8" :string)
-           ("Ã’" "8" :string)
-           ("Ĝ" "8" :string)
-           ("Ñ" "8" :string)
-           ("Ó" "8" :string)
-           ("ÃŽ" "8" :string)
-           ("Á" "8" :string)
-           ("Ã" "8" :string)
-           ("Èš" "8" :string)
-           ("Ã…" "8" :string)
-           ("Äž" "8" :string)
-           ("Ü" "8" :string)
-           ("È" "8" :string)
-           ("Ô" "8" :string)
-           ("Ä°" "8" :string)
-           ("Å°" "8" :string)
-           ("Ù" "8" :string)
-           ("Ŭ" "8" :string)
-           ("Â" "8" :string)
-           ("Ť" "8" :string)
-           ("Ń" "8" :string)
-           ("ÄŽ" "8" :string)
-           ("Ź" "8" :string)
-           ("Ž" "8" :string)
-           ("Đ" "8" :string)
-           ("Ŝ" "8" :string)
-           ("Č" "8" :string)
-           ("Ä´" "8" :string)
-           ("Ö" "8" :string)
-           ("Ø" "8" :string)
-           ("Å»" "8" :string)
-           ("Ł" "8" :string)
-           ("Ä‚" "8" :string)
-           ("Äš" "8" :string)
-           ("Ő" "8" :string)
-           ("Õ" "8" :string)
-           ("Ę" "8" :string)
-           ("Ï" "8" :string)
-           ("À" "8" :string)
-           ("Ĥ" "8" :string)
-           ("Ä" "8" :string)
-           ("Åš" "8" :string)
-           ("Ř" "8" :string)
-           ("Í" "8" :string)
-           ("Å’" "89" :string)
-           ("Æ" "89" :string)
-           ("ì" "9" :string)
-           ("è" "9" :string)
-           ("Ä…" "9" :string)
-           ("Å¡" "9" :string)
-           ("ú" "9" :string)
-           ("Ã¥" "9" :string)
-           ("ă" "9" :string)
-           ("Ä™" "9" :string)
-           ("ü" "9" :string)
-           ("ź" "9" :string)
-           ("ò" "9" :string)
-           ("Å¥" "9" :string)
-           ("È›" "9" :string)
-           ("ĵ" "9" :string)
-           ("Å•" "9" :string)
-           ("ż" "9" :string)
-           ("ä" "9" :string)
-           ("ý" "9" :string)
-           ("ù" "9" :string)
-           ("á" "9" :string)
-           ("é" "9" :string)
-           ("č" "9" :string)
-           ("ň" "9" :string)
-           ("Å›" "9" :string)
-           ("ø" "9" :string)
-           ("í" "9" :string)
-           ("Ä‘" "9" :string)
-           ("ı" "9" :string)
-           ("ÄŸ" "9" :string)
-           ("î" "9" :string)
-           ("ã" "9" :string)
-           ("à" "9" :string)
-           ("Å™" "9" :string)
-           ("Å‘" "9" :string)
-           ("ů" "9" :string)
-           ("È™" "9" :string)
-           ("ÿ" "9" :string)
-           ("ë" "9" :string)
-           ("Å­" "9" :string)
-           ("ç" "9" :string)
-           ("ű" "9" :string)
-           ("ñ" "9" :string)
-           ("õ" "9" :string)
-           ("Ä›" "9" :string)
-           ("ÅŸ" "9" :string)
-           ("ž" "9" :string)
-           ("ĝ" "9" :string)
-           ("ŝ" "9" :string)
-           ("Å„" "9" :string)
-           ("û" "9" :string)
-           ("Å‚" "9" :string)
-           ("ď" "9" :string)
-           ("Ä¥" "9" :string)
-           ("ê" "9" :string)
-           ("ô" "9" :string)
-           ("ĉ" "9" :string)
-           ("â" "9" :string)
-           ("ć" "9" :string)
-           ("ï" "9" :string)
-           ("ö" "9" :string)
-           ("ľ" "9" :string)
-           ("ó" "9" :string)
-           ("æ" "99" :string)
-           ("ß" "99" :string)
-           ("Å“" "99" :string)
-           ("N" "8" :string)
-           ("V" "8" :string)
-           ("O" "8" :string)
-           ("X" "8" :string)
-           ("E" "8" :string)
-           ("P" "8" :string)
-           ("K" "8" :string)
-           ("T" "8" :string)
-           ("Z" "8" :string)
-           ("M" "8" :string)
-           ("C" "8" :string)
-           ("I" "8" :string)
-           ("S" "8" :string)
-           ("B" "8" :string)
-           ("W" "8" :string)
-           ("D" "8" :string)
-           ("R" "8" :string)
-           ("H" "8" :string)
-           ("F" "8" :string)
-           ("Q" "8" :string)
-           ("A" "8" :string)
-           ("G" "8" :string)
-           ("U" "8" :string)
-           ("J" "8" :string)
-           ("Y" "8" :string)
-           ("L" "8" :string)
-           ("o" "9" :string)
-           ("n" "9" :string)
-           ("g" "9" :string)
-           ("x" "9" :string)
-           ("f" "9" :string)
-           ("y" "9" :string)
-           ("q" "9" :string)
-           ("h" "9" :string)
-           ("w" "9" :string)
-           ("s" "9" :string)
-           ("d" "9" :string)
-           ("v" "9" :string)
-           ("k" "9" :string)
-           ("r" "9" :string)
-           ("m" "9" :string)
-           ("z" "9" :string)
-           ("c" "9" :string)
-           ("i" "9" :string)
-           ("l" "9" :string)
-           ("b" "9" :string)
-           ("j" "9" :string)
-           ("a" "9" :string)
-           ("p" "9" :string)
-           ("u" "9" :string)
-           ("t" "9" :string)
-           ("e" "9" :string)
-           ))
-
-(use-rule-set :run 0
-	      :rule-set ("sphinx-xy-alphabetize"))
-(use-rule-set :run 1
-	      :rule-set ("sphinx-xy-resolve-diacritics"))
-(use-rule-set :run 2
-	      :rule-set ("sphinx-xy-resolve-case"))
diff --git a/docs/_build/latex/Makefile b/docs/_build/latex/Makefile
deleted file mode 100644
index c561680ad..000000000
--- a/docs/_build/latex/Makefile
+++ /dev/null
@@ -1,68 +0,0 @@
-# Makefile for Sphinx LaTeX output
-
-ALLDOCS = $(basename $(wildcard *.tex))
-ALLPDF = $(addsuffix .pdf,$(ALLDOCS))
-ALLDVI = $(addsuffix .dvi,$(ALLDOCS))
-ALLXDV =
-ALLPS  = $(addsuffix .ps,$(ALLDOCS))
-ALLIMGS = $(wildcard *.png *.gif *.jpg *.jpeg)
-
-# Prefix for archive names
-ARCHIVEPREFIX =
-# Additional LaTeX options (passed via variables in latexmkrc/latexmkjarc file)
-export LATEXOPTS =
-# Additional latexmk options
-LATEXMKOPTS =
-# format: pdf or dvi (used only by archive targets)
-FMT = pdf
-
-LATEX = latexmk -dvi
-PDFLATEX = latexmk -pdf -dvi- -ps-
-
-
-%.png %.gif %.jpg %.jpeg: FORCE_MAKE
-	extractbb '$@'
-
-%.dvi: %.tex FORCE_MAKE
-	$(LATEX) $(LATEXMKOPTS) '$<'
-
-%.ps: %.dvi
-	dvips '$<'
-
-%.pdf: %.tex FORCE_MAKE
-	$(PDFLATEX) $(LATEXMKOPTS) '$<'
-
-all: $(ALLPDF)
-
-all-dvi: $(ALLDVI)
-
-all-ps: $(ALLPS)
-
-all-pdf: $(ALLPDF)
-
-zip: all-$(FMT)
-	mkdir $(ARCHIVEPREFIX)docs-$(FMT)
-	cp $(ALLPDF) $(ARCHIVEPREFIX)docs-$(FMT)
-	zip -q -r -9 $(ARCHIVEPREFIX)docs-$(FMT).zip $(ARCHIVEPREFIX)docs-$(FMT)
-	rm -r $(ARCHIVEPREFIX)docs-$(FMT)
-
-tar: all-$(FMT)
-	mkdir $(ARCHIVEPREFIX)docs-$(FMT)
-	cp $(ALLPDF) $(ARCHIVEPREFIX)docs-$(FMT)
-	tar cf $(ARCHIVEPREFIX)docs-$(FMT).tar $(ARCHIVEPREFIX)docs-$(FMT)
-	rm -r $(ARCHIVEPREFIX)docs-$(FMT)
-
-gz: tar
-	gzip -9 < $(ARCHIVEPREFIX)docs-$(FMT).tar > $(ARCHIVEPREFIX)docs-$(FMT).tar.gz
-
-bz2: tar
-	bzip2 -9 -k $(ARCHIVEPREFIX)docs-$(FMT).tar
-
-xz: tar
-	xz -9 -k $(ARCHIVEPREFIX)docs-$(FMT).tar
-
-clean:
-	rm -f *.log *.ind *.aux *.toc *.syn *.idx *.out *.ilg *.pla *.ps *.tar *.tar.gz *.tar.bz2 *.tar.xz $(ALLPDF) $(ALLDVI) $(ALLXDV) *.fls *.fdb_latexmk
-
-.PHONY: all all-pdf all-dvi all-ps clean zip tar gz bz2 xz
-.PHONY: FORCE_MAKE
\ No newline at end of file
diff --git a/docs/_build/latex/footnotehyper-sphinx.sty b/docs/_build/latex/footnotehyper-sphinx.sty
deleted file mode 100644
index b6692cfb8..000000000
--- a/docs/_build/latex/footnotehyper-sphinx.sty
+++ /dev/null
@@ -1,269 +0,0 @@
-\NeedsTeXFormat{LaTeX2e}
-\ProvidesPackage{footnotehyper-sphinx}%
- [2017/10/27 v1.7 hyperref aware footnote.sty for sphinx (JFB)]
-%%
-%% Package: footnotehyper-sphinx
-%% Version: based on footnotehyper.sty 2017/03/07 v1.0
-%% as available at https://www.ctan.org/pkg/footnotehyper
-%% License: the one applying to Sphinx
-%%
-%% Refer to the PDF documentation  at https://www.ctan.org/pkg/footnotehyper for
-%% the code comments.
-%%
-%% Differences:
-%% 1. a partial tabulary compatibility layer added (enough for Sphinx mark-up),
-%% 2. use of \spx@opt@BeforeFootnote from sphinx.sty,
-%% 3. use of \sphinxunactivateextrasandspace from sphinx.sty,
-%% 4. macro definition \sphinxfootnotemark,
-%% 5. macro definition \sphinxlongtablepatch
-%% 6. replaced an \undefined by \@undefined
-\DeclareOption*{\PackageWarning{footnotehyper-sphinx}{Option `\CurrentOption' is unknown}}%
-\ProcessOptions\relax
-\newbox\FNH@notes
-\newdimen\FNH@width
-\let\FNH@colwidth\columnwidth
-\newif\ifFNH@savingnotes
-\AtBeginDocument {%
-    \let\FNH@latex@footnote    \footnote
-    \let\FNH@latex@footnotetext\footnotetext
-    \let\FNH@H@@footnotetext   \@footnotetext
-    \newenvironment{savenotes}
-        {\FNH@savenotes\ignorespaces}{\FNH@spewnotes\ignorespacesafterend}%
-    \let\spewnotes      \FNH@spewnotes
-    \let\footnote       \FNH@footnote
-    \let\footnotetext   \FNH@footnotetext
-    \let\endfootnote    \FNH@endfntext
-    \let\endfootnotetext\FNH@endfntext
-    \@ifpackageloaded{hyperref}
-     {\ifHy@hyperfootnotes
-         \let\FNH@H@@footnotetext\H@@footnotetext
-      \else
-         \let\FNH@hyper@fntext\FNH@nohyp@fntext
-      \fi}%
-     {\let\FNH@hyper@fntext\FNH@nohyp@fntext}%
-}%
-\def\FNH@hyper@fntext{\FNH@fntext\FNH@hyper@fntext@i}%
-\def\FNH@nohyp@fntext{\FNH@fntext\FNH@nohyp@fntext@i}%
-\def\FNH@fntext #1{%
-  \ifx\ifmeasuring@\@undefined
-    \expandafter\@secondoftwo\else\expandafter\@firstofone\fi
-% these two lines modified for Sphinx (tabulary compatibility):
-    {\ifmeasuring@\expandafter\@gobbletwo\else\expandafter\@firstofone\fi}%
-    {\ifx\equation$\expandafter\@gobbletwo\fi #1}%$
-}%
-\long\def\FNH@hyper@fntext@i#1{%
-  \global\setbox\FNH@notes\vbox
-  {\unvbox\FNH@notes
-   \FNH@startnote
-   \@makefntext
-    {\rule\z@\footnotesep\ignorespaces
-     \ifHy@nesting\expandafter\ltx@firstoftwo
-             \else\expandafter\ltx@secondoftwo
-     \fi
-     {\expandafter\hyper@@anchor\expandafter{\Hy@footnote@currentHref}{#1}}%
-     {\Hy@raisedlink
-       {\expandafter\hyper@@anchor\expandafter{\Hy@footnote@currentHref}%
-       {\relax}}%
-      \let\@currentHref\Hy@footnote@currentHref
-      \let\@currentlabelname\@empty
-      #1}%
-     \@finalstrut\strutbox
-    }%
-   \FNH@endnote
-  }%
-}%
-\long\def\FNH@nohyp@fntext@i#1{%
-  \global\setbox\FNH@notes\vbox
-  {\unvbox\FNH@notes
-   \FNH@startnote
-   \@makefntext{\rule\z@\footnotesep\ignorespaces#1\@finalstrut\strutbox}%
-   \FNH@endnote
-  }%
-}%
-\def\FNH@startnote{%
-  \hsize\FNH@colwidth
-  \interlinepenalty\interfootnotelinepenalty
-  \reset@font\footnotesize
-  \floatingpenalty\@MM
-  \@parboxrestore
-  \protected@edef\@currentlabel{\csname p@\@mpfn\endcsname\@thefnmark}%
-  \color@begingroup
-}%
-\def\FNH@endnote{\color@endgroup}%
-\def\FNH@savenotes{%
-  \begingroup
-  \ifFNH@savingnotes\else
-    \FNH@savingnotestrue
-    \let\@footnotetext    \FNH@hyper@fntext
-    \let\@mpfootnotetext  \FNH@hyper@fntext
-    \let\H@@mpfootnotetext\FNH@nohyp@fntext
-    \FNH@width\columnwidth
-    \let\FNH@colwidth\FNH@width
-    \global\setbox\FNH@notes\box\voidb@x
-    \let\FNH@thempfn\thempfn
-    \let\FNH@mpfn\@mpfn
-    \ifx\@minipagerestore\relax\let\@minipagerestore\@empty\fi
-    \expandafter\def\expandafter\@minipagerestore\expandafter{%
-      \@minipagerestore
-      \let\thempfn\FNH@thempfn
-      \let\@mpfn\FNH@mpfn
-    }%
-  \fi
-}%
-\def\FNH@spewnotes {%
-  \endgroup
-  \ifFNH@savingnotes\else
-   \ifvoid\FNH@notes\else
-    \begingroup
-     \let\@makefntext\@empty
-     \let\@finalstrut\@gobble
-     \let\rule\@gobbletwo
-     \FNH@H@@footnotetext{\unvbox\FNH@notes}%
-    \endgroup
-   \fi
-  \fi
-}%
-\def\FNH@footnote@envname    {footnote}%
-\def\FNH@footnotetext@envname{footnotetext}%
-\def\FNH@footnote{%
-% this line added for Sphinx:
-    \spx@opt@BeforeFootnote
-    \ifx\@currenvir\FNH@footnote@envname
-        \expandafter\FNH@footnoteenv
-    \else
-        \expandafter\FNH@latex@footnote
-    \fi
-}%
-\def\FNH@footnoteenv{%
-% this line added for Sphinx (footnotes in parsed literal blocks):
-    \catcode13=5 \sphinxunactivateextrasandspace
-    \@ifnextchar[%
-      \FNH@footnoteenv@i %]
-      {\stepcounter\@mpfn
-       \protected@xdef\@thefnmark{\thempfn}%
-       \@footnotemark
-       \def\FNH@endfntext@fntext{\@footnotetext}%
-       \FNH@startfntext}%
-}%
-\def\FNH@footnoteenv@i[#1]{%
-    \begingroup
-     \csname c@\@mpfn\endcsname #1\relax
-     \unrestored@protected@xdef\@thefnmark{\thempfn}%
-    \endgroup
-    \@footnotemark
-    \def\FNH@endfntext@fntext{\@footnotetext}%
-    \FNH@startfntext
-}%
-\def\FNH@footnotetext{%
-    \ifx\@currenvir\FNH@footnotetext@envname
-        \expandafter\FNH@footnotetextenv
-    \else
-        \expandafter\FNH@latex@footnotetext
-    \fi
-}%
-\def\FNH@footnotetextenv{%
-    \@ifnextchar[%
-      \FNH@footnotetextenv@i %]
-      {\protected@xdef\@thefnmark{\thempfn}%
-       \def\FNH@endfntext@fntext{\@footnotetext}%
-       \FNH@startfntext}%
-}%
-\def\FNH@footnotetextenv@i[#1]{%
-    \begingroup
-     \csname c@\@mpfn\endcsname #1\relax
-     \unrestored@protected@xdef\@thefnmark{\thempfn}%
-    \endgroup
-    \ifFNH@savingnotes
-      \def\FNH@endfntext@fntext{\FNH@nohyp@fntext}%
-    \else
-      \def\FNH@endfntext@fntext{\FNH@H@@footnotetext}%
-    \fi
-    \FNH@startfntext
-}%
-\def\FNH@startfntext{%
-  \setbox\z@\vbox\bgroup
-    \FNH@startnote
-    \FNH@prefntext
-    \rule\z@\footnotesep\ignorespaces
-}%
-\def\FNH@endfntext {%
-    \@finalstrut\strutbox
-    \FNH@postfntext
-    \FNH@endnote
-    \egroup
-  \begingroup
-    \let\@makefntext\@empty\let\@finalstrut\@gobble\let\rule\@gobbletwo
-    \FNH@endfntext@fntext {\unvbox\z@}%
-  \endgroup
-}%
-\AtBeginDocument{%
-   \let\FNH@@makefntext\@makefntext
-   \ifx\@makefntextFB\@undefined
-   \expandafter\@gobble\else\expandafter\@firstofone\fi
-   {\ifFBFrenchFootnotes \let\FNH@@makefntext\@makefntextFB \else
-                         \let\FNH@@makefntext\@makefntextORI\fi}%
-   \expandafter\FNH@check@a\FNH@@makefntext{1.2!3?4,}%
-               \FNH@@@1.2!3?4,\FNH@@@\relax
-}%
-\long\def\FNH@check@a #11.2!3?4,#2\FNH@@@#3{%
-    \ifx\relax#3\expandafter\@firstoftwo\else\expandafter\@secondoftwo\fi
-    \FNH@bad@makefntext@alert
-    {\def\FNH@prefntext{#1}\def\FNH@postfntext{#2}\FNH@check@b}%
-}%
-\def\FNH@check@b #1\relax{%
-    \expandafter\expandafter\expandafter\FNH@check@c
-    \expandafter\meaning\expandafter\FNH@prefntext
-    \meaning\FNH@postfntext1.2!3?4,\FNH@check@c\relax
-}%
-\def\FNH@check@c #11.2!3?4,#2#3\relax{%
-    \ifx\FNH@check@c#2\expandafter\@gobble\fi\FNH@bad@makefntext@alert
-}%
-% slight reformulation for Sphinx
-\def\FNH@bad@makefntext@alert{%
-  \PackageWarningNoLine{footnotehyper-sphinx}%
-    {Footnotes will be sub-optimal, sorry. This is due to the document class or^^J
-  some package modifying macro \string\@makefntext.^^J
-  You can try to report this incompatibility at^^J
-  https://github.com/sphinx-doc/sphinx with this info:}%
-    \typeout{\meaning\@makefntext}%
-    \let\FNH@prefntext\@empty\let\FNH@postfntext\@empty
-}%
-% this macro from original footnote.sty is not used anymore by Sphinx
-% but for simplicity sake let's just keep it as is
-\def\makesavenoteenv{\@ifnextchar[\FNH@msne@ii\FNH@msne@i}%]
-\def\FNH@msne@i #1{%
-  \expandafter\let\csname FNH$#1\expandafter\endcsname %$
-                  \csname #1\endcsname
-  \expandafter\let\csname endFNH$#1\expandafter\endcsname %$
-                  \csname end#1\endcsname
-  \FNH@msne@ii[#1]{FNH$#1}%$
-}%
-\def\FNH@msne@ii[#1]#2{%
-  \expandafter\edef\csname#1\endcsname{%
-    \noexpand\savenotes
-    \expandafter\noexpand\csname#2\endcsname
-  }%
-  \expandafter\edef\csname end#1\endcsname{%
-    \expandafter\noexpand\csname end#2\endcsname
-    \noexpand\expandafter
-    \noexpand\spewnotes
-    \noexpand\if@endpe\noexpand\@endpetrue\noexpand\fi
-  }%
-}%
-% end of footnotehyper 2017/02/16 v0.99
-% some extras for Sphinx :
-% \sphinxfootnotemark: usable in section titles and silently removed from TOCs.
-\def\sphinxfootnotemark [#1]%
-   {\ifx\thepage\relax\else\protect\spx@opt@BeforeFootnote
-                             \protect\footnotemark[#1]\fi}%
-\AtBeginDocument{%
-   % let hyperref less complain
-   \pdfstringdefDisableCommands{\def\sphinxfootnotemark [#1]{}}%
-   % to obtain hyperlinked footnotes in longtable environment we must replace
-   % hyperref's patch of longtable's patch of \@footnotetext by our own
-   \let\LT@p@ftntext\FNH@hyper@fntext
-   % this *requires* longtable to be used always wrapped in savenotes environment
-}%
-\endinput
-%%
-%% End of file `footnotehyper-sphinx.sty'.
diff --git a/docs/_build/latex/latexmkjarc b/docs/_build/latex/latexmkjarc
deleted file mode 100644
index 5b315d6c9..000000000
--- a/docs/_build/latex/latexmkjarc
+++ /dev/null
@@ -1,22 +0,0 @@
-$latex = 'platex ' . $ENV{'LATEXOPTS'} . ' -kanji=utf8 %O %S';
-$dvipdf = 'dvipdfmx %O -o %D %S';
-$makeindex = 'internal mendex %S %B %D';
-sub mendex {
-  my ($source, $basename, $destination) = @_;
-  my $dictfile = $basename . ".dic";
-  unlink($destination);
-  system("mendex", "-U", "-f", "-d", $dictfile, "-s", "python.ist", $source);
-  if ($? > 0) {
-    print("mendex exited with error code $? (ignored)\n");
-  }
-  if (!-e $destination) {
-    # create an empty .ind file if nothing
-    open(FH, ">" . $destination);
-    close(FH);
-  }
-  return 0;
-}
-add_cus_dep( "glo", "gls", 0, "makeglo" );
-sub makeglo {
- return system( "mendex -J -f -s gglo.ist -o '$_[0].gls' '$_[0].glo'" );
-}
diff --git a/docs/_build/latex/latexmkrc b/docs/_build/latex/latexmkrc
deleted file mode 100644
index bba17fa6b..000000000
--- a/docs/_build/latex/latexmkrc
+++ /dev/null
@@ -1,9 +0,0 @@
-$latex = 'latex ' . $ENV{'LATEXOPTS'} . ' %O %S';
-$pdflatex = 'pdflatex ' . $ENV{'LATEXOPTS'} . ' %O %S';
-$lualatex = 'lualatex ' . $ENV{'LATEXOPTS'} . ' %O %S';
-$xelatex = 'xelatex --no-pdf ' . $ENV{'LATEXOPTS'} . ' %O %S';
-$makeindex = 'makeindex -s python.ist %O -o %D %S';
-add_cus_dep( "glo", "gls", 0, "makeglo" );
-sub makeglo {
- return system( "makeindex -s gglo.ist -o '$_[0].gls' '$_[0].glo'" );
-}
\ No newline at end of file
diff --git a/docs/_build/latex/make.bat b/docs/_build/latex/make.bat
deleted file mode 100644
index 94bda2139..000000000
--- a/docs/_build/latex/make.bat
+++ /dev/null
@@ -1,31 +0,0 @@
-@ECHO OFF
-
-REM Command file for Sphinx documentation
-
-pushd %~dp0
-
-set PDFLATEX=latexmk -pdf -dvi- -ps-
-
-set "LATEXOPTS= "
-
-if "%1" == "" goto all-pdf
-
-if "%1" == "all-pdf" (
-	:all-pdf
-	for %%i in (*.tex) do (
-		%PDFLATEX% %LATEXMKOPTS% %%i
-	)
-	goto end
-)
-
-if "%1" == "all-pdf-ja" (
-	goto all-pdf
-)
-
-if "%1" == "clean" (
-	del /q /s *.dvi *.log *.ind *.aux *.toc *.syn *.idx *.out *.ilg *.pla *.ps *.tar *.tar.gz *.tar.bz2 *.tar.xz *.fls *.fdb_latexmk
-	goto end
-)
-
-:end
-popd
\ No newline at end of file
diff --git a/docs/_build/latex/python.ist b/docs/_build/latex/python.ist
deleted file mode 100644
index 70536a668..000000000
--- a/docs/_build/latex/python.ist
+++ /dev/null
@@ -1,16 +0,0 @@
-line_max 100
-headings_flag 1
-heading_prefix "  \\bigletter "
-
-preamble "\\begin{sphinxtheindex}
-\\let\\bigletter\\sphinxstyleindexlettergroup
-\\let\\spxpagem \\sphinxstyleindexpagemain
-\\let\\spxentry \\sphinxstyleindexentry
-\\let\\spxextra \\sphinxstyleindexextra
-
-"
-
-postamble "\n\n\\end{sphinxtheindex}\n"
-
-symhead_positive "{\\sphinxsymbolsname}"
-numhead_positive "{\\sphinxnumbersname}"
diff --git a/docs/_build/latex/schoolapps.fdb_latexmk b/docs/_build/latex/schoolapps.fdb_latexmk
deleted file mode 100644
index 8b73d0b5a..000000000
--- a/docs/_build/latex/schoolapps.fdb_latexmk
+++ /dev/null
@@ -1,168 +0,0 @@
-# Fdb version 3
-["makeindex schoolapps.idx"] 1574279676 "schoolapps.idx" "schoolapps.ind" "schoolapps" 1574279676
-  "schoolapps.idx" 1574279676 943 ce00a781dbb689e1d97cd31db904284a "pdflatex"
-  (generated)
-  "schoolapps.ind"
-  "schoolapps.ilg"
-["pdflatex"] 1574279676 "schoolapps.tex" "schoolapps.pdf" "schoolapps" 1574279676
-  "/etc/texmf/web2c/texmf.cnf" 1572086972 475 c0e671620eb5563b2130f56340a5fde8 ""
-  "/usr/share/texlive/texmf-dist/fonts/enc/dvips/base/8r.enc" 1165713224 4850 80dc9bab7f31fb78a000ccfed0e27cab ""
-  "/usr/share/texlive/texmf-dist/fonts/map/fontname/texfonts.map" 1511824771 3332 103109f5612ad95229751940c61aada0 ""
-  "/usr/share/texlive/texmf-dist/fonts/tfm/adobe/courier/pcrb8r.tfm" 1136768653 1292 3059476c50a24578715759f22652f3d0 ""
-  "/usr/share/texlive/texmf-dist/fonts/tfm/adobe/courier/pcrb8t.tfm" 1136768653 1384 87406e4336af44af883a035f17f319d9 ""
-  "/usr/share/texlive/texmf-dist/fonts/tfm/adobe/courier/pcrr8r.tfm" 1136768653 1292 bd42be2f344128bff6d35d98474adfe3 ""
-  "/usr/share/texlive/texmf-dist/fonts/tfm/adobe/courier/pcrr8t.tfm" 1136768653 1384 4632f5e54900a7dadbb83f555bc61e56 ""
-  "/usr/share/texlive/texmf-dist/fonts/tfm/adobe/helvetic/phvb8r.tfm" 1136768653 4484 b828043cbd581d289d955903c1339981 ""
-  "/usr/share/texlive/texmf-dist/fonts/tfm/adobe/helvetic/phvb8t.tfm" 1136768653 6628 34c39492c0adc454c1c199922bba8363 ""
-  "/usr/share/texlive/texmf-dist/fonts/tfm/adobe/helvetic/phvbo8r.tfm" 1136768653 4736 423eba67d4e9420ec9df4a8def143b08 ""
-  "/usr/share/texlive/texmf-dist/fonts/tfm/adobe/helvetic/phvbo8t.tfm" 1136768653 6880 fe6c7967f27585f6fa9876f3af14edd2 ""
-  "/usr/share/texlive/texmf-dist/fonts/tfm/adobe/helvetic/phvr8r.tfm" 1136768653 4712 9ef4d7d106579d4b136e1529e1a4533c ""
-  "/usr/share/texlive/texmf-dist/fonts/tfm/adobe/helvetic/phvr8t.tfm" 1136768653 7040 b2bd27e2bfe6f6948cbc3239cae7444f ""
-  "/usr/share/texlive/texmf-dist/fonts/tfm/adobe/times/ptmb8r.tfm" 1136768653 4524 6bce29db5bc272ba5f332261583fee9c ""
-  "/usr/share/texlive/texmf-dist/fonts/tfm/adobe/times/ptmb8t.tfm" 1136768653 6880 f19b8995b61c334d78fc734065f6b4d4 ""
-  "/usr/share/texlive/texmf-dist/fonts/tfm/adobe/times/ptmr8c.tfm" 1136768653 1352 fa28a7e6d323c65ce7d13d5342ff6be2 ""
-  "/usr/share/texlive/texmf-dist/fonts/tfm/adobe/times/ptmr8r.tfm" 1136768653 4408 25b74d011a4c66b7f212c0cc3c90061b ""
-  "/usr/share/texlive/texmf-dist/fonts/tfm/adobe/times/ptmr8t.tfm" 1136768653 6672 e3ab9e37e925f3045c9005e6d1473d56 ""
-  "/usr/share/texlive/texmf-dist/fonts/tfm/adobe/times/ptmri8r.tfm" 1136768653 4640 532ca3305aad10cc01d769f3f91f1029 ""
-  "/usr/share/texlive/texmf-dist/fonts/tfm/adobe/times/ptmri8t.tfm" 1136768653 6944 94c55ad86e6ea2826f78ba2240d50df9 ""
-  "/usr/share/texlive/texmf-dist/fonts/tfm/jknappen/ec/ecrm1000.tfm" 1136768653 3584 adb004a0c8e7c46ee66cad73671f37b4 ""
-  "/usr/share/texlive/texmf-dist/fonts/tfm/public/amsfonts/cmextra/cmex7.tfm" 1246382020 1004 54797486969f23fa377b128694d548df ""
-  "/usr/share/texlive/texmf-dist/fonts/tfm/public/amsfonts/symbols/msam10.tfm" 1246382020 916 f87d7c45f9c908e672703b83b72241a3 ""
-  "/usr/share/texlive/texmf-dist/fonts/tfm/public/amsfonts/symbols/msam5.tfm" 1246382020 924 9904cf1d39e9767e7a3622f2a125a565 ""
-  "/usr/share/texlive/texmf-dist/fonts/tfm/public/amsfonts/symbols/msam7.tfm" 1246382020 928 2dc8d444221b7a635bb58038579b861a ""
-  "/usr/share/texlive/texmf-dist/fonts/tfm/public/amsfonts/symbols/msbm10.tfm" 1246382020 908 2921f8a10601f252058503cc6570e581 ""
-  "/usr/share/texlive/texmf-dist/fonts/tfm/public/amsfonts/symbols/msbm5.tfm" 1246382020 940 75ac932a52f80982a9f8ea75d03a34cf ""
-  "/usr/share/texlive/texmf-dist/fonts/tfm/public/amsfonts/symbols/msbm7.tfm" 1246382020 940 228d6584342e91276bf566bcf9716b83 ""
-  "/usr/share/texlive/texmf-dist/fonts/tfm/public/cm/cmex10.tfm" 1136768653 992 662f679a0b3d2d53c1b94050fdaa3f50 ""
-  "/usr/share/texlive/texmf-dist/fonts/tfm/public/cm/cmmi12.tfm" 1136768653 1524 4414a8315f39513458b80dfc63bff03a ""
-  "/usr/share/texlive/texmf-dist/fonts/tfm/public/cm/cmr12.tfm" 1136768653 1288 655e228510b4c2a1abe905c368440826 ""
-  "/usr/share/texlive/texmf-dist/fonts/tfm/public/cm/cmr17.tfm" 1136768653 1292 296a67155bdbfc32aa9c636f21e91433 ""
-  "/usr/share/texlive/texmf-dist/fonts/tfm/public/cm/cmsy10.tfm" 1136768653 1124 6c73e740cf17375f03eec0ee63599741 ""
-  "/usr/share/texlive/texmf-dist/fonts/type1/public/amsfonts/cm/cmsy10.pfb" 1248133631 32569 5e5ddc8df908dea60932f3c484a54c0d ""
-  "/usr/share/texlive/texmf-dist/fonts/type1/urw/courier/ucrb8a.pfb" 1136849748 50493 4ed1f7e9eba8f1f3e1ec25195460190d ""
-  "/usr/share/texlive/texmf-dist/fonts/type1/urw/courier/ucrr8a.pfb" 1136849748 45758 19968a0990191524e34e1994d4a31cb6 ""
-  "/usr/share/texlive/texmf-dist/fonts/type1/urw/helvetic/uhvb8a.pfb" 1136849748 35941 f27169cc74234d5bd5e4cca5abafaabb ""
-  "/usr/share/texlive/texmf-dist/fonts/type1/urw/helvetic/uhvbo8a.pfb" 1136849748 39013 b244066151b1e3e718f9b8e88a5ff23b ""
-  "/usr/share/texlive/texmf-dist/fonts/type1/urw/helvetic/uhvr8a.pfb" 1136849748 44648 23115b2a545ebfe2c526c3ca99db8b95 ""
-  "/usr/share/texlive/texmf-dist/fonts/type1/urw/times/utmb8a.pfb" 1136849748 44729 811d6c62865936705a31c797a1d5dada ""
-  "/usr/share/texlive/texmf-dist/fonts/type1/urw/times/utmr8a.pfb" 1136849748 46026 6dab18b61c907687b520c72847215a68 ""
-  "/usr/share/texlive/texmf-dist/fonts/type1/urw/times/utmri8a.pfb" 1136849748 45458 a3faba884469519614ca56ba5f6b1de1 ""
-  "/usr/share/texlive/texmf-dist/fonts/vf/adobe/courier/pcrb8t.vf" 1136768653 2184 5d20c8b00cd914e50251116c274e2d0b ""
-  "/usr/share/texlive/texmf-dist/fonts/vf/adobe/courier/pcrr8t.vf" 1136768653 2184 8475af1b9cfa983db5f46f5ed4b8f9f7 ""
-  "/usr/share/texlive/texmf-dist/fonts/vf/adobe/helvetic/phvb8t.vf" 1136768653 2340 0efed6a948c3c37d870e4e7ddb85c7c3 ""
-  "/usr/share/texlive/texmf-dist/fonts/vf/adobe/helvetic/phvbo8t.vf" 1136768653 2344 88834f8322177295b0266ecc4b0754c3 ""
-  "/usr/share/texlive/texmf-dist/fonts/vf/adobe/helvetic/phvr8t.vf" 1136768653 2344 44ff28c9ef2fc97180cd884f900fee71 ""
-  "/usr/share/texlive/texmf-dist/fonts/vf/adobe/times/ptmb8t.vf" 1136768653 2340 df9c920cc5688ebbf16a93f45ce7bdd3 ""
-  "/usr/share/texlive/texmf-dist/fonts/vf/adobe/times/ptmr8c.vf" 1136768653 3556 8a9a6dcbcd146ef985683f677f4758a6 ""
-  "/usr/share/texlive/texmf-dist/fonts/vf/adobe/times/ptmr8t.vf" 1136768653 2348 91706c542228501c410c266421fbe30c ""
-  "/usr/share/texlive/texmf-dist/fonts/vf/adobe/times/ptmri8t.vf" 1136768653 2328 6cd7df782b09b29cfc4d93e55b6b9a59 ""
-  "/usr/share/texlive/texmf-dist/tex/context/base/mkii/supp-pdf.mkii" 1461363279 71627 94eb9990bed73c364d7f53f960cc8c5b ""
-  "/usr/share/texlive/texmf-dist/tex/generic/babel-german/ngerman.ldf" 1544571511 2164 da22692bce498dcc4f70209c7185a346 ""
-  "/usr/share/texlive/texmf-dist/tex/generic/babel-german/ngermanb.ldf" 1544571511 7584 40e9a51a28a966f337267407ea4ab873 ""
-  "/usr/share/texlive/texmf-dist/tex/generic/babel/babel.def" 1559597743 78957 8ccc8f076dc1f8731a32705ec45dbe16 ""
-  "/usr/share/texlive/texmf-dist/tex/generic/babel/babel.sty" 1559597743 18663 65edfad510bf35b984c9a04cea039b73 ""
-  "/usr/share/texlive/texmf-dist/tex/generic/babel/switch.def" 1559597743 14454 aa00ca21bfc3aea36987a00dd6acf23f ""
-  "/usr/share/texlive/texmf-dist/tex/generic/babel/txtbabel.def" 1559597743 5178 5b21c28f495420030a8aa1a19d21f35f ""
-  "/usr/share/texlive/texmf-dist/tex/generic/ifxetex/ifxetex.sty" 1284331290 1458 43ab4710dc82f3edeabecd0d099626b2 ""
-  "/usr/share/texlive/texmf-dist/tex/generic/oberdiek/etexcmds.sty" 1463608860 7612 729a8cc22a1ee0029997c7f74717ae05 ""
-  "/usr/share/texlive/texmf-dist/tex/generic/oberdiek/gettitlestring.sty" 1463608860 8237 3b62ef1f7e2c23a328c814b3893bc11f ""
-  "/usr/share/texlive/texmf-dist/tex/generic/oberdiek/hobsub-generic.sty" 1536701967 185392 b99a6d53180e04300c35e18725f31231 ""
-  "/usr/share/texlive/texmf-dist/tex/generic/oberdiek/hobsub-hyperref.sty" 1465595255 70864 bcd5b216757bd619ae692a151d90085d ""
-  "/usr/share/texlive/texmf-dist/tex/generic/oberdiek/ifluatex.sty" 1463608860 7324 2310d1247db0114eb4726807c8837a0e ""
-  "/usr/share/texlive/texmf-dist/tex/generic/oberdiek/ifpdf.sty" 1536443070 1300 96620a7d94bc0ceb261d968770ce8315 ""
-  "/usr/share/texlive/texmf-dist/tex/generic/oberdiek/ifvtex.sty" 1463608860 6797 90b7f83b0ad46826bc16058b1e3d48df ""
-  "/usr/share/texlive/texmf-dist/tex/generic/oberdiek/infwarerr.sty" 1463608860 8253 473e0e41f9adadb1977e8631b8f72ea6 ""
-  "/usr/share/texlive/texmf-dist/tex/generic/oberdiek/kvsetkeys.sty" 1463608860 14040 ac8866aac45982ac84021584b0abb252 ""
-  "/usr/share/texlive/texmf-dist/tex/generic/oberdiek/ltxcmds.sty" 1463608860 18425 5b3c0c59d76fac78978b5558e83c1f36 ""
-  "/usr/share/texlive/texmf-dist/tex/latex/amsfonts/amsfonts.sty" 1359763108 5949 3f3fd50a8cc94c3d4cbf4fc66cd3df1c ""
-  "/usr/share/texlive/texmf-dist/tex/latex/amsfonts/amssymb.sty" 1359763108 13829 94730e64147574077f8ecfea9bb69af4 ""
-  "/usr/share/texlive/texmf-dist/tex/latex/amsfonts/umsa.fd" 1359763108 961 6518c6525a34feb5e8250ffa91731cff ""
-  "/usr/share/texlive/texmf-dist/tex/latex/amsfonts/umsb.fd" 1359763108 961 d02606146ba5601b5645f987c92e6193 ""
-  "/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsbsy.sty" 1523134290 2211 ca7ce284ab93c8eecdc6029dc5ccbd73 ""
-  "/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsgen.sty" 1523134290 4161 7f6eb9092061a11f87d08ed13515b48d ""
-  "/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsmath.sty" 1544567569 85093 77cfa18ddbae4d9b74ade33d843686d3 ""
-  "/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsopn.sty" 1523134290 4116 32e6abd27229755a83a8b7f18e583890 ""
-  "/usr/share/texlive/texmf-dist/tex/latex/amsmath/amstext.sty" 1523134290 2432 8ff93b1137020e8f21930562a874ae66 ""
-  "/usr/share/texlive/texmf-dist/tex/latex/base/alltt.sty" 1523050425 3142 41d54e810bb4bed45b915ab99f1df119 ""
-  "/usr/share/texlive/texmf-dist/tex/latex/base/fontenc.sty" 1544567569 4573 e9e01f5b11821a77b916dad378cb86b8 ""
-  "/usr/share/texlive/texmf-dist/tex/latex/base/inputenc.sty" 1544567569 5052 b64c57f4a38aae0d2745f8298fa50814 ""
-  "/usr/share/texlive/texmf-dist/tex/latex/base/makeidx.sty" 1523050425 1942 125bdb0eb122d38c47905721b0682b1e ""
-  "/usr/share/texlive/texmf-dist/tex/latex/base/report.cls" 1544567569 22992 ac205d2578ad3f18cf73b50579632d1c ""
-  "/usr/share/texlive/texmf-dist/tex/latex/base/size10.clo" 1544567569 8294 6d6e23d5169c0d89d173f6c7e08a005a ""
-  "/usr/share/texlive/texmf-dist/tex/latex/base/t1enc.def" 1544567569 10689 ce0f2353f9a1f42b29f591f3fe8e040a ""
-  "/usr/share/texlive/texmf-dist/tex/latex/base/textcomp.sty" 1544567569 16156 a293f9cfd4f8552bb5d1028389f53e72 ""
-  "/usr/share/texlive/texmf-dist/tex/latex/base/ts1cmr.fd" 1523050425 2433 cdefd2509a12ba58001f2024f63aae9a ""
-  "/usr/share/texlive/texmf-dist/tex/latex/base/ts1enc.def" 1523050425 7769 97b639552068544f7c98d557abb19f41 ""
-  "/usr/share/texlive/texmf-dist/tex/latex/base/ts1enc.dfu" 1544567569 4973 923be56c54607ca99f7cc085a8c7e52b ""
-  "/usr/share/texlive/texmf-dist/tex/latex/capt-of/capt-of.sty" 1264379041 1311 063f8536a047a2d9cb1803321f793f37 ""
-  "/usr/share/texlive/texmf-dist/tex/latex/cmap/cmap.sty" 1215522782 2883 427a7f7cb58418a0394dbd85c80668f6 ""
-  "/usr/share/texlive/texmf-dist/tex/latex/cmap/ot1.cmap" 1177721415 1207 4e0d96772f0d338847cbfb4eca683c81 ""
-  "/usr/share/texlive/texmf-dist/tex/latex/cmap/t1.cmap" 1215522782 1938 beaa4a8467aa0074076e0e19f2992e29 ""
-  "/usr/share/texlive/texmf-dist/tex/latex/fancyhdr/fancyhdr.sty" 1548974385 11128 a53805799bebfed6358fc1658a18e41f ""
-  "/usr/share/texlive/texmf-dist/tex/latex/fancyvrb/fancyvrb.sty" 1547588382 42733 79eb4d8b9f10bca9c5d3796630226536 ""
-  "/usr/share/texlive/texmf-dist/tex/latex/float/float.sty" 1137110151 6749 16d2656a1984957e674b149555f1ea1d ""
-  "/usr/share/texlive/texmf-dist/tex/latex/fncychap/fncychap.sty" 1292029257 19488 fdd52eb173b3197d748e1ec25acb042f ""
-  "/usr/share/texlive/texmf-dist/tex/latex/framed/framed.sty" 1338588508 22449 7ec15c16d0d66790f28e90343c5434a3 ""
-  "/usr/share/texlive/texmf-dist/tex/latex/geometry/geometry.sty" 1525727744 41645 0653033a985e06c69a2a9cea9a95e31a ""
-  "/usr/share/texlive/texmf-dist/tex/latex/graphics-cfg/color.cfg" 1459978653 1213 620bba36b25224fa9b7e1ccb4ecb76fd ""
-  "/usr/share/texlive/texmf-dist/tex/latex/graphics-cfg/graphics.cfg" 1465944070 1224 978390e9c2234eab29404bc21b268d1e ""
-  "/usr/share/texlive/texmf-dist/tex/latex/graphics-def/pdftex.def" 1515537368 17334 520b9b85ad8a2a48eda3f643e27a5179 ""
-  "/usr/share/texlive/texmf-dist/tex/latex/graphics/graphics.sty" 1523134385 15272 5a97061616e0c8b2aa79c6615ff769f4 ""
-  "/usr/share/texlive/texmf-dist/tex/latex/graphics/graphicx.sty" 1523134385 9063 d0a305975932762117cd1f06a582f896 ""
-  "/usr/share/texlive/texmf-dist/tex/latex/graphics/keyval.sty" 1523134385 2591 6404d0c7d28505fb38ce0d86c2e28ae7 ""
-  "/usr/share/texlive/texmf-dist/tex/latex/graphics/trig.sty" 1523134385 3977 cb9221976ed8a183afad65b59aa8629a ""
-  "/usr/share/texlive/texmf-dist/tex/latex/hyperref/hpdftex.def" 1543704539 51744 477aad43ad6a7ba8c462d20c3e0808e0 ""
-  "/usr/share/texlive/texmf-dist/tex/latex/hyperref/hyperref.sty" 1543704539 236074 d994150943d35d6af0d586a60cc78dd1 ""
-  "/usr/share/texlive/texmf-dist/tex/latex/hyperref/nameref.sty" 1465687530 12949 81e4e808884a8f0e276b69410e234656 ""
-  "/usr/share/texlive/texmf-dist/tex/latex/hyperref/pd1enc.def" 1543704539 14098 b4e1ecab4699a0341b8e1349e4c53fb1 ""
-  "/usr/share/texlive/texmf-dist/tex/latex/hyperref/puenc.def" 1543704539 122411 537c1e113664b098b6572dbc27a726af ""
-  "/usr/share/texlive/texmf-dist/tex/latex/latexconfig/epstopdf-sys.cfg" 1279039959 678 4792914a8f45be57bb98413425e4c7af ""
-  "/usr/share/texlive/texmf-dist/tex/latex/latexconfig/hyperref.cfg" 1254097189 235 6031e5765137be07eed51a510b2b8fb7 ""
-  "/usr/share/texlive/texmf-dist/tex/latex/mmap/oml.cmap" 1215649417 1866 c1c12138091b4a8edd4a24a940e6f792 ""
-  "/usr/share/texlive/texmf-dist/tex/latex/mmap/oms.cmap" 1215649417 2370 3b1f71b14b974f07cef532db09ae9ee0 ""
-  "/usr/share/texlive/texmf-dist/tex/latex/mmap/omx.cmap" 1215649417 3001 252c8ca42b06a22cb1a11c0e47790c6e ""
-  "/usr/share/texlive/texmf-dist/tex/latex/needspace/needspace.sty" 1364856750 852 0e34dbb72efc69fa07602405ad95585e ""
-  "/usr/share/texlive/texmf-dist/tex/latex/oberdiek/auxhook.sty" 1463608860 3834 4363110eb0ef1eb2b71c8fcbcdb6c357 ""
-  "/usr/share/texlive/texmf-dist/tex/latex/oberdiek/epstopdf-base.sty" 1463608860 12095 5337833c991d80788a43d3ce26bd1c46 ""
-  "/usr/share/texlive/texmf-dist/tex/latex/oberdiek/grfext.sty" 1463608860 7075 2fe3d848bba95f139de11ded085e74aa ""
-  "/usr/share/texlive/texmf-dist/tex/latex/oberdiek/hypcap.sty" 1463608860 3720 63669daeb0b67d5fbec899824e2f1491 ""
-  "/usr/share/texlive/texmf-dist/tex/latex/oberdiek/kvoptions.sty" 1463608860 22417 1d9df1eb66848aa31b18a593099cf45c ""
-  "/usr/share/texlive/texmf-dist/tex/latex/oberdiek/rerunfilecheck.sty" 1463608860 9581 023642318cef9f4677efe364de1e2a27 ""
-  "/usr/share/texlive/texmf-dist/tex/latex/parskip/parskip-2001-04-09.sty" 1536789184 2757 ea00cb4f4e9abc702916f74d3812ef67 ""
-  "/usr/share/texlive/texmf-dist/tex/latex/parskip/parskip.sty" 1547677674 4152 3f6e512e6999979e82f39978a3e61b9e ""
-  "/usr/share/texlive/texmf-dist/tex/latex/psnfss/t1pcr.fd" 1137110629 798 d5895e9edc628f2be019beb2c0ec66df ""
-  "/usr/share/texlive/texmf-dist/tex/latex/psnfss/t1phv.fd" 1137110629 1488 9a55ac1cde6b4798a7f56844bb75a553 ""
-  "/usr/share/texlive/texmf-dist/tex/latex/psnfss/t1ptm.fd" 1137110629 774 61d7da1e9f9e74989b196d147e623736 ""
-  "/usr/share/texlive/texmf-dist/tex/latex/psnfss/times.sty" 1156702453 857 6c716f26c5eadfb81029fcd6ce2d45e6 ""
-  "/usr/share/texlive/texmf-dist/tex/latex/psnfss/ts1ptm.fd" 1137110629 619 96f56dc5d1ef1fe1121f1cfeec70ee0c ""
-  "/usr/share/texlive/texmf-dist/tex/latex/tabulary/tabulary.sty" 1403566480 13791 8c83287d79183c3bf58fd70871e8a70b ""
-  "/usr/share/texlive/texmf-dist/tex/latex/titlesec/titlesec.sty" 1458858524 37387 afa86533e532701faf233f3f592c61e0 ""
-  "/usr/share/texlive/texmf-dist/tex/latex/tools/array.sty" 1546812253 12527 31ab547f6520657998ecf91709f950ac ""
-  "/usr/share/texlive/texmf-dist/tex/latex/tools/longtable.sty" 1546812253 12131 6791c5e94fb3ca8579d185a449d8b41e ""
-  "/usr/share/texlive/texmf-dist/tex/latex/upquote/upquote.sty" 1334873510 1048 517e01cde97c1c0baf72e69d43aa5a2e ""
-  "/usr/share/texlive/texmf-dist/tex/latex/url/url.sty" 1388531844 12796 8edb7d69a20b857904dd0ea757c14ec9 ""
-  "/usr/share/texlive/texmf-dist/tex/latex/varwidth/varwidth.sty" 1238697683 10894 d359a13923460b2a73d4312d613554c8 ""
-  "/usr/share/texlive/texmf-dist/tex/latex/wrapfig/wrapfig.sty" 1137111090 26220 3701aebf80ccdef248c0c20dd062fea9 ""
-  "/usr/share/texlive/texmf-dist/tex/latex/xcolor/xcolor.sty" 1463002160 55589 34128738f682d033422ca125f82e5d62 ""
-  "/usr/share/texlive/texmf-dist/web2c/texmf.cnf" 1562720991 35073 2a40cfca74fcd5e2568b569ccaadf3f1 ""
-  "/usr/share/texmf/web2c/texmf.cnf" 1562720991 35073 2a40cfca74fcd5e2568b569ccaadf3f1 ""
-  "/var/lib/texmf/fonts/map/pdftex/updmap/pdftex.map" 1572088836 4245024 d80b425fa1287171319d45098df528f3 ""
-  "/var/lib/texmf/web2c/pdftex/pdflatex.fmt" 1572088840 1803583 0fb7f7763639f6a9c25cca9834e7f746 ""
-  "footnotehyper-sphinx.sty" 1574192067 8888 1bbd7bdeae8c8bed1d10d551bddb1cc9 ""
-  "schoolapps.aux" 1574279676 6297 462f75ab8cbbae3684d4e7c042e4a258 "pdflatex"
-  "schoolapps.ind" 1574279676 949 08eac3e1f3c530e247b03cf0597cceac "makeindex schoolapps.idx"
-  "schoolapps.out" 1574279676 2980 dcf420e60188add7f0a687d2ac827676 "pdflatex"
-  "schoolapps.tex" 1574279675 18563 4fe70d821e74301799aadf3e97303ecd ""
-  "schoolapps.toc" 1574279676 1817 3d0d007006ad4feef8f49fe8e260f20d "pdflatex"
-  "sphinx.sty" 1574192067 77684 8fb97306ac83d50d8517c97072345a1d ""
-  "sphinxhighlight.sty" 1574279675 8137 38a433148fcb7611515a989ff1750dd5 ""
-  "sphinxmanual.cls" 1574192067 3764 e7c0a8da02dc45450256dd4cfdafb426 ""
-  "sphinxmessages.sty" 1574279675 760 4706011a169af1e5cfc468a2bab5b82d ""
-  "sphinxmulticell.sty" 1574192067 14618 0defbdc8536ad2e67f1eac6a1431bc55 ""
-  (generated)
-  "schoolapps.out"
-  "schoolapps.aux"
-  "schoolapps.log"
-  "schoolapps.toc"
-  "schoolapps.idx"
-  "schoolapps.pdf"
diff --git a/docs/_build/latex/schoolapps.fls b/docs/_build/latex/schoolapps.fls
deleted file mode 100644
index 4e5ecd6fa..000000000
--- a/docs/_build/latex/schoolapps.fls
+++ /dev/null
@@ -1,293 +0,0 @@
-PWD /home/wethjo/dev/school-apps/docs/_build/latex
-INPUT /etc/texmf/web2c/texmf.cnf
-INPUT /usr/share/texmf/web2c/texmf.cnf
-INPUT /usr/share/texlive/texmf-dist/web2c/texmf.cnf
-INPUT /var/lib/texmf/web2c/pdftex/pdflatex.fmt
-INPUT schoolapps.tex
-OUTPUT schoolapps.log
-INPUT sphinxmanual.cls
-INPUT sphinxmanual.cls
-INPUT /usr/share/texlive/texmf-dist/tex/latex/base/report.cls
-INPUT /usr/share/texlive/texmf-dist/tex/latex/base/report.cls
-INPUT /usr/share/texlive/texmf-dist/tex/latex/base/size10.clo
-INPUT /usr/share/texlive/texmf-dist/tex/latex/base/size10.clo
-INPUT /usr/share/texlive/texmf-dist/tex/latex/base/inputenc.sty
-INPUT /usr/share/texlive/texmf-dist/tex/latex/base/inputenc.sty
-INPUT /usr/share/texlive/texmf-dist/tex/latex/cmap/cmap.sty
-INPUT /usr/share/texlive/texmf-dist/tex/latex/cmap/cmap.sty
-INPUT /usr/share/texlive/texmf-dist/tex/latex/base/fontenc.sty
-INPUT /usr/share/texlive/texmf-dist/tex/latex/base/fontenc.sty
-INPUT /usr/share/texlive/texmf-dist/tex/latex/base/t1enc.def
-INPUT /usr/share/texlive/texmf-dist/tex/latex/base/t1enc.def
-INPUT /usr/share/texlive/texmf-dist/fonts/map/fontname/texfonts.map
-INPUT /usr/share/texlive/texmf-dist/fonts/tfm/jknappen/ec/ecrm1000.tfm
-INPUT /usr/share/texlive/texmf-dist/tex/latex/cmap/t1.cmap
-OUTPUT schoolapps.pdf
-INPUT /usr/share/texlive/texmf-dist/tex/latex/cmap/t1.cmap
-INPUT /usr/share/texlive/texmf-dist/tex/latex/amsmath/amsmath.sty
-INPUT /usr/share/texlive/texmf-dist/tex/latex/amsmath/amsmath.sty
-INPUT /usr/share/texlive/texmf-dist/tex/latex/amsmath/amstext.sty
-INPUT /usr/share/texlive/texmf-dist/tex/latex/amsmath/amstext.sty
-INPUT /usr/share/texlive/texmf-dist/tex/latex/amsmath/amsgen.sty
-INPUT /usr/share/texlive/texmf-dist/tex/latex/amsmath/amsgen.sty
-INPUT /usr/share/texlive/texmf-dist/tex/latex/amsmath/amsbsy.sty
-INPUT /usr/share/texlive/texmf-dist/tex/latex/amsmath/amsbsy.sty
-INPUT /usr/share/texlive/texmf-dist/tex/latex/amsmath/amsopn.sty
-INPUT /usr/share/texlive/texmf-dist/tex/latex/amsmath/amsopn.sty
-INPUT /usr/share/texlive/texmf-dist/tex/latex/amsfonts/amssymb.sty
-INPUT /usr/share/texlive/texmf-dist/tex/latex/amsfonts/amssymb.sty
-INPUT /usr/share/texlive/texmf-dist/tex/latex/amsfonts/amsfonts.sty
-INPUT /usr/share/texlive/texmf-dist/tex/latex/amsfonts/amsfonts.sty
-INPUT /usr/share/texlive/texmf-dist/tex/generic/babel/babel.sty
-INPUT /usr/share/texlive/texmf-dist/tex/generic/babel/babel.sty
-INPUT /usr/share/texlive/texmf-dist/tex/generic/babel/switch.def
-INPUT /usr/share/texlive/texmf-dist/tex/generic/babel-german/ngerman.ldf
-INPUT /usr/share/texlive/texmf-dist/tex/generic/babel-german/ngerman.ldf
-INPUT /usr/share/texlive/texmf-dist/tex/generic/babel-german/ngerman.ldf
-INPUT /usr/share/texlive/texmf-dist/tex/generic/babel-german/ngermanb.ldf
-INPUT /usr/share/texlive/texmf-dist/tex/generic/babel/babel.def
-INPUT /usr/share/texlive/texmf-dist/tex/generic/babel/txtbabel.def
-INPUT /usr/share/texlive/texmf-dist/tex/latex/psnfss/times.sty
-INPUT /usr/share/texlive/texmf-dist/tex/latex/psnfss/times.sty
-INPUT /usr/share/texlive/texmf-dist/tex/latex/fncychap/fncychap.sty
-INPUT /usr/share/texlive/texmf-dist/tex/latex/fncychap/fncychap.sty
-INPUT sphinx.sty
-INPUT sphinx.sty
-INPUT /usr/share/texlive/texmf-dist/tex/generic/oberdiek/ltxcmds.sty
-INPUT /usr/share/texlive/texmf-dist/tex/generic/oberdiek/ltxcmds.sty
-INPUT /usr/share/texlive/texmf-dist/tex/latex/graphics/graphicx.sty
-INPUT /usr/share/texlive/texmf-dist/tex/latex/graphics/graphicx.sty
-INPUT /usr/share/texlive/texmf-dist/tex/latex/graphics/keyval.sty
-INPUT /usr/share/texlive/texmf-dist/tex/latex/graphics/keyval.sty
-INPUT /usr/share/texlive/texmf-dist/tex/latex/graphics/graphics.sty
-INPUT /usr/share/texlive/texmf-dist/tex/latex/graphics/graphics.sty
-INPUT /usr/share/texlive/texmf-dist/tex/latex/graphics/trig.sty
-INPUT /usr/share/texlive/texmf-dist/tex/latex/graphics/trig.sty
-INPUT /usr/share/texlive/texmf-dist/tex/latex/graphics-cfg/graphics.cfg
-INPUT /usr/share/texlive/texmf-dist/tex/latex/graphics-cfg/graphics.cfg
-INPUT /usr/share/texlive/texmf-dist/tex/latex/graphics-def/pdftex.def
-INPUT /usr/share/texlive/texmf-dist/tex/latex/graphics-def/pdftex.def
-INPUT /usr/share/texlive/texmf-dist/tex/latex/fancyhdr/fancyhdr.sty
-INPUT /usr/share/texlive/texmf-dist/tex/latex/fancyhdr/fancyhdr.sty
-INPUT /usr/share/texlive/texmf-dist/tex/latex/base/textcomp.sty
-INPUT /usr/share/texlive/texmf-dist/tex/latex/base/textcomp.sty
-INPUT /usr/share/texlive/texmf-dist/tex/latex/base/ts1enc.def
-INPUT /usr/share/texlive/texmf-dist/tex/latex/base/ts1enc.def
-INPUT /usr/share/texlive/texmf-dist/tex/latex/base/ts1enc.dfu
-INPUT /usr/share/texlive/texmf-dist/tex/latex/base/ts1enc.dfu
-INPUT /usr/share/texlive/texmf-dist/tex/latex/titlesec/titlesec.sty
-INPUT /usr/share/texlive/texmf-dist/tex/latex/titlesec/titlesec.sty
-INPUT /usr/share/texlive/texmf-dist/tex/latex/tabulary/tabulary.sty
-INPUT /usr/share/texlive/texmf-dist/tex/latex/tabulary/tabulary.sty
-INPUT /usr/share/texlive/texmf-dist/tex/latex/tools/array.sty
-INPUT /usr/share/texlive/texmf-dist/tex/latex/tools/array.sty
-INPUT /usr/share/texlive/texmf-dist/tex/latex/tools/longtable.sty
-INPUT /usr/share/texlive/texmf-dist/tex/latex/tools/longtable.sty
-INPUT /usr/share/texlive/texmf-dist/tex/latex/varwidth/varwidth.sty
-INPUT /usr/share/texlive/texmf-dist/tex/latex/varwidth/varwidth.sty
-INPUT sphinxmulticell.sty
-INPUT sphinxmulticell.sty
-INPUT /usr/share/texlive/texmf-dist/tex/latex/base/makeidx.sty
-INPUT /usr/share/texlive/texmf-dist/tex/latex/base/makeidx.sty
-INPUT /usr/share/texlive/texmf-dist/tex/latex/framed/framed.sty
-INPUT /usr/share/texlive/texmf-dist/tex/latex/framed/framed.sty
-INPUT /usr/share/texlive/texmf-dist/tex/latex/xcolor/xcolor.sty
-INPUT /usr/share/texlive/texmf-dist/tex/latex/xcolor/xcolor.sty
-INPUT /usr/share/texlive/texmf-dist/tex/latex/xcolor/xcolor.sty
-INPUT /usr/share/texlive/texmf-dist/tex/latex/graphics-cfg/color.cfg
-INPUT /usr/share/texlive/texmf-dist/tex/latex/graphics-cfg/color.cfg
-INPUT /usr/share/texlive/texmf-dist/tex/latex/fancyvrb/fancyvrb.sty
-INPUT /usr/share/texlive/texmf-dist/tex/latex/fancyvrb/fancyvrb.sty
-INPUT footnotehyper-sphinx.sty
-INPUT footnotehyper-sphinx.sty
-INPUT /usr/share/texlive/texmf-dist/tex/latex/float/float.sty
-INPUT /usr/share/texlive/texmf-dist/tex/latex/float/float.sty
-INPUT /usr/share/texlive/texmf-dist/tex/latex/wrapfig/wrapfig.sty
-INPUT /usr/share/texlive/texmf-dist/tex/latex/wrapfig/wrapfig.sty
-INPUT /usr/share/texlive/texmf-dist/tex/latex/parskip/parskip-2001-04-09.sty
-INPUT /usr/share/texlive/texmf-dist/tex/latex/parskip/parskip.sty
-INPUT /usr/share/texlive/texmf-dist/tex/latex/parskip/parskip.sty
-INPUT /usr/share/texlive/texmf-dist/tex/latex/parskip/parskip-2001-04-09.sty
-INPUT /usr/share/texlive/texmf-dist/tex/latex/base/alltt.sty
-INPUT /usr/share/texlive/texmf-dist/tex/latex/base/alltt.sty
-INPUT /usr/share/texlive/texmf-dist/tex/latex/upquote/upquote.sty
-INPUT /usr/share/texlive/texmf-dist/tex/latex/upquote/upquote.sty
-INPUT /usr/share/texlive/texmf-dist/tex/latex/capt-of/capt-of.sty
-INPUT /usr/share/texlive/texmf-dist/tex/latex/capt-of/capt-of.sty
-INPUT /usr/share/texlive/texmf-dist/tex/latex/needspace/needspace.sty
-INPUT /usr/share/texlive/texmf-dist/tex/latex/needspace/needspace.sty
-INPUT sphinxhighlight.sty
-INPUT sphinxhighlight.sty
-INPUT /usr/share/texlive/texmf-dist/tex/latex/oberdiek/kvoptions.sty
-INPUT /usr/share/texlive/texmf-dist/tex/latex/oberdiek/kvoptions.sty
-INPUT /usr/share/texlive/texmf-dist/tex/generic/oberdiek/kvsetkeys.sty
-INPUT /usr/share/texlive/texmf-dist/tex/generic/oberdiek/kvsetkeys.sty
-INPUT /usr/share/texlive/texmf-dist/tex/generic/oberdiek/infwarerr.sty
-INPUT /usr/share/texlive/texmf-dist/tex/generic/oberdiek/infwarerr.sty
-INPUT /usr/share/texlive/texmf-dist/tex/generic/oberdiek/etexcmds.sty
-INPUT /usr/share/texlive/texmf-dist/tex/generic/oberdiek/etexcmds.sty
-INPUT /usr/share/texlive/texmf-dist/tex/generic/oberdiek/ifluatex.sty
-INPUT /usr/share/texlive/texmf-dist/tex/generic/oberdiek/ifluatex.sty
-INPUT /usr/share/texlive/texmf-dist/tex/latex/geometry/geometry.sty
-INPUT /usr/share/texlive/texmf-dist/tex/latex/geometry/geometry.sty
-INPUT /usr/share/texlive/texmf-dist/tex/generic/oberdiek/ifpdf.sty
-INPUT /usr/share/texlive/texmf-dist/tex/generic/oberdiek/ifpdf.sty
-INPUT /usr/share/texlive/texmf-dist/tex/generic/oberdiek/ifvtex.sty
-INPUT /usr/share/texlive/texmf-dist/tex/generic/oberdiek/ifvtex.sty
-INPUT /usr/share/texlive/texmf-dist/tex/generic/ifxetex/ifxetex.sty
-INPUT /usr/share/texlive/texmf-dist/tex/generic/ifxetex/ifxetex.sty
-INPUT /usr/share/texlive/texmf-dist/tex/latex/hyperref/hyperref.sty
-INPUT /usr/share/texlive/texmf-dist/tex/latex/hyperref/hyperref.sty
-INPUT /usr/share/texlive/texmf-dist/tex/generic/oberdiek/hobsub-hyperref.sty
-INPUT /usr/share/texlive/texmf-dist/tex/generic/oberdiek/hobsub-hyperref.sty
-INPUT /usr/share/texlive/texmf-dist/tex/generic/oberdiek/hobsub-hyperref.sty
-INPUT /usr/share/texlive/texmf-dist/tex/generic/oberdiek/hobsub-generic.sty
-INPUT /usr/share/texlive/texmf-dist/tex/generic/oberdiek/hobsub-generic.sty
-INPUT /usr/share/texlive/texmf-dist/tex/latex/oberdiek/auxhook.sty
-INPUT /usr/share/texlive/texmf-dist/tex/latex/oberdiek/auxhook.sty
-INPUT /usr/share/texlive/texmf-dist/tex/latex/hyperref/pd1enc.def
-INPUT /usr/share/texlive/texmf-dist/tex/latex/hyperref/pd1enc.def
-INPUT /usr/share/texlive/texmf-dist/tex/latex/latexconfig/hyperref.cfg
-INPUT /usr/share/texlive/texmf-dist/tex/latex/latexconfig/hyperref.cfg
-INPUT /usr/share/texlive/texmf-dist/tex/latex/hyperref/puenc.def
-INPUT /usr/share/texlive/texmf-dist/tex/latex/hyperref/puenc.def
-INPUT /usr/share/texlive/texmf-dist/tex/latex/url/url.sty
-INPUT /usr/share/texlive/texmf-dist/tex/latex/url/url.sty
-INPUT /usr/share/texlive/texmf-dist/tex/latex/hyperref/hpdftex.def
-INPUT /usr/share/texlive/texmf-dist/tex/latex/hyperref/hpdftex.def
-INPUT /usr/share/texlive/texmf-dist/tex/latex/oberdiek/rerunfilecheck.sty
-INPUT /usr/share/texlive/texmf-dist/tex/latex/oberdiek/rerunfilecheck.sty
-INPUT /usr/share/texlive/texmf-dist/tex/latex/oberdiek/hypcap.sty
-INPUT /usr/share/texlive/texmf-dist/tex/latex/oberdiek/hypcap.sty
-INPUT sphinxmessages.sty
-INPUT sphinxmessages.sty
-OUTPUT schoolapps.idx
-INPUT schoolapps.aux
-INPUT schoolapps.aux
-OUTPUT schoolapps.aux
-INPUT /usr/share/texlive/texmf-dist/tex/latex/base/ts1cmr.fd
-INPUT /usr/share/texlive/texmf-dist/tex/latex/base/ts1cmr.fd
-INPUT /usr/share/texlive/texmf-dist/tex/latex/psnfss/t1ptm.fd
-INPUT /usr/share/texlive/texmf-dist/tex/latex/psnfss/t1ptm.fd
-INPUT /usr/share/texlive/texmf-dist/fonts/tfm/adobe/times/ptmr8t.tfm
-INPUT /usr/share/texlive/texmf-dist/tex/context/base/mkii/supp-pdf.mkii
-INPUT /usr/share/texlive/texmf-dist/tex/context/base/mkii/supp-pdf.mkii
-INPUT /usr/share/texlive/texmf-dist/tex/latex/oberdiek/epstopdf-base.sty
-INPUT /usr/share/texlive/texmf-dist/tex/latex/oberdiek/epstopdf-base.sty
-INPUT /usr/share/texlive/texmf-dist/tex/latex/oberdiek/grfext.sty
-INPUT /usr/share/texlive/texmf-dist/tex/latex/oberdiek/grfext.sty
-INPUT /usr/share/texlive/texmf-dist/tex/latex/latexconfig/epstopdf-sys.cfg
-INPUT /usr/share/texlive/texmf-dist/tex/latex/latexconfig/epstopdf-sys.cfg
-INPUT /usr/share/texlive/texmf-dist/tex/latex/hyperref/nameref.sty
-INPUT /usr/share/texlive/texmf-dist/tex/latex/hyperref/nameref.sty
-INPUT /usr/share/texlive/texmf-dist/tex/generic/oberdiek/gettitlestring.sty
-INPUT /usr/share/texlive/texmf-dist/tex/generic/oberdiek/gettitlestring.sty
-INPUT schoolapps.out
-INPUT schoolapps.out
-INPUT schoolapps.out
-INPUT schoolapps.out
-INPUT ./schoolapps.out
-INPUT ./schoolapps.out
-OUTPUT schoolapps.out
-INPUT /usr/share/texlive/texmf-dist/tex/latex/psnfss/t1phv.fd
-INPUT /usr/share/texlive/texmf-dist/tex/latex/psnfss/t1phv.fd
-INPUT /usr/share/texlive/texmf-dist/fonts/tfm/adobe/helvetic/phvr8t.tfm
-INPUT /usr/share/texlive/texmf-dist/fonts/tfm/adobe/helvetic/phvb8t.tfm
-INPUT /usr/share/texlive/texmf-dist/fonts/tfm/adobe/helvetic/phvb8t.tfm
-INPUT /usr/share/texlive/texmf-dist/fonts/tfm/adobe/helvetic/phvbo8t.tfm
-INPUT /usr/share/texlive/texmf-dist/fonts/tfm/adobe/helvetic/phvbo8t.tfm
-INPUT /usr/share/texlive/texmf-dist/fonts/tfm/adobe/helvetic/phvb8t.tfm
-INPUT /usr/share/texlive/texmf-dist/fonts/tfm/public/cm/cmr17.tfm
-INPUT /usr/share/texlive/texmf-dist/tex/latex/cmap/ot1.cmap
-INPUT /usr/share/texlive/texmf-dist/tex/latex/cmap/ot1.cmap
-INPUT /usr/share/texlive/texmf-dist/fonts/tfm/public/cm/cmr12.tfm
-INPUT /usr/share/texlive/texmf-dist/fonts/tfm/public/cm/cmmi12.tfm
-INPUT /usr/share/texlive/texmf-dist/tex/latex/mmap/oml.cmap
-INPUT /usr/share/texlive/texmf-dist/tex/latex/mmap/oml.cmap
-INPUT /usr/share/texlive/texmf-dist/fonts/tfm/public/cm/cmmi12.tfm
-INPUT /usr/share/texlive/texmf-dist/fonts/tfm/public/cm/cmsy10.tfm
-INPUT /usr/share/texlive/texmf-dist/tex/latex/mmap/oms.cmap
-INPUT /usr/share/texlive/texmf-dist/tex/latex/mmap/oms.cmap
-INPUT /usr/share/texlive/texmf-dist/fonts/tfm/public/cm/cmsy10.tfm
-INPUT /usr/share/texlive/texmf-dist/fonts/tfm/public/cm/cmex10.tfm
-INPUT /usr/share/texlive/texmf-dist/tex/latex/mmap/omx.cmap
-INPUT /usr/share/texlive/texmf-dist/tex/latex/mmap/omx.cmap
-INPUT /usr/share/texlive/texmf-dist/fonts/tfm/public/cm/cmex10.tfm
-INPUT /usr/share/texlive/texmf-dist/tex/latex/amsfonts/umsa.fd
-INPUT /usr/share/texlive/texmf-dist/tex/latex/amsfonts/umsa.fd
-INPUT /usr/share/texlive/texmf-dist/fonts/tfm/public/amsfonts/symbols/msam10.tfm
-INPUT /usr/share/texlive/texmf-dist/fonts/tfm/public/amsfonts/symbols/msam10.tfm
-INPUT /usr/share/texlive/texmf-dist/fonts/tfm/public/amsfonts/symbols/msam10.tfm
-INPUT /usr/share/texlive/texmf-dist/tex/latex/amsfonts/umsb.fd
-INPUT /usr/share/texlive/texmf-dist/tex/latex/amsfonts/umsb.fd
-INPUT /usr/share/texlive/texmf-dist/fonts/tfm/public/amsfonts/symbols/msbm10.tfm
-INPUT /usr/share/texlive/texmf-dist/fonts/tfm/public/amsfonts/symbols/msbm10.tfm
-INPUT /usr/share/texlive/texmf-dist/fonts/tfm/public/amsfonts/symbols/msbm10.tfm
-INPUT /usr/share/texlive/texmf-dist/fonts/tfm/adobe/helvetic/phvb8t.tfm
-INPUT /usr/share/texlive/texmf-dist/fonts/vf/adobe/helvetic/phvb8t.vf
-INPUT /usr/share/texlive/texmf-dist/fonts/tfm/adobe/helvetic/phvb8r.tfm
-INPUT /var/lib/texmf/fonts/map/pdftex/updmap/pdftex.map
-INPUT /usr/share/texlive/texmf-dist/fonts/vf/adobe/helvetic/phvbo8t.vf
-INPUT /usr/share/texlive/texmf-dist/fonts/tfm/adobe/helvetic/phvbo8r.tfm
-INPUT /usr/share/texlive/texmf-dist/fonts/vf/adobe/helvetic/phvb8t.vf
-INPUT /usr/share/texlive/texmf-dist/fonts/tfm/adobe/helvetic/phvb8r.tfm
-INPUT /usr/share/texlive/texmf-dist/fonts/vf/adobe/helvetic/phvb8t.vf
-INPUT /usr/share/texlive/texmf-dist/fonts/tfm/adobe/helvetic/phvb8r.tfm
-INPUT /usr/share/texlive/texmf-dist/fonts/tfm/adobe/times/ptmr8t.tfm
-INPUT /usr/share/texlive/texmf-dist/fonts/tfm/adobe/helvetic/phvr8t.tfm
-INPUT schoolapps.toc
-INPUT schoolapps.toc
-INPUT /usr/share/texlive/texmf-dist/fonts/tfm/adobe/times/ptmb8t.tfm
-INPUT /usr/share/texlive/texmf-dist/fonts/tfm/public/amsfonts/cmextra/cmex7.tfm
-INPUT /usr/share/texlive/texmf-dist/fonts/tfm/public/amsfonts/cmextra/cmex7.tfm
-INPUT /usr/share/texlive/texmf-dist/fonts/tfm/public/amsfonts/symbols/msam7.tfm
-INPUT /usr/share/texlive/texmf-dist/fonts/tfm/public/amsfonts/symbols/msam5.tfm
-INPUT /usr/share/texlive/texmf-dist/fonts/tfm/public/amsfonts/symbols/msbm7.tfm
-INPUT /usr/share/texlive/texmf-dist/fonts/tfm/public/amsfonts/symbols/msbm5.tfm
-OUTPUT schoolapps.toc
-INPUT /usr/share/texlive/texmf-dist/fonts/vf/adobe/helvetic/phvr8t.vf
-INPUT /usr/share/texlive/texmf-dist/fonts/tfm/adobe/helvetic/phvr8r.tfm
-INPUT /usr/share/texlive/texmf-dist/fonts/vf/adobe/times/ptmb8t.vf
-INPUT /usr/share/texlive/texmf-dist/fonts/tfm/adobe/times/ptmb8r.tfm
-INPUT /usr/share/texlive/texmf-dist/fonts/vf/adobe/times/ptmr8t.vf
-INPUT /usr/share/texlive/texmf-dist/fonts/tfm/adobe/times/ptmr8r.tfm
-INPUT /usr/share/texlive/texmf-dist/fonts/vf/adobe/helvetic/phvb8t.vf
-INPUT /usr/share/texlive/texmf-dist/fonts/tfm/adobe/helvetic/phvb8r.tfm
-INPUT /usr/share/texlive/texmf-dist/fonts/tfm/adobe/helvetic/phvr8t.tfm
-INPUT /usr/share/texlive/texmf-dist/fonts/tfm/adobe/helvetic/phvb8t.tfm
-INPUT /usr/share/texlive/texmf-dist/fonts/vf/adobe/helvetic/phvr8t.vf
-INPUT /usr/share/texlive/texmf-dist/fonts/tfm/adobe/helvetic/phvr8r.tfm
-INPUT /usr/share/texlive/texmf-dist/fonts/vf/adobe/helvetic/phvb8t.vf
-INPUT /usr/share/texlive/texmf-dist/fonts/tfm/adobe/helvetic/phvb8r.tfm
-INPUT /usr/share/texlive/texmf-dist/tex/latex/psnfss/t1pcr.fd
-INPUT /usr/share/texlive/texmf-dist/tex/latex/psnfss/t1pcr.fd
-INPUT /usr/share/texlive/texmf-dist/fonts/tfm/adobe/courier/pcrr8t.tfm
-INPUT /usr/share/texlive/texmf-dist/fonts/tfm/adobe/times/ptmr8t.tfm
-INPUT /usr/share/texlive/texmf-dist/fonts/tfm/adobe/helvetic/phvr8t.tfm
-INPUT /usr/share/texlive/texmf-dist/fonts/vf/adobe/courier/pcrr8t.vf
-INPUT /usr/share/texlive/texmf-dist/fonts/tfm/adobe/courier/pcrr8r.tfm
-INPUT /usr/share/texlive/texmf-dist/tex/latex/psnfss/ts1ptm.fd
-INPUT /usr/share/texlive/texmf-dist/tex/latex/psnfss/ts1ptm.fd
-INPUT /usr/share/texlive/texmf-dist/fonts/tfm/adobe/times/ptmr8c.tfm
-INPUT /usr/share/texlive/texmf-dist/fonts/tfm/adobe/times/ptmri8t.tfm
-INPUT /usr/share/texlive/texmf-dist/fonts/vf/adobe/times/ptmr8c.vf
-INPUT /usr/share/texlive/texmf-dist/fonts/vf/adobe/times/ptmri8t.vf
-INPUT /usr/share/texlive/texmf-dist/fonts/tfm/adobe/times/ptmri8r.tfm
-INPUT /usr/share/texlive/texmf-dist/fonts/tfm/adobe/courier/pcrb8t.tfm
-INPUT /usr/share/texlive/texmf-dist/fonts/vf/adobe/courier/pcrb8t.vf
-INPUT /usr/share/texlive/texmf-dist/fonts/tfm/adobe/courier/pcrb8r.tfm
-INPUT schoolapps.ind
-INPUT schoolapps.ind
-INPUT schoolapps.aux
-INPUT ./schoolapps.out
-INPUT ./schoolapps.out
-INPUT /usr/share/texlive/texmf-dist/fonts/enc/dvips/base/8r.enc
-INPUT /usr/share/texlive/texmf-dist/fonts/type1/public/amsfonts/cm/cmsy10.pfb
-INPUT /usr/share/texlive/texmf-dist/fonts/type1/urw/courier/ucrb8a.pfb
-INPUT /usr/share/texlive/texmf-dist/fonts/type1/urw/courier/ucrr8a.pfb
-INPUT /usr/share/texlive/texmf-dist/fonts/type1/urw/helvetic/uhvb8a.pfb
-INPUT /usr/share/texlive/texmf-dist/fonts/type1/urw/helvetic/uhvbo8a.pfb
-INPUT /usr/share/texlive/texmf-dist/fonts/type1/urw/helvetic/uhvr8a.pfb
-INPUT /usr/share/texlive/texmf-dist/fonts/type1/urw/times/utmb8a.pfb
-INPUT /usr/share/texlive/texmf-dist/fonts/type1/urw/times/utmr8a.pfb
-INPUT /usr/share/texlive/texmf-dist/fonts/type1/urw/times/utmri8a.pfb
diff --git a/docs/_build/latex/schoolapps.idx b/docs/_build/latex/schoolapps.idx
deleted file mode 100644
index ff20c5c4b..000000000
--- a/docs/_build/latex/schoolapps.idx
+++ /dev/null
@@ -1,7 +0,0 @@
-\indexentry{untisconnect.api (Modul)@\spxentry{untisconnect.api}\spxextra{Modul}|hyperpage}{7}
-\indexentry{format\_classes() (im Modul untisconnect.api)@\spxentry{format\_classes()}\spxextra{im Modul untisconnect.api}|hyperpage}{7}
-\indexentry{untisconnect.sub (Modul)@\spxentry{untisconnect.sub}\spxextra{Modul}|hyperpage}{7}
-\indexentry{generate\_sub\_table() (im Modul untisconnect.sub)@\spxentry{generate\_sub\_table()}\spxextra{im Modul untisconnect.sub}|hyperpage}{7}
-\indexentry{get\_header\_information() (im Modul untisconnect.sub)@\spxentry{get\_header\_information()}\spxextra{im Modul untisconnect.sub}|hyperpage}{7}
-\indexentry{parse\_type\_of\_untis\_flags() (im Modul untisconnect.sub)@\spxentry{parse\_type\_of\_untis\_flags()}\spxextra{im Modul untisconnect.sub}|hyperpage}{7}
-\indexentry{substitutions\_sorter() (im Modul untisconnect.sub)@\spxentry{substitutions\_sorter()}\spxextra{im Modul untisconnect.sub}|hyperpage}{7}
diff --git a/docs/_build/latex/schoolapps.ilg b/docs/_build/latex/schoolapps.ilg
deleted file mode 100644
index 700523321..000000000
--- a/docs/_build/latex/schoolapps.ilg
+++ /dev/null
@@ -1,7 +0,0 @@
-This is makeindex, version 2.15 [TeX Live 2019] (kpathsea + Thai support).
-Scanning style file ./python.ist.......done (7 attributes redefined, 0 ignored).
-Scanning input file schoolapps.idx....done (7 entries accepted, 0 rejected).
-Sorting entries....done (22 comparisons).
-Generating output file schoolapps.ind....done (29 lines written, 0 warnings).
-Output written in schoolapps.ind.
-Transcript written in schoolapps.ilg.
diff --git a/docs/_build/latex/schoolapps.ind b/docs/_build/latex/schoolapps.ind
deleted file mode 100644
index 7a661fd2b..000000000
--- a/docs/_build/latex/schoolapps.ind
+++ /dev/null
@@ -1,29 +0,0 @@
-\begin{sphinxtheindex}
-\let\bigletter\sphinxstyleindexlettergroup
-\let\spxpagem \sphinxstyleindexpagemain
-\let\spxentry \sphinxstyleindexentry
-\let\spxextra \sphinxstyleindexextra
-
-  \bigletter F
-  \item \spxentry{format\_classes()}\spxextra{im Modul untisconnect.api}, \hyperpage{7}
-
-  \indexspace
-  \bigletter G
-  \item \spxentry{generate\_sub\_table()}\spxextra{im Modul untisconnect.sub}, \hyperpage{7}
-  \item \spxentry{get\_header\_information()}\spxextra{im Modul untisconnect.sub}, \hyperpage{7}
-
-  \indexspace
-  \bigletter P
-  \item \spxentry{parse\_type\_of\_untis\_flags()}\spxextra{im Modul untisconnect.sub}, 
-		\hyperpage{7}
-
-  \indexspace
-  \bigletter S
-  \item \spxentry{substitutions\_sorter()}\spxextra{im Modul untisconnect.sub}, \hyperpage{7}
-
-  \indexspace
-  \bigletter U
-  \item \spxentry{untisconnect.api}\spxextra{Modul}, \hyperpage{7}
-  \item \spxentry{untisconnect.sub}\spxextra{Modul}, \hyperpage{7}
-
-\end{sphinxtheindex}
diff --git a/docs/_build/latex/schoolapps.out b/docs/_build/latex/schoolapps.out
deleted file mode 100644
index bd96d88f1..000000000
--- a/docs/_build/latex/schoolapps.out
+++ /dev/null
@@ -1,18 +0,0 @@
-\BOOKMARK [0][-]{chapter.1}{\376\377\000D\000e\000v\000e\000l\000o\000p\000m\000e\000n\000t\000\040\000G\000u\000i\000d\000e}{}% 1
-\BOOKMARK [1][-]{section.1.1}{\376\377\000V\000e\000r\000s\000i\000o\000n\000s\000v\000e\000r\000w\000a\000l\000t\000u\000n\000g\000\040\040\023\000\040\000E\000i\000n\000s\000a\000t\000z\000\040\000v\000o\000n\000\040\000G\000i\000t}{chapter.1}% 2
-\BOOKMARK [1][-]{section.1.2}{\376\377\000C\000o\000d\000e\000s\000t\000y\000l\000e}{chapter.1}% 3
-\BOOKMARK [1][-]{section.1.3}{\376\377\000E\000d\000i\000t\000o\000r\000e\000n\000/\000I\000D\000E\000s}{chapter.1}% 4
-\BOOKMARK [1][-]{section.1.4}{\376\377\000D\000o\000k\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n}{chapter.1}% 5
-\BOOKMARK [1][-]{section.1.5}{\376\377\000P\000r\000o\000b\000l\000e\000m\000,\000\040\000B\000u\000g\000,\000\040\000I\000d\000e\000e\000?\000\040\040\023\000\040\000I\000s\000s\000u\000e\000s\000\040\000v\000e\000r\000w\000e\000n\000d\000e\000n\000!}{chapter.1}% 6
-\BOOKMARK [0][-]{chapter.2}{\376\377\000G\000i\000t\000\040\000M\000a\000n\000a\000g\000e\000m\000e\000n\000t\000\040\000G\000u\000i\000d\000e}{}% 7
-\BOOKMARK [1][-]{section.2.1}{\376\377\000H\000i\000n\000w\000e\000i\000s}{chapter.2}% 8
-\BOOKMARK [1][-]{section.2.2}{\376\377\000G\000i\000t\000-\000H\000o\000s\000t\000i\000n\000g\000\040\000v\000o\000n\000\040\000S\000c\000h\000o\000o\000l\000A\000p\000p\000s}{chapter.2}% 9
-\BOOKMARK [1][-]{section.2.3}{\376\377\000C\000l\000o\000n\000e\000n\000\040\000u\000n\000d\000\040\000E\000r\000s\000t\000e\000i\000n\000r\000i\000c\000h\000t\000u\000n\000g}{chapter.2}% 10
-\BOOKMARK [1][-]{section.2.4}{\376\377\000W\000a\000s\000\040\000g\000i\000b\000t\000\040\000e\000s\000\040\000z\000u\000\040\000t\000u\000n\000?\000\040\040\023\000\040\000I\000s\000s\000u\000e\000s}{chapter.2}% 11
-\BOOKMARK [1][-]{section.2.5}{\376\377\000A\000m\000\040\000C\000o\000d\000e\000\040\000a\000r\000b\000e\000i\000t\000e\000n\000\040\040\023\000\040\000D\000i\000e\000\040\000B\000r\000a\000n\000c\000h\000e\000s}{chapter.2}% 12
-\BOOKMARK [1][-]{section.2.6}{\376\377\000A\000m\000\040\000C\000o\000d\000e\000\040\000a\000r\000b\000e\000i\000t\000e\000n\000\040\040\023\000\040\000C\000o\000m\000m\000i\000t\000t\000e\000n}{chapter.2}% 13
-\BOOKMARK [1][-]{section.2.7}{\376\377\000A\000m\000\040\000C\000o\000d\000e\000\040\000a\000r\000b\000e\000i\000t\000e\000n\000\040\040\023\000\040\000M\000e\000r\000g\000e\000n\000/\000P\000u\000l\000l\000\040\000R\000e\000q\000u\000e\000s\000t\000s}{chapter.2}% 14
-\BOOKMARK [0][-]{chapter.3}{\376\377\000D\000o\000k\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n}{}% 15
-\BOOKMARK [0][-]{chapter.4}{\376\377\000I\000n\000d\000e\000x}{}% 16
-\BOOKMARK [0][-]{section*.11}{\376\377\000P\000y\000t\000h\000o\000n\000-\000M\000o\000d\000u\000l\000i\000n\000d\000e\000x}{}% 17
-\BOOKMARK [0][-]{section*.12}{\376\377\000S\000t\000i\000c\000h\000w\000o\000r\000t\000v\000e\000r\000z\000e\000i\000c\000h\000n\000i\000s}{}% 18
diff --git a/docs/_build/latex/schoolapps.pdf b/docs/_build/latex/schoolapps.pdf
deleted file mode 100644
index 33fab9e8d892f4bfeb5b54f9350c52ebed815d7d..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 127726
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

diff --git a/docs/_build/latex/schoolapps.tex b/docs/_build/latex/schoolapps.tex
deleted file mode 100644
index dad4bf861..000000000
--- a/docs/_build/latex/schoolapps.tex
+++ /dev/null
@@ -1,425 +0,0 @@
-%% Generated by Sphinx.
-\def\sphinxdocclass{report}
-\documentclass[letterpaper,10pt,ngerman]{sphinxmanual}
-\ifdefined\pdfpxdimen
-   \let\sphinxpxdimen\pdfpxdimen\else\newdimen\sphinxpxdimen
-\fi \sphinxpxdimen=.75bp\relax
-
-\PassOptionsToPackage{warn}{textcomp}
-\usepackage[utf8]{inputenc}
-\ifdefined\DeclareUnicodeCharacter
-% support both utf8 and utf8x syntaxes
-  \ifdefined\DeclareUnicodeCharacterAsOptional
-    \def\sphinxDUC#1{\DeclareUnicodeCharacter{"#1}}
-  \else
-    \let\sphinxDUC\DeclareUnicodeCharacter
-  \fi
-  \sphinxDUC{00A0}{\nobreakspace}
-  \sphinxDUC{2500}{\sphinxunichar{2500}}
-  \sphinxDUC{2502}{\sphinxunichar{2502}}
-  \sphinxDUC{2514}{\sphinxunichar{2514}}
-  \sphinxDUC{251C}{\sphinxunichar{251C}}
-  \sphinxDUC{2572}{\textbackslash}
-\fi
-\usepackage{cmap}
-\usepackage[T1]{fontenc}
-\usepackage{amsmath,amssymb,amstext}
-\usepackage{babel}
-
-
-
-\usepackage{times}
-\expandafter\ifx\csname T@LGR\endcsname\relax
-\else
-% LGR was declared as font encoding
-  \substitutefont{LGR}{\rmdefault}{cmr}
-  \substitutefont{LGR}{\sfdefault}{cmss}
-  \substitutefont{LGR}{\ttdefault}{cmtt}
-\fi
-\expandafter\ifx\csname T@X2\endcsname\relax
-  \expandafter\ifx\csname T@T2A\endcsname\relax
-  \else
-  % T2A was declared as font encoding
-    \substitutefont{T2A}{\rmdefault}{cmr}
-    \substitutefont{T2A}{\sfdefault}{cmss}
-    \substitutefont{T2A}{\ttdefault}{cmtt}
-  \fi
-\else
-% X2 was declared as font encoding
-  \substitutefont{X2}{\rmdefault}{cmr}
-  \substitutefont{X2}{\sfdefault}{cmss}
-  \substitutefont{X2}{\ttdefault}{cmtt}
-\fi
-
-
-\usepackage[Sonny]{fncychap}
-\ChNameVar{\Large\normalfont\sffamily}
-\ChTitleVar{\Large\normalfont\sffamily}
-\usepackage{sphinx}
-
-\fvset{fontsize=\small}
-\usepackage{geometry}
-
-% Include hyperref last.
-\usepackage{hyperref}
-% Fix anchor placement for figures with captions.
-\usepackage{hypcap}% it must be loaded after hyperref.
-% Set up styles of URL: it should be placed after hyperref.
-\urlstyle{same}
-\addto\captionsngerman{\renewcommand{\contentsname}{Inhalt:}}
-
-\usepackage{sphinxmessages}
-\setcounter{tocdepth}{1}
-
-
-
-\title{SchoolApps}
-\date{20.11.2019}
-\release{Version 1.0.2-dev}
-\author{Hangzhi Yu, Julian Leucker, Jonathan Weth, Frank Poetzsch-Heffter}
-\newcommand{\sphinxlogo}{\vbox{}}
-\renewcommand{\releasename}{Release}
-\makeindex
-\begin{document}
-
-\ifdefined\shorthandoff
-  \ifnum\catcode`\=\string=\active\shorthandoff{=}\fi
-  \ifnum\catcode`\"=\active\shorthandoff{"}\fi
-\fi
-
-\pagestyle{empty}
-\sphinxmaketitle
-\pagestyle{plain}
-\sphinxtableofcontents
-\pagestyle{normal}
-\phantomsection\label{\detokenize{index::doc}}
-
-
-
-\chapter{Development Guide}
-\label{\detokenize{dev/dev:development-guide}}\label{\detokenize{dev/dev::doc}}
-Diese Anleitung soll für einen einheitliches Development und einheitlichen Code in SchoolApps sorgen.
-
-
-\section{Versionsverwaltung \textendash{} Einsatz von Git}
-\label{\detokenize{dev/dev:versionsverwaltung-einsatz-von-git}}
-Es wird mit \sphinxstylestrong{Git} gearbeitet. Die Verwendung ist Pflicht, die Regelungen im Git-Management Guide sind zu beachten. Alle Veränderungen sollten nach Beendigung der Arbeit an SchoolApps direkt im entsprechenden Featurebranch committed und gepusht werden, auch wenn sie noch nicht fertig oder lauffähig sind, um Datenverlust vorzubeugen (hierbei unbedingt den Bereich Branches im Git-Management Guide beachten).
-
-
-\section{Codestyle}
-\label{\detokenize{dev/dev:codestyle}}
-Grundsätzlich wird \sphinxstylestrong{auf englisch gecodet}: Englische Variablen, englische Kommentare und englische Commits. Die Oberfläche wird natürlich auf deutsch lokalisiert. Lediglich Issues auf GitHub und die Dokumentation werden auf deutsch verfasst.
-
-Weiterhin gilt es, die \sphinxstylestrong{PEP-8-Richtlinien} der Python Foundation einzuhalten, sie sorgen für einen sauberen, einheitlichen und übersichtlichen Stil.
-
-\sphinxstylestrong{Tipp:} Viele Editoren können die Pythonskripte auch automatisch nach PEP8 formatieren \textendash{} meistens klappt das sehr gut (siehe auch „Editoren/IDEs“).
-
-
-\section{Editoren/IDEs}
-\label{\detokenize{dev/dev:editoren-ides}}
-Natürlich kann man auch im Texteditor des jeweiligen Betriebssystemes oder in der IDLE von Python programmieren.
-Allerdings empfiehlt es sich gerade bei so großen (Django-)Projekten wie SchoolApps einen vernünftigen \sphinxstylestrong{Editor} oder eine \sphinxstylestrong{IDE} (Integrated Development Environment) zu benutzen.
-Folgende Software ist sehr empfehlenswert:
-\begin{quote}
-\begin{description}
-\item[{Atom}] \leavevmode
-Ein Opensource-Editor von GitHub. Einfache Bedienung, gute Syntaxhervorhebung, mit Plugins auch Autovervollständigung und Codeformatierung
-
-\item[{Visual Code}] \leavevmode
-Ein Opensource-Projekt von Microsoft. Sehr ähnlich zu Atom.
-
-\item[{PyCharm Community/Professional Edition}] \leavevmode
-Kommerzielles Programm, gibt es in einer OpenSource-Version (Community) sowie einer Bezahlversion (Professional). Alle Funktionen von VisualCode und Atom enthalten, zudem wird in der Professional Edition Django von Haus aus unterstützt. TIPP: Die Professional Edition gibt es für den Bildungsbereich kostenlos.
-
-\end{description}
-\end{quote}
-
-
-\section{Dokumentation}
-\label{\detokenize{dev/dev:dokumentation}}\begin{quote}
-
-„It was hard to write, it should be hard to read.“
-\end{quote}
-
-Alle Programmierer hassen es \textendash{} dennoch ist \sphinxstylestrong{Kommentieren} die beste Dokumentationsmöglichkeit, damit andere Leute den eigenen Quellcode lesen können.
-
-Alle Funktionen (Klassen, etc.) sollten mit Docstrings versehen sein. Docstrings werden nach dem folgenden Schema aufgebaut: \sphinxurl{https://sphinx-rtd-tutorial.readthedocs.io/en/latest/docstrings.html}
-
-Jede App, die sich in ihrer Funktion bzw. Funktionsweise nicht selbst erklärt, sollte eine \sphinxstylestrong{README} besitzen, die den Programmierer über Sinn und Zweck aufklärt. Dies gilt insbesondere, wenn diese App auch Funktionen für andere Apps bereitstellt. Diese sollten in der README gesondert erwähnt und sauber dokumentiert werden.
-
-In der \sphinxstylestrong{Install.md} (im Wurzelverzeichnis) sollten alle Schritte zur Installation dokumentiert werden. Insbesondere gilt das, wenn man eine neue Bibliothek für eine bestimmte Funktionalität benötigt. Diese muss sofort aufgeführt werden, damit andere Entwickler den Code ohne großes Basteln zum Laufen bekommen.
-
-
-\section{Problem, Bug, Idee? \textendash{} Issues verwenden!}
-\label{\detokenize{dev/dev:problem-bug-idee-issues-verwenden}}
-Hier sei nochmal auf den Bereich „Issues“ im Git-Management Guide hingewiesen \textendash{} unbedingt beachten!
-
-
-\chapter{Git Management Guide}
-\label{\detokenize{dev/git:git-management-guide}}\label{\detokenize{dev/git::doc}}
-Diese Anleitung soll bei der Benutzung von Git im Projekt SchoolApps helfen.
-
-
-\section{Hinweis}
-\label{\detokenize{dev/git:hinweis}}
-Hilfe und Informationen zu Git allgemein gibt es u. a. bei dieser Anleitung:
-\begin{quote}
-
-\sphinxurl{https://rogerdudler.github.io/git-guide/index.de.html}
-\end{quote}
-
-
-\section{Git-Hosting von SchoolApps}
-\label{\detokenize{dev/git:git-hosting-von-schoolapps}}
-Die aktuelle Version von SchoolApps ist auf GitHub in der Organisation Katharineum gehosted:
-\begin{quote}
-
-\sphinxurl{https://github.com/Katharineum/school-apps}
-\end{quote}
-
-Das Cloning sowie Pullen und Pushen kann wahlweise mittels SSH oder HTTPS erfolgen (genaueres in der obigen Anleitung). Der Zugriff auf das Repository wird von Herrn Poetzsch-Heffter (@poetzsch, \sphinxhref{mailto:p-h@katharineum.de}{p-h@katharineum.de}) geregelt.
-
-
-\section{Clonen und Ersteinrichtung}
-\label{\detokenize{dev/git:clonen-und-ersteinrichtung}}\begin{description}
-\item[{Clonen:}] \leavevmode
-\sphinxcode{\sphinxupquote{git clone https://github.com/Katharineum/school-apps}}
-
-oder \sphinxcode{\sphinxupquote{git clone git@github.com:Katharineum/school-apps.git}}
-
-\end{description}
-
-Um sich eine Entwicklungsumgebung für SchoolApps einzurichten, wird die Anleitung auf
-\begin{quote}
-
-\sphinxurl{https://github.com/Katharineum/school-apps/blob/dev/README.md}
-\end{quote}
-
-unter dem Reiter Installation empfohlen.
-
-
-\section{Was gibt es zu tun? \textendash{} Issues}
-\label{\detokenize{dev/git:was-gibt-es-zu-tun-issues}}
-
-\subsection{Issues anlegen}
-\label{\detokenize{dev/git:issues-anlegen}}
-Wenn einem in der SchoolApps etwas auffällt was getan werden sollte (Bug, Rechtschreibfehler, Zusätzliche Funktionen, etc.), dann muss ein Issue auf GitHub erstellt werden. Dies gilt auch, wenn man sich sicher ist, das Problem lösen zu können.
-
-
-\subsubsection{Wichtig beim Erstellen eines Issues:}
-\label{\detokenize{dev/git:wichtig-beim-erstellen-eines-issues}}\begin{itemize}
-\item {} 
-Aussagekräftigen Titel verwenden (deutsch)
-
-\item {} 
-Problem detailliert beschreiben, falls vorhanden, Lösungsmöglichkeit(en) nennen (deutsch)
-
-\item {} 
-\sphinxstylestrong{Assignees (Zuständigkeit)} \(\rightarrow\) Wenn man das Problem selbst lösen will bzw. sich darum kümmern will, empfiehlt es sich, sich selbst einzutragen. Damit ist man auch für die Lösung verantwortlich. Wenn man weiß, dass dieses Problem genau von einer bestimmten Person gelöst werden kann bzw. diese dafür zuständig ist, wird diese eingetragen. Es können auch mehrere Personen eingetragen werden.
-
-\item {} 
-\sphinxstylestrong{Labels (Kategorisierung)}  \(\rightarrow\)  Es gibt zwei Arten von Labels:
-\begin{itemize}
-\item {} 
-\sphinxstylestrong{Bereichslabel} \(\rightarrow\) Hier wird der Teil der Software genannt, der von dem Issue betroffen ist (im Regelfall eine Django-App, manchmal auch \sphinxstyleemphasis{whole project})
-
-\item {} 
-\sphinxstylestrong{Kategorisierungslabel} \(\rightarrow\) Hier wird die Art des Issue festgelegt.
-\begin{itemize}
-\item {} 
-\sphinxstyleemphasis{bug} \(\rightarrow\) Ein eindeutiger Fehler. (Sicherheits-/ Funktionsbeinträchtigend)
-
-\item {} 
-\sphinxstyleemphasis{beauty mistake} \(\rightarrow\) Schönheitsfehler. (Meist Designtechnisch)
-
-\item {} 
-\sphinxstyleemphasis{refactoring} \(\rightarrow\) Code(-style) verbessern, umprogrammieren.
-
-\item {} 
-\sphinxstyleemphasis{it works but it is wrong} \(\rightarrow\) Unsauber gelöste Probleme, fehlende Komponenten.
-
-\item {} 
-\sphinxstyleemphasis{new feature} \(\rightarrow\) Neue Funktionen.
-
-\item {} 
-\sphinxstyleemphasis{discussion} \(\rightarrow\) Zu diskussieren. Diese Issues \sphinxstyleemphasis{sollen nicht} umgesetzt werden, bis dieses Label entfernt wurde.
-
-\end{itemize}
-
-\end{itemize}
-
-Es können auch mehrere Bereichs- bzw. Kategorisierungslabel gleichzeitig verwendet werden.
-
-\item {} 
-\sphinxstylestrong{Projects} \(\rightarrow\) Die passende Zuordnung eines GitHub-Projekts für das Kanbansystem.
-
-\item {} 
-\sphinxstylestrong{Milestones} \(\rightarrow\) Die Version der Software, zu der dieses Problem gelöst werden muss.
-
-\end{itemize}
-
-
-\subsection{Issues bearbeiten/lösen}
-\label{\detokenize{dev/git:issues-bearbeiten-losen}}
-In der Issue-Liste auf GitHub kann jeder sehen, was es aktuell zu tun gibt.
-Vorzugsweise kümmert man sich um Issues auf dem eigenen Spezial- bzw. Aufgabengebiet. Wenn einem Issue bereits jemand zugeteilt ist, ist unbedingt Rücksprache zur betreffenden Person zu halten (Assignees).
-Das eigentliche Lösen (im Regelfall Programmieren) erfolgt als feature-Branch  (siehe unten).
-
-
-\section{Am Code arbeiten \textendash{} Die Branches}
-\label{\detokenize{dev/git:am-code-arbeiten-die-branches}}
-Der Hauptbranch ist der \sphinxstylestrong{dev}. In ihm ist immer die aktuelle Entwicklung von SchoolApps gespeichert. Er wird bei jeder stabilen Version im \sphinxstylestrong{server-Branch} veröffentlicht. Dieser stellt den aktuellen Stand auf dem Server da.
-
-In keinem dieser Branches wird aktiv commited (Ausnahmen bestätigen die Regel), sie werden nur über \sphinxstylestrong{Pull Requests} „gefüttert“.
-
-Alle Arbeiten am Code werden in vom dev-Branch abgezweigten Arbeits-Branches durchgeführt. Ein Branch entspricht dabei einer Funktion bzw. einem Issue. Wenn jemand gleichzeitig an mehreren, nicht zusammenhängend Issues arbeitet, wechselt dieser auch die Branches.
-
-Die \sphinxstylestrong{Namenskonvention} für diesen Arbeits-Branch ist wie folgt:
-\begin{itemize}
-\item {} \begin{description}
-\item[{Ist die Änderung, die programmiert wird, ein neues Feature, so wird der Branch so benannt:}] \leavevmode
-\sphinxcode{\sphinxupquote{feature/\textless{}der-name-des-feature-auf-englisch\textgreater{}}} (Bindestriche, kleingeschrieben)
-
-\end{description}
-
-\item {} \begin{description}
-\item[{Ist die Änderung, die programmiert wird, ein Bugfix, so wird der Branch so benannt:}] \leavevmode
-\sphinxcode{\sphinxupquote{bugfix/\textless{}beschreibung-des-bugs-auf-englisch\textgreater{}}} (Bindestriche, kleingeschrieben)
-
-\end{description}
-
-\item {} \begin{description}
-\item[{Ist die Änderung, die programmiert wird, ein Code-Refactoring, so wird der Branch so benannt:}] \leavevmode
-\sphinxcode{\sphinxupquote{refactor/\textless{}der-name-des-feature-auf-englisch\textgreater{}}} (Bindestriche, kleingeschrieben)
-
-\end{description}
-
-\end{itemize}
-
-
-\section{Am Code arbeiten \textendash{} Committen}
-\label{\detokenize{dev/git:am-code-arbeiten-committen}}
-Nochmal zur Erinnerung: Es wird nur in feature-Branches direkt committed.
-Die Commits erfolgen im Gegensatz zu Issues auf \sphinxstylestrong{englisch}, bei Bezug zu einem Issue wird das \sphinxstylestrong{Issue mit Hashtag} genannt.
-
-Beispiel: \sphinxcode{\sphinxupquote{Solve LDAP connection problems (issue \#10)}}
-
-
-\section{Am Code arbeiten \textendash{} Mergen/Pull Requests}
-\label{\detokenize{dev/git:am-code-arbeiten-mergen-pull-requests}}
-Ist man der Meinung, dass die Arbeiten am feature-Branch abgeschlossen sind, stellt man auf GitHub ein \sphinxstylestrong{Pull Request} und lässt die Arbeiten vom Rest des Entwicklerteams absegnen.
-Dies ist unbedingt zu befolgen.
-
-
-\chapter{Dokumentation}
-\label{\detokenize{dev/doc:dokumentation}}\label{\detokenize{dev/doc::doc}}
-Zur Dokumentation wird das Tool sphinx eingesetzt. Die gesamte Dokumentation liegt im Unterordner \sphinxcode{\sphinxupquote{docs}}.
-\begin{itemize}
-\item {} 
-Formartierung in restructedText
-
-\item {} \begin{description}
-\item[{Erstellen der HTML-Ausgabe}] \leavevmode
-make html
-
-\end{description}
-
-\end{itemize}
-\phantomsection\label{\detokenize{index:module-untisconnect.api}}\index{untisconnect.api (Modul)@\spxentry{untisconnect.api}\spxextra{Modul}}\index{format\_classes() (im Modul untisconnect.api)@\spxentry{format\_classes()}\spxextra{im Modul untisconnect.api}}
-
-\begin{fulllineitems}
-\phantomsection\label{\detokenize{index:untisconnect.api.format_classes}}\pysiglinewithargsret{\sphinxcode{\sphinxupquote{untisconnect.api.}}\sphinxbfcode{\sphinxupquote{format\_classes}}}{\emph{classes}}{}
-Formats a list of Class objects to a combined string
-
-example return: „9abcd“ for classes 9a, 9b, 9c and 9d
-\begin{quote}\begin{description}
-\item[{Parameter}] \leavevmode
-\sphinxstyleliteralstrong{\sphinxupquote{classes}} \textendash{} Class list
-
-\item[{Rückgabe}] \leavevmode
-combined string
-
-\end{description}\end{quote}
-
-\end{fulllineitems}
-
-\phantomsection\label{\detokenize{index:module-untisconnect.sub}}\index{untisconnect.sub (Modul)@\spxentry{untisconnect.sub}\spxextra{Modul}}\index{generate\_sub\_table() (im Modul untisconnect.sub)@\spxentry{generate\_sub\_table()}\spxextra{im Modul untisconnect.sub}}
-
-\begin{fulllineitems}
-\phantomsection\label{\detokenize{index:untisconnect.sub.generate_sub_table}}\pysiglinewithargsret{\sphinxcode{\sphinxupquote{untisconnect.sub.}}\sphinxbfcode{\sphinxupquote{generate\_sub\_table}}}{\emph{subs}, \emph{events={[}{]}}}{}
-Parse substitutions and prepare than for displaying in plan
-\begin{quote}\begin{description}
-\item[{Parameter}] \leavevmode\begin{itemize}
-\item {} 
-\sphinxstyleliteralstrong{\sphinxupquote{subs}} \textendash{} Substitutions to parse
-
-\item {} 
-\sphinxstyleliteralstrong{\sphinxupquote{events}} \textendash{} Events to include in table
-
-\end{itemize}
-
-\item[{Rückgabe}] \leavevmode
-A list of SubRow objects
-
-\end{description}\end{quote}
-
-\end{fulllineitems}
-
-\index{get\_header\_information() (im Modul untisconnect.sub)@\spxentry{get\_header\_information()}\spxextra{im Modul untisconnect.sub}}
-
-\begin{fulllineitems}
-\phantomsection\label{\detokenize{index:untisconnect.sub.get_header_information}}\pysiglinewithargsret{\sphinxcode{\sphinxupquote{untisconnect.sub.}}\sphinxbfcode{\sphinxupquote{get\_header\_information}}}{\emph{subs}, \emph{date}, \emph{events={[}{]}}}{}
-Get header information like affected teachers/classes and missing teachers/classes for a given date
-:param date: The date as datetime object
-:param subs: All subs for the given date
-:return: HeaderInformation object with all kind of information
-
-\end{fulllineitems}
-
-\index{parse\_type\_of\_untis\_flags() (im Modul untisconnect.sub)@\spxentry{parse\_type\_of\_untis\_flags()}\spxextra{im Modul untisconnect.sub}}
-
-\begin{fulllineitems}
-\phantomsection\label{\detokenize{index:untisconnect.sub.parse_type_of_untis_flags}}\pysiglinewithargsret{\sphinxcode{\sphinxupquote{untisconnect.sub.}}\sphinxbfcode{\sphinxupquote{parse\_type\_of\_untis\_flags}}}{\emph{flags}}{}
-Get type of substitution by parsing UNTIS flags
-:param flags: UNTIS flags (string)
-:return: type (int, constants are provided)
-
-\end{fulllineitems}
-
-\index{substitutions\_sorter() (im Modul untisconnect.sub)@\spxentry{substitutions\_sorter()}\spxextra{im Modul untisconnect.sub}}
-
-\begin{fulllineitems}
-\phantomsection\label{\detokenize{index:untisconnect.sub.substitutions_sorter}}\pysiglinewithargsret{\sphinxcode{\sphinxupquote{untisconnect.sub.}}\sphinxbfcode{\sphinxupquote{substitutions\_sorter}}}{\emph{sub}}{}
-Sorting helper (sort function) for substitutions
-:param sub: Substitution to sort
-:return: A string for sorting by
-
-\end{fulllineitems}
-
-
-
-\chapter{Index}
-\label{\detokenize{index:index}}\begin{itemize}
-\item {} 
-\DUrole{xref,std,std-ref}{genindex}
-
-\item {} 
-\DUrole{xref,std,std-ref}{modindex}
-
-\item {} 
-\DUrole{xref,std,std-ref}{search}
-
-\end{itemize}
-
-
-\renewcommand{\indexname}{Python-Modulindex}
-\begin{sphinxtheindex}
-\let\bigletter\sphinxstyleindexlettergroup
-\bigletter{u}
-\item\relax\sphinxstyleindexentry{untisconnect.api}\sphinxstyleindexpageref{index:\detokenize{module-untisconnect.api}}
-\item\relax\sphinxstyleindexentry{untisconnect.sub}\sphinxstyleindexpageref{index:\detokenize{module-untisconnect.sub}}
-\end{sphinxtheindex}
-
-\renewcommand{\indexname}{Stichwortverzeichnis}
-\printindex
-\end{document}
\ No newline at end of file
diff --git a/docs/_build/latex/schoolapps.toc b/docs/_build/latex/schoolapps.toc
deleted file mode 100644
index d7cc16812..000000000
--- a/docs/_build/latex/schoolapps.toc
+++ /dev/null
@@ -1,22 +0,0 @@
-\babel@toc {ngerman}{}
-\contentsline {chapter}{\numberline {1}Development Guide}{1}{chapter.1}% 
-\contentsline {section}{\numberline {1.1}Versionsverwaltung \textendash {} Einsatz von Git}{1}{section.1.1}% 
-\contentsline {section}{\numberline {1.2}Codestyle}{1}{section.1.2}% 
-\contentsline {section}{\numberline {1.3}Editoren/IDEs}{1}{section.1.3}% 
-\contentsline {section}{\numberline {1.4}Dokumentation}{2}{section.1.4}% 
-\contentsline {section}{\numberline {1.5}Problem, Bug, Idee? \textendash {} Issues verwenden!}{2}{section.1.5}% 
-\contentsline {chapter}{\numberline {2}Git Management Guide}{3}{chapter.2}% 
-\contentsline {section}{\numberline {2.1}Hinweis}{3}{section.2.1}% 
-\contentsline {section}{\numberline {2.2}Git-Hosting von SchoolApps}{3}{section.2.2}% 
-\contentsline {section}{\numberline {2.3}Clonen und Ersteinrichtung}{3}{section.2.3}% 
-\contentsline {section}{\numberline {2.4}Was gibt es zu tun? \textendash {} Issues}{4}{section.2.4}% 
-\contentsline {subsection}{\numberline {2.4.1}Issues anlegen}{4}{subsection.2.4.1}% 
-\contentsline {subsubsection}{Wichtig beim Erstellen eines Issues:}{4}{subsubsection*.3}% 
-\contentsline {subsection}{\numberline {2.4.2}Issues bearbeiten/l\IeC {\"o}sen}{4}{subsection.2.4.2}% 
-\contentsline {section}{\numberline {2.5}Am Code arbeiten \textendash {} Die Branches}{4}{section.2.5}% 
-\contentsline {section}{\numberline {2.6}Am Code arbeiten \textendash {} Committen}{5}{section.2.6}% 
-\contentsline {section}{\numberline {2.7}Am Code arbeiten \textendash {} Mergen/Pull Requests}{5}{section.2.7}% 
-\contentsline {chapter}{\numberline {3}Dokumentation}{7}{chapter.3}% 
-\contentsline {chapter}{\numberline {4}Index}{9}{chapter.4}% 
-\contentsline {chapter}{Python-Modulindex}{11}{section*.11}% 
-\contentsline {chapter}{Stichwortverzeichnis}{13}{section*.12}% 
diff --git a/docs/_build/latex/sphinx.sty b/docs/_build/latex/sphinx.sty
deleted file mode 100644
index c18e87a9b..000000000
--- a/docs/_build/latex/sphinx.sty
+++ /dev/null
@@ -1,1859 +0,0 @@
-%
-% sphinx.sty
-%
-% Adapted from the old python.sty, mostly written by Fred Drake,
-% by Georg Brandl.
-%
-
-\NeedsTeXFormat{LaTeX2e}[1995/12/01]
-\ProvidesPackage{sphinx}[2019/09/02 v2.2.1 LaTeX package (Sphinx markup)]
-
-% provides \ltx@ifundefined
-% (many packages load ltxcmds: graphicx does for pdftex and lualatex but
-% not xelatex, and anyhow kvoptions does, but it may be needed in future to
-% use \sphinxdeprecationwarning earlier, and it needs \ltx@ifundefined)
-\RequirePackage{ltxcmds}
-
-%% for deprecation warnings
-\newcommand\sphinxdeprecationwarning[4]{% #1 the deprecated macro or name,
-% #2 = when deprecated, #3 = when removed, #4 = additional info
-  \edef\spx@tempa{\detokenize{#1}}%
-  \ltx@ifundefined{sphinx_depr_\spx@tempa}{%
-     \global\expandafter\let\csname sphinx_depr_\spx@tempa\endcsname\spx@tempa
-     \expandafter\AtEndDocument\expandafter{\expandafter\let\expandafter
-         \sphinxdeprecatedmacro\csname sphinx_depr_\spx@tempa\endcsname
-         \PackageWarningNoLine{sphinx}{^^J**** SPHINX DEPRECATION WARNING:^^J
-         \sphinxdeprecatedmacro^^J
-         \@spaces- is deprecated at Sphinx #2^^J
-         \@spaces- and removed at Sphinx #3.^^J
-         #4^^J****}}%
-  }{% warning already emitted (at end of latex log), don't repeat
-  }}
-
-
-%% PACKAGES
-%
-% we delay handling of options to after having loaded packages, because
-% of the need to use \definecolor.
-\RequirePackage{graphicx}
-\@ifclassloaded{memoir}{}{\RequirePackage{fancyhdr}}
-% for \text macro and \iffirstchoice@ conditional even if amsmath not loaded
-\RequirePackage{amstext}
-\RequirePackage{textcomp}% "warn" option issued from template
-\RequirePackage{titlesec}
-\@ifpackagelater{titlesec}{2016/03/15}%
- {\@ifpackagelater{titlesec}{2016/03/21}%
-  {}%
-  {\newif\ifsphinx@ttlpatch@ok
-   \IfFileExists{etoolbox.sty}{%
-     \RequirePackage{etoolbox}%
-     \patchcmd{\ttlh@hang}{\parindent\z@}{\parindent\z@\leavevmode}%
-                                {\sphinx@ttlpatch@oktrue}{}%
-     \ifsphinx@ttlpatch@ok
-     \patchcmd{\ttlh@hang}{\noindent}{}{}{\sphinx@ttlpatch@okfalse}%
-     \fi
-   }{}%
-   \ifsphinx@ttlpatch@ok
-     \typeout{^^J Package Sphinx Info: ^^J
-              **** titlesec 2.10.1 successfully patched for bugfix ****^^J}%
-   \else
-     \AtEndDocument{\PackageWarningNoLine{sphinx}{^^J%
-******** titlesec 2.10.1 has a bug, (section numbers disappear) ......|^^J%
-******** and Sphinx could not patch it, perhaps because your local ...|^^J%
-******** copy is already fixed without a changed release date. .......|^^J%
-******** If not, you must update titlesec! ...........................|}}%
-   \fi
-  }%
- }{}
-\RequirePackage{tabulary}
-% tabulary has a bug with its re-definition of \multicolumn in its first pass
-% which is not \long. But now Sphinx does not use LaTeX's \multicolumn but its
-% own macro. Hence we don't even need to patch tabulary. See sphinxmulticell.sty
-% X or S (Sphinx) may have meanings if some table package is loaded hence
-% \X was chosen to avoid possibility of conflict
-\newcolumntype{\X}[2]{p{\dimexpr
-      (\linewidth-\arrayrulewidth)*#1/#2-\tw@\tabcolsep-\arrayrulewidth\relax}}
-\newcolumntype{\Y}[1]{p{\dimexpr
-      #1\dimexpr\linewidth-\arrayrulewidth\relax-\tw@\tabcolsep-\arrayrulewidth\relax}}
-% using here T (for Tabulary) feels less of a problem than the X could be
-\newcolumntype{T}{J}%
-% For tables allowing pagebreaks
-\RequirePackage{longtable}
-% User interface to set-up whitespace before and after tables:
-\newcommand*\sphinxtablepre {0pt}%
-\newcommand*\sphinxtablepost{\medskipamount}%
-% Space from caption baseline to top of table or frame of literal-block
-\newcommand*\sphinxbelowcaptionspace{.5\sphinxbaselineskip}%
-% as one can not use \baselineskip from inside longtable (it is zero there)
-% we need \sphinxbaselineskip, which defaults to \baselineskip
-\def\sphinxbaselineskip{\baselineskip}%
-% The following is to ensure that, whether tabular(y) or longtable:
-% - if a caption is on top of table:
-%   a) the space between its last baseline and the top rule of table is
-%      exactly \sphinxbelowcaptionspace
-%   b) the space from last baseline of previous text to first baseline of
-%      caption is exactly \parskip+\baselineskip+ height of a strut.
-%   c) the caption text will wrap at width \LTcapwidth (4in)
-% - make sure this works also if "caption" package is loaded by user
-%   (with its width or margin option taking place of \LTcapwidth role)
-% TODO: obtain same for caption of literal block: a) & c) DONE, b) TO BE DONE
-%
-% To modify space below such top caption, adjust \sphinxbelowcaptionspace
-% To add or remove space above such top caption, adjust \sphinxtablepre:
-%   notice that \abovecaptionskip, \belowcaptionskip, \LTpre are **ignored**
-% A. Table with longtable
-\def\sphinxatlongtablestart
-   {\par
-    \vskip\parskip
-    \vskip\dimexpr\sphinxtablepre\relax % adjust vertical position
-    \vbox{}% get correct baseline from above
-    \LTpre\z@skip\LTpost\z@skip % set to zero longtable's own skips
-    \edef\sphinxbaselineskip{\dimexpr\the\dimexpr\baselineskip\relax\relax}%
-   }%
-% Compatibility with caption package
-\def\sphinxthelongtablecaptionisattop{%
-    \spx@ifcaptionpackage{\noalign{\vskip-\belowcaptionskip}}{}%
-}%
-% Achieves exactly \sphinxbelowcaptionspace below longtable caption
-\def\sphinxlongtablecapskipadjust
-   {\dimexpr-\dp\strutbox
-            -\spx@ifcaptionpackage{\abovecaptionskip}{\sphinxbaselineskip}%
-            +\sphinxbelowcaptionspace\relax}%
-\def\sphinxatlongtableend{\prevdepth\z@\vskip\sphinxtablepost\relax}%
-% B. Table with tabular or tabulary
-\def\sphinxattablestart{\par\vskip\dimexpr\sphinxtablepre\relax}%
-\let\sphinxattableend\sphinxatlongtableend
-% This is used by tabular and tabulary templates
-\newcommand*\sphinxcapstartof[1]{%
-   \vskip\parskip
-   \vbox{}% force baselineskip for good positioning by capstart of hyperanchor
-   % hyperref puts the anchor 6pt above this baseline; in case of caption
-   % this baseline will be \ht\strutbox above first baseline of caption
-   \def\@captype{#1}%
-   \capstart
-% move back vertically, as tabular (or its caption) will compensate
-   \vskip-\baselineskip\vskip-\parskip
-}%
-\def\sphinxthecaptionisattop{% locate it after \sphinxcapstartof
-    \spx@ifcaptionpackage
-      {\caption@setposition{t}%
-       \vskip\baselineskip\vskip\parskip % undo those from \sphinxcapstartof
-       \vskip-\belowcaptionskip          % anticipate caption package skip
-       % caption package uses a \vbox, not a \vtop, so "single line" case
-       % gives different result from "multi-line" without this:
-       \nointerlineskip
-      }%
-      {}%
-}%
-\def\sphinxthecaptionisatbottom{% (not finalized; for template usage)
-    \spx@ifcaptionpackage{\caption@setposition{b}}{}%
-}%
-% The aim of \sphinxcaption is to apply to tabular(y) the maximal width
-% of caption as done by longtable
-\def\sphinxtablecapwidth{\LTcapwidth}%
-\newcommand\sphinxcaption{\@dblarg\spx@caption}%
-\long\def\spx@caption[#1]#2{%
-   \noindent\hb@xt@\linewidth{\hss
-      \vtop{\@tempdima\dimexpr\sphinxtablecapwidth\relax
-% don't exceed linewidth for the caption width
-            \ifdim\@tempdima>\linewidth\hsize\linewidth\else\hsize\@tempdima\fi
-% longtable ignores \abovecaptionskip/\belowcaptionskip, so do the same here
-            \abovecaptionskip\sphinxabovecaptionskip % \z@skip
-            \belowcaptionskip\sphinxbelowcaptionskip % \z@skip
-            \caption[{#1}]%
-               {\strut\ignorespaces#2\ifhmode\unskip\@finalstrut\strutbox\fi}%
-           }\hss}%
-   \par\prevdepth\dp\strutbox
-}%
-\def\sphinxabovecaptionskip{\z@skip}% Do not use! Flagged for removal
-\def\sphinxbelowcaptionskip{\z@skip}% Do not use! Flagged for removal
-% This wrapper of \abovecaptionskip is used in sphinxVerbatim for top
-% caption, and with another value in sphinxVerbatimintable
-% TODO: To unify space above caption of a code-block with the one above
-%       caption of a table/longtable, \abovecaptionskip must not be used
-%       This auxiliary will get renamed and receive a different meaning
-%       in future.
-\def\spx@abovecaptionskip{\abovecaptionskip}%
-% Achieve \sphinxbelowcaptionspace below a caption located above a tabular
-% or a tabulary
-\newcommand\sphinxaftertopcaption
-{%
-   \spx@ifcaptionpackage
-     {\par\prevdepth\dp\strutbox\nobreak\vskip-\abovecaptionskip}{\nobreak}%
-   \vskip\dimexpr\sphinxbelowcaptionspace\relax
-   \vskip-\baselineskip\vskip-\parskip
-}%
-% varwidth is crucial for our handling of general contents in merged cells
-\RequirePackage{varwidth}
-% but addition of a compatibility patch with hyperref is needed
-% (tested with varwidth v 0.92  Mar 2009)
-\AtBeginDocument {%
-    \let\@@vwid@Hy@raisedlink\Hy@raisedlink
-    \long\def\@vwid@Hy@raisedlink#1{\@vwid@wrap{\@@vwid@Hy@raisedlink{#1}}}%
-    \edef\@vwid@setup{%
-      \let\noexpand\Hy@raisedlink\noexpand\@vwid@Hy@raisedlink % HYPERREF !
-      \unexpanded\expandafter{\@vwid@setup}}%
-}%
-% Homemade package to handle merged cells
-\RequirePackage{sphinxmulticell}
-\RequirePackage{makeidx}
-% For framing code-blocks and warning type notices, and shadowing topics
-\RequirePackage{framed}
-% The xcolor package draws better fcolorboxes around verbatim code
-\IfFileExists{xcolor.sty}{
-    \RequirePackage{xcolor}
-}{
-    \RequirePackage{color}
-}
-% For highlighted code.
-\RequirePackage{fancyvrb}
-\define@key{FV}{hllines}{\def\sphinx@verbatim@checkifhl##1{\in@{, ##1,}{#1}}}
-% sphinxVerbatim must be usable by third party without requiring hllines set-up
-\def\sphinxresetverbatimhllines{\def\sphinx@verbatim@checkifhl##1{\in@false}}
-\sphinxresetverbatimhllines
-% For hyperlinked footnotes in tables; also for gathering footnotes from
-% topic and warning blocks. Also to allow code-blocks in footnotes.
-\RequirePackage{footnotehyper-sphinx}
-% For the H specifier. Do not \restylefloat{figure}, it breaks Sphinx code
-% for allowing figures in tables.
-\RequirePackage{float}
-% For floating figures in the text. Better to load after float.
-\RequirePackage{wrapfig}
-% Separate paragraphs by space by default.
-\IfFileExists{parskip-2001-04-09.sty}% since September 2018 TeXLive update
-% new parskip.sty, but let it rollback to old one.
-% hopefully TeX installation not broken and LaTeX kernel not too old
-   {\RequirePackage{parskip}[=v1]}
-% standard one from 1989. Admittedly \section of article/book gives possibly
-% anomalous spacing, but we can't require September 2018 release for some time.
-   {\RequirePackage{parskip}}
-% For parsed-literal blocks.
-\RequirePackage{alltt}
-% Display "real" single quotes in literal blocks.
-\RequirePackage{upquote}
-% control caption around literal-block
-\RequirePackage{capt-of}
-\RequirePackage{needspace}
-% LaTeX 2018-04-01 and later provides \@removefromreset
-\ltx@ifundefined{@removefromreset}
-    {\RequirePackage{remreset}}
-    {}% avoid warning
-% to make pdf with correct encoded bookmarks in Japanese
-% this should precede the hyperref package
-\ifx\kanjiskip\@undefined
-% for non-Japanese: make sure bookmarks are ok also with lualatex
-  \PassOptionsToPackage{pdfencoding=unicode}{hyperref}
-\else
-  \RequirePackage{atbegshi}
-  \ifx\ucs\@undefined
-    \ifnum 42146=\euc"A4A2
-      \AtBeginShipoutFirst{\special{pdf:tounicode EUC-UCS2}}
-    \else
-      \AtBeginShipoutFirst{\special{pdf:tounicode 90ms-RKSJ-UCS2}}
-    \fi
-  \else
-    \AtBeginShipoutFirst{\special{pdf:tounicode UTF8-UCS2}}
-  \fi
-\fi
-
-\ifx\@jsc@uplatextrue\@undefined\else
-  \PassOptionsToPackage{setpagesize=false}{hyperref}
-\fi
-
-% These options can be overriden inside  'hyperref' key
-% or by later use of \hypersetup.
-\PassOptionsToPackage{colorlinks,breaklinks,%
- linkcolor=InnerLinkColor,filecolor=OuterLinkColor,%
- menucolor=OuterLinkColor,urlcolor=OuterLinkColor,%
- citecolor=InnerLinkColor}{hyperref}
-
-% stylesheet for highlighting with pygments
-\RequirePackage{sphinxhighlight}
-% fix baseline increase from Pygments latex formatter in case of error tokens
-% and keep \fboxsep's scope local via added braces
-\def\PYG@tok@err{%
-    \def\PYG@bc##1{{\setlength{\fboxsep}{-\fboxrule}%
-                    \fcolorbox[rgb]{1.00,0.00,0.00}{1,1,1}{\strut ##1}}}%
-}
-\def\PYG@tok@cs{%
-    \def\PYG@tc##1{\textcolor[rgb]{0.25,0.50,0.56}{##1}}%
-    \def\PYG@bc##1{{\setlength{\fboxsep}{0pt}%
-                    \colorbox[rgb]{1.00,0.94,0.94}{\strut ##1}}}%
-}%
-
-
-%% OPTIONS
-%
-% Handle options via "kvoptions" (later loaded by hyperref anyhow)
-\RequirePackage{kvoptions}
-\SetupKeyvalOptions{prefix=spx@opt@} % use \spx@opt@ prefix
-
-% Sphinx legacy text layout: 1in margins on all four sides
-\ifx\@jsc@uplatextrue\@undefined
-\DeclareStringOption[1in]{hmargin}
-\DeclareStringOption[1in]{vmargin}
-\DeclareStringOption[.5in]{marginpar}
-\else
-% Japanese standard document classes handle \mag in a special way
-\DeclareStringOption[\inv@mag in]{hmargin}
-\DeclareStringOption[\inv@mag in]{vmargin}
-\DeclareStringOption[.5\dimexpr\inv@mag in\relax]{marginpar}
-\fi
-
-\DeclareStringOption[0]{maxlistdepth}% \newcommand*\spx@opt@maxlistdepth{0}
-\DeclareStringOption[-1]{numfigreset}
-\DeclareBoolOption[false]{nonumfigreset}
-\DeclareBoolOption[false]{mathnumfig}
-% \DeclareBoolOption[false]{usespart}% not used
-% dimensions, we declare the \dimen registers here.
-\newdimen\sphinxverbatimsep
-\newdimen\sphinxverbatimborder
-\newdimen\sphinxshadowsep
-\newdimen\sphinxshadowsize
-\newdimen\sphinxshadowrule
-% \DeclareStringOption is not convenient for the handling of these dimensions
-% because we want to assign the values to the corresponding registers. Even if
-% we added the code to the key handler it would be too late for the initial
-% set-up and we would need to do initial assignments explicitely. We end up
-% using \define@key directly.
-% verbatim
-\sphinxverbatimsep=\fboxsep
-  \define@key{sphinx}{verbatimsep}{\sphinxverbatimsep\dimexpr #1\relax}
-\sphinxverbatimborder=\fboxrule
-  \define@key{sphinx}{verbatimborder}{\sphinxverbatimborder\dimexpr #1\relax}
-% topic boxes
-\sphinxshadowsep =5pt
-  \define@key{sphinx}{shadowsep}{\sphinxshadowsep\dimexpr #1\relax}
-\sphinxshadowsize=4pt
-  \define@key{sphinx}{shadowsize}{\sphinxshadowsize\dimexpr #1\relax}
-\sphinxshadowrule=\fboxrule
-  \define@key{sphinx}{shadowrule}{\sphinxshadowrule\dimexpr #1\relax}
-% verbatim
-\DeclareBoolOption[true]{verbatimwithframe}
-\DeclareBoolOption[true]{verbatimwrapslines}
-\DeclareBoolOption[true]{verbatimhintsturnover}
-\DeclareBoolOption[true]{inlineliteralwraps}
-\DeclareStringOption[t]{literalblockcappos}
-\DeclareStringOption[r]{verbatimcontinuedalign}
-\DeclareStringOption[r]{verbatimcontinuesalign}
-% parsed literal
-\DeclareBoolOption[true]{parsedliteralwraps}
-% \textvisiblespace for compatibility with fontspec+XeTeX/LuaTeX
-\DeclareStringOption[\textcolor{red}{\textvisiblespace}]{verbatimvisiblespace}
-\DeclareStringOption % must use braces to hide the brackets
-  [{\makebox[2\fontcharwd\font`\x][r]{\textcolor{red}{\tiny$\m@th\hookrightarrow$}}}]%
-  {verbatimcontinued}
-% notices/admonitions
-% the dimensions for notices/admonitions are kept as macros and assigned to
-% \spx@notice@border at time of use, hence \DeclareStringOption is ok for this
-\newdimen\spx@notice@border
-\DeclareStringOption[0.5pt]{noteborder}
-\DeclareStringOption[0.5pt]{hintborder}
-\DeclareStringOption[0.5pt]{importantborder}
-\DeclareStringOption[0.5pt]{tipborder}
-\DeclareStringOption[1pt]{warningborder}
-\DeclareStringOption[1pt]{cautionborder}
-\DeclareStringOption[1pt]{attentionborder}
-\DeclareStringOption[1pt]{dangerborder}
-\DeclareStringOption[1pt]{errorborder}
-% footnotes
-\DeclareStringOption[\mbox{ }]{AtStartFootnote}
-% we need a public macro name for direct use in latex file
-\newcommand*{\sphinxAtStartFootnote}{\spx@opt@AtStartFootnote}
-% no such need for this one, as it is used inside other macros
-\DeclareStringOption[\leavevmode\unskip]{BeforeFootnote}
-% some font styling.
-\DeclareStringOption[\sffamily\bfseries]{HeaderFamily}
-% colours
-% same problems as for dimensions: we want the key handler to use \definecolor.
-% first, some colours with no prefix, for backwards compatibility
-\newcommand*{\sphinxDeclareColorOption}[2]{%
-   \definecolor{#1}#2%
-   \define@key{sphinx}{#1}{\definecolor{#1}##1}%
-}%
-\sphinxDeclareColorOption{TitleColor}{{rgb}{0.126,0.263,0.361}}
-\sphinxDeclareColorOption{InnerLinkColor}{{rgb}{0.208,0.374,0.486}}
-\sphinxDeclareColorOption{OuterLinkColor}{{rgb}{0.216,0.439,0.388}}
-\sphinxDeclareColorOption{VerbatimColor}{{rgb}{1,1,1}}
-\sphinxDeclareColorOption{VerbatimBorderColor}{{rgb}{0,0,0}}
-% now the colours defined with "sphinx" prefix in their names
-\newcommand*{\sphinxDeclareSphinxColorOption}[2]{%
-   % set the initial default
-   \definecolor{sphinx#1}#2%
-   % set the key handler. The "value" ##1 must be acceptable by \definecolor.
-   \define@key{sphinx}{#1}{\definecolor{sphinx#1}##1}%
-}%
-% Default color chosen to be as in minted.sty LaTeX package!
-\sphinxDeclareSphinxColorOption{VerbatimHighlightColor}{{rgb}{0.878,1,1}}
-% admonition boxes, "light" style
-\sphinxDeclareSphinxColorOption{noteBorderColor}{{rgb}{0,0,0}}
-\sphinxDeclareSphinxColorOption{hintBorderColor}{{rgb}{0,0,0}}
-\sphinxDeclareSphinxColorOption{importantBorderColor}{{rgb}{0,0,0}}
-\sphinxDeclareSphinxColorOption{tipBorderColor}{{rgb}{0,0,0}}
-% admonition boxes, "heavy" style
-\sphinxDeclareSphinxColorOption{warningBorderColor}{{rgb}{0,0,0}}
-\sphinxDeclareSphinxColorOption{cautionBorderColor}{{rgb}{0,0,0}}
-\sphinxDeclareSphinxColorOption{attentionBorderColor}{{rgb}{0,0,0}}
-\sphinxDeclareSphinxColorOption{dangerBorderColor}{{rgb}{0,0,0}}
-\sphinxDeclareSphinxColorOption{errorBorderColor}{{rgb}{0,0,0}}
-\sphinxDeclareSphinxColorOption{warningBgColor}{{rgb}{1,1,1}}
-\sphinxDeclareSphinxColorOption{cautionBgColor}{{rgb}{1,1,1}}
-\sphinxDeclareSphinxColorOption{attentionBgColor}{{rgb}{1,1,1}}
-\sphinxDeclareSphinxColorOption{dangerBgColor}{{rgb}{1,1,1}}
-\sphinxDeclareSphinxColorOption{errorBgColor}{{rgb}{1,1,1}}
-
-\DeclareDefaultOption{\@unknownoptionerror}
-\ProcessKeyvalOptions*
-% don't allow use of maxlistdepth via \sphinxsetup.
-\DisableKeyvalOption{sphinx}{maxlistdepth}
-\DisableKeyvalOption{sphinx}{numfigreset}
-\DisableKeyvalOption{sphinx}{nonumfigreset}
-\DisableKeyvalOption{sphinx}{mathnumfig}
-% user interface: options can be changed midway in a document!
-\newcommand\sphinxsetup[1]{\setkeys{sphinx}{#1}}
-
-
-%% ALPHANUMERIC LIST ITEMS
-\newcommand\sphinxsetlistlabels[5]
-{% #1 = style, #2 = enum, #3 = enumnext, #4 = prefix, #5 = suffix
- % #2 and #3 are counters used by enumerate environement e.g. enumi, enumii.
- % #1 is a macro such as \arabic or \alph
- % prefix and suffix are strings (by default empty and a dot).
- \@namedef{the#2}{#1{#2}}%
- \@namedef{label#2}{#4\@nameuse{the#2}#5}%
- \@namedef{p@#3}{\@nameuse{p@#2}#4\@nameuse{the#2}#5}%
-}%
-
-
-%% MAXLISTDEPTH
-%
-% remove LaTeX's cap on nesting depth if 'maxlistdepth' key used.
-% This is a hack, which works with the standard classes: it assumes \@toodeep
-% is always used in "true" branches: "\if ... \@toodeep \else .. \fi."
-
-% will force use the "false" branch (if there is one)
-\def\spx@toodeep@hack{\fi\iffalse}
-
-% do nothing if 'maxlistdepth' key not used or if package enumitem loaded.
-\ifnum\spx@opt@maxlistdepth=\z@\expandafter\@gobbletwo\fi
-\AtBeginDocument{%
-\@ifpackageloaded{enumitem}{\remove@to@nnil}{}%
-  \let\spx@toodeepORI\@toodeep
-  \def\@toodeep{%
-    \ifnum\@listdepth<\spx@opt@maxlistdepth\relax
-      \expandafter\spx@toodeep@hack
-    \else
-      \expandafter\spx@toodeepORI
-    \fi}%
-% define all missing \@list... macros
-  \count@\@ne
-  \loop
-     \ltx@ifundefined{@list\romannumeral\the\count@}
-       {\iffalse}{\iftrue\advance\count@\@ne}%
-  \repeat
-  \loop
-     \ifnum\count@>\spx@opt@maxlistdepth\relax\else
-       \expandafter\let
-         \csname @list\romannumeral\the\count@\expandafter\endcsname
-         \csname @list\romannumeral\the\numexpr\count@-\@ne\endcsname
-       % workaround 2.6--3.2d babel-french issue (fixed in 3.2e; no change needed)
-       \ltx@ifundefined{leftmargin\romannumeral\the\count@}
-       {\expandafter\let
-         \csname leftmargin\romannumeral\the\count@\expandafter\endcsname
-         \csname leftmargin\romannumeral\the\numexpr\count@-\@ne\endcsname}{}%
-     \advance\count@\@ne
-  \repeat
-% define all missing enum... counters and \labelenum... macros and \p@enum..
-  \count@\@ne
-  \loop
-     \ltx@ifundefined{c@enum\romannumeral\the\count@}
-       {\iffalse}{\iftrue\advance\count@\@ne}%
-  \repeat
-  \loop
-     \ifnum\count@>\spx@opt@maxlistdepth\relax\else
-       \newcounter{enum\romannumeral\the\count@}%
-       \expandafter\def
-         \csname labelenum\romannumeral\the\count@\expandafter\endcsname
-         \expandafter
-         {\csname theenum\romannumeral\the\numexpr\count@\endcsname.}%
-       \expandafter\def
-         \csname p@enum\romannumeral\the\count@\expandafter\endcsname
-         \expandafter
-         {\csname p@enum\romannumeral\the\numexpr\count@-\@ne\expandafter
-          \endcsname\csname theenum\romannumeral\the\numexpr\count@-\@ne\endcsname.}%
-     \advance\count@\@ne
-  \repeat
-% define all missing labelitem... macros
-  \count@\@ne
-  \loop
-     \ltx@ifundefined{labelitem\romannumeral\the\count@}
-     {\iffalse}{\iftrue\advance\count@\@ne}%
-  \repeat
-  \loop
-     \ifnum\count@>\spx@opt@maxlistdepth\relax\else
-       \expandafter\let
-         \csname labelitem\romannumeral\the\count@\expandafter\endcsname
-         \csname labelitem\romannumeral\the\numexpr\count@-\@ne\endcsname
-     \advance\count@\@ne
-  \repeat
-  \PackageInfo{sphinx}{maximal list depth extended to \spx@opt@maxlistdepth}%
-\@gobble\@nnil
-}
-
-
-%% INDEX, BIBLIOGRAPHY, APPENDIX, TABLE OF CONTENTS
-%
-% fix the double index and bibliography on the table of contents
-% in jsclasses (Japanese standard document classes)
-\ifx\@jsc@uplatextrue\@undefined\else
-  \renewenvironment{sphinxtheindex}
-    {\cleardoublepage\phantomsection
-     \begin{theindex}}
-    {\end{theindex}}
-
-  \renewenvironment{sphinxthebibliography}[1]
-    {\cleardoublepage% \phantomsection % not needed here since TeXLive 2010's hyperref
-     \begin{thebibliography}{#1}}
-    {\end{thebibliography}}
-\fi
-
-% disable \@chappos in Appendix in pTeX
-\ifx\kanjiskip\@undefined\else
-  \let\py@OldAppendix=\appendix
-  \renewcommand{\appendix}{
-    \py@OldAppendix
-    \gdef\@chappos{}
-  }
-\fi
-
-% make commands known to non-Sphinx document classes
-\providecommand*{\sphinxmaketitle}{\maketitle}
-\providecommand*{\sphinxtableofcontents}{\tableofcontents}
-\ltx@ifundefined{sphinxthebibliography}
- {\newenvironment
-  {sphinxthebibliography}{\begin{thebibliography}}{\end{thebibliography}}%
- }
- {}% else clause of \ltx@ifundefined
-\ltx@ifundefined{sphinxtheindex}
- {\newenvironment{sphinxtheindex}{\begin{theindex}}{\end{theindex}}}%
- {}% else clause of \ltx@ifundefined
-
-% for usage with xindy: this string gets internationalized in preamble
-\newcommand*{\sphinxnonalphabeticalgroupname}{}
-% redefined in preamble, headings for makeindex produced index
-\newcommand*{\sphinxsymbolsname}{}
-\newcommand*{\sphinxnumbersname}{}
-
-%% COLOR (general)
-%
-% FIXME: \normalcolor should probably be used in place of \py@NormalColor
-% elsewhere, and \py@NormalColor should never be defined. \normalcolor
-% switches to the colour from last \color call in preamble.
-\def\py@NormalColor{\color{black}}
-% FIXME: it is probably better to use \color{TitleColor}, as TitleColor
-% can be customized from 'sphinxsetup', and drop usage of \py@TitleColor
-\def\py@TitleColor{\color{TitleColor}}
-% FIXME: this line should be dropped, as "9" is default anyhow.
-\ifdefined\pdfcompresslevel\pdfcompresslevel = 9 \fi
-
-
-%% PAGE STYLING
-%
-% Style parameters and macros used by most documents here
-\raggedbottom
-\sloppy
-\hbadness = 5000                % don't print trivial gripes
-
-% Use \pagestyle{normal} as the primary pagestyle for text.
-% Redefine the 'normal' header/footer style when using "fancyhdr" package:
-\@ifpackageloaded{fancyhdr}{%
-  \ltx@ifundefined{c@chapter}
-  {% no \chapter, "howto" (non-Japanese) docclass
-   \fancypagestyle{plain}{
-    \fancyhf{}
-    \fancyfoot[C]{{\py@HeaderFamily\thepage}}
-    \renewcommand{\headrulewidth}{0pt}
-    \renewcommand{\footrulewidth}{0pt}
-   }
-   % Same as 'plain', this way we can use it in template
-   % FIXME: shouldn't this have a running header with Name and Release like 'manual'?
-   \fancypagestyle{normal}{
-    \fancyhf{}
-    \fancyfoot[C]{{\py@HeaderFamily\thepage}}
-    \renewcommand{\headrulewidth}{0pt}
-    \renewcommand{\footrulewidth}{0pt}
-   }
-  }%
-  {% classes with \chapter command
-   \fancypagestyle{normal}{
-    \fancyhf{}
-   % FIXME: this presupposes "twoside".
-   % If "oneside" class option, there are warnings in LaTeX log.
-    \fancyfoot[LE,RO]{{\py@HeaderFamily\thepage}}
-    \fancyfoot[LO]{{\py@HeaderFamily\nouppercase{\rightmark}}}
-    \fancyfoot[RE]{{\py@HeaderFamily\nouppercase{\leftmark}}}
-    \fancyhead[LE,RO]{{\py@HeaderFamily \@title\sphinxheadercomma\py@release}}
-    \renewcommand{\headrulewidth}{0.4pt}
-    \renewcommand{\footrulewidth}{0.4pt}
-    % define chaptermark with \@chappos when \@chappos is available for Japanese
-    \ltx@ifundefined{@chappos}{}
-      {\def\chaptermark##1{\markboth{\@chapapp\space\thechapter\space\@chappos\space ##1}{}}}
-    }
-  % Update the plain style so we get the page number & footer line,
-  % but not a chapter or section title.  This is to keep the first
-  % page of a chapter `clean.'
-   \fancypagestyle{plain}{
-    \fancyhf{}
-    \fancyfoot[LE,RO]{{\py@HeaderFamily\thepage}}
-    \renewcommand{\headrulewidth}{0pt}
-    \renewcommand{\footrulewidth}{0.4pt}
-    }
-   }
-  }
-  {% no fancyhdr: memoir class
-   % Provide default for 'normal' style simply as an alias of 'plain' style
-   % This way we can use \pagestyle{normal} in LaTeX template
-   \def\ps@normal{\ps@plain}
-   % Users of memoir class are invited to redefine 'normal' style in preamble
-  }
-
-% geometry
-\ifx\kanjiskip\@undefined
-  \PassOptionsToPackage{%
-     hmargin={\unexpanded{\spx@opt@hmargin}},%
-     vmargin={\unexpanded{\spx@opt@vmargin}},%
-     marginpar=\unexpanded{\spx@opt@marginpar}}
-  {geometry}
-\else
- % set text width for Japanese documents to be integer multiple of 1zw
- % and text height to be integer multiple of \baselineskip
- % the execution is delayed to \sphinxsetup then geometry.sty
- \normalsize\normalfont
- \newcommand*\sphinxtextwidthja[1]{%
-    \if@twocolumn\tw@\fi
-    \dimexpr
-       \numexpr\dimexpr\paperwidth-\tw@\dimexpr#1\relax\relax/
-               \dimexpr\if@twocolumn\tw@\else\@ne\fi zw\relax
-    zw\relax}%
- \newcommand*\sphinxmarginparwidthja[1]{%
-    \dimexpr\numexpr\dimexpr#1\relax/\dimexpr1zw\relax zw\relax}%
- \newcommand*\sphinxtextlinesja[1]{%
-    \numexpr\@ne+\dimexpr\paperheight-\topskip-\tw@\dimexpr#1\relax\relax/
-                 \baselineskip\relax}%
- \ifx\@jsc@uplatextrue\@undefined\else
- % the way we found in order for the papersize special written by
- % geometry in the dvi file to be correct in case of jsbook class
-   \ifnum\mag=\@m\else % do nothing special if nomag class option or 10pt
-     \PassOptionsToPackage{truedimen}{geometry}%
-   \fi
- \fi
- \PassOptionsToPackage{%
-    hmarginratio={1:1},%
-    textwidth=\unexpanded{\sphinxtextwidthja{\spx@opt@hmargin}},%
-    vmarginratio={1:1},%
-    lines=\unexpanded{\sphinxtextlinesja{\spx@opt@vmargin}},%
-    marginpar=\unexpanded{\sphinxmarginparwidthja{\spx@opt@marginpar}},%
-    footskip=2\baselineskip,%
-  }{geometry}%
- \AtBeginDocument
- {% update a dimension used by the jsclasses
-  \ifx\@jsc@uplatextrue\@undefined\else\fullwidth\textwidth\fi
-  % for some reason, jreport normalizes all dimensions with \@settopoint
-  \@ifclassloaded{jreport}
-    {\@settopoint\textwidth\@settopoint\textheight\@settopoint\marginparwidth}
-    {}% <-- "false" clause of \@ifclassloaded
-  }%
-\fi
-
-% fix fncychap's bug which uses prematurely the \textwidth value
-\@ifpackagewith{fncychap}{Bjornstrup}
- {\AtBeginDocument{\mylen\textwidth\advance\mylen-2\myhi}}%
- {}% <-- "false" clause of \@ifpackagewith
-
-
-%% TITLES
-%
-% Since Sphinx 1.5, users should use HeaderFamily key to 'sphinxsetup' rather
-% than defining their own \py@HeaderFamily command (which is still possible).
-% Memo: \py@HeaderFamily is also used by \maketitle as defined in
-% sphinxmanual.cls/sphinxhowto.cls
-\newcommand{\py@HeaderFamily}{\spx@opt@HeaderFamily}
-
-% This sets up the fancy chapter headings that make the documents look
-% at least a little better than the usual LaTeX output.
-\@ifpackagewith{fncychap}{Bjarne}{
-  \ChNameVar {\raggedleft\normalsize \py@HeaderFamily}
-  \ChNumVar  {\raggedleft\Large      \py@HeaderFamily}
-  \ChTitleVar{\raggedleft\Large      \py@HeaderFamily}
-  % This creates (numbered) chapter heads without the leading \vspace*{}:
-  \def\@makechapterhead#1{%
-    {\parindent \z@ \raggedright \normalfont
-      \ifnum \c@secnumdepth >\m@ne
-        \if@mainmatter
-          \DOCH
-        \fi
-      \fi
-      \interlinepenalty\@M
-      \if@mainmatter
-        \DOTI{#1}%
-      \else%
-        \DOTIS{#1}%
-      \fi
-    }}
-}{}% <-- "false" clause of \@ifpackagewith
-
-% Augment the sectioning commands used to get our own font family in place,
-% and reset some internal data items (\titleformat from titlesec package)
-\titleformat{\section}{\Large\py@HeaderFamily}%
-            {\py@TitleColor\thesection}{0.5em}{\py@TitleColor}{\py@NormalColor}
-\titleformat{\subsection}{\large\py@HeaderFamily}%
-            {\py@TitleColor\thesubsection}{0.5em}{\py@TitleColor}{\py@NormalColor}
-\titleformat{\subsubsection}{\py@HeaderFamily}%
-            {\py@TitleColor\thesubsubsection}{0.5em}{\py@TitleColor}{\py@NormalColor}
-% By default paragraphs (and subsubsections) will not be numbered because
-% sphinxmanual.cls and sphinxhowto.cls set secnumdepth to 2
-\titleformat{\paragraph}{\py@HeaderFamily}%
-            {\py@TitleColor\theparagraph}{0.5em}{\py@TitleColor}{\py@NormalColor}
-\titleformat{\subparagraph}{\py@HeaderFamily}%
-            {\py@TitleColor\thesubparagraph}{0.5em}{\py@TitleColor}{\py@NormalColor}
-
-
-%% GRAPHICS
-%
-% \sphinxincludegraphics resizes images larger than the TeX \linewidth (which
-% is adjusted in indented environments), or taller than a certain maximal
-% height (usually \textheight and this is reduced in the environments which use
-% framed.sty to avoid infinite loop if image too tall).
-%
-% In case height or width options are present the rescaling is done
-% (since 2.0), in a way keeping the width:height ratio either native from
-% image or from the width and height options if both were present.
-%
-\newdimen\spx@image@maxheight
-\AtBeginDocument{\spx@image@maxheight\textheight}
-
-% box scratch register
-\newdimen\spx@image@box
-\newcommand*{\sphinxsafeincludegraphics}[2][]{%
-    % #1 contains possibly width=, height=, but no scale= since 1.8.4
-    \setbox\spx@image@box\hbox{\includegraphics[#1,draft]{#2}}%
-    \in@false % use some handy boolean flag
-    \ifdim \wd\spx@image@box>\linewidth
-      \in@true % flag to remember to adjust options and set box dimensions
-      % compute height which results from rescaling width to \linewidth
-      % and keep current aspect ratio. multiply-divide in \numexpr uses
-      % temporarily doubled precision, hence no overflow. (of course we
-      % assume \ht is not a few sp's below \maxdimen...(about 16384pt).
-      \edef\spx@image@rescaledheight % with sp units
-           {\the\numexpr\ht\spx@image@box
-                        *\linewidth/\wd\spx@image@box sp}%
-      \ifdim\spx@image@rescaledheight>\spx@image@maxheight
-        % the rescaled height will be too big, so it is height which decides
-        % the rescaling factor
-        \def\spx@image@requiredheight{\spx@image@maxheight}% dimen register
-        \edef\spx@image@requiredwidth % with sp units
-         {\the\numexpr\wd\spx@image@box
-                      *\spx@image@maxheight/\ht\spx@image@box sp}%
-        % TODO: decide if this commented-out block could be needed due to
-        % rounding in numexpr operations going up
-        % \ifdim\spx@image@requiredwidth>\linewidth
-        %     \def\spx@image@requiredwidth{\linewidth}% dimen register
-        % \fi
-      \else
-        \def\spx@image@requiredwidth{\linewidth}% dimen register
-        \let\spx@image@requiredheight\spx@image@rescaledheight% sp units
-      \fi
-    \else
-      % width is ok, let's check height
-      \ifdim\ht\spx@image@box>\spx@image@maxheight
-        \in@true
-        \edef\spx@image@requiredwidth % with sp units
-            {\the\numexpr\wd\spx@image@box
-                         *\spx@image@maxheight/\ht\spx@image@box sp}%
-        \def\spx@image@requiredheight{\spx@image@maxheight}% dimen register
-      \fi
-    \fi % end of check of width and height
-    \ifin@
-      \setbox\spx@image@box
-      \hbox{\includegraphics
-            [%#1,% contained only width and/or height and overruled anyhow
-            width=\spx@image@requiredwidth,height=\spx@image@requiredheight]%
-            {#2}}%
-      % \includegraphics does not set box dimensions to the exactly
-      % requested ones, see https://github.com/latex3/latex2e/issues/112
-      \wd\spx@image@box\spx@image@requiredwidth
-      \ht\spx@image@box\spx@image@requiredheight
-      \leavevmode\box\spx@image@box
-    \else
-      % here we do not modify the options, no need to adjust width and height
-      % on output, they will be computed exactly as with "draft" option
-      \setbox\spx@image@box\box\voidb@x % clear memory
-      \includegraphics[#1]{#2}%
-    \fi
-}%
-% Use the "safe" one by default (2.0)
-\def\sphinxincludegraphics{\sphinxsafeincludegraphics}
-
-
-%% FIGURE IN TABLE
-%
-\newenvironment{sphinxfigure-in-table}[1][\linewidth]{%
-  \def\@captype{figure}%
-  \sphinxsetvskipsforfigintablecaption
-  \begin{minipage}{#1}%
-}{\end{minipage}}
-% store the original \caption macro for usage with figures inside longtable
-% and tabulary cells. Make sure we get the final \caption in presence of
-% caption package, whether the latter was loaded before or after sphinx.
-\AtBeginDocument{%
-    \let\spx@originalcaption\caption
-    \@ifpackageloaded{caption}
-      {\let\spx@ifcaptionpackage\@firstoftwo
-       \caption@AtBeginDocument*{\let\spx@originalcaption\caption}%
-% in presence of caption package, drop our own \sphinxcaption whose aim was to
-% ensure same width of caption to all kinds of tables (tabular(y), longtable),
-% because caption package has its own width (or margin) option
-       \def\sphinxcaption{\caption}%
-      }%
-      {\let\spx@ifcaptionpackage\@secondoftwo}%
-}
-% tabulary expands twice contents, we need to prevent double counter stepping
-\newcommand*\sphinxfigcaption
-  {\ifx\equation$%$% this is trick to identify tabulary first pass
-       \firstchoice@false\else\firstchoice@true\fi
-   \spx@originalcaption }
-\newcommand*\sphinxsetvskipsforfigintablecaption
-  {\abovecaptionskip\smallskipamount
-   \belowcaptionskip\smallskipamount}
-
-
-%% CITATIONS
-%
-\protected\def\sphinxcite{\cite}
-
-%% FOOTNOTES
-%
-% Support large numbered footnotes in minipage
-% But now obsolete due to systematic use of \savenotes/\spewnotes
-% when minipages are in use in the various macro definitions next.
-\def\thempfootnote{\arabic{mpfootnote}}
-
-
-%% NUMBERING OF FIGURES, TABLES, AND LITERAL BLOCKS
-\ltx@ifundefined{c@chapter}
-   {\newcounter{literalblock}}%
-   {\newcounter{literalblock}[chapter]%
-    \def\theliteralblock{\ifnum\c@chapter>\z@\arabic{chapter}.\fi
-                         \arabic{literalblock}}%
-    }%
-\ifspx@opt@nonumfigreset
-    \ltx@ifundefined{c@chapter}{}{%
-      \@removefromreset{figure}{chapter}%
-      \@removefromreset{table}{chapter}%
-      \@removefromreset{literalblock}{chapter}%
-      \ifspx@opt@mathnumfig
-        \@removefromreset{equation}{chapter}%
-      \fi
-    }%
-    \def\thefigure{\arabic{figure}}%
-    \def\thetable {\arabic{table}}%
-    \def\theliteralblock{\arabic{literalblock}}%
-    \ifspx@opt@mathnumfig
-      \def\theequation{\arabic{equation}}%
-    \fi
-\else
-\let\spx@preAthefigure\@empty
-\let\spx@preBthefigure\@empty
-% \ifspx@opt@usespart  % <-- LaTeX writer could pass such a 'usespart' boolean
-%                      %     as sphinx.sty package option
-% If document uses \part, (triggered in Sphinx by latex_toplevel_sectioning)
-% LaTeX core per default does not reset chapter or section
-% counters at each part.
-% But if we modify this, we need to redefine \thechapter, \thesection to
-% include the part number and this will cause problems in table of contents
-% because of too wide numbering. Simplest is to do nothing.
-% \fi
-\ifnum\spx@opt@numfigreset>0
-    \ltx@ifundefined{c@chapter}
-      {}
-      {\g@addto@macro\spx@preAthefigure{\ifnum\c@chapter>\z@\arabic{chapter}.}%
-       \g@addto@macro\spx@preBthefigure{\fi}}%
-\fi
-\ifnum\spx@opt@numfigreset>1
-    \@addtoreset{figure}{section}%
-    \@addtoreset{table}{section}%
-    \@addtoreset{literalblock}{section}%
-    \ifspx@opt@mathnumfig
-      \@addtoreset{equation}{section}%
-    \fi
-    \g@addto@macro\spx@preAthefigure{\ifnum\c@section>\z@\arabic{section}.}%
-    \g@addto@macro\spx@preBthefigure{\fi}%
-\fi
-\ifnum\spx@opt@numfigreset>2
-    \@addtoreset{figure}{subsection}%
-    \@addtoreset{table}{subsection}%
-    \@addtoreset{literalblock}{subsection}%
-    \ifspx@opt@mathnumfig
-      \@addtoreset{equation}{subsection}%
-    \fi
-    \g@addto@macro\spx@preAthefigure{\ifnum\c@subsection>\z@\arabic{subsection}.}%
-    \g@addto@macro\spx@preBthefigure{\fi}%
-\fi
-\ifnum\spx@opt@numfigreset>3
-    \@addtoreset{figure}{subsubsection}%
-    \@addtoreset{table}{subsubsection}%
-    \@addtoreset{literalblock}{subsubsection}%
-    \ifspx@opt@mathnumfig
-      \@addtoreset{equation}{subsubsection}%
-    \fi
-    \g@addto@macro\spx@preAthefigure{\ifnum\c@subsubsection>\z@\arabic{subsubsection}.}%
-    \g@addto@macro\spx@preBthefigure{\fi}%
-\fi
-\ifnum\spx@opt@numfigreset>4
-    \@addtoreset{figure}{paragraph}%
-    \@addtoreset{table}{paragraph}%
-    \@addtoreset{literalblock}{paragraph}%
-    \ifspx@opt@mathnumfig
-      \@addtoreset{equation}{paragraph}%
-    \fi
-    \g@addto@macro\spx@preAthefigure{\ifnum\c@subparagraph>\z@\arabic{subparagraph}.}%
-    \g@addto@macro\spx@preBthefigure{\fi}%
-\fi
-\ifnum\spx@opt@numfigreset>5
-    \@addtoreset{figure}{subparagraph}%
-    \@addtoreset{table}{subparagraph}%
-    \@addtoreset{literalblock}{subparagraph}%
-    \ifspx@opt@mathnumfig
-      \@addtoreset{equation}{subparagraph}%
-    \fi
-    \g@addto@macro\spx@preAthefigure{\ifnum\c@subsubparagraph>\z@\arabic{subsubparagraph}.}%
-    \g@addto@macro\spx@preBthefigure{\fi}%
-\fi
-\expandafter\g@addto@macro
-\expandafter\spx@preAthefigure\expandafter{\spx@preBthefigure}%
-\let\thefigure\spx@preAthefigure
-\let\thetable\spx@preAthefigure
-\let\theliteralblock\spx@preAthefigure
-\g@addto@macro\thefigure{\arabic{figure}}%
-\g@addto@macro\thetable{\arabic{table}}%
-\g@addto@macro\theliteralblock{\arabic{literalblock}}%
-  \ifspx@opt@mathnumfig
-    \let\theequation\spx@preAthefigure
-    \g@addto@macro\theequation{\arabic{equation}}%
-  \fi
-\fi
-
-
-%% LITERAL BLOCKS
-%
-% Based on use of "fancyvrb.sty"'s Verbatim.
-% - with framing allowing page breaks ("framed.sty")
-% - with breaking of long lines (exploits Pygments mark-up),
-% - with possibly of a top caption, non-separable by pagebreak.
-% - and usable inside tables or footnotes ("footnotehyper-sphinx").
-
-% For extensions which use \OriginalVerbatim and compatibility with Sphinx <
-% 1.5, we define and use these when (unmodified) Verbatim will be needed. But
-% Sphinx >= 1.5 does not modify the \Verbatim macro anymore.
-\let\OriginalVerbatim   \Verbatim
-\let\endOriginalVerbatim\endVerbatim
-
-% for captions of literal blocks
-% at start of caption title
-\newcommand*{\fnum@literalblock}{\literalblockname\nobreakspace\theliteralblock}
-% this will be overwritten in document preamble by Babel translation
-\newcommand*{\literalblockname}{Listing }
-% file extension needed for \caption's good functioning, the file is created
-% only if a \listof{literalblock}{foo} command is encountered, which is
-% analogous to \listoffigures, but for the code listings (foo = chosen title.)
-\newcommand*{\ext@literalblock}{lol}
-
-\newif\ifspx@inframed % flag set if we are already in a framed environment
-% if forced use of minipage encapsulation is needed (e.g. table cells)
-\newif\ifsphinxverbatimwithminipage   \sphinxverbatimwithminipagefalse
-
-% Framing macro for use with framed.sty's \FrameCommand
-%  - it obeys current indentation,
-%  - frame is \fboxsep separated from the contents,
-%  - the contents use the full available text width,
-%  - #1 = color of frame, #2 = color of background,
-%  - #3 = above frame, #4 = below frame, #5 = within frame,
-%  - #3 and #4 must be already typeset boxes; they must issue \normalcolor
-%    or similar, else, they are under scope of color #1
-\long\def\spx@fcolorbox #1#2#3#4#5{%
-  \hskip\@totalleftmargin
-  \hskip-\fboxsep\hskip-\fboxrule
-  % use of \color@b@x here is compatible with both xcolor.sty and color.sty
-  \color@b@x {\color{#1}\spx@CustomFBox{#3}{#4}}{\color{#2}}{#5}%
-  \hskip-\fboxsep\hskip-\fboxrule
-  \hskip-\linewidth \hskip-\@totalleftmargin \hskip\columnwidth
-}%
-% #1 = for material above frame, such as a caption or a "continued" hint
-% #2 = for material below frame, such as a caption or "continues on next page"
-% #3 = actual contents, which will be typeset with a background color
-\long\def\spx@CustomFBox#1#2#3{%
-  \begingroup
-  \setbox\@tempboxa\hbox{{#3}}% inner braces to avoid color leaks
-  \vbox{#1% above frame
-            % draw frame border _latest_ to avoid pdf viewer issue
-            \kern\fboxrule
-            \hbox{\kern\fboxrule
-                  \copy\@tempboxa
-                  \kern-\wd\@tempboxa\kern-\fboxrule
-                  \vrule\@width\fboxrule
-                  \kern\wd\@tempboxa
-                  \vrule\@width\fboxrule}%
-            \kern-\dimexpr\ht\@tempboxa+\dp\@tempboxa+\fboxrule\relax
-            \hrule\@height\fboxrule
-            \kern\dimexpr\ht\@tempboxa+\dp\@tempboxa\relax
-            \hrule\@height\fboxrule
-        #2% below frame
-       }%
-  \endgroup
-}%
-\def\spx@fcolorbox@put@c#1{% hide width from framed.sty measuring
-    \moveright\dimexpr\fboxrule+.5\wd\@tempboxa\hb@xt@\z@{\hss#1\hss}%
-}%
-\def\spx@fcolorbox@put@r#1{% right align with contents, width hidden
-    \moveright\dimexpr\fboxrule+\wd\@tempboxa-\fboxsep\hb@xt@\z@{\hss#1}%
-}%
-\def\spx@fcolorbox@put@l#1{% left align with contents, width hidden
-    \moveright\dimexpr\fboxrule+\fboxsep\hb@xt@\z@{#1\hss}%
-}%
-%
-\def\sphinxVerbatim@Continued
-   {\csname spx@fcolorbox@put@\spx@opt@verbatimcontinuedalign\endcsname
-    {\normalcolor\sphinxstylecodecontinued\literalblockcontinuedname}}%
-\def\sphinxVerbatim@Continues
-   {\csname spx@fcolorbox@put@\spx@opt@verbatimcontinuesalign\endcsname
-    {\normalcolor\sphinxstylecodecontinues\literalblockcontinuesname}}%
-\def\sphinxVerbatim@Title
-   {\spx@fcolorbox@put@c{\unhcopy\sphinxVerbatim@TitleBox}}%
-\let\sphinxVerbatim@Before\@empty
-\let\sphinxVerbatim@After\@empty
-% Defaults are redefined in document preamble according to language
-\newcommand*\literalblockcontinuedname{continued from previous page}%
-\newcommand*\literalblockcontinuesname{continues on next page}%
-%
-\def\spx@verbatimfcolorbox{\spx@fcolorbox{VerbatimBorderColor}{VerbatimColor}}%
-\def\sphinxVerbatim@FrameCommand
-   {\spx@verbatimfcolorbox\sphinxVerbatim@Before\sphinxVerbatim@After}%
-\def\sphinxVerbatim@FirstFrameCommand
-   {\spx@verbatimfcolorbox\sphinxVerbatim@Before\sphinxVerbatim@Continues}%
-\def\sphinxVerbatim@MidFrameCommand
-   {\spx@verbatimfcolorbox\sphinxVerbatim@Continued\sphinxVerbatim@Continues}%
-\def\sphinxVerbatim@LastFrameCommand
-   {\spx@verbatimfcolorbox\sphinxVerbatim@Continued\sphinxVerbatim@After}%
-
-% For linebreaks inside Verbatim environment from package fancyvrb.
-\newbox\sphinxcontinuationbox
-\newbox\sphinxvisiblespacebox
-\newcommand*\sphinxafterbreak {\copy\sphinxcontinuationbox}
-
-% Take advantage of the already applied Pygments mark-up to insert
-% potential linebreaks for TeX processing.
-%        {, <, #, %, $, ' and ": go to next line.
-%        _, }, ^, &, >, - and ~: stay at end of broken line.
-% Use of \textquotesingle for straight quote.
-% FIXME: convert this to package options ?
-\newcommand*\sphinxbreaksbeforelist {%
-    \do\PYGZob\{\do\PYGZlt\<\do\PYGZsh\#\do\PYGZpc\%% {, <, #, %,
-    \do\PYGZdl\$\do\PYGZdq\"% $, "
-    \def\PYGZsq
-     {\discretionary{}{\sphinxafterbreak\textquotesingle}{\textquotesingle}}% '
-}
-\newcommand*\sphinxbreaksafterlist {%
-    \do\PYGZus\_\do\PYGZcb\}\do\PYGZca\^\do\PYGZam\&% _, }, ^, &,
-    \do\PYGZgt\>\do\PYGZhy\-\do\PYGZti\~% >, -, ~
-}
-\newcommand*\sphinxbreaksatspecials {%
-  \def\do##1##2%
-     {\def##1{\discretionary{}{\sphinxafterbreak\char`##2}{\char`##2}}}%
-  \sphinxbreaksbeforelist
-  \def\do##1##2%
-     {\def##1{\discretionary{\char`##2}{\sphinxafterbreak}{\char`##2}}}%
-  \sphinxbreaksafterlist
-}
-
-\def\sphinx@verbatim@nolig@list {\do \`}%
-% Some characters . , ; ? ! / are not pygmentized.
-% This macro makes them "active" and they will insert potential linebreaks.
-% Not compatible with math mode (cf \sphinxunactivateextras).
-\newcommand*\sphinxbreaksbeforeactivelist {}% none
-\newcommand*\sphinxbreaksafteractivelist  {\do\.\do\,\do\;\do\?\do\!\do\/}
-\newcommand*\sphinxbreaksviaactive {%
-   \def\do##1{\lccode`\~`##1%
-    \lowercase{\def~}{\discretionary{}{\sphinxafterbreak\char`##1}{\char`##1}}%
-    \catcode`##1\active}%
-   \sphinxbreaksbeforeactivelist
-   \def\do##1{\lccode`\~`##1%
-    \lowercase{\def~}{\discretionary{\char`##1}{\sphinxafterbreak}{\char`##1}}%
-    \catcode`##1\active}%
-   \sphinxbreaksafteractivelist
-   \lccode`\~`\~
-}
-
-% If the linebreak is at a space, the latter will be displayed as visible
-% space at end of first line, and a continuation symbol starts next line.
-\def\spx@verbatim@space {%
-     \nobreak\hskip\z@skip
-     \discretionary{\copy\sphinxvisiblespacebox}{\sphinxafterbreak}
-                   {\kern\fontdimen2\font}%
-}%
-
-% if the available space on page is less than \literalblockneedspace, insert pagebreak
-\newcommand{\sphinxliteralblockneedspace}{5\baselineskip}
-\newcommand{\sphinxliteralblockwithoutcaptionneedspace}{1.5\baselineskip}
-% The title (caption) is specified from outside as macro \sphinxVerbatimTitle.
-% \sphinxVerbatimTitle is reset to empty after each use of Verbatim.
-\newcommand*\sphinxVerbatimTitle {}
-% This box to typeset the caption before framed.sty multiple passes for framing.
-\newbox\sphinxVerbatim@TitleBox
-% This is a workaround to a "feature" of French lists, when literal block
-% follows immediately; usable generally (does only \par then), a priori...
-\newcommand*\sphinxvspacefixafterfrenchlists{%
-   \ifvmode\ifdim\lastskip<\z@ \vskip\parskip\fi\else\par\fi
-}
-% Holder macro for labels of literal blocks. Set-up by LaTeX writer.
-\newcommand*\sphinxLiteralBlockLabel {}
-\newcommand*\sphinxSetupCaptionForVerbatim [1]
-{%
-    \sphinxvspacefixafterfrenchlists
-    \needspace{\sphinxliteralblockneedspace}%
-% insert a \label via \sphinxLiteralBlockLabel
-% reset to normal the color for the literal block caption
-    \def\sphinxVerbatimTitle
-       {\py@NormalColor\sphinxcaption{\sphinxLiteralBlockLabel #1}}%
-}
-\newcommand*\sphinxSetupCodeBlockInFootnote {%
-  \fvset{fontsize=\footnotesize}\let\caption\sphinxfigcaption
-  \sphinxverbatimwithminipagetrue % reduces vertical spaces
-  % we counteract (this is in a group) the \@normalsize from \caption
-  \let\normalsize\footnotesize\let\@parboxrestore\relax
-  \def\spx@abovecaptionskip{\sphinxverbatimsmallskipamount}%
-}
-\newcommand*{\sphinxverbatimsmallskipamount}{\smallskipamount}
-% serves to implement line highlighting and line wrapping
-\newcommand\sphinxFancyVerbFormatLine[1]{%
-  \expandafter\sphinx@verbatim@checkifhl\expandafter{\the\FV@CodeLineNo}%
-  \ifin@
-     \sphinxVerbatimHighlightLine{#1}%
-  \else
-     \sphinxVerbatimFormatLine{#1}%
-  \fi
-}%
-\newcommand\sphinxVerbatimHighlightLine[1]{%
-  \edef\sphinxrestorefboxsep{\fboxsep\the\fboxsep\relax}%
-  \fboxsep0pt\relax % cf LaTeX bug graphics/4524
-  \colorbox{sphinxVerbatimHighlightColor}%
-           {\sphinxrestorefboxsep\sphinxVerbatimFormatLine{#1}}%
-  % no need to restore \fboxsep here, as this ends up in a \hbox from fancyvrb
-}%
-% \sphinxVerbatimFormatLine will be set locally to one of those two:
-\newcommand\sphinxVerbatimFormatLineWrap[1]{%
-    \hsize\linewidth
-    \vtop{\raggedright\hyphenpenalty\z@\exhyphenpenalty\z@
-          \doublehyphendemerits\z@\finalhyphendemerits\z@
-          \strut #1\strut}%
-}%
-\newcommand\sphinxVerbatimFormatLineNoWrap[1]{\hb@xt@\linewidth{\strut #1\hss}}%
-\g@addto@macro\FV@SetupFont{%
-    \sbox\sphinxcontinuationbox {\spx@opt@verbatimcontinued}%
-    \sbox\sphinxvisiblespacebox {\spx@opt@verbatimvisiblespace}%
-}%
-\newenvironment{sphinxVerbatim}{%
-  % first, let's check if there is a caption
-  \ifx\sphinxVerbatimTitle\empty
-      \sphinxvspacefixafterfrenchlists
-      \parskip\z@skip
-      \vskip\sphinxverbatimsmallskipamount
-      % there was no caption. Check if nevertheless a label was set.
-      \ifx\sphinxLiteralBlockLabel\empty\else
-      % we require some space to be sure hyperlink target from \phantomsection
-      % will not be separated from upcoming verbatim by a page break
-          \needspace{\sphinxliteralblockwithoutcaptionneedspace}%
-          \phantomsection\sphinxLiteralBlockLabel
-      \fi
-  \else
-     \parskip\z@skip
-     \if t\spx@opt@literalblockcappos
-       \vskip\spx@abovecaptionskip
-       \def\sphinxVerbatim@Before
-           {\sphinxVerbatim@Title\nointerlineskip
-            \kern\dimexpr-\dp\strutbox+\sphinxbelowcaptionspace
-                 % if no frame (code-blocks inside table cells), remove
-                 % the "verbatimsep" whitespace from the top (better visually)
-                 \ifspx@opt@verbatimwithframe\else-\sphinxverbatimsep\fi
-                 % caption package adds \abovecaptionskip vspace, remove it
-                 \spx@ifcaptionpackage{-\abovecaptionskip}{}\relax}%
-     \else
-       \vskip\sphinxverbatimsmallskipamount
-       \def\sphinxVerbatim@After
-          {\nointerlineskip\kern\dimexpr\dp\strutbox
-            \ifspx@opt@verbatimwithframe\else-\sphinxverbatimsep\fi
-            \spx@ifcaptionpackage{-\abovecaptionskip}{}\relax
-           \sphinxVerbatim@Title}%
-     \fi
-     \def\@captype{literalblock}%
-     \capstart
-     % \sphinxVerbatimTitle must reset color
-     \setbox\sphinxVerbatim@TitleBox
-            \hbox{\begin{minipage}{\linewidth}%
-     % caption package may detect wrongly if top or bottom, so we help it
-                    \spx@ifcaptionpackage
-                      {\caption@setposition{\spx@opt@literalblockcappos}}{}%
-                    \sphinxVerbatimTitle
-                  \end{minipage}}%
-  \fi
-  \global\let\sphinxLiteralBlockLabel\empty
-  \global\let\sphinxVerbatimTitle\empty
-  \fboxsep\sphinxverbatimsep \fboxrule\sphinxverbatimborder
-  \ifspx@opt@verbatimwithframe\else\fboxrule\z@\fi
-  \let\FrameCommand     \sphinxVerbatim@FrameCommand
-  \let\FirstFrameCommand\sphinxVerbatim@FirstFrameCommand
-  \let\MidFrameCommand  \sphinxVerbatim@MidFrameCommand
-  \let\LastFrameCommand \sphinxVerbatim@LastFrameCommand
-  \ifspx@opt@verbatimhintsturnover\else
-      \let\sphinxVerbatim@Continued\@empty
-      \let\sphinxVerbatim@Continues\@empty
-  \fi
-  \ifspx@opt@verbatimwrapslines
-  % fancyvrb's Verbatim puts each input line in (unbreakable) horizontal boxes.
-  % This customization wraps each line from the input in a \vtop, thus
-  % allowing it to wrap and display on two or more lines in the latex output.
-  %     - The codeline counter will be increased only once.
-  %     - The wrapped material will not break across pages, it is impossible
-  %       to achieve this without extensive rewrite of fancyvrb.
-  %     - The (not used in sphinx) obeytabs option to Verbatim is
-  %       broken by this change (showtabs and tabspace work).
-    \let\sphinxVerbatimFormatLine\sphinxVerbatimFormatLineWrap
-    \let\FV@Space\spx@verbatim@space
-  % Allow breaks at special characters using \PYG... macros.
-    \sphinxbreaksatspecials
-  % Breaks at punctuation characters . , ; ? ! and / (needs catcode activation)
-    \fvset{codes*=\sphinxbreaksviaactive}%
-  \else % end of conditional code for wrapping long code lines
-    \let\sphinxVerbatimFormatLine\sphinxVerbatimFormatLineNoWrap
-  \fi
-  \let\FancyVerbFormatLine\sphinxFancyVerbFormatLine
-  \VerbatimEnvironment
-  % workaround to fancyvrb's check of current list depth
-  \def\@toodeep {\advance\@listdepth\@ne}%
-  % The list environment is needed to control perfectly the vertical space.
-  % Note: \OuterFrameSep used by framed.sty is later set to \topsep hence 0pt.
-  % - if caption: distance from last text baseline to caption baseline is
-  %   A+(B-F)+\ht\strutbox, A = \abovecaptionskip (default 10pt), B =
-  %   \baselineskip, F is the framed.sty \FrameHeightAdjust macro, default 6pt.
-  %   Formula valid for F < 10pt.
-  % - distance of baseline of caption to top of frame is like for tables:
-  %   \sphinxbelowcaptionspace (=0.5\baselineskip)
-  % - if no caption: distance of last text baseline to code frame is S+(B-F),
-  %   with S = \sphinxverbatimtopskip (=\smallskip)
-  % - and distance from bottom of frame to next text baseline is
-  %   \baselineskip+\parskip.
-  % The \trivlist is used to avoid possible "too deeply nested" error.
-  \itemsep   \z@skip
-  \topsep    \z@skip
-  \partopsep \z@skip
-  % trivlist will set \parsep to \parskip = zero
-  % \leftmargin will be set to zero by trivlist
-  \rightmargin\z@
-  \parindent  \z@% becomes \itemindent. Default zero, but perhaps overwritten.
-  \trivlist\item\relax
-     \ifsphinxverbatimwithminipage\spx@inframedtrue\fi
-     % use a minipage if we are already inside a framed environment
-     \ifspx@inframed\noindent\begin{minipage}{\linewidth}\fi
-     \MakeFramed {% adapted over from framed.sty's snugshade environment
-        \advance\hsize-\width\@totalleftmargin\z@\linewidth\hsize\@setminipage
-        }%
-     % For grid placement from \strut's in \FancyVerbFormatLine
-     \lineskip\z@skip
-     % active comma should not be overwritten by \@noligs
-     \ifspx@opt@verbatimwrapslines
-       \let\verbatim@nolig@list \sphinx@verbatim@nolig@list
-     \fi
-     % will fetch its optional arguments if any
-     \OriginalVerbatim
-}
-{%
-  \endOriginalVerbatim
-  \par\unskip\@minipagefalse\endMakeFramed % from framed.sty snugshade
-  \ifspx@inframed\end{minipage}\fi
-  \endtrivlist
-}
-\newenvironment {sphinxVerbatimNoFrame}
-  {\spx@opt@verbatimwithframefalse
-   \VerbatimEnvironment
-   \begin{sphinxVerbatim}}
-  {\end{sphinxVerbatim}}
-\newenvironment {sphinxVerbatimintable}
-  {% don't use a frame if in a table cell
-   \spx@opt@verbatimwithframefalse
-   \sphinxverbatimwithminipagetrue
-   % the literal block caption uses \sphinxcaption which is wrapper of \caption,
-   % but \caption must be modified because longtable redefines it to work only
-   % for the own table caption, and tabulary has multiple passes
-   \let\caption\sphinxfigcaption
-   % reduce above caption skip
-   \def\spx@abovecaptionskip{\sphinxverbatimsmallskipamount}%
-   \VerbatimEnvironment
-   \begin{sphinxVerbatim}}
-  {\end{sphinxVerbatim}}
-
-
-%% PARSED LITERALS
-% allow long lines to wrap like they do in code-blocks
-
-% this should be kept in sync with definitions in sphinx.util.texescape
-\newcommand*\sphinxbreaksattexescapedchars{%
-  \def\do##1##2% put potential break point before character
-     {\def##1{\discretionary{}{\sphinxafterbreak\char`##2}{\char`##2}}}%
-  \do\{\{\do\textless\<\do\#\#\do\%\%\do\$\$% {, <, #, %, $
-  \def\do##1##2% put potential break point after character
-     {\def##1{\discretionary{\char`##2}{\sphinxafterbreak}{\char`##2}}}%
-  \do\_\_\do\}\}\do\textasciicircum\^\do\&\&% _, }, ^, &,
-  \do\textgreater\>\do\textasciitilde\~% >, ~
-}
-\newcommand*\sphinxbreaksviaactiveinparsedliteral{%
-  \sphinxbreaksviaactive % by default handles . , ; ? ! /
-  \do\-% we need also the hyphen character (ends up "as is" in parsed-literal)
-  \lccode`\~`\~ %
-  % update \dospecials as it is used by \url
-  % but deactivation will already have been done hence this is unneeded:
-  %  \expandafter\def\expandafter\dospecials\expandafter{\dospecials
-  %   \sphinxbreaksbeforeactivelist\sphinxbreaksafteractivelist\do\-}%
-}
-\newcommand*\sphinxbreaksatspaceinparsedliteral{%
-  \lccode`~32 \lowercase{\let~}\spx@verbatim@space\lccode`\~`\~
-}
-\newcommand*{\sphinxunactivateextras}{\let\do\@makeother
-      \sphinxbreaksbeforeactivelist\sphinxbreaksafteractivelist\do\-}%
-% the \catcode13=5\relax (deactivate end of input lines) is left to callers
-\newcommand*{\sphinxunactivateextrasandspace}{\catcode32=10\relax
-      \sphinxunactivateextras}%
-% now for the modified alltt environment
-\newenvironment{sphinxalltt}
-{% at start of next line to workaround Emacs/AUCTeX issue with this file
-\begin{alltt}%
- \ifspx@opt@parsedliteralwraps
-   \sbox\sphinxcontinuationbox {\spx@opt@verbatimcontinued}%
-   \sbox\sphinxvisiblespacebox {\spx@opt@verbatimvisiblespace}%
-   \sphinxbreaksattexescapedchars
-   \sphinxbreaksviaactiveinparsedliteral
-   \sphinxbreaksatspaceinparsedliteral
-% alltt takes care of the ' as derivative ("prime") in math mode
-   \everymath\expandafter{\the\everymath\sphinxunactivateextrasandspace
-             \catcode`\<=12\catcode`\>=12\catcode`\^=7\catcode`\_=8 }%
-% not sure if displayed math (align,...) can end up in parsed-literal, anyway
-   \everydisplay\expandafter{\the\everydisplay
-             \catcode13=5 \sphinxunactivateextrasandspace
-             \catcode`\<=12\catcode`\>=12\catcode`\^=7\catcode`\_=8 }%
- \fi }
-{\end{alltt}}
-
-% Protect \href's first argument in contexts such as sphinxalltt (or
-% \sphinxcode). Sphinx uses \#, \%, \& ... always inside \sphinxhref.
-\protected\def\sphinxhref#1#2{{%
-    \sphinxunactivateextrasandspace % never do \scantokens with active space!
-    \endlinechar\m@ne\everyeof{{#2}}% keep catcode regime for #2
-    \scantokens{\href{#1}}% normalise it for #1 during \href expansion
-}}
-% Same for \url. And also \nolinkurl for coherence.
-\protected\def\sphinxurl#1{{%
-    \sphinxunactivateextrasandspace\everyeof{}% (<- precaution for \scantokens)
-    \endlinechar\m@ne\scantokens{\url{#1}}%
-}}
-\protected\def\sphinxnolinkurl#1{{%
-    \sphinxunactivateextrasandspace\everyeof{}%
-    \endlinechar\m@ne\scantokens{\nolinkurl{#1}}%
-}}
-
-
-%% TOPIC AND CONTENTS BOXES
-%
-% Again based on use of "framed.sty", this allows breakable framed boxes.
-\long\def\spx@ShadowFBox#1{%
-  \leavevmode\begingroup
-  % first we frame the box #1
-  \setbox\@tempboxa
-   \hbox{\vrule\@width\sphinxshadowrule
-         \vbox{\hrule\@height\sphinxshadowrule
-               \kern\sphinxshadowsep
-               \hbox{\kern\sphinxshadowsep #1\kern\sphinxshadowsep}%
-               \kern\sphinxshadowsep
-               \hrule\@height\sphinxshadowrule}%
-         \vrule\@width\sphinxshadowrule}%
-  % Now we add the shadow, like \shadowbox from fancybox.sty would do
-  \dimen@\dimexpr.5\sphinxshadowrule+\sphinxshadowsize\relax
-  \hbox{\vbox{\offinterlineskip
-              \hbox{\copy\@tempboxa\kern-.5\sphinxshadowrule
-                    % add shadow on right side
-                    \lower\sphinxshadowsize
-                          \hbox{\vrule\@height\ht\@tempboxa \@width\dimen@}%
-                    }%
-              \kern-\dimen@ % shift back vertically to bottom of frame
-              % and add shadow at bottom
-              \moveright\sphinxshadowsize
-                    \vbox{\hrule\@width\wd\@tempboxa \@height\dimen@}%
-              }%
-        % move left by the size of right shadow so shadow adds no width
-        \kern-\sphinxshadowsize
-       }%
-  \endgroup
-}
-
-% use framed.sty to allow page breaks in frame+shadow
-% works well inside Lists and Quote-like environments
-% produced by ``topic'' directive (or local contents)
-% could nest if LaTeX writer authorized it
-\newenvironment{sphinxShadowBox}
-  {\def\FrameCommand {\spx@ShadowFBox }%
-   \advance\spx@image@maxheight
-   -\dimexpr2\sphinxshadowrule
-           +2\sphinxshadowsep
-           +\sphinxshadowsize
-           +\baselineskip\relax
-   % configure framed.sty not to add extra vertical spacing
-   \ltx@ifundefined{OuterFrameSep}{}{\OuterFrameSep\z@skip}%
-   % the \trivlist will add the vertical spacing on top and bottom which is
-   % typical of center environment as used in Sphinx <= 1.4.1
-   % the \noindent has the effet of an extra blank line on top, to
-   % imitate closely the layout from Sphinx <= 1.4.1; the \FrameHeightAdjust
-   % will put top part of frame on this baseline.
-   \def\FrameHeightAdjust {\baselineskip}%
-   % use package footnote to handle footnotes
-   \savenotes
-   \trivlist\item\noindent
-    % use a minipage if we are already inside a framed environment
-    \ifspx@inframed\begin{minipage}{\linewidth}\fi
-    \MakeFramed {\spx@inframedtrue
-    % framed.sty puts into "\width" the added width (=2shadowsep+2shadowrule)
-    % adjust \hsize to what the contents must use
-    \advance\hsize-\width
-    % adjust LaTeX parameters to behave properly in indented/quoted contexts
-    \FrameRestore
-    % typeset the contents as in a minipage (Sphinx <= 1.4.1 used a minipage and
-    % itemize/enumerate are therein typeset more tightly, we want to keep
-    % that). We copy-paste from LaTeX source code but don't do a real minipage.
-    \@pboxswfalse
-    \let\@listdepth\@mplistdepth \@mplistdepth\z@
-    \@minipagerestore
-    \@setminipage
-    }%
-  }%
-  {% insert the "endminipage" code
-    \par\unskip
-    \@minipagefalse
-   \endMakeFramed
-     \ifspx@inframed\end{minipage}\fi
-   \endtrivlist
-   % output the stored footnotes
-   \spewnotes
-  }
-
-
-%% NOTICES AND ADMONITIONS
-%
-% Some are quite plain
-% the spx@notice@bordercolor etc are set in the sphinxadmonition environment
-\newenvironment{sphinxlightbox}{%
-  \par
-  \noindent{\color{spx@notice@bordercolor}%
-            \rule{\linewidth}{\spx@notice@border}}\par\nobreak
-  {\parskip\z@skip\noindent}%
-  }
-  {%
-  % counteract previous possible negative skip (French lists!):
-  % (we can't cancel that any earlier \vskip introduced a potential pagebreak)
-  \sphinxvspacefixafterfrenchlists
-  \nobreak\vbox{\noindent\kern\@totalleftmargin
-      {\color{spx@notice@bordercolor}%
-       \rule[\dimexpr.4\baselineskip-\spx@notice@border\relax]
-             {\linewidth}{\spx@notice@border}}\hss}\allowbreak
-  }% end of sphinxlightbox environment definition
-% may be renewenvironment'd by user for complete customization
-\newenvironment{sphinxnote}[1]
-  {\begin{sphinxlightbox}\sphinxstrong{#1} }{\end{sphinxlightbox}}
-\newenvironment{sphinxhint}[1]
-  {\begin{sphinxlightbox}\sphinxstrong{#1} }{\end{sphinxlightbox}}
-\newenvironment{sphinximportant}[1]
-  {\begin{sphinxlightbox}\sphinxstrong{#1} }{\end{sphinxlightbox}}
-\newenvironment{sphinxtip}[1]
-  {\begin{sphinxlightbox}\sphinxstrong{#1} }{\end{sphinxlightbox}}
-% or just use the package options
-% these are needed for common handling by notice environment of lightbox
-% and heavybox but they are  currently not used by lightbox environment
-% and there is consequently no corresponding package option
-\definecolor{sphinxnoteBgColor}{rgb}{1,1,1}
-\definecolor{sphinxhintBgColor}{rgb}{1,1,1}
-\definecolor{sphinximportantBgColor}{rgb}{1,1,1}
-\definecolor{sphinxtipBgColor}{rgb}{1,1,1}
-
-% Others get more distinction
-% Code adapted from framed.sty's "snugshade" environment.
-% Nesting works (inner frames do not allow page breaks).
-\newenvironment{sphinxheavybox}{\par
-   \setlength{\FrameRule}{\spx@notice@border}%
-   \setlength{\FrameSep}{\dimexpr.6\baselineskip-\FrameRule\relax}
-   \advance\spx@image@maxheight
-   -\dimexpr2\FrameRule
-           +2\FrameSep
-           +\baselineskip\relax % will happen again if nested, needed indeed!
-   % configure framed.sty's parameters to obtain same vertical spacing
-   % as for "light" boxes. We need for this to manually insert parskip glue and
-   % revert a skip done by framed before the frame.
-    \ltx@ifundefined{OuterFrameSep}{}{\OuterFrameSep\z@skip}%
-    \vspace{\FrameHeightAdjust}
-   % copied/adapted from framed.sty's snugshade
-   \def\FrameCommand##1{\hskip\@totalleftmargin
-       \fboxsep\FrameSep \fboxrule\FrameRule
-       \fcolorbox{spx@notice@bordercolor}{spx@notice@bgcolor}{##1}%
-       \hskip-\linewidth \hskip-\@totalleftmargin \hskip\columnwidth}%
-   \savenotes
-   % use a minipage if we are already inside a framed environment
-   \ifspx@inframed
-       \noindent\begin{minipage}{\linewidth}
-   \else
-       % handle case where notice is first thing in a list item (or is quoted)
-       \if@inlabel
-        \noindent\par\vspace{-\baselineskip}
-       \else
-        \vspace{\parskip}
-       \fi
-   \fi
-   \MakeFramed {\spx@inframedtrue
-     \advance\hsize-\width \@totalleftmargin\z@ \linewidth\hsize
-     % minipage initialization copied from LaTeX source code.
-     \@pboxswfalse
-     \let\@listdepth\@mplistdepth \@mplistdepth\z@
-     \@minipagerestore
-     \@setminipage }%
-   }
-   {%
-   \par\unskip
-   \@minipagefalse
-   \endMakeFramed
-   \ifspx@inframed\end{minipage}\fi
-   % set footnotes at bottom of page
-   \spewnotes
-   % arrange for similar spacing below frame as for "light" boxes.
-   \vskip .4\baselineskip
-   }% end of sphinxheavybox environment definition
-% may be renewenvironment'd by user for complete customization
-\newenvironment{sphinxwarning}[1]
-  {\begin{sphinxheavybox}\sphinxstrong{#1} }{\end{sphinxheavybox}}
-\newenvironment{sphinxcaution}[1]
-  {\begin{sphinxheavybox}\sphinxstrong{#1} }{\end{sphinxheavybox}}
-\newenvironment{sphinxattention}[1]
-  {\begin{sphinxheavybox}\sphinxstrong{#1} }{\end{sphinxheavybox}}
-\newenvironment{sphinxdanger}[1]
-  {\begin{sphinxheavybox}\sphinxstrong{#1} }{\end{sphinxheavybox}}
-\newenvironment{sphinxerror}[1]
-  {\begin{sphinxheavybox}\sphinxstrong{#1} }{\end{sphinxheavybox}}
-% or just use package options
-
-% the \colorlet of xcolor (if at all loaded) is overkill for our use case
-\newcommand{\sphinxcolorlet}[2]
-    {\expandafter\let\csname\@backslashchar color@#1\expandafter\endcsname
-                     \csname\@backslashchar color@#2\endcsname }
-
-% the main dispatch for all types of notices
-\newenvironment{sphinxadmonition}[2]{% #1=type, #2=heading
-  % can't use #1 directly in definition of end part
-  \def\spx@noticetype {#1}%
-  % set parameters of heavybox/lightbox
-  \sphinxcolorlet{spx@notice@bordercolor}{sphinx#1BorderColor}%
-  \sphinxcolorlet{spx@notice@bgcolor}{sphinx#1BgColor}%
-  \spx@notice@border \dimexpr\csname spx@opt@#1border\endcsname\relax
-  % start specific environment, passing the heading as argument
-  \begin{sphinx#1}{#2}}
-  % workaround some LaTeX "feature" of \end command
- {\edef\spx@temp{\noexpand\end{sphinx\spx@noticetype}}\spx@temp}
-
-
-%% PYTHON DOCS MACROS AND ENVIRONMENTS
-%  (some macros here used by \maketitle in sphinxmanual.cls and sphinxhowto.cls)
-
-% \moduleauthor{name}{email}
-\newcommand{\moduleauthor}[2]{}
-
-% \sectionauthor{name}{email}
-\newcommand{\sectionauthor}[2]{}
-
-% Allow the release number to be specified independently of the
-% \date{}.  This allows the date to reflect the document's date and
-% release to specify the release that is documented.
-%
-\newcommand{\py@release}{\releasename\space\version}
-\newcommand{\version}{}% part of \py@release, used by title page and headers
-% \releaseinfo is used on titlepage (sphinxmanual.cls, sphinxhowto.cls)
-\newcommand{\releaseinfo}{}
-\newcommand{\setreleaseinfo}[1]{\renewcommand{\releaseinfo}{#1}}
-% this is inserted via template and #1=release config variable
-\newcommand{\release}[1]{\renewcommand{\version}{#1}}
-% this is defined by template to 'releasename' latex_elements key
-\newcommand{\releasename}{}
-% Fix issue in case release and releasename deliberately left blank
-\newcommand{\sphinxheadercomma}{, }% used in fancyhdr header definition
-\newcommand{\sphinxifemptyorblank}[1]{%
-% test after one expansion of macro #1 if contents is empty or spaces
-     \if&\expandafter\@firstofone\detokenize\expandafter{#1}&%
-     \expandafter\@firstoftwo\else\expandafter\@secondoftwo\fi}%
-\AtBeginDocument {%
-   \sphinxifemptyorblank{\releasename}
-     {\sphinxifemptyorblank{\version}{\let\sphinxheadercomma\empty}{}}
-     {}%
-}%
-
-% Allow specification of the author's address separately from the
-% author's name.  This can be used to format them differently, which
-% is a good thing.
-%
-\newcommand{\py@authoraddress}{}
-\newcommand{\authoraddress}[1]{\renewcommand{\py@authoraddress}{#1}}
-
-% {fulllineitems} is the main environment for object descriptions.
-%
-\newcommand{\py@itemnewline}[1]{%
-  \kern\labelsep
-  \@tempdima\linewidth
-  \advance\@tempdima \labelwidth\makebox[\@tempdima][l]{#1}%
-  \kern-\labelsep
-}
-
-\newenvironment{fulllineitems}{%
-  \begin{list}{}{\labelwidth \leftmargin
-                 \rightmargin \z@ \topsep -\parskip \partopsep \parskip
-                 \itemsep -\parsep
-                 \let\makelabel=\py@itemnewline}%
-}{\end{list}}
-
-% Signatures, possibly multi-line
-%
-\newlength{\py@argswidth}
-\newcommand{\py@sigparams}[2]{%
-  \parbox[t]{\py@argswidth}{#1\sphinxcode{)}#2}}
-\newcommand{\pysigline}[1]{\item[{#1}]}
-\newcommand{\pysiglinewithargsret}[3]{%
-  \settowidth{\py@argswidth}{#1\sphinxcode{(}}%
-  \addtolength{\py@argswidth}{-2\py@argswidth}%
-  \addtolength{\py@argswidth}{\linewidth}%
-  \item[{#1\sphinxcode{(}\py@sigparams{#2}{#3}}]}
-\newcommand{\pysigstartmultiline}{%
- \def\pysigstartmultiline{\vskip\smallskipamount\parskip\z@skip\itemsep\z@skip}%
- \edef\pysigstopmultiline
-     {\noexpand\leavevmode\parskip\the\parskip\relax\itemsep\the\itemsep\relax}%
- \parskip\z@skip\itemsep\z@skip
-}
-
-% Production lists
-%
-\newenvironment{productionlist}{%
-%  \def\sphinxoptional##1{{\Large[}##1{\Large]}}
-  \def\production##1##2{\\\sphinxcode{\sphinxupquote{##1}}&::=&\sphinxcode{\sphinxupquote{##2}}}%
-  \def\productioncont##1{\\& &\sphinxcode{\sphinxupquote{##1}}}%
-  \parindent=2em
-  \indent
-  \setlength{\LTpre}{0pt}%
-  \setlength{\LTpost}{0pt}%
-  \begin{longtable}[l]{lcl}
-}{%
-  \end{longtable}
-}
-
-% Definition lists; requested by AMK for HOWTO documents.  Probably useful
-% elsewhere as well, so keep in in the general style support.
-%
-\newenvironment{definitions}{%
-  \begin{description}%
-  \def\term##1{\item[{##1}]\mbox{}\\*[0mm]}%
-}{%
-  \end{description}%
-}
-
-%% FROM DOCTUTILS LATEX WRITER
-%
-% The following is stuff copied from docutils' latex writer.
-%
-\newcommand{\optionlistlabel}[1]{\normalfont\bfseries #1 \hfill}% \bf deprecated
-\newenvironment{optionlist}[1]
-{\begin{list}{}
-  {\setlength{\labelwidth}{#1}
-   \setlength{\rightmargin}{1cm}
-   \setlength{\leftmargin}{\rightmargin}
-   \addtolength{\leftmargin}{\labelwidth}
-   \addtolength{\leftmargin}{\labelsep}
-   \renewcommand{\makelabel}{\optionlistlabel}}
-}{\end{list}}
-
-\newlength{\lineblockindentation}
-\setlength{\lineblockindentation}{2.5em}
-\newenvironment{lineblock}[1]
-{\begin{list}{}
-  {\setlength{\partopsep}{\parskip}
-   \addtolength{\partopsep}{\baselineskip}
-   \topsep0pt\itemsep0.15\baselineskip\parsep0pt
-   \leftmargin#1\relax}
- \raggedright}
-{\end{list}}
-
-% From docutils.writers.latex2e
-% inline markup (custom roles)
-% \DUrole{#1}{#2} tries \DUrole#1{#2}
-\providecommand*{\DUrole}[2]{%
-  \ifcsname DUrole\detokenize{#1}\endcsname
-    \csname DUrole\detokenize{#1}\endcsname{#2}%
-  \else% backwards compatibility: try \docutilsrole#1{#2}
-    \ifcsname docutilsrole\detokenize{#1}\endcsname
-      \csname docutilsrole\detokenize{#1}\endcsname{#2}%
-    \else
-      #2%
-    \fi
-  \fi
-}
-
-\providecommand*{\DUprovidelength}[2]{%
-  \ifdefined#1\else\newlength{#1}\setlength{#1}{#2}\fi
-}
-
-\DUprovidelength{\DUlineblockindent}{2.5em}
-\ifdefined\DUlineblock\else
-  \newenvironment{DUlineblock}[1]{%
-    \list{}{\setlength{\partopsep}{\parskip}
-            \addtolength{\partopsep}{\baselineskip}
-            \setlength{\topsep}{0pt}
-            \setlength{\itemsep}{0.15\baselineskip}
-            \setlength{\parsep}{0pt}
-            \setlength{\leftmargin}{#1}}
-    \raggedright
-  }
-  {\endlist}
-\fi
-
-%% TEXT STYLING
-%
-% to obtain straight quotes we execute \@noligs as patched by upquote, and
-% \scantokens is needed in cases where it would be too late for the macro to
-% first set catcodes and then fetch its argument. We also make the contents
-% breakable at non-escaped . , ; ? ! / using \sphinxbreaksviaactive.
-% the macro must be protected if it ends up used in moving arguments,
-% in 'alltt' \@noligs is done already, and the \scantokens must be avoided.
-\protected\def\sphinxupquote#1{{\def\@tempa{alltt}%
-  \ifx\@tempa\@currenvir\else
-   \ifspx@opt@inlineliteralwraps
-      \sphinxbreaksviaactive\let\sphinxafterbreak\empty
-      % do not overwrite the comma set-up
-      \let\verbatim@nolig@list\sphinx@literal@nolig@list
-   \fi
-   % fix a space-gobbling issue due to LaTeX's original \do@noligs
-   \let\do@noligs\sphinx@do@noligs
-   \@noligs\endlinechar\m@ne\everyeof{}% (<- in case inside \sphinxhref)
-   \expandafter\scantokens
-  \fi {{#1}}}}% extra brace pair to fix end-space gobbling issue...
-\def\sphinx@do@noligs #1{\catcode`#1\active\begingroup\lccode`\~`#1\relax
-    \lowercase{\endgroup\def~{\leavevmode\kern\z@\char`#1 }}}
-\def\sphinx@literal@nolig@list {\do\`\do\<\do\>\do\'\do\-}%
-
-% Some custom font markup commands.
-\protected\def\sphinxstrong#1{\textbf{#1}}
-\protected\def\sphinxcode#1{\texttt{#1}}
-\protected\def\sphinxbfcode#1{\textbf{\sphinxcode{#1}}}
-\protected\def\sphinxemail#1{\textsf{#1}}
-\protected\def\sphinxtablecontinued#1{\textsf{#1}}
-\protected\def\sphinxtitleref#1{\emph{#1}}
-\protected\def\sphinxmenuselection#1{\emph{#1}}
-\protected\def\sphinxguilabel#1{\emph{#1}}
-\protected\def\sphinxaccelerator#1{\underline{#1}}
-\protected\def\sphinxcrossref#1{\emph{#1}}
-\protected\def\sphinxtermref#1{\emph{#1}}
-% \optional is used for ``[, arg]``, i.e. desc_optional nodes.
-\long\protected\def\sphinxoptional#1{%
-  {\textnormal{\Large[}}{#1}\hspace{0.5mm}{\textnormal{\Large]}}}
-
-% additional customizable styling
-\def\sphinxstyleindexentry   #1{\texttt{#1}}
-\def\sphinxstyleindexextra   #1{ (\emph{#1})}
-\def\sphinxstyleindexpageref #1{, \pageref{#1}}
-\def\sphinxstyleindexpagemain#1{\textbf{#1}}
-\protected\def\spxentry#1{#1}% will get \let to \sphinxstyleindexentry in index
-\protected\def\spxextra#1{#1}% will get \let to \sphinxstyleindexextra in index
-\def\sphinxstyleindexlettergroup #1%
-    {{\Large\sffamily#1}\nopagebreak\vspace{1mm}}
-\def\sphinxstyleindexlettergroupDefault #1%
-    {{\Large\sffamily\sphinxnonalphabeticalgroupname}\nopagebreak\vspace{1mm}}
-\protected\def\sphinxstyletopictitle   #1{\textbf{#1}\par\medskip}
-\let\sphinxstylesidebartitle\sphinxstyletopictitle
-\protected\def\sphinxstyleothertitle   #1{\textbf{#1}}
-\protected\def\sphinxstylesidebarsubtitle #1{~\\\textbf{#1} \smallskip}
-% \text.. commands do not allow multiple paragraphs
-\protected\def\sphinxstyletheadfamily    {\sffamily}
-\protected\def\sphinxstyleemphasis     #1{\emph{#1}}
-\protected\def\sphinxstyleliteralemphasis#1{\emph{\sphinxcode{#1}}}
-\protected\def\sphinxstylestrong       #1{\textbf{#1}}
-\protected\def\sphinxstyleliteralstrong#1{\sphinxbfcode{#1}}
-\protected\def\sphinxstyleabbreviation #1{\textsc{#1}}
-\protected\def\sphinxstyleliteralintitle#1{\sphinxcode{#1}}
-\newcommand*\sphinxstylecodecontinued[1]{\footnotesize(#1)}%
-\newcommand*\sphinxstylecodecontinues[1]{\footnotesize(#1)}%
-% figure legend comes after caption and may contain arbitrary body elements
-\newenvironment{sphinxlegend}{\par\small}{\par}
-% reduce hyperref "Token not allowed in a PDF string" warnings on PDF builds
-\AtBeginDocument{\pdfstringdefDisableCommands{%
-% all "protected" macros possibly ending up in section titles should be here
-    \let\sphinxstyleemphasis        \@firstofone
-    \let\sphinxstyleliteralemphasis \@firstofone
-    \let\sphinxstylestrong          \@firstofone
-    \let\sphinxstyleliteralstrong   \@firstofone
-    \let\sphinxstyleabbreviation    \@firstofone
-    \let\sphinxstyleliteralintitle  \@firstofone
-    \let\sphinxupquote  \@firstofone
-    \let\sphinxstrong   \@firstofone
-    \let\sphinxcode     \@firstofone
-    \let\sphinxbfcode   \@firstofone
-    \let\sphinxemail    \@firstofone
-    \let\sphinxcrossref \@firstofone
-    \let\sphinxtermref  \@firstofone
-}}
-
-% For curly braces inside \index macro
-\def\sphinxleftcurlybrace{\{}
-\def\sphinxrightcurlybrace{\}}
-
-% Declare Unicode characters used by linux tree command to pdflatex utf8/utf8x
-\def\spx@bd#1#2{%
-  \leavevmode
-  \begingroup
-  \ifx\spx@bd@height   \@undefined\def\spx@bd@height{\baselineskip}\fi
-  \ifx\spx@bd@width    \@undefined\setbox0\hbox{0}\def\spx@bd@width{\wd0 }\fi
-  \ifx\spx@bd@thickness\@undefined\def\spx@bd@thickness{.6\p@}\fi
-  \ifx\spx@bd@lower    \@undefined\def\spx@bd@lower{\dp\strutbox}\fi
-  \lower\spx@bd@lower#1{#2}%
-  \endgroup
-}%
-\@namedef{sphinx@u2500}% BOX DRAWINGS LIGHT HORIZONTAL
-  {\spx@bd{\vbox to\spx@bd@height}
-          {\vss\hrule\@height\spx@bd@thickness
-                     \@width\spx@bd@width\vss}}%
-\@namedef{sphinx@u2502}% BOX DRAWINGS LIGHT VERTICAL
-  {\spx@bd{\hb@xt@\spx@bd@width}
-          {\hss\vrule\@height\spx@bd@height
-                     \@width \spx@bd@thickness\hss}}%
-\@namedef{sphinx@u2514}% BOX DRAWINGS LIGHT UP AND RIGHT
-  {\spx@bd{\hb@xt@\spx@bd@width}
-          {\hss\raise.5\spx@bd@height
-           \hb@xt@\z@{\hss\vrule\@height.5\spx@bd@height
-                                \@width \spx@bd@thickness\hss}%
-           \vbox to\spx@bd@height{\vss\hrule\@height\spx@bd@thickness
-                                            \@width.5\spx@bd@width\vss}}}%
-\@namedef{sphinx@u251C}% BOX DRAWINGS LIGHT VERTICAL AND RIGHT
-  {\spx@bd{\hb@xt@\spx@bd@width}
-          {\hss
-           \hb@xt@\z@{\hss\vrule\@height\spx@bd@height
-                                \@width \spx@bd@thickness\hss}%
-           \vbox to\spx@bd@height{\vss\hrule\@height\spx@bd@thickness
-                                            \@width.5\spx@bd@width\vss}}}%
-\protected\def\sphinxunichar#1{\@nameuse{sphinx@u#1}}%
-
-% Tell TeX about pathological hyphenation cases:
-\hyphenation{Base-HTTP-Re-quest-Hand-ler}
-\endinput
diff --git a/docs/_build/latex/sphinx.xdy b/docs/_build/latex/sphinx.xdy
deleted file mode 100644
index 1c0794cd9..000000000
--- a/docs/_build/latex/sphinx.xdy
+++ /dev/null
@@ -1,228 +0,0 @@
-;;; -*- mode: lisp; coding: utf-8; -*-
-
-;; Unfortunately xindy is out-of-the-box hyperref-incompatible.  This
-;; configuration is a workaround, which requires to pass option
-;; hyperindex=false to hyperref.
-;; textit and emph not currently used, spxpagem replaces former textbf
-(define-attributes (("textbf" "textit" "emph" "spxpagem" "default")))
-(markup-locref :open "\textbf{\hyperpage{" :close "}}" :attr "textbf")
-(markup-locref :open "\textit{\hyperpage{" :close "}}" :attr "textit")
-(markup-locref :open "\emph{\hyperpage{" :close "}}" :attr "emph")
-(markup-locref :open "\spxpagem{\hyperpage{" :close "}}" :attr "spxpagem")
-(markup-locref :open "\hyperpage{" :close "}" :attr "default")
-
-(require "numeric-sort.xdy")
-
-;; xindy base module latex.xdy loads tex.xdy and the latter instructs
-;; xindy to ignore **all** TeX macros in .idx entries, except those
-;; explicitely described in merge rule.  But when after applying all
-;; merge rules an empty string results, xindy raises an error:
-
-;;   ERROR: CHAR: index 0 should be less than the length of the string
-
-;; For example when using pdflatex with utf-8 characters the index
-;; file will contain \IeC macros and they will get ignored except if
-;; suitable merge rules are loaded early.  The texindy script coming
-;; with xindy provides this, but only for Latin scripts.  The texindy
-;; man page says to use rather xelatex or lualatex in case of Cyrillic
-;; scripts.
-
-;; Sphinx contributes LICRcyr2utf8.xdy to provide support for Cyrillic
-;; scripts for the pdflatex engine.
-
-;; Another issue caused by xindy ignoring all TeX macros except those
-;; explicitely declared reveals itself when attempting to index ">>>",
-;; as the ">" is converted to "\textgreater{}" by Sphinx's LaTeX
-;; escaping.
-
-;; To fix this, Sphinx does **not** use texindy, and does not even
-;; load the xindy latex.xdy base module.
-
-;(require "latex.xdy")
-
-;; Rather it incorporates some suitable extracts from latex.xdy and
-;; tex.xdy with additional Sphinx contributed rules.
-
-;; But, this means for pdflatex and Latin scripts that the xindy file
-;; tex/inputenc/uf8.xdy is not usable because it refers to the macro
-;; \IeC only sporadically, and as tex.xdy is not loaded, a rule such as
-;;     (merge-rule "\'e" "é" :string)
-;; does not work, it must be
-;;     (merge-rule "\IeC {\'e}" "é" :string)
-;; So Sphinx contributes LICRlatin2utf8.xdy to mitigate that problem.
-
-;;;;;;;; extracts from tex.xdy (discarding most original comments):
-
-;;;
-;;; TeX conventions
-;;;
-
-;; Discard leading and trailing white space. Collapse multiple white
-;; space characters to blank.
-
-(merge-rule "^ +" "" :eregexp)
-(merge-rule " +$" "" :eregexp)
-(merge-rule "  +" " " :eregexp)
-
-;; Handle TeX markup
-
-(merge-rule "\\([{}$%&#])" "\1" :eregexp)
-
-;;;;;;;; end of extracts from xindy's tex.xdy
-
-;;;;;;;; extracts from latex.xdy:
-
-;; Standard location classes: arabic and roman numbers, and alphabets.
-
-(define-location-class "arabic-page-numbers" ("arabic-numbers"))
-(define-location-class "roman-page-numbers"  ("roman-numbers-lowercase"))
-(define-location-class "Roman-page-numbers"  ("roman-numbers-uppercase"))
-(define-location-class "alpha-page-numbers"  ("alpha"))
-(define-location-class "Alpha-page-numbers"  ("ALPHA"))
-
-;; Output Markup
-
-(markup-letter-group-list :sep "~n~n  \indexspace~n")
-
-(markup-indexentry :open "~n  \item "           :depth 0)
-(markup-indexentry :open "~n    \subitem "      :depth 1)
-(markup-indexentry :open "~n      \subsubitem " :depth 2)
-
-(markup-locclass-list :open ", " :sep ", ")
-(markup-locref-list   :sep ", ")
-
-;;;;;;;; end of extracts from latex.xdy
-
-;; The LaTeX \index command turns \ into normal character so the TeX macros
-;; written to .idx files are not followed by a blank. This is different
-;; from non-ascii letters which end up (with pdflatex) as \IeC macros in .idx
-;; file, with a blank space after \IeC
-
-;; Details of the syntax are explained at
-;;     http://xindy.sourceforge.net/doc/manual-3.html
-;; In absence of :string, "xindy uses an auto-detection mechanism to decide,
-;; if the pattern is a regular expression or not". But it is not obvious to
-;; guess, for example "\\_" is not detected as RE but "\\P\{\}" is, so for
-;; being sure we apply the :string switch everywhere and do not use \\ etc...
-
-;; Go back from sphinx.util.texescape TeX macros to UTF-8
-
-(merge-rule "\sphinxleftcurlybrace{}" "{" :string)
-(merge-rule "\sphinxrightcurlybrace{}" "}" :string)
-(merge-rule "\_" "_" :string)
-(merge-rule "{[}" "[" :string)
-(merge-rule "{]}" "]" :string)
-(merge-rule "{}`" "`" :string)
-(merge-rule "\textbackslash{}" "\" :string)  ; " for Emacs syntax highlighting
-(merge-rule "\textasciitilde{}" "~~" :string); the ~~ escape is needed here
-(merge-rule "\textless{}" "<" :string)
-(merge-rule "\textgreater{}" ">" :string)
-(merge-rule "\textasciicircum{}" "^" :string)
-(merge-rule "\P{}" "¶" :string)
-(merge-rule "\S{}" "§" :string)
-(merge-rule "\texteuro{}" "€" :string)
-(merge-rule "\(\infty\)" "∞" :string)
-(merge-rule "\(\pm\)" "±" :string)
-(merge-rule "\(\rightarrow\)" "→" :string)
-(merge-rule "\(\checkmark\)" "✓" :string)
-(merge-rule "\textendash{}" "–" :string)
-(merge-rule "\textbar{}" "|" :string)
-(merge-rule "\(\sp{\text{0}}\)" "⁰" :string)
-(merge-rule "\(\sp{\text{1}}\)" "¹" :string)
-(merge-rule "\(\sp{\text{2}}\)" "²" :string)
-(merge-rule "\(\sp{\text{3}}\)" "³" :string)
-(merge-rule "\(\sp{\text{4}}\)" "⁴" :string)
-(merge-rule "\(\sp{\text{5}}\)" "⁵" :string)
-(merge-rule "\(\sp{\text{6}}\)" "⁶" :string)
-(merge-rule "\(\sp{\text{7}}\)" "⁷" :string)
-(merge-rule "\(\sp{\text{8}}\)" "⁸" :string)
-(merge-rule "\(\sp{\text{9}}\)" "⁹" :string)
-(merge-rule "\(\sb{\text{0}}\)" "â‚€" :string)
-(merge-rule "\(\sb{\text{1}}\)" "₁" :string)
-(merge-rule "\(\sb{\text{2}}\)" "â‚‚" :string)
-(merge-rule "\(\sb{\text{3}}\)" "₃" :string)
-(merge-rule "\(\sb{\text{4}}\)" "â‚„" :string)
-(merge-rule "\(\sb{\text{5}}\)" "â‚…" :string)
-(merge-rule "\(\sb{\text{6}}\)" "₆" :string)
-(merge-rule "\(\sb{\text{7}}\)" "₇" :string)
-(merge-rule "\(\sb{\text{8}}\)" "₈" :string)
-(merge-rule "\(\sb{\text{9}}\)" "₉" :string)
-(merge-rule "\IeC {\textalpha }" "α" :string)
-(merge-rule "\IeC {\textbeta }" "β" :string)
-(merge-rule "\IeC {\textgamma }" "γ" :string)
-(merge-rule "\IeC {\textdelta }" "δ" :string)
-(merge-rule "\IeC {\textepsilon }" "ε" :string)
-(merge-rule "\IeC {\textzeta }" "ζ" :string)
-(merge-rule "\IeC {\texteta }" "η" :string)
-(merge-rule "\IeC {\texttheta }" "θ" :string)
-(merge-rule "\IeC {\textiota }" "ι" :string)
-(merge-rule "\IeC {\textkappa }" "κ" :string)
-(merge-rule "\IeC {\textlambda }" "λ" :string)
-(merge-rule "\IeC {\textmu }" "μ" :string)
-(merge-rule "\IeC {\textnu }" "ν" :string)
-(merge-rule "\IeC {\textxi }" "ξ" :string)
-(merge-rule "\IeC {\textomicron }" "ο" :string)
-(merge-rule "\IeC {\textpi }" "Ï€" :string)
-(merge-rule "\IeC {\textrho }" "ρ" :string)
-(merge-rule "\IeC {\textsigma }" "σ" :string)
-(merge-rule "\IeC {\texttau }" "Ï„" :string)
-(merge-rule "\IeC {\textupsilon }" "Ï…" :string)
-(merge-rule "\IeC {\textphi }" "φ" :string)
-(merge-rule "\IeC {\textchi }" "χ" :string)
-(merge-rule "\IeC {\textpsi }" "ψ" :string)
-(merge-rule "\IeC {\textomega }" "ω" :string)
-(merge-rule "\IeC {\textAlpha }" "Α" :string)
-(merge-rule "\IeC {\textBeta }" "Î’" :string)
-(merge-rule "\IeC {\textGamma }" "Γ" :string)
-(merge-rule "\IeC {\textDelta }" "Δ" :string)
-(merge-rule "\IeC {\textEpsilon }" "Ε" :string)
-(merge-rule "\IeC {\textZeta }" "Ζ" :string)
-(merge-rule "\IeC {\textEta }" "Η" :string)
-(merge-rule "\IeC {\textTheta }" "Θ" :string)
-(merge-rule "\IeC {\textIota }" "Ι" :string)
-(merge-rule "\IeC {\textKappa }" "Κ" :string)
-(merge-rule "\IeC {\textLambda }" "Λ" :string)
-(merge-rule "\IeC {\textMu }" "Μ" :string)
-(merge-rule "\IeC {\textNu }" "Ν" :string)
-(merge-rule "\IeC {\textTheta }" "Θ" :string)
-(merge-rule "\IeC {\textIota }" "Ι" :string)
-(merge-rule "\IeC {\textKappa }" "Κ" :string)
-(merge-rule "\IeC {\textLambda }" "Λ" :string)
-(merge-rule "\IeC {\textMu }" "Μ" :string)
-(merge-rule "\IeC {\textNu }" "Ν" :string)
-(merge-rule "\IeC {\textXi }" "Ξ" :string)
-(merge-rule "\IeC {\textOmicron }" "Ο" :string)
-(merge-rule "\IeC {\textPi }" "Π" :string)
-(merge-rule "\IeC {\textRho }" "Ρ" :string)
-(merge-rule "\IeC {\textSigma }" "Σ" :string)
-(merge-rule "\IeC {\textTau }" "Τ" :string)
-(merge-rule "\IeC {\textUpsilon }" "Î¥" :string)
-(merge-rule "\IeC {\textPhi }" "Φ" :string)
-(merge-rule "\IeC {\textChi }" "Χ" :string)
-(merge-rule "\IeC {\textPsi }" "Ψ" :string)
-(merge-rule "\IeC {\textOmega }" "Ω" :string)
-(merge-rule "\IeC {\textohm }" "Ω" :string)
-
-;; This xindy module provides some basic support for "see"
-(require "makeindex.xdy")
-
-;; This creates one-letter headings and works fine with utf-8 letters.
-;; For Cyrillic with pdflatex works thanks to LICRcyr2utf8.xdy
-(require "latin-lettergroups.xdy")
-
-;; currently we don't (know how to easily) separate "Numbers" from
-;; "Symbols" with xindy as is the case with makeindex.
-(markup-index :open  "\begin{sphinxtheindex}
-\let\lettergroup\sphinxstyleindexlettergroup
-\let\lettergroupDefault\sphinxstyleindexlettergroupDefault
-\let\spxpagem\sphinxstyleindexpagemain
-\let\spxentry\sphinxstyleindexentry
-\let\spxextra\sphinxstyleindexextra
-
-"
-	      :close "
-
-\end{sphinxtheindex}
-"
-	      :tree)
-
diff --git a/docs/_build/latex/sphinxcyrillic.sty b/docs/_build/latex/sphinxcyrillic.sty
deleted file mode 100644
index 1a14c7b24..000000000
--- a/docs/_build/latex/sphinxcyrillic.sty
+++ /dev/null
@@ -1,53 +0,0 @@
-%% CYRILLIC IN NON-CYRILLIC DOCUMENTS (pdflatex only)
-%
-% refs: https://tex.stackexchange.com/q/460271/
-\ProvidesPackage{sphinxcyrillic}%
-  [2018/11/21 v2.0 support for Cyrillic in non-Cyrillic documents]
-\RequirePackage{kvoptions}
-\SetupKeyvalOptions{prefix=spx@cyropt@} % use \spx@cyropt@ prefix
-\DeclareBoolOption[false]{Xtwo}
-\DeclareBoolOption[false]{TtwoA}
-\DeclareDefaultOption{\@unknownoptionerror}
-\ProcessLocalKeyvalOptions* % ignore class options
-
-\ifspx@cyropt@Xtwo
-% original code by tex.sx user egreg:
-%   https://tex.stackexchange.com/a/460325/
-% 159 Cyrillic glyphs as available in X2 TeX 8bit font encoding
-% This assumes inputenc loaded with utf8 option, or LaTeX release
-% as recent as 2018/04/01 which does it automatically. 
-  \@tfor\next:=%
-    {Ё}{Ђ}{Є}{Ѕ}{І}{Ј}{Љ}{Њ}{Ћ}{Ў}{Џ}{А}{Б}{В}{Г}{Д}{Е}{Ж}{З}{И}{Й}%
-    {К}{Л}{М}{Н}{О}{П}{Р}{С}{Т}{У}{Ф}{Х}{Ц}{Ч}{Ш}{Щ}{Ъ}{Ы}{Ь}{Э}{Ю}%
-    {Я}{а}{б}{в}{г}{д}{е}{ж}{з}{и}{й}{к}{л}{м}{н}{о}{п}{р}{с}{т}{у}%
-    {ф}{х}{ц}{ч}{ш}{щ}{ъ}{ы}{ь}{э}{ю}{я}{ё}{ђ}{є}{ѕ}{і}{ј}{љ}{њ}{ћ}%
-    {ў}{џ}{Ѣ}{ѣ}{Ѫ}{ѫ}{Ѵ}{ѵ}{Ґ}{ґ}{Ғ}{ғ}{Ҕ}{ҕ}{Җ}{җ}{Ҙ}{ҙ}{Қ}{қ}{Ҝ}{ҝ}%
-    {Òž}{ÒŸ}{Ò }{Ò¡}{Ò¢}{Ò£}{Ò¤}{Ò¥}{Ò¦}{Ò§}{Ò¨}{Ò©}{Òª}{Ò«}{Ò¬}{Ò­}{Ò®}{Ò¯}{Ò°}{Ò±}{Ò²}{Ò³}%
-    {Ҵ}{ҵ}{Ҷ}{ҷ}{Ҹ}{ҹ}{Һ}{һ}{Ҽ}{ҽ}{Ҿ}{ҿ}{Ӏ}{Ӄ}{ӄ}{Ӆ}{ӆ}{Ӈ}{ӈ}{Ӌ}{ӌ}%
-    {Ӎ}{ӎ}{Ӕ}{ӕ}{Ә}{ә}{Ӡ}{ӡ}{Ө}{ө}\do
-  {%
-    \begingroup\def\IeC{\protect\DeclareTextSymbolDefault}%
-    \protected@edef\@temp{\endgroup\next{X2}}\@temp
-  }%
-\else
-\ifspx@cyropt@TtwoA
-% original code by tex.sx user jfbu:
-%   https://tex.stackexchange.com/a/460305/
-% 63*2+1=127 Cyrillic glyphs as found in T2A 8bit TeX font-encoding
-  \@tfor\@tempa:=%
-    {ae}{a}{b}{chrdsc}{chvcrs}{ch}{c}{dje}{dze}{dzhe}{d}{erev}{ery}{e}%
-    {f}{ghcrs}{gup}{g}{hdsc}{hrdsn}{h}{ie}{ii}{ishrt}{i}{je}%
-    {kbeak}{kdsc}{kvcrs}{k}{lje}{l}{m}{ndsc}{ng}{nje}{n}{otld}{o}{p}{r}%
-    {schwa}{sdsc}{sftsn}{shch}{shha}{sh}{s}{tshe}{t}{ushrt}{u}{v}%
-    {ya}{yhcrs}{yi}{yo}{yu}{y}{zdsc}{zhdsc}{zh}{z}\do
-  {%
-    \expandafter\DeclareTextSymbolDefault\expandafter
-               {\csname cyr\@tempa\endcsname}{T2A}%
-    \expandafter\uppercase\expandafter{\expandafter
-                 \def\expandafter\@tempa\expandafter{\@tempa}}%
-    \expandafter\DeclareTextSymbolDefault\expandafter
-      {\csname CYR\@tempa\endcsname}{T2A}%
-  }%
-  \DeclareTextSymbolDefault{\CYRpalochka}{T2A}%
-\fi\fi
-\endinput
diff --git a/docs/_build/latex/sphinxhighlight.sty b/docs/_build/latex/sphinxhighlight.sty
deleted file mode 100644
index 1557ce6e3..000000000
--- a/docs/_build/latex/sphinxhighlight.sty
+++ /dev/null
@@ -1,105 +0,0 @@
-\NeedsTeXFormat{LaTeX2e}[1995/12/01]
-\ProvidesPackage{sphinxhighlight}[2016/05/29 stylesheet for highlighting with pygments]
-
-
-\makeatletter
-\def\PYG@reset{\let\PYG@it=\relax \let\PYG@bf=\relax%
-    \let\PYG@ul=\relax \let\PYG@tc=\relax%
-    \let\PYG@bc=\relax \let\PYG@ff=\relax}
-\def\PYG@tok#1{\csname PYG@tok@#1\endcsname}
-\def\PYG@toks#1+{\ifx\relax#1\empty\else%
-    \PYG@tok{#1}\expandafter\PYG@toks\fi}
-\def\PYG@do#1{\PYG@bc{\PYG@tc{\PYG@ul{%
-    \PYG@it{\PYG@bf{\PYG@ff{#1}}}}}}}
-\def\PYG#1#2{\PYG@reset\PYG@toks#1+\relax+\PYG@do{#2}}
-
-\expandafter\def\csname PYG@tok@w\endcsname{\def\PYG@tc##1{\textcolor[rgb]{0.73,0.73,0.73}{##1}}}
-\expandafter\def\csname PYG@tok@c\endcsname{\let\PYG@it=\textit\def\PYG@tc##1{\textcolor[rgb]{0.25,0.50,0.56}{##1}}}
-\expandafter\def\csname PYG@tok@cp\endcsname{\def\PYG@tc##1{\textcolor[rgb]{0.00,0.44,0.13}{##1}}}
-\expandafter\def\csname PYG@tok@cs\endcsname{\def\PYG@tc##1{\textcolor[rgb]{0.25,0.50,0.56}{##1}}\def\PYG@bc##1{\setlength{\fboxsep}{0pt}\colorbox[rgb]{1.00,0.94,0.94}{\strut ##1}}}
-\expandafter\def\csname PYG@tok@k\endcsname{\let\PYG@bf=\textbf\def\PYG@tc##1{\textcolor[rgb]{0.00,0.44,0.13}{##1}}}
-\expandafter\def\csname PYG@tok@kp\endcsname{\def\PYG@tc##1{\textcolor[rgb]{0.00,0.44,0.13}{##1}}}
-\expandafter\def\csname PYG@tok@kt\endcsname{\def\PYG@tc##1{\textcolor[rgb]{0.56,0.13,0.00}{##1}}}
-\expandafter\def\csname PYG@tok@o\endcsname{\def\PYG@tc##1{\textcolor[rgb]{0.40,0.40,0.40}{##1}}}
-\expandafter\def\csname PYG@tok@ow\endcsname{\let\PYG@bf=\textbf\def\PYG@tc##1{\textcolor[rgb]{0.00,0.44,0.13}{##1}}}
-\expandafter\def\csname PYG@tok@nb\endcsname{\def\PYG@tc##1{\textcolor[rgb]{0.00,0.44,0.13}{##1}}}
-\expandafter\def\csname PYG@tok@nf\endcsname{\def\PYG@tc##1{\textcolor[rgb]{0.02,0.16,0.49}{##1}}}
-\expandafter\def\csname PYG@tok@nc\endcsname{\let\PYG@bf=\textbf\def\PYG@tc##1{\textcolor[rgb]{0.05,0.52,0.71}{##1}}}
-\expandafter\def\csname PYG@tok@nn\endcsname{\let\PYG@bf=\textbf\def\PYG@tc##1{\textcolor[rgb]{0.05,0.52,0.71}{##1}}}
-\expandafter\def\csname PYG@tok@ne\endcsname{\def\PYG@tc##1{\textcolor[rgb]{0.00,0.44,0.13}{##1}}}
-\expandafter\def\csname PYG@tok@nv\endcsname{\def\PYG@tc##1{\textcolor[rgb]{0.73,0.38,0.84}{##1}}}
-\expandafter\def\csname PYG@tok@no\endcsname{\def\PYG@tc##1{\textcolor[rgb]{0.38,0.68,0.84}{##1}}}
-\expandafter\def\csname PYG@tok@nl\endcsname{\let\PYG@bf=\textbf\def\PYG@tc##1{\textcolor[rgb]{0.00,0.13,0.44}{##1}}}
-\expandafter\def\csname PYG@tok@ni\endcsname{\let\PYG@bf=\textbf\def\PYG@tc##1{\textcolor[rgb]{0.84,0.33,0.22}{##1}}}
-\expandafter\def\csname PYG@tok@na\endcsname{\def\PYG@tc##1{\textcolor[rgb]{0.25,0.44,0.63}{##1}}}
-\expandafter\def\csname PYG@tok@nt\endcsname{\let\PYG@bf=\textbf\def\PYG@tc##1{\textcolor[rgb]{0.02,0.16,0.45}{##1}}}
-\expandafter\def\csname PYG@tok@nd\endcsname{\let\PYG@bf=\textbf\def\PYG@tc##1{\textcolor[rgb]{0.33,0.33,0.33}{##1}}}
-\expandafter\def\csname PYG@tok@s\endcsname{\def\PYG@tc##1{\textcolor[rgb]{0.25,0.44,0.63}{##1}}}
-\expandafter\def\csname PYG@tok@sd\endcsname{\let\PYG@it=\textit\def\PYG@tc##1{\textcolor[rgb]{0.25,0.44,0.63}{##1}}}
-\expandafter\def\csname PYG@tok@si\endcsname{\let\PYG@it=\textit\def\PYG@tc##1{\textcolor[rgb]{0.44,0.63,0.82}{##1}}}
-\expandafter\def\csname PYG@tok@se\endcsname{\let\PYG@bf=\textbf\def\PYG@tc##1{\textcolor[rgb]{0.25,0.44,0.63}{##1}}}
-\expandafter\def\csname PYG@tok@sr\endcsname{\def\PYG@tc##1{\textcolor[rgb]{0.14,0.33,0.53}{##1}}}
-\expandafter\def\csname PYG@tok@ss\endcsname{\def\PYG@tc##1{\textcolor[rgb]{0.32,0.47,0.09}{##1}}}
-\expandafter\def\csname PYG@tok@sx\endcsname{\def\PYG@tc##1{\textcolor[rgb]{0.78,0.36,0.04}{##1}}}
-\expandafter\def\csname PYG@tok@m\endcsname{\def\PYG@tc##1{\textcolor[rgb]{0.13,0.50,0.31}{##1}}}
-\expandafter\def\csname PYG@tok@gh\endcsname{\let\PYG@bf=\textbf\def\PYG@tc##1{\textcolor[rgb]{0.00,0.00,0.50}{##1}}}
-\expandafter\def\csname PYG@tok@gu\endcsname{\let\PYG@bf=\textbf\def\PYG@tc##1{\textcolor[rgb]{0.50,0.00,0.50}{##1}}}
-\expandafter\def\csname PYG@tok@gd\endcsname{\def\PYG@tc##1{\textcolor[rgb]{0.63,0.00,0.00}{##1}}}
-\expandafter\def\csname PYG@tok@gi\endcsname{\def\PYG@tc##1{\textcolor[rgb]{0.00,0.63,0.00}{##1}}}
-\expandafter\def\csname PYG@tok@gr\endcsname{\def\PYG@tc##1{\textcolor[rgb]{1.00,0.00,0.00}{##1}}}
-\expandafter\def\csname PYG@tok@ge\endcsname{\let\PYG@it=\textit}
-\expandafter\def\csname PYG@tok@gs\endcsname{\let\PYG@bf=\textbf}
-\expandafter\def\csname PYG@tok@gp\endcsname{\let\PYG@bf=\textbf\def\PYG@tc##1{\textcolor[rgb]{0.78,0.36,0.04}{##1}}}
-\expandafter\def\csname PYG@tok@go\endcsname{\def\PYG@tc##1{\textcolor[rgb]{0.20,0.20,0.20}{##1}}}
-\expandafter\def\csname PYG@tok@gt\endcsname{\def\PYG@tc##1{\textcolor[rgb]{0.00,0.27,0.87}{##1}}}
-\expandafter\def\csname PYG@tok@err\endcsname{\def\PYG@bc##1{\setlength{\fboxsep}{0pt}\fcolorbox[rgb]{1.00,0.00,0.00}{1,1,1}{\strut ##1}}}
-\expandafter\def\csname PYG@tok@kc\endcsname{\let\PYG@bf=\textbf\def\PYG@tc##1{\textcolor[rgb]{0.00,0.44,0.13}{##1}}}
-\expandafter\def\csname PYG@tok@kd\endcsname{\let\PYG@bf=\textbf\def\PYG@tc##1{\textcolor[rgb]{0.00,0.44,0.13}{##1}}}
-\expandafter\def\csname PYG@tok@kn\endcsname{\let\PYG@bf=\textbf\def\PYG@tc##1{\textcolor[rgb]{0.00,0.44,0.13}{##1}}}
-\expandafter\def\csname PYG@tok@kr\endcsname{\let\PYG@bf=\textbf\def\PYG@tc##1{\textcolor[rgb]{0.00,0.44,0.13}{##1}}}
-\expandafter\def\csname PYG@tok@bp\endcsname{\def\PYG@tc##1{\textcolor[rgb]{0.00,0.44,0.13}{##1}}}
-\expandafter\def\csname PYG@tok@fm\endcsname{\def\PYG@tc##1{\textcolor[rgb]{0.02,0.16,0.49}{##1}}}
-\expandafter\def\csname PYG@tok@vc\endcsname{\def\PYG@tc##1{\textcolor[rgb]{0.73,0.38,0.84}{##1}}}
-\expandafter\def\csname PYG@tok@vg\endcsname{\def\PYG@tc##1{\textcolor[rgb]{0.73,0.38,0.84}{##1}}}
-\expandafter\def\csname PYG@tok@vi\endcsname{\def\PYG@tc##1{\textcolor[rgb]{0.73,0.38,0.84}{##1}}}
-\expandafter\def\csname PYG@tok@vm\endcsname{\def\PYG@tc##1{\textcolor[rgb]{0.73,0.38,0.84}{##1}}}
-\expandafter\def\csname PYG@tok@sa\endcsname{\def\PYG@tc##1{\textcolor[rgb]{0.25,0.44,0.63}{##1}}}
-\expandafter\def\csname PYG@tok@sb\endcsname{\def\PYG@tc##1{\textcolor[rgb]{0.25,0.44,0.63}{##1}}}
-\expandafter\def\csname PYG@tok@sc\endcsname{\def\PYG@tc##1{\textcolor[rgb]{0.25,0.44,0.63}{##1}}}
-\expandafter\def\csname PYG@tok@dl\endcsname{\def\PYG@tc##1{\textcolor[rgb]{0.25,0.44,0.63}{##1}}}
-\expandafter\def\csname PYG@tok@s2\endcsname{\def\PYG@tc##1{\textcolor[rgb]{0.25,0.44,0.63}{##1}}}
-\expandafter\def\csname PYG@tok@sh\endcsname{\def\PYG@tc##1{\textcolor[rgb]{0.25,0.44,0.63}{##1}}}
-\expandafter\def\csname PYG@tok@s1\endcsname{\def\PYG@tc##1{\textcolor[rgb]{0.25,0.44,0.63}{##1}}}
-\expandafter\def\csname PYG@tok@mb\endcsname{\def\PYG@tc##1{\textcolor[rgb]{0.13,0.50,0.31}{##1}}}
-\expandafter\def\csname PYG@tok@mf\endcsname{\def\PYG@tc##1{\textcolor[rgb]{0.13,0.50,0.31}{##1}}}
-\expandafter\def\csname PYG@tok@mh\endcsname{\def\PYG@tc##1{\textcolor[rgb]{0.13,0.50,0.31}{##1}}}
-\expandafter\def\csname PYG@tok@mi\endcsname{\def\PYG@tc##1{\textcolor[rgb]{0.13,0.50,0.31}{##1}}}
-\expandafter\def\csname PYG@tok@il\endcsname{\def\PYG@tc##1{\textcolor[rgb]{0.13,0.50,0.31}{##1}}}
-\expandafter\def\csname PYG@tok@mo\endcsname{\def\PYG@tc##1{\textcolor[rgb]{0.13,0.50,0.31}{##1}}}
-\expandafter\def\csname PYG@tok@ch\endcsname{\let\PYG@it=\textit\def\PYG@tc##1{\textcolor[rgb]{0.25,0.50,0.56}{##1}}}
-\expandafter\def\csname PYG@tok@cm\endcsname{\let\PYG@it=\textit\def\PYG@tc##1{\textcolor[rgb]{0.25,0.50,0.56}{##1}}}
-\expandafter\def\csname PYG@tok@cpf\endcsname{\let\PYG@it=\textit\def\PYG@tc##1{\textcolor[rgb]{0.25,0.50,0.56}{##1}}}
-\expandafter\def\csname PYG@tok@c1\endcsname{\let\PYG@it=\textit\def\PYG@tc##1{\textcolor[rgb]{0.25,0.50,0.56}{##1}}}
-
-\def\PYGZbs{\char`\\}
-\def\PYGZus{\char`\_}
-\def\PYGZob{\char`\{}
-\def\PYGZcb{\char`\}}
-\def\PYGZca{\char`\^}
-\def\PYGZam{\char`\&}
-\def\PYGZlt{\char`\<}
-\def\PYGZgt{\char`\>}
-\def\PYGZsh{\char`\#}
-\def\PYGZpc{\char`\%}
-\def\PYGZdl{\char`\$}
-\def\PYGZhy{\char`\-}
-\def\PYGZsq{\char`\'}
-\def\PYGZdq{\char`\"}
-\def\PYGZti{\char`\~}
-% for compatibility with earlier versions
-\def\PYGZat{@}
-\def\PYGZlb{[}
-\def\PYGZrb{]}
-\makeatother
-
-\renewcommand\PYGZsq{\textquotesingle}
diff --git a/docs/_build/latex/sphinxhowto.cls b/docs/_build/latex/sphinxhowto.cls
deleted file mode 100644
index ba5e0031c..000000000
--- a/docs/_build/latex/sphinxhowto.cls
+++ /dev/null
@@ -1,91 +0,0 @@
-%
-% sphinxhowto.cls for Sphinx (http://sphinx-doc.org/)
-%
-
-\NeedsTeXFormat{LaTeX2e}[1995/12/01]
-\ProvidesClass{sphinxhowto}[2018/12/23 v2.0 Document class (Sphinx howto)]
-
-% 'oneside' option overriding the 'twoside' default
-\newif\if@oneside
-\DeclareOption{oneside}{\@onesidetrue}
-% Pass remaining document options to the parent class.
-\DeclareOption*{\PassOptionsToClass{\CurrentOption}{\sphinxdocclass}}
-\ProcessOptions\relax
-
-% Default to two-side document
-\if@oneside
-% nothing to do (oneside is the default)
-\else
-\PassOptionsToClass{twoside}{\sphinxdocclass}
-\fi
-
-\LoadClass{\sphinxdocclass}
-
-% Set some sane defaults for section numbering depth and TOC depth.  You can
-% reset these counters in your preamble.
-%
-\setcounter{secnumdepth}{2}
-\setcounter{tocdepth}{2}% i.e. section and subsection
-
-% Change the title page to look a bit better, and fit in with the fncychap
-% ``Bjarne'' style a bit better.
-%
-\newcommand{\sphinxmaketitle}{%
-  \noindent\rule{\textwidth}{1pt}\par
-    \begingroup % for PDF information dictionary
-       \def\endgraf{ }\def\and{\& }%
-       \pdfstringdefDisableCommands{\def\\{, }}% overwrite hyperref setup
-       \hypersetup{pdfauthor={\@author}, pdftitle={\@title}}%
-    \endgroup
-  \begin{flushright}
-    \sphinxlogo
-    \py@HeaderFamily
-    {\Huge \@title }\par
-    {\itshape\large \py@release \releaseinfo}\par
-    \vspace{25pt}
-    {\Large
-      \begin{tabular}[t]{c}
-        \@author
-      \end{tabular}\kern-\tabcolsep}\par
-    \vspace{25pt}
-    \@date \par
-    \py@authoraddress \par
-  \end{flushright}
-  \@thanks
-  \setcounter{footnote}{0}
-  \let\thanks\relax\let\maketitle\relax
-  %\gdef\@thanks{}\gdef\@author{}\gdef\@title{}
-}
-
-\newcommand{\sphinxtableofcontents}{%
-  \begingroup
-    \parskip \z@skip
-    \sphinxtableofcontentshook
-    \tableofcontents
-  \endgroup
-  \noindent\rule{\textwidth}{1pt}\par
-  \vspace{12pt}%
-}  
-\newcommand\sphinxtableofcontentshook{}
-\pagenumbering{arabic}
-
-% Fix the bibliography environment to add an entry to the Table of
-% Contents.
-% For an article document class this environment is a section,
-% so no page break before it.
-%
-\newenvironment{sphinxthebibliography}[1]{%
-  % \phantomsection % not needed here since TeXLive 2010's hyperref
-  \begin{thebibliography}{#1}%
-  \addcontentsline{toc}{section}{\ifdefined\refname\refname\else\ifdefined\bibname\bibname\fi\fi}}{\end{thebibliography}}
-
-
-% Same for the indices.
-% The memoir class already does this, so we don't duplicate it in that case.
-%
-\@ifclassloaded{memoir}
- {\newenvironment{sphinxtheindex}{\begin{theindex}}{\end{theindex}}}
- {\newenvironment{sphinxtheindex}{%
-    \phantomsection % needed because no chapter, section, ... is created by theindex
-    \begin{theindex}%
-    \addcontentsline{toc}{section}{\indexname}}{\end{theindex}}}
diff --git a/docs/_build/latex/sphinxmanual.cls b/docs/_build/latex/sphinxmanual.cls
deleted file mode 100644
index e7c8f41ef..000000000
--- a/docs/_build/latex/sphinxmanual.cls
+++ /dev/null
@@ -1,117 +0,0 @@
-%
-% sphinxmanual.cls for Sphinx (http://sphinx-doc.org/)
-%
-
-\NeedsTeXFormat{LaTeX2e}[1995/12/01]
-\ProvidesClass{sphinxmanual}[2018/12/23 v2.0 Document class (Sphinx manual)]
-
-% chapters starting at odd pages (overridden by 'openany' document option)
-\PassOptionsToClass{openright}{\sphinxdocclass}
-
-% 'oneside' option overriding the 'twoside' default
-\newif\if@oneside
-\DeclareOption{oneside}{\@onesidetrue}
-% Pass remaining document options to the parent class.
-\DeclareOption*{\PassOptionsToClass{\CurrentOption}{\sphinxdocclass}}
-\ProcessOptions\relax
-
-% Defaults two-side document
-\if@oneside
-% nothing to do (oneside is the default)
-\else
-\PassOptionsToClass{twoside}{\sphinxdocclass}
-\fi
-
-\LoadClass{\sphinxdocclass}
-
-% Set some sane defaults for section numbering depth and TOC depth.  You can
-% reset these counters in your preamble.
-%
-\setcounter{secnumdepth}{2}
-\setcounter{tocdepth}{1}
-
-% Change the title page to look a bit better, and fit in with the fncychap
-% ``Bjarne'' style a bit better.
-%
-\newcommand{\sphinxmaketitle}{%
-  \let\sphinxrestorepageanchorsetting\relax
-  \ifHy@pageanchor\def\sphinxrestorepageanchorsetting{\Hy@pageanchortrue}\fi
-  \hypersetup{pageanchor=false}% avoid duplicate destination warnings
-  \begin{titlepage}%
-    \let\footnotesize\small
-    \let\footnoterule\relax
-    \noindent\rule{\textwidth}{1pt}\par
-      \begingroup % for PDF information dictionary
-       \def\endgraf{ }\def\and{\& }%
-       \pdfstringdefDisableCommands{\def\\{, }}% overwrite hyperref setup
-       \hypersetup{pdfauthor={\@author}, pdftitle={\@title}}%
-      \endgroup
-    \begin{flushright}%
-      \sphinxlogo
-      \py@HeaderFamily
-      {\Huge \@title \par}
-      {\itshape\LARGE \py@release\releaseinfo \par}
-      \vfill
-      {\LARGE
-        \begin{tabular}[t]{c}
-          \@author
-        \end{tabular}\kern-\tabcolsep
-        \par}
-      \vfill\vfill
-      {\large
-       \@date \par
-       \vfill
-       \py@authoraddress \par
-      }%
-    \end{flushright}%\par
-    \@thanks
-  \end{titlepage}%
-  \setcounter{footnote}{0}%
-  \let\thanks\relax\let\maketitle\relax
-  %\gdef\@thanks{}\gdef\@author{}\gdef\@title{}
-  \clearpage
-  \ifdefined\sphinxbackoftitlepage\sphinxbackoftitlepage\fi
-  \if@openright\cleardoublepage\else\clearpage\fi
-  \sphinxrestorepageanchorsetting
-}
-
-\newcommand{\sphinxtableofcontents}{%
-  \pagenumbering{roman}%
-  \begingroup
-    \parskip \z@skip
-    \sphinxtableofcontentshook
-    \tableofcontents
-  \endgroup
-  % before resetting page counter, let's do the right thing.
-  \if@openright\cleardoublepage\else\clearpage\fi
-  \pagenumbering{arabic}%
-}
-
-% This is needed to get the width of the section # area wide enough in the
-% library reference.  Doing it here keeps it the same for all the manuals.
-%
-\newcommand{\sphinxtableofcontentshook}{%
-  \renewcommand*\l@section{\@dottedtocline{1}{1.5em}{2.6em}}%
-  \renewcommand*\l@subsection{\@dottedtocline{2}{4.1em}{3.5em}}%
-}
-
-% Fix the bibliography environment to add an entry to the Table of
-% Contents.
-% For a report document class this environment is a chapter.
-%
-\newenvironment{sphinxthebibliography}[1]{%
-  \if@openright\cleardoublepage\else\clearpage\fi
-  % \phantomsection % not needed here since TeXLive 2010's hyperref
-  \begin{thebibliography}{#1}%
-  \addcontentsline{toc}{chapter}{\bibname}}{\end{thebibliography}}
-
-% Same for the indices.
-% The memoir class already does this, so we don't duplicate it in that case.
-%
-\@ifclassloaded{memoir}
- {\newenvironment{sphinxtheindex}{\begin{theindex}}{\end{theindex}}}
- {\newenvironment{sphinxtheindex}{%
-    \if@openright\cleardoublepage\else\clearpage\fi
-    \phantomsection % needed as no chapter, section, ... created
-    \begin{theindex}%
-    \addcontentsline{toc}{chapter}{\indexname}}{\end{theindex}}}
diff --git a/docs/_build/latex/sphinxmessages.sty b/docs/_build/latex/sphinxmessages.sty
deleted file mode 100644
index 129453dc0..000000000
--- a/docs/_build/latex/sphinxmessages.sty
+++ /dev/null
@@ -1,21 +0,0 @@
-%
-% sphinxmessages.sty
-%
-% message resources for Sphinx
-%
-\ProvidesPackage{sphinxmessages}[2019/01/04 v2.0 Localized LaTeX macros (Sphinx team)]
-
-\renewcommand{\literalblockcontinuedname}{Fortsetzung der vorherigen Seite}
-\renewcommand{\literalblockcontinuesname}{Fortsetzung auf der nächsten Seite}
-\renewcommand{\sphinxnonalphabeticalgroupname}{Non-alphabetical}
-\renewcommand{\sphinxsymbolsname}{Sonderzeichen}
-\renewcommand{\sphinxnumbersname}{Numbers}
-\def\pageautorefname{Seite}
-
-\addto\captionsngerman{\renewcommand{\figurename}{Abb.\@{} }}
-\def\fnum@figure{\figurename\thefigure{}}
-
-\addto\captionsngerman{\renewcommand{\tablename}{Tab.\@{} }}
-\def\fnum@table{\tablename\thetable{}}
-
-\addto\captionsngerman{\renewcommand{\literalblockname}{Quellcode}}
\ No newline at end of file
diff --git a/docs/_build/latex/sphinxmulticell.sty b/docs/_build/latex/sphinxmulticell.sty
deleted file mode 100644
index f0d11b1f9..000000000
--- a/docs/_build/latex/sphinxmulticell.sty
+++ /dev/null
@@ -1,317 +0,0 @@
-\NeedsTeXFormat{LaTeX2e}
-\ProvidesPackage{sphinxmulticell}%
-    [2017/02/23 v1.6 better span rows and columns of a table (Sphinx team)]%
-\DeclareOption*{\PackageWarning{sphinxmulticell}{Option `\CurrentOption' is unknown}}%
-\ProcessOptions\relax
-%
-% --- MULTICOLUMN ---
-% standard LaTeX's \multicolumn
-% 1. does not allow verbatim contents,
-% 2. interacts very poorly with tabulary.
-%
-% It is needed to write own macros for Sphinx: to allow code-blocks in merged
-% cells rendered by tabular/longtable, and to allow multi-column cells with
-% paragraphs to be taken into account sanely by tabulary algorithm for column
-% widths.
-%
-% This requires quite a bit of hacking. First, in Sphinx, the multi-column
-% contents will *always* be wrapped in a varwidth environment. The issue
-% becomes to pass it the correct target width. We must trick tabulary into
-% believing the multicolumn is simply separate columns, else tabulary does not
-% incorporate the contents in its algorithm. But then we must clear the
-% vertical rules...
-%
-% configuration of tabulary
-\setlength{\tymin}{3\fontcharwd\font`0 }% minimal width of "squeezed" columns
-\setlength{\tymax}{10000pt}% allow enough room for paragraphs to "compete"
-% we need access to tabulary's final computed width. \@tempdima is too volatile
-% to hope it has kept tabulary's value when \sphinxcolwidth needs it.
-\newdimen\sphinx@TY@tablewidth
-\def\tabulary{%
-  \def\TY@final{\sphinx@TY@tablewidth\@tempdima\tabular}%
-  \let\endTY@final\endtabular
-  \TY@tabular}%
-% next hack is needed only if user has set latex_use_latex_multicolumn to True:
-% it fixes tabulary's bug with \multicolumn defined "short" in first pass. (if
-% upstream tabulary adds a \long, our extra one causes no harm)
-\def\sphinx@tempa #1\def\multicolumn#2#3#4#5#6#7#8#9\sphinx@tempa
-   {\def\TY@tab{#1\long\def\multicolumn####1####2####3{\multispan####1\relax}#9}}%
-\expandafter\sphinx@tempa\TY@tab\sphinx@tempa
-%
-% TN. 1: as \omit is never executed, Sphinx multicolumn does not need to worry
-% like standard multicolumn about |l| vs l|. On the other hand it assumes
-% columns are separated by a | ... (if not it will add extraneous
-% \arrayrulewidth space for each column separation in its estimate of available
-% width).
-%
-% TN. 1b: as Sphinx multicolumn uses neither \omit nor \span, it can not
-% (easily) get rid of extra macros from >{...} or <{...} between columns. At
-% least, it has been made compatible with colortbl's \columncolor.
-%
-% TN. 2: tabulary's second pass is handled like tabular/longtable's single
-% pass, with the difference that we hacked \TY@final to set in
-% \sphinx@TY@tablewidth the final target width as computed by tabulary. This is
-% needed only to handle columns with a "horizontal" specifier: "p" type columns
-% (inclusive of tabulary's LJRC) holds the target column width in the
-% \linewidth dimension.
-%
-% TN. 3: use of \begin{sphinxmulticolumn}...\end{sphinxmulticolumn} mark-up
-% would need some hacking around the fact that groups can not span across table
-% cells (the code does inserts & tokens, see TN1b). It was decided to keep it
-% simple with \sphinxstartmulticolumn...\sphinxstopmulticolumn.
-%
-% MEMO about nesting: if sphinxmulticolumn is encountered in a nested tabular
-% inside a tabulary it will think to be at top level in the tabulary. But
-% Sphinx generates no nested tables, and if some LaTeX macro uses internally a
-% tabular this will not have a \sphinxstartmulticolumn within it!
-%
-\def\sphinxstartmulticolumn{%
-    \ifx\equation$% $ tabulary's first pass
-        \expandafter\sphinx@TYI@start@multicolumn
-    \else % either not tabulary or tabulary's second pass
-        \expandafter\sphinx@start@multicolumn
-    \fi
-}%
-\def\sphinxstopmulticolumn{%
-    \ifx\equation$% $ tabulary's first pass
-        \expandafter\sphinx@TYI@stop@multicolumn
-    \else % either not tabulary or tabulary's second pass
-        \ignorespaces
-    \fi
-}%
-\def\sphinx@TYI@start@multicolumn#1{%
-    % use \gdef always to avoid stack space build up
-    \gdef\sphinx@tempa{#1}\begingroup\setbox\z@\hbox\bgroup
-}%
-\def\sphinx@TYI@stop@multicolumn{\egroup % varwidth was used with \tymax
-    \xdef\sphinx@tempb{\the\dimexpr\wd\z@/\sphinx@tempa}% per column width
-    \endgroup
-    \expandafter\sphinx@TYI@multispan\expandafter{\sphinx@tempa}%
-}%
-\def\sphinx@TYI@multispan #1{%
-    \kern\sphinx@tempb\ignorespaces % the per column occupied width
-    \ifnum#1>\@ne % repeat, taking into account subtleties of TeX's & ...
-      \expandafter\sphinx@TYI@multispan@next\expandafter{\the\numexpr#1-\@ne\expandafter}%
-    \fi
-}%
-\def\sphinx@TYI@multispan@next{&\relax\sphinx@TYI@multispan}%
-%
-% Now the branch handling either the second pass of tabulary or the single pass
-% of tabular/longtable. This is the delicate part where we gather the
-% dimensions from the p columns either set-up by tabulary or by user p column
-% or Sphinx \X, \Y columns. The difficulty is that to get the said width, the
-% template must be inserted (other hacks would be horribly complicated except
-% if we rewrote crucial parts of LaTeX's \@array !) and we can not do
-% \omit\span like standard \multicolumn's easy approach. Thus we must cancel
-% the \vrule separators. Also, perhaps the column specifier is of the l, c, r
-% type, then we attempt an ad hoc rescue to give varwidth a reasonable target
-% width.
-\def\sphinx@start@multicolumn#1{%
-    \gdef\sphinx@multiwidth{0pt}\gdef\sphinx@tempa{#1}\sphinx@multispan{#1}%
-}%
-\def\sphinx@multispan #1{%
-    \ifnum#1=\@ne\expandafter\sphinx@multispan@end
-            \else\expandafter\sphinx@multispan@next
-    \fi {#1}%
-}%
-\def\sphinx@multispan@next #1{%
-    % trick to recognize L, C, R, J or p, m, b type columns
-    \ifdim\baselineskip>\z@
-       \gdef\sphinx@tempb{\linewidth}%
-    \else
-    % if in an l, r, c type column, try and hope for the best
-       \xdef\sphinx@tempb{\the\dimexpr(\ifx\TY@final\@undefined\linewidth\else
-            \sphinx@TY@tablewidth\fi-\arrayrulewidth)/\sphinx@tempa
-            -\tw@\tabcolsep-\arrayrulewidth\relax}%
-    \fi
-    \noindent\kern\sphinx@tempb\relax
-    \xdef\sphinx@multiwidth
-           {\the\dimexpr\sphinx@multiwidth+\sphinx@tempb+\tw@\tabcolsep+\arrayrulewidth}%
-    % hack the \vline and the colortbl macros
-    \sphinx@hack@vline\sphinx@hack@CT&\relax
-    % repeat
-    \expandafter\sphinx@multispan\expandafter{\the\numexpr#1-\@ne}%
-}%
-% packages like colortbl add group levels, we need to "climb back up" to be
-% able to hack the \vline and also the colortbl inserted tokens. This creates
-% empty space whether or not the columns were | separated:
-\def\sphinx@hack@vline{\ifnum\currentgrouptype=6\relax
-    \kern\arrayrulewidth\arrayrulewidth\z@\else\aftergroup\sphinx@hack@vline\fi}%
-\def\sphinx@hack@CT{\ifnum\currentgrouptype=6\relax
-    \let\CT@setup\sphinx@CT@setup\else\aftergroup\sphinx@hack@CT\fi}%
-% It turns out \CT@row@color is not expanded contrarily to \CT@column@color
-% during LaTeX+colortbl preamble preparation, hence it would be possible for
-% \sphinx@CT@setup to discard only the column color and choose to obey or not
-% row color and cell color. It would even be possible to propagate cell color
-% to row color for the duration of the Sphinx multicolumn... the (provisional?)
-% choice has been made to cancel the colortbl colours for the multicolumn
-% duration.
-\def\sphinx@CT@setup #1\endgroup{\endgroup}% hack to remove colour commands
-\def\sphinx@multispan@end#1{%
-    % first, trace back our steps horizontally
-    \noindent\kern-\dimexpr\sphinx@multiwidth\relax
-    % and now we set the final computed width for the varwidth environment
-    \ifdim\baselineskip>\z@
-       \xdef\sphinx@multiwidth{\the\dimexpr\sphinx@multiwidth+\linewidth}%
-    \else
-       \xdef\sphinx@multiwidth{\the\dimexpr\sphinx@multiwidth+
-         (\ifx\TY@final\@undefined\linewidth\else
-          \sphinx@TY@tablewidth\fi-\arrayrulewidth)/\sphinx@tempa
-          -\tw@\tabcolsep-\arrayrulewidth\relax}%
-    \fi
-    % we need to remove colour set-up also for last cell of the multi-column
-    \aftergroup\sphinx@hack@CT
-}%
-\newcommand*\sphinxcolwidth[2]{%
-  % this dimension will always be used for varwidth, and serves as maximum
-  % width when cells are merged either via multirow or multicolumn or both,
-  % as always their contents is wrapped in varwidth environment.
-  \ifnum#1>\@ne % multi-column (and possibly also multi-row)
-  % we wrote our own multicolumn code especially to handle that (and allow
-  % verbatim contents)
-   \ifx\equation$%$
-       \tymax % first pass of tabulary (cf MEMO above regarding nesting)
-   \else % the \@gobble thing is for compatibility with standard \multicolumn
-       \sphinx@multiwidth\@gobble{#1/#2}%
-   \fi
-  \else % single column multirow
-   \ifx\TY@final\@undefined % not a tabulary.
-    \ifdim\baselineskip>\z@
-        % in a p{..} type column, \linewidth is the target box width
-        \linewidth
-    \else
-        % l, c, r columns. Do our best.
-        \dimexpr(\linewidth-\arrayrulewidth)/#2-
-                \tw@\tabcolsep-\arrayrulewidth\relax
-    \fi
-   \else % in tabulary
-    \ifx\equation$%$% first pass
-        \tymax % it is set to a big value so that paragraphs can express themselves
-    \else
-     % second pass.
-     \ifdim\baselineskip>\z@
-         \linewidth % in a L, R, C, J column or a p, \X, \Y ...
-     \else
-         % we have hacked \TY@final to put in \sphinx@TY@tablewidth the table width
-         \dimexpr(\sphinx@TY@tablewidth-\arrayrulewidth)/#2-
-                 \tw@\tabcolsep-\arrayrulewidth\relax
-     \fi
-    \fi
-   \fi
-  \fi
-}%
-% fallback default in case user has set latex_use_latex_multicolumn to True:
-% \sphinxcolwidth will use this only inside LaTeX's standard \multicolumn
-\def\sphinx@multiwidth #1#2{\dimexpr % #1 to gobble the \@gobble (!)
-    (\ifx\TY@final\@undefined\linewidth\else\sphinx@TY@tablewidth\fi
-     -\arrayrulewidth)*#2-\tw@\tabcolsep-\arrayrulewidth\relax}%
-%
-% --- MULTIROW ---
-% standard \multirow
-% 1. does not allow verbatim contents,
-% 2. does not allow blank lines in its argument,
-% 3. its * specifier means to typeset "horizontally" which is very
-%    bad for paragraph content. 2016 version has = specifier but it
-%    must be used with p type columns only, else results are bad,
-% 4. it requires manual intervention if the contents is too long to fit
-%    in the asked-for number of rows.
-% 5. colour panels (either from \rowcolor or \columncolor) will hide
-%    the bottom part of multirow text, hence manual tuning is needed
-%    to put the multirow insertion at the _bottom_.
-%
-% The Sphinx solution consists in always having contents wrapped
-% in a varwidth environment so that it makes sense to estimate how many
-% lines it will occupy, and then ensure by insertion of suitable struts
-% that the table rows have the needed height. The needed mark-up is done
-% by LaTeX writer, which has its own id for the merged cells.
-%
-% The colour issue is solved by clearing colour panels in all cells,
-% whether or not the multirow is single-column or multi-column.
-%
-% In passing we obtain baseline alignements across rows (only if
-% \arraylinestretch is 1, as LaTeX's does not obey \arraylinestretch in "p"
-% multi-line contents, only first and last line...)
-%
-% TODO: examine the situation with \arraylinestretch > 1. The \extrarowheight
-% is hopeless for multirow anyhow, it makes baseline alignment strictly
-% impossible.
-\newcommand\sphinxmultirow[2]{\begingroup
-  % #1 = nb of spanned rows, #2 = Sphinx id of "cell", #3 = contents
-  % but let's fetch #3 in a way allowing verbatim contents !
-  \def\sphinx@nbofrows{#1}\def\sphinx@cellid{#2}%
-  \afterassignment\sphinx@multirow\let\next=
-}%
-\def\sphinx@multirow {%
-  \setbox\z@\hbox\bgroup\aftergroup\sphinx@@multirow\strut
-}%
-\def\sphinx@@multirow {%
-  % The contents, which is a varwidth environment, has been captured in
-  % \box0 (a \hbox).
-  % We have with \sphinx@cellid an assigned unique id. The goal is to give
-  % about the same height to all the involved rows.
-  % For this Sphinx will insert a \sphinxtablestrut{cell_id} mark-up
-  % in LaTeX file and the expansion of the latter will do the suitable thing.
-  \dimen@\dp\z@
-  \dimen\tw@\ht\@arstrutbox
-  \advance\dimen@\dimen\tw@
-  \advance\dimen\tw@\dp\@arstrutbox
-  \count@=\dimen@       % type conversion dim -> int
-  \count\tw@=\dimen\tw@
-  \divide\count@\count\tw@ % TeX division truncates
-  \advance\dimen@-\count@\dimen\tw@
-  % 1300sp is about 0.02pt. For comparison a rule default width is 0.4pt.
-  % (note that if \count@ holds 0, surely \dimen@>1300sp)
-  \ifdim\dimen@>1300sp \advance\count@\@ne \fi
-  % now \count@ holds the count L of needed "lines"
-  % and \sphinx@nbofrows holds the number N of rows
-  % we have L >= 1 and N >= 1
-  % if L is a multiple of N, ... clear what to do !
-  % else write L = qN + r, 1 <= r < N and we will
-  % arrange for each row to have enough space for:
-  %     q+1 "lines" in each of the first r rows
-  %       q "lines" in each of the (N-r) bottom rows
-  % for a total of (q+1) * r + q * (N-r) = q * N + r = L
-  % It is possible that q == 0.
-  \count\tw@\count@
-  % the TeX division truncates
-  \divide\count\tw@\sphinx@nbofrows\relax
-  \count4\count\tw@ % q
-  \multiply\count\tw@\sphinx@nbofrows\relax
-  \advance\count@-\count\tw@ % r
-  \expandafter\xdef\csname sphinx@tablestrut_\sphinx@cellid\endcsname
-     {\noexpand\sphinx@tablestrut{\the\count4}{\the\count@}{\sphinx@cellid}}%
-  \dp\z@\z@
-  % this will use the real height if it is >\ht\@arstrutbox
-  \sphinxtablestrut{\sphinx@cellid}\box\z@
-  \endgroup % group was opened in \sphinxmultirow
-}%
-\newcommand*\sphinxtablestrut[1]{%
-  % #1 is a "cell_id", i.e. the id of a merged group of table cells
-  \csname sphinx@tablestrut_#1\endcsname
-}%
-% LaTeX typesets the table row by row, hence each execution can do
-% an update for the next row.
-\newcommand*\sphinx@tablestrut[3]{\begingroup
-  % #1 = q, #2 = (initially) r, #3 = cell_id, q+1 lines in first r rows
-  % if #2 = 0, create space for max(q,1) table lines
-  % if #2 > 0, create space for q+1 lines and decrement #2
-  \leavevmode
-  \count@#1\relax
-  \ifnum#2=\z@
-    \ifnum\count@=\z@\count@\@ne\fi
-  \else
-    % next row will be with a #2 decremented by one
-    \expandafter\xdef\csname sphinx@tablestrut_#3\endcsname
-      {\noexpand\sphinx@tablestrut{#1}{\the\numexpr#2-\@ne}{#3}}%
-   \advance\count@\@ne
-  \fi
-  \vrule\@height\ht\@arstrutbox
-        \@depth\dimexpr\count@\ht\@arstrutbox+\count@\dp\@arstrutbox-\ht\@arstrutbox\relax
-        \@width\z@
-  \endgroup
-  % we need this to avoid colour panels hiding bottom parts of multirow text
-  \sphinx@hack@CT
-}%
-\endinput
-%%
-%% End of file `sphinxmulticell.sty'.
-- 
GitLab