From efeb8bf8933d05d9d1852eeeb8d506f56f0fbde0 Mon Sep 17 00:00:00 2001
From: VESSILLER <lvessiller@open-dsi.fr>
Date: Thu, 4 Jun 2020 11:34:45 +0200
Subject: [PATCH] NEW gestion des imports multiples de bulletins de paie - mise
 a jour de la liste des archives - actualisation des statuts des archives

---
 DataTables.zip                                |   Bin 600459 -> 0 bytes
 .../Buttons-1.6.2/css/buttons.bootstrap.css   |   187 -
 .../css/buttons.bootstrap.min.css             |     1 -
 .../Buttons-1.6.2/css/buttons.bootstrap4.css  |   195 -
 .../css/buttons.bootstrap4.min.css            |     1 -
 .../Buttons-1.6.2/css/buttons.dataTables.css  |   387 -
 .../css/buttons.dataTables.min.css            |     1 -
 .../Buttons-1.6.2/css/buttons.foundation.css  |   214 -
 .../css/buttons.foundation.min.css            |     1 -
 .../Buttons-1.6.2/css/buttons.jqueryui.css    |   240 -
 .../css/buttons.jqueryui.min.css              |     1 -
 .../Buttons-1.6.2/css/buttons.semanticui.css  |   193 -
 .../css/buttons.semanticui.min.css            |     1 -
 DataTables/Buttons-1.6.2/css/common.scss      |    37 -
 DataTables/Buttons-1.6.2/css/mixins.scss      |   153 -
 .../Buttons-1.6.2/js/buttons.bootstrap.js     |    70 -
 .../Buttons-1.6.2/js/buttons.bootstrap.min.js |     6 -
 .../Buttons-1.6.2/js/buttons.bootstrap4.js    |    68 -
 .../js/buttons.bootstrap4.min.js              |     6 -
 DataTables/Buttons-1.6.2/js/buttons.colVis.js |   206 -
 .../Buttons-1.6.2/js/buttons.colVis.min.js    |    10 -
 DataTables/Buttons-1.6.2/js/buttons.flash.js  |  1456 --
 .../Buttons-1.6.2/js/buttons.flash.min.js     |    39 -
 .../Buttons-1.6.2/js/buttons.foundation.js    |    99 -
 .../js/buttons.foundation.min.js              |     7 -
 DataTables/Buttons-1.6.2/js/buttons.html5.js  |  1461 --
 .../Buttons-1.6.2/js/buttons.html5.min.js     |    36 -
 .../Buttons-1.6.2/js/buttons.jqueryui.js      |    62 -
 .../Buttons-1.6.2/js/buttons.jqueryui.min.js  |     6 -
 DataTables/Buttons-1.6.2/js/buttons.print.js  |   210 -
 .../Buttons-1.6.2/js/buttons.print.min.js     |     9 -
 .../Buttons-1.6.2/js/buttons.semanticui.js    |    69 -
 .../js/buttons.semanticui.min.js              |     6 -
 .../Buttons-1.6.2/js/dataTables.buttons.js    |  2104 --
 .../js/dataTables.buttons.min.js              |    43 -
 DataTables/Buttons-1.6.2/swf/flashExport.swf  |   Bin 64603 -> 0 bytes
 .../css/dataTables.bootstrap.css              |   190 -
 .../css/dataTables.bootstrap.min.css          |     1 -
 .../css/dataTables.bootstrap4.css             |   212 -
 .../css/dataTables.bootstrap4.min.css         |     1 -
 .../css/dataTables.foundation.css             |   118 -
 .../css/dataTables.foundation.min.css         |     1 -
 .../css/dataTables.jqueryui.css               |   481 -
 .../css/dataTables.jqueryui.min.css           |     1 -
 .../css/dataTables.semanticui.css             |   102 -
 .../css/dataTables.semanticui.min.css         |     1 -
 .../css/jquery.dataTables.css                 |   448 -
 .../css/jquery.dataTables.min.css             |     1 -
 .../DataTables-1.10.21/images/sort_asc.png    |   Bin 160 -> 0 bytes
 .../images/sort_asc_disabled.png              |   Bin 148 -> 0 bytes
 .../DataTables-1.10.21/images/sort_both.png   |   Bin 201 -> 0 bytes
 .../DataTables-1.10.21/images/sort_desc.png   |   Bin 158 -> 0 bytes
 .../images/sort_desc_disabled.png             |   Bin 146 -> 0 bytes
 .../js/dataTables.bootstrap.js                |   182 -
 .../js/dataTables.bootstrap.min.js            |    11 -
 .../js/dataTables.bootstrap4.js               |   184 -
 .../js/dataTables.bootstrap4.min.js           |    11 -
 .../js/dataTables.foundation.js               |   174 -
 .../js/dataTables.foundation.min.js           |     9 -
 .../js/dataTables.jqueryui.js                 |   164 -
 .../js/dataTables.jqueryui.min.js             |    12 -
 .../js/dataTables.semanticui.js               |   212 -
 .../js/dataTables.semanticui.min.js           |    12 -
 .../js/jquery.dataTables.js                   | 15354 ------------
 .../js/jquery.dataTables.min.js               |   181 -
 .../css/responsive.bootstrap.css              |   180 -
 .../css/responsive.bootstrap.min.css          |     1 -
 .../css/responsive.bootstrap4.css             |   185 -
 .../css/responsive.bootstrap4.min.css         |     1 -
 .../css/responsive.dataTables.css             |   177 -
 .../css/responsive.dataTables.min.css         |     1 -
 .../css/responsive.foundation.css             |   180 -
 .../css/responsive.foundation.min.css         |     1 -
 .../css/responsive.jqueryui.css               |   177 -
 .../css/responsive.jqueryui.min.css           |     1 -
 .../css/responsive.semanticui.css             |   180 -
 .../css/responsive.semanticui.min.css         |     1 -
 .../js/dataTables.responsive.js               |  1472 --
 .../js/dataTables.responsive.min.js           |    45 -
 .../js/responsive.bootstrap.js                |    85 -
 .../js/responsive.bootstrap.min.js            |     9 -
 .../js/responsive.bootstrap4.js               |    85 -
 .../js/responsive.bootstrap4.min.js           |     9 -
 .../js/responsive.foundation.js               |    62 -
 .../js/responsive.foundation.min.js           |     6 -
 .../js/responsive.jqueryui.js                 |    63 -
 .../js/responsive.jqueryui.min.js             |     6 -
 .../js/responsive.semanticui.js               |    80 -
 .../js/responsive.semanticui.min.js           |     9 -
 .../Select-1.3.1/css/select.bootstrap.css     |   115 -
 .../Select-1.3.1/css/select.bootstrap.min.css |     1 -
 .../Select-1.3.1/css/select.bootstrap4.css    |   115 -
 .../css/select.bootstrap4.min.css             |     1 -
 .../Select-1.3.1/css/select.dataTables.css    |   105 -
 .../css/select.dataTables.min.css             |     1 -
 .../Select-1.3.1/css/select.foundation.css    |   117 -
 .../css/select.foundation.min.css             |     1 -
 .../Select-1.3.1/css/select.jqueryui.css      |   105 -
 .../Select-1.3.1/css/select.jqueryui.min.css  |     1 -
 .../Select-1.3.1/css/select.semanticui.css    |   110 -
 .../css/select.semanticui.min.css             |     1 -
 .../Select-1.3.1/js/dataTables.select.js      |  1206 -
 .../Select-1.3.1/js/dataTables.select.min.js  |    38 -
 .../Select-1.3.1/js/select.bootstrap.js       |    38 -
 .../Select-1.3.1/js/select.bootstrap.min.js   |     5 -
 .../Select-1.3.1/js/select.bootstrap4.js      |    38 -
 .../Select-1.3.1/js/select.bootstrap4.min.js  |     5 -
 .../Select-1.3.1/js/select.dataTables.js      |    38 -
 .../Select-1.3.1/js/select.foundation.js      |    38 -
 .../Select-1.3.1/js/select.foundation.min.js  |     5 -
 DataTables/Select-1.3.1/js/select.jqueryui.js |    38 -
 .../Select-1.3.1/js/select.jqueryui.min.js    |     5 -
 .../Select-1.3.1/js/select.semanticui.js      |    38 -
 .../Select-1.3.1/js/select.semanticui.min.js  |     5 -
 DataTables/datatables.css                     |   727 -
 DataTables/datatables.js                      | 20412 ----------------
 DataTables/datatables.min.css                 |    24 -
 DataTables/datatables.min.js                  |   359 -
 css/datatables.min.css                        |     4 +-
 js/datatables.min.js                          |    59 +-
 js/script.js                                  |    13 +-
 lib/Controller/PageController.php             |   762 +-
 lib/Db/DematpayslipArchive.php                |     2 +
 lib/Db/DematpayslipArchiveMapper.php          |    27 +
 lib/Db/DematpayslipUser.php                   |     4 +-
 ...hp => Version020000Date20200603030000.php} |    16 +-
 templates/content/archive_list.php            |     4 +-
 127 files changed, 531 insertions(+), 52716 deletions(-)
 delete mode 100644 DataTables.zip
 delete mode 100644 DataTables/Buttons-1.6.2/css/buttons.bootstrap.css
 delete mode 100644 DataTables/Buttons-1.6.2/css/buttons.bootstrap.min.css
 delete mode 100644 DataTables/Buttons-1.6.2/css/buttons.bootstrap4.css
 delete mode 100644 DataTables/Buttons-1.6.2/css/buttons.bootstrap4.min.css
 delete mode 100644 DataTables/Buttons-1.6.2/css/buttons.dataTables.css
 delete mode 100644 DataTables/Buttons-1.6.2/css/buttons.dataTables.min.css
 delete mode 100644 DataTables/Buttons-1.6.2/css/buttons.foundation.css
 delete mode 100644 DataTables/Buttons-1.6.2/css/buttons.foundation.min.css
 delete mode 100644 DataTables/Buttons-1.6.2/css/buttons.jqueryui.css
 delete mode 100644 DataTables/Buttons-1.6.2/css/buttons.jqueryui.min.css
 delete mode 100644 DataTables/Buttons-1.6.2/css/buttons.semanticui.css
 delete mode 100644 DataTables/Buttons-1.6.2/css/buttons.semanticui.min.css
 delete mode 100644 DataTables/Buttons-1.6.2/css/common.scss
 delete mode 100644 DataTables/Buttons-1.6.2/css/mixins.scss
 delete mode 100644 DataTables/Buttons-1.6.2/js/buttons.bootstrap.js
 delete mode 100644 DataTables/Buttons-1.6.2/js/buttons.bootstrap.min.js
 delete mode 100644 DataTables/Buttons-1.6.2/js/buttons.bootstrap4.js
 delete mode 100644 DataTables/Buttons-1.6.2/js/buttons.bootstrap4.min.js
 delete mode 100644 DataTables/Buttons-1.6.2/js/buttons.colVis.js
 delete mode 100644 DataTables/Buttons-1.6.2/js/buttons.colVis.min.js
 delete mode 100644 DataTables/Buttons-1.6.2/js/buttons.flash.js
 delete mode 100644 DataTables/Buttons-1.6.2/js/buttons.flash.min.js
 delete mode 100644 DataTables/Buttons-1.6.2/js/buttons.foundation.js
 delete mode 100644 DataTables/Buttons-1.6.2/js/buttons.foundation.min.js
 delete mode 100644 DataTables/Buttons-1.6.2/js/buttons.html5.js
 delete mode 100644 DataTables/Buttons-1.6.2/js/buttons.html5.min.js
 delete mode 100644 DataTables/Buttons-1.6.2/js/buttons.jqueryui.js
 delete mode 100644 DataTables/Buttons-1.6.2/js/buttons.jqueryui.min.js
 delete mode 100644 DataTables/Buttons-1.6.2/js/buttons.print.js
 delete mode 100644 DataTables/Buttons-1.6.2/js/buttons.print.min.js
 delete mode 100644 DataTables/Buttons-1.6.2/js/buttons.semanticui.js
 delete mode 100644 DataTables/Buttons-1.6.2/js/buttons.semanticui.min.js
 delete mode 100644 DataTables/Buttons-1.6.2/js/dataTables.buttons.js
 delete mode 100644 DataTables/Buttons-1.6.2/js/dataTables.buttons.min.js
 delete mode 100644 DataTables/Buttons-1.6.2/swf/flashExport.swf
 delete mode 100644 DataTables/DataTables-1.10.21/css/dataTables.bootstrap.css
 delete mode 100644 DataTables/DataTables-1.10.21/css/dataTables.bootstrap.min.css
 delete mode 100644 DataTables/DataTables-1.10.21/css/dataTables.bootstrap4.css
 delete mode 100644 DataTables/DataTables-1.10.21/css/dataTables.bootstrap4.min.css
 delete mode 100644 DataTables/DataTables-1.10.21/css/dataTables.foundation.css
 delete mode 100644 DataTables/DataTables-1.10.21/css/dataTables.foundation.min.css
 delete mode 100644 DataTables/DataTables-1.10.21/css/dataTables.jqueryui.css
 delete mode 100644 DataTables/DataTables-1.10.21/css/dataTables.jqueryui.min.css
 delete mode 100644 DataTables/DataTables-1.10.21/css/dataTables.semanticui.css
 delete mode 100644 DataTables/DataTables-1.10.21/css/dataTables.semanticui.min.css
 delete mode 100644 DataTables/DataTables-1.10.21/css/jquery.dataTables.css
 delete mode 100644 DataTables/DataTables-1.10.21/css/jquery.dataTables.min.css
 delete mode 100644 DataTables/DataTables-1.10.21/images/sort_asc.png
 delete mode 100644 DataTables/DataTables-1.10.21/images/sort_asc_disabled.png
 delete mode 100644 DataTables/DataTables-1.10.21/images/sort_both.png
 delete mode 100644 DataTables/DataTables-1.10.21/images/sort_desc.png
 delete mode 100644 DataTables/DataTables-1.10.21/images/sort_desc_disabled.png
 delete mode 100644 DataTables/DataTables-1.10.21/js/dataTables.bootstrap.js
 delete mode 100644 DataTables/DataTables-1.10.21/js/dataTables.bootstrap.min.js
 delete mode 100644 DataTables/DataTables-1.10.21/js/dataTables.bootstrap4.js
 delete mode 100644 DataTables/DataTables-1.10.21/js/dataTables.bootstrap4.min.js
 delete mode 100644 DataTables/DataTables-1.10.21/js/dataTables.foundation.js
 delete mode 100644 DataTables/DataTables-1.10.21/js/dataTables.foundation.min.js
 delete mode 100644 DataTables/DataTables-1.10.21/js/dataTables.jqueryui.js
 delete mode 100644 DataTables/DataTables-1.10.21/js/dataTables.jqueryui.min.js
 delete mode 100644 DataTables/DataTables-1.10.21/js/dataTables.semanticui.js
 delete mode 100644 DataTables/DataTables-1.10.21/js/dataTables.semanticui.min.js
 delete mode 100644 DataTables/DataTables-1.10.21/js/jquery.dataTables.js
 delete mode 100644 DataTables/DataTables-1.10.21/js/jquery.dataTables.min.js
 delete mode 100644 DataTables/Responsive-2.2.5/css/responsive.bootstrap.css
 delete mode 100644 DataTables/Responsive-2.2.5/css/responsive.bootstrap.min.css
 delete mode 100644 DataTables/Responsive-2.2.5/css/responsive.bootstrap4.css
 delete mode 100644 DataTables/Responsive-2.2.5/css/responsive.bootstrap4.min.css
 delete mode 100644 DataTables/Responsive-2.2.5/css/responsive.dataTables.css
 delete mode 100644 DataTables/Responsive-2.2.5/css/responsive.dataTables.min.css
 delete mode 100644 DataTables/Responsive-2.2.5/css/responsive.foundation.css
 delete mode 100644 DataTables/Responsive-2.2.5/css/responsive.foundation.min.css
 delete mode 100644 DataTables/Responsive-2.2.5/css/responsive.jqueryui.css
 delete mode 100644 DataTables/Responsive-2.2.5/css/responsive.jqueryui.min.css
 delete mode 100644 DataTables/Responsive-2.2.5/css/responsive.semanticui.css
 delete mode 100644 DataTables/Responsive-2.2.5/css/responsive.semanticui.min.css
 delete mode 100644 DataTables/Responsive-2.2.5/js/dataTables.responsive.js
 delete mode 100644 DataTables/Responsive-2.2.5/js/dataTables.responsive.min.js
 delete mode 100644 DataTables/Responsive-2.2.5/js/responsive.bootstrap.js
 delete mode 100644 DataTables/Responsive-2.2.5/js/responsive.bootstrap.min.js
 delete mode 100644 DataTables/Responsive-2.2.5/js/responsive.bootstrap4.js
 delete mode 100644 DataTables/Responsive-2.2.5/js/responsive.bootstrap4.min.js
 delete mode 100644 DataTables/Responsive-2.2.5/js/responsive.foundation.js
 delete mode 100644 DataTables/Responsive-2.2.5/js/responsive.foundation.min.js
 delete mode 100644 DataTables/Responsive-2.2.5/js/responsive.jqueryui.js
 delete mode 100644 DataTables/Responsive-2.2.5/js/responsive.jqueryui.min.js
 delete mode 100644 DataTables/Responsive-2.2.5/js/responsive.semanticui.js
 delete mode 100644 DataTables/Responsive-2.2.5/js/responsive.semanticui.min.js
 delete mode 100644 DataTables/Select-1.3.1/css/select.bootstrap.css
 delete mode 100644 DataTables/Select-1.3.1/css/select.bootstrap.min.css
 delete mode 100644 DataTables/Select-1.3.1/css/select.bootstrap4.css
 delete mode 100644 DataTables/Select-1.3.1/css/select.bootstrap4.min.css
 delete mode 100644 DataTables/Select-1.3.1/css/select.dataTables.css
 delete mode 100644 DataTables/Select-1.3.1/css/select.dataTables.min.css
 delete mode 100644 DataTables/Select-1.3.1/css/select.foundation.css
 delete mode 100644 DataTables/Select-1.3.1/css/select.foundation.min.css
 delete mode 100644 DataTables/Select-1.3.1/css/select.jqueryui.css
 delete mode 100644 DataTables/Select-1.3.1/css/select.jqueryui.min.css
 delete mode 100644 DataTables/Select-1.3.1/css/select.semanticui.css
 delete mode 100644 DataTables/Select-1.3.1/css/select.semanticui.min.css
 delete mode 100644 DataTables/Select-1.3.1/js/dataTables.select.js
 delete mode 100644 DataTables/Select-1.3.1/js/dataTables.select.min.js
 delete mode 100644 DataTables/Select-1.3.1/js/select.bootstrap.js
 delete mode 100644 DataTables/Select-1.3.1/js/select.bootstrap.min.js
 delete mode 100644 DataTables/Select-1.3.1/js/select.bootstrap4.js
 delete mode 100644 DataTables/Select-1.3.1/js/select.bootstrap4.min.js
 delete mode 100644 DataTables/Select-1.3.1/js/select.dataTables.js
 delete mode 100644 DataTables/Select-1.3.1/js/select.foundation.js
 delete mode 100644 DataTables/Select-1.3.1/js/select.foundation.min.js
 delete mode 100644 DataTables/Select-1.3.1/js/select.jqueryui.js
 delete mode 100644 DataTables/Select-1.3.1/js/select.jqueryui.min.js
 delete mode 100644 DataTables/Select-1.3.1/js/select.semanticui.js
 delete mode 100644 DataTables/Select-1.3.1/js/select.semanticui.min.js
 delete mode 100644 DataTables/datatables.css
 delete mode 100644 DataTables/datatables.js
 delete mode 100644 DataTables/datatables.min.css
 delete mode 100644 DataTables/datatables.min.js
 rename lib/Migration/{Version020000Date20200602020000.php => Version020000Date20200603030000.php} (87%)

diff --git a/DataTables.zip b/DataTables.zip
deleted file mode 100644
index 8e904331eba1dfeb760502f9eb0d5c694fa57582..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 600459
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%0Dh
zGb+&6G-<Z=V)_=Jt!RAC(Qja5x7~nQWevirQ6u1(51>=r5_Y;IGn=bQ*Os#RBE4W8
zg#Z>|TFgZO0R<4@ONb>H8sD>6d9K_N5k921kQ}Kdpg3jTO~naF3o;dvqcNJ99m(|6
zHs7!z60w-JI6!t_=Y5KITe5>8&OMR*aDqf^Hej!}mn|rEIM|qB(hxH35z-=5=e0JJ
zBy_9~db}+r+4r_0h;a6`A^70@q&!_RW~#4`l}HrooX_2urCkPtn<HL61T$xYdU=d%
zMZ`f|8=9lw7onx0TWkQi$E3AA<QRwuS=6mTe_hsJ^I}XG@x~pztZa?h7`Pd@`<C~W
zl}@v2glx~u1rypVw-%3h7ILYxR;KA{SLF*6uxyV*8F0<EUUfC-8AYKwzwp<1XSBD5
ziICk<fn=-81Ix-Gxtz3x&ZB%rWa&BktjebV4?uxMwHmzH^ly}VfKJg=u$;b~k7bU-
zgB2J{pp>reg=B|=Z<uO$dVs)sqF2h*^+kz_Jq&uV$Ni*vCj$=|llCy^9UdO`K%oPx
zw!>Z(^lzL!q6I#LP8^QJ241s49NE?+dyK+tO}2SF0(u)+>Yu36^mrhAUz&olwn&l?
zYX{-<oSq@|&rkSL;e;?7#iU2Fe%D|C<pKsn0sZh7LN(E#Dmx-_A4&bQ0f8h-Ul7ta
z_6dNpU^;txf!h&Q2p!o+wqXXq`v|dxXzOEi5Y*#Vy#`MXKvhciM7_^@=7Oiqt!NCq
zg9JMV;$e`}O1mA6G3Ej;3W)e-SeXnh<Z+^Rk6h;izxmEN_F5l--s)W;z4rF!x);Rk
z6i8aUZIKs~_ayCsfM?L%sb>QfJEWY9;m_Q$?S%!#tKjBa)zKCl5mgI;P94vm!R9kN
z9QlRc6UaSXJ<ECcjE=MKG0{tHB{L$m-XkTMIajiRJ$sjqDTGrZ@@S0$AY*oG<}KLN
z<jTY6w%RNFwlh=jdWm)yCl+U4^#37bK;=#+AFvTvcpzOl<}-$n#)U~p8qy<e(|6@b
z<M)`O#b+;l8K{l+G~%S_b5XAYq87^$AoE~j0Ab>e&IZv#+_W#)3ro_A1B6g^k<S~y
z5GHy=V6;ycB|yKSIE~dDT@pkK6s*Cu23;uwBsp^HgUWC`jK}B7W9PTW+a?czA2t-Y
zJH87bS~ySJ?r$h}cZ?<`Nu34T$1>~zrLb;X`QMG)|NMTE70odkk9x^Oo0Ml0a~Fn|
zEh!l!6v+@&j3$`I?a8*OR(<F0Z%z6;@Hy*QfEFMcy_du2U%*l-s?Lb&8uoq`jVGeG
zh)&Zx80#}}OV$U}@*{;$wmOC;U$}PQ;5V8;e45=ik4Xu8cJ97*5AjxAU>pP%CG{14
zbPq}ybs#131YmB9)gGf;!d-WVsjeSD5hYMEt=ghQO#wCS6$RW}h!+rj!()RGW*{Ke
zNFWFgRY#ahTr{lMLj)wC35>FVJ}}0g-JV^M7jT7Gy&Pu6HHiu0q}1+cK7O|Yx^uMX
z5mHL&lTMNq<tM(nok_Y8x5Gj(srn*6_m+43oT_<tGSG>=-+o1X{Cw)Tjy9yhUz-5F
z;L5U!$6_T3ry_S^T%&w`$qAi!XN$$lFbI-Gs&jWI1`dhvSQWcS&x>A=j0!0u*y4li
zP8)~Ia|JE_0%_?^rs!RPg_3&(5QsLlAtX{SnhUrNSHO~i0T&n7cL~PI9lAm1@GIz9
z+((f2%(mbO_w|fI)(B{BGk0N=tOu>7LQcD4y>yjWl3Q?M1XF{yM3oE@lli!)um5~n
z1QlG_SW&!;okcPi3e0EKM-hKS^sB{di$VX|r=YiZBCH%D>Isa)%5#d{lu`OqwH(<e
zd+XRIjjh6J<h{wF7bOc(<W`1WU^oezB9;1Ka-+5iBJ{w@Vv>9{QHc6P00+Z#@oY1D
z3mCoo(?qrm^t1EgA$hCOQu@3bEFU(qCX}r3tV_uL)z+7^*5UGI(fTTuZj2Tmtkv$9
zpawz)$(!SM+8Z>`N<%$Kp1YDBOwz()Xz^-jmcbv@Ofo7_LczR>(s|%LovRV0q_03Q
zVP;kJ!BxIkfOK=q<YC6z|FgIR&x>N>E-bnJIBpiR|1^ma>_|PL_xP;(#~85%YZ)tH
zW=a(61hBx_ihyV2>S?i{A1yQ_3#MT*PJxpJq|^0eB6Wo8rLHGI;V_MKxQyxDY8KJ2
z;a+M1L8E(oyj*1YX%5NKzOVk_?u|L$r3MYf1-OgH)2Cd`@BT2kGuZ}xSVIt_Xy2O-
zdv*m@%za-yeR^>==asXb1$pnqARXIJeU!U9tZWV)95>)f`g;*ws!&0^$WMoCi_#>-
zK$bqYk7S9hF8Zbp1eMf<juz8~Ue?zyaW70tEqjGQH7$&^*2UUStCtyxBW`&*hg&Wu
z%oXS-iqeBvMN#B=?FMfFnktpBXqF@?*oL>!$qhT7AHS;>5E>5K5*%pTZ)|R1wA2A(
zLkTls+zW7S{9wTf-!a3jq|-j;T;UD6fi@|R9>HNrimuy`x9M!qN|0JTq8PeK{S$ov
zuI}fv{J0owWt&^4j=(2<le~!*0p}3Z>!=oVyK8wg4k0CP4<skNnJR$7>2KPe;k4bl
z*LjevO8SZtvcWM)Hp$*VLz93?(v7ofMbr8mIkExuJs-#Ks@k5V1IPL~x(jO|C0)@R
zkH~I`6GL2sDGH5JR*>u%2N_^tiJrh;gT7%fkWq_R0G4_sxwk-1fKNu*YvLUvY|lN-
zG}#uNI8bU*){n_j@SM^z7t?iSmmm}F(MUKNXxHDUI-CUv%3Z$)`JMBdU7oXG;kq@#
zF*qU~NnTIR(is3Z#SL*RMWU@J{rEL4YD~sjjRr0W?Iy2l3qB89(&!sD{=$vt5s|ab
zo58FH&q&tc2jb}bhSF&A`0+7Bkqb`N#*#<Y35O2v{79RvTX)3x>`+ybC6EV+)%A37
z0D<M{Bv#Lrd}<6-fKaq>feFA3^fKqi;LPgh`6*{2clEH}!*FGn`|p~wSzr4VWSq;A
z-FvKa0Vms&X~}`4XRF%*Zu$7tlm7KnfHs=}k(<d~D-m3J|6ulkHeF;oRqXA*;%1Sb
zm!#$l?iXw;mJ0?)1+}uu8e<t~prDWCi9V2|QYE-?%fntONi>_AASx67?Sr8Yf8}KH
zTG>8ibi;q_!zD-noZOTB8922lx%g+s2*2XuWO%axT|lqkXaH9(Xc(_hxY+OuH9>$`
zqY8>}k=vm^f?=)MW<t+UdQPu5`*3XV$Iyexa*o#y?3!F^q4mz(j=uLH1sVMIgk?+|
zK|F<kosFy;zHok2kvA0@ACS$;nkOtmWb<lre=uVf27Kt`x=8DvBHDmn2@bP+DbZ(;
z=P6Wbz<fobma3F2`@|a1tsb7{`TQw+KTXQc#ihE9e-|awKp*KY7&r7q!L)7gwO0|h
zbXhTp1y+QbzgLy~jjBMijdWp^{<B>HBfd?ip)$O1A`Cgw&6j69^kUWtBE{a6Kt&;J
z33RC3{?i;$w)isaWKXDivtLslou9L}J6Zo<r<p$2u0tL+K(-lW+wMQxTEZ7V?COmT
z*Gu;wM4_^-g<zQn2MI_sJS(Q;?PJrfRG=X^M?W|Oy-3=bHI-tEl42CIVy1J2nwete
z)8@L}cJ4MDW38oT&$X?HYHmda{E13tNNS0<Dn%)pPofM-KTImVSFnpq+{X7@?<az-
zIOszMC#Gk8pUX|ZiB3fS+~oAJ?$6kn3Gj;n1qk<5o-@S76V-8eMiBsr#t-p{gt{lX
zz0kXo%&%^J0e`ht-Ci&II^ltKTrC#v(d;q^S3|QmsWjf^CyuP%s@JOPO?NOW*!;m?
z=M)g+C0+L3`}`B<yR6w+4NhN8aSi@2QY4fHEN2xic!iwtW#sl`MkJ?kn$ebxjb%q}
zfM5wQsR0}3QoOfbKo%;VQu1NSJrWFi8#of=tSLab-h-m_p^jKrpg%Dw#pOJM_w4^S
zG0VXU2g$&ORUM)S;0v5nb<1Ek;t7`Uc-7uTk=)4`vHLKu+~6KjdyjaChvd+Uc^{VZ
zrkr6lX4wHmh<vFm7&916&hmMA&R{(t!UOUS$T{u`SQhA*OIjdMqky&pyacgvC`oA{
z&u7b1w+o#N!!dl*3N<uSGEChf-}+R)8G{q{*vY(&n+_B<VmrB2gCW+ZDlw+4945!o
z*IfQUuktSl;+&FFO=4GCgThNdx&~o99TG4M1$W9?=v^oPsT0Lk*c0el3@q+Ka?*))
z6(;AR;yQrMyXkX;>gfFpv72g)oJ60@vm=HuIU}fX&G14NzgAj!oQp?mB!~CcIxP<g
z-&<4U1eJl#oVWpF*kt_BeQtDFx7}Cy{E@s^b7n<{1$c1~zVriSeqe5Ic2K`(?!M3F
z#JCm(xIbDamW7zs;0VRNPFFw7szljDj9b$PYYUj&oB-+gGMKv^R{nh{$XbACH3c8z
zlS}nu#!c@oh#+4`)c=3ITTsxy>U(3|I{6zEK|-On&A{NuACr@*c+F51i^5-+$YJ`D
zoqgTboBDBzm7P2du8|JQX+7XeW5Vp7O{0+4X&5|Y6YJU3LD$KHlzu%9PeI+sG-L=<
zKLjm6CSlk0fw}Ig4}m~%{+uDyOgR<#WJkZ}CAeZ3z<4<S<U|n3!Z|Vr%`;@C8hKJR
z*#uiIcOX3>VL^lke0L39ZTQ6{8O@lXng6hdtf<z>SDqQEH%kzE0s@4?hLE>~hhT(7
zsK-1`=5vIpR|a7ypqxsUFtz_%b9sc=&b}48`^}Y;Y;dWICmzMYT#D1D*{VFDFGaJO
zsgBh@68%H)5L$#Qb$bCQ(2Q@@rqhqmA$3WqCLG@)R6O64!rk7h%T-I;VQiPCs4lce
z8|9yN;;PdnkuKZ=B$rBWfy1?&6xmzQ`YDoOty@;S&h;)-?2!KA1tle9S|KM#^=!S)
zZ*QOSHQm^6FZtbSd%2rKI$DkM9w|;D7d|jnx@E|H;0I2>sw1(ajWY}#e`0^I*U$*u
zVh`4G3KQ$$Hrf~zSP2>(c@Gp{?rvBP$6|^ZKbp8B-EL3RJRviseV-~ski>&|?C~P2
zDF-`1s@v=*G&GV#_I-Zr2$3pcX%zP(Igr)h30n-h$FaGsKlC!$cHIGE$)YX{9FTQi
z?Jv*!<W&o1B+yx1Xp(3g@O_%jmcJZ4B|8euHWZfM+mXLqJR<m{qw}q@<Po;*y{CeO
zJNRcDpzPA$+zHApu?RaKisIZG7bxV`#|oe@v-YBDrnj#Cb$VF=za~XYbRd7`C72bV
zp$##unttt0v*Y3(YQPV`t@>DiAjg4Q16?{nkT}g3Q+M;LMMbS)OqL&a`5GHj0XA$D
z)AZZj2m*f`icUw3GhR*l#!L0O3p@H>UL$}8YqD{@E;3Pmg`nBF;xBESm<D^>RL?<h
z6L|*VTwuC%3WkWNBRW^`9~vqsV1jKfSSU?ZHJz6Tebjwsb`jxcP+@fZ`ZIVR=Ou^}
z(2v|r^_O_4boS!$Y4D`t3Q`p5?WS31IMt)nYvKhyAr6NgrVvAtm;rju)h}hE-&>y{
zV)h2&@BVwV<ya_!4kf?YNf^BCt*_qoD{u-ku1-@7V`gVQl^cAt$cFMf8ieP?u5YHV
zVV=?0CC&O+dqY!b{!RreBu&|FD3D9FBNx*(vQx4~26j)qqoE6`JG2`oONukr{ZM7c
zXE>|&NFVD3Ahb_vY^AzRfdUoeRLt^jeWENyt&ok3i$+LGY71+b24OX}bs^&Q4*6nh
z!nN9{To>I0Qx||YFd1ik^n~2R>5Itu|9=$aW|0QC-u|=F(G5Pm3e!iiqX%VlvJj-0
zuL!Q);>z{<Z~6Eid*lCkXZ#;;#&6yppkvp#PdCM1Cr&OA<tV{&TdmNvMPcH;N$Cbr
zc96d~KzE;(Cnp7-&OUq?>chIguZsdCeKE!n@B;kwa-N@YL#*w_xMUwxUSS7|>5>I8
z)Qtl$Zcof{m`9hftjR(Ky@4wj>Z$vj*Op7Dl}rn<LbeadZDUJbMGN^jz>bj#e4SMj
zA{ADzCy`?Sy~jw!Dy<p*WUzurcO?lpcD>P1lW|$c#e(!+$i)n^YD0I15j}dHNhJ1)
zZZb)AHs=PBF~U5+Y-R_qr3Faubzqq4z>n7S7Xjm2N^mK`_@@*J99BSM!=pZ32RaQ2
zOLMcw3uJm{S%(jKaz%FosO9v^qmX<3qLcnr4QeY^oHfLcY0cv$4_EwN0xwF?o1wv0
zRyA+1Kt<t-mE|s2kXSMHh}8kLy@n9eE6Ww7Oc@=oObZH>98tn5Lg2K>$wno!@4C%W
zcnedHCmtzij*VVGHw<h0Yx8dcv=>xQj5978kFm`5<_P6eV3_MIxFt@@MM1!w1Su4s
z5G7v=fcH{_wWFg_oh8aMfEJ<{XUHTAGB001UofV3fNN;MzIWr2g#O)Go?g3oHJ>Of
z)0aYSPvSlfI<L}3vx`ff>YB$+iy->}`6ly-)A)16mX4s>TYjOt0Uh3G)JZqfd)T8j
z#%Hf_zsd*$D8er>#^64><|xsmuzGxieR%WnF;3!_7#YJat~(}*WeF>0WI#VE^|-$2
zuo%Dbi;RooaJbH1?0Da`K}RxHRGjqHEk8Smw=Ot=pc_EpWK<ja`xdN)Z%rVIyQ4yu
zaWVweuJ7Rd<=+zwG^)P~GVY;rFVJC`%6_a#oIR8a;Gv>05zJfOq!*7>EKvdj!fw>X
z^U94IE}npAeu>2s^$^$D+er9lzGa|z1`!3OtIEnNw%&reWlOXzXGV7?eqD%WhQ@cW
z+e^q8nao%t0M$I-4`Z7YiAe<R<{Itkiiq1?gS_g2O0CD}Mk=1ue|+^B#EmG1NZi!q
z!CL2%LWRaOq+zz6j5H|pGbqVNj(#pNb<FpwQ#mF<AJuB(n%hwpH(IlmVnLLuC0GPa
zbb<<auiWXAZ)f<VwKTD39;FQmmdeP)?L~@|@4bz9G3fFfE(NQ6X>+T!!c4U~gSlb}
zk0y@*aeI)p%g<je)^r48CEa=i<a#Y0xWSgfSb)Api@ugIyXSagH31vkULr+PYC(PG
z8oQ>NujV&h)>Ouu^;T9~)vjAyaW|q1R5ue<q+E`^VyeK0lXpcv<shTA+}He<Csoy~
z|E1z&C@ybP-5&g=M5rtD&(k3q-y$l6c+B6L2FdR{o*<KdcE6h#O*&f3LFi+vi<qWv
z|EaTUBV7{JEqoSF)5-$s=z%4D-!!{mN+Y+!$L8xbN&M>9qc~cR8`0aUlgtx<Kg)t=
ziBx1EsonT6TIcLh=!6xA4+)n4om*cf=2tp_!nM#d=$~7Tbq<j=&kRlOu%^>OaI|=j
zglkWcH5WF0kgWGH-7J1!=NTVEL;%ki0dBGT(13y%i9PlPmBrzs=nx#2h#7g;>2f|T
zKbBJpi}%<N?<gTJdoxpfE#4?S93>&4$MLpjp`!*E(|8#T=v(Yf%D%eo1mSjDS%+Yc
zeE?6bc|XBejin%9q@dWn6;?p8eCEmP*pJva#<w|eSQJ_Dx^&X^hyC)*;LA$_5jP-N
z;Gg6LH#p4KIlHetYCXq*C=*fy5N#t+D#sDgzQK4@pShX*t63pKi0j7N5yP$Kg07yk
zPKK&xz)MFRxhpboyY?8|Xe^jLRV4{)vG!rFgN|=S;U7A_&On(};={T$d-ZG5>gUK1
zzlw2$^C3hbZ4hso&GI7%Vs+wQV3PNvo;HCvJ8dXXHS06{z@)!v>!7gGD^wg(S}=+8
zBB%FdNpA6)MzZ!j(r42r^vQs|+PwJ95ij@n#pEqk{)2pIW>o_c9>3~u(q|eF+j?yL
z=*^4Wz<)uKY>=;p?U-aQ5;sp2`ub94GAqx@=2hjBy@F-8S><GC-C0A7N1t2MG{>UN
zwJompRJ>`Uu;;FC@>-P1t_DMJFZTqN|1A-nuD2tEJG+ppl>n;;S!j-C5*<Mkz5@tA
z;9l?W7U-KW>i$cOn8x(a$}V=4;K#nWE5PI4VM(?2B4sV-N!@pwpOcU6gsIX-==%~<
z6T4nR?3Elbgzc4}cgW4e7uWvgAfBDgO&?g}$lC8OgXTvOmLvcjU0Ne&kV=+o0S8Fj
zz8n%lzC;)$5^vrC^>~<qZiB&1Xg>{PUk&`O8fp?A?myk3N!!WM(j!dmhMibzPNA0&
zf6_6JdKip6rMyH3;uZ8l1uWHM>U4Y^@r=3TZ%Y`Tv37LZSRw}0YA)9D2;9U9tn==*
zOli$JZiwX&lOT_W92S3j(%YNOI;n0CWs1In_0O)QwJ{WeB9wb!r@f{Y(GSO)!1ROX
zY$OCX(d=Ll`d$VD083!!2;e0Q;jxK^y?zjg8M$&4tQO+|803=xW$1tJxBu7dxBGxZ
z^_%TB7P!?(GV8xUMN|KgTrvBP(DAqB^N67WDv{2P+5SFhs_&|cV)4jblPID!DU7^U
zMdK!XMVkq7ccyoXFXeZ=lemxZyX!WM6kNG)+B+V`v~ss}?hixb*1>?q>JZS4<0gz>
zg^&qmvMH>Kg>*<lZ?EW<@he`LLi`kU_OkGC;EoGp8Iv!scfm)H3xskLt-2&?qC6+y
zD$x`@b<7uoya0SjPRByN6W6s{fQx}wY%t_gf{F^<B0ysXdM=EJHaKUE!S7f?Aab*u
z=S?xYqy%Re@O_rQ$6yWehpSGaVO|i->_xR86iSoEJ)cg&yNy_G@Ag2tIaI6x%<J0~
z6iyW2Z&1a=3#e#mo;FE1sn2jmV@lyWMO=Y<Kg9R{4^T@31QY-O00;oJZnaQsV<OnW
z3;+O^P5=N70001FVRT`1VPb4$b1q|ZbL|}2a^tx1-Cu!>Yif>&G!I#}<=UyO*-a|@
zl80p9b~jTH0a=VGf<;0;Cgpz*4qgBO5|os;taoNau+bN~8{G}aSD!DyXYlJTtw2Kd
zn>5D=Y|{*bXUIlM3@IDfyaKwz;AcqTuW*y$3Lx^FX9OZ#g3Te#*uQIz2Y?-=MYX=V
zLJXD)SU<<~s)1)ff*t`S783y}!JeRW%SkXMB<+;$1jUSzuPAuJWtEb=0%R+O(>%!z
z2y<+pB3t?lOALw(!wQ3^v`VQPGgp_JYI%jI7y4n~N8#0meOmd^Rp~{3<X>M^85@ZG
zu;%)gnk>lDO$o~sS2dlUVro<i@by3`XIWrefPdhsV2|k&1_Jj2{1az5p`amfb#WnB
z^ihKh{O1CIgh^Gd!G_S?J$u~4@*&MVN{TgD6))gV>AoN(g*olLWx$l|%>XanbBgG0
z4RVrW?d^t?Y$3gbWEm_fyap96V9A!i3|AE}N%My_2<|W52Fz2m7>@0POx`ozJf@WK
z`QlaScYz}zImNjclO!y!OoY0J>Kon{^wmUp03=wU_=S2fOCNGZhY`W0frOuv=MokS
z$-?>y33Si9lwzS6%r(qkaeNmjed^Qa;{|gaZ8*dE15;53H#igMwoG!Stn^_=Il6KW
zvwMx{3~$AnSSZgTTuF-*f=DBQ2TC}0lvYIsU)Rj@G8Q7dO-7POcl^w$nPvwHFS%f|
zu}rGRs0x$TW)e>G;vltC`x(c=tlz)J`w=B+%5)`~=363&6%Zlj2h!&Q|F))f(t;O|
z@y{K*lSa6)lk#RRTTAPZ`SoWO%N5EI3shs&|9z+^+abI<60E^C!!I7r(F`t1lHjUh
zij+zvY?okcuvOVqBs)+nq~t2T4&L+6a&ha2dIh5(C|>S$1Mos^SfKHul^isMn08gy
zAjEqaKn*bqLj=A6TJpbke#Ig%oAM1-$pW|nBRm6oF~I{;cyI<5Jh(zDHeX8Lj)i{T
zrZlvM31u7XB&ixsP$CD)omK9Kb{bO}a#4(vKKh8hv53N7At#J2w9Fe0C40GMhMu-2
z*V=rESz^UBFfH$TgSVu_HVbOO;Fb|_k*PuG0_uj8%kGL*z&i8VYIFwE-5huBXVXz9
z2|^=Ltw{$1|4!Se+8v7URF1xKnAqJY&bZuj77?DTF*!-7td20D)J(g<y!$;0@4|Nu
zx^TDr8RmS1i5_Eao#oVOXmc4=5wU|JX0LWfytTg2jm+8nr89d|mR=<#tAzf>F_|he
zt=I~bBFTpBD?zUko4`?5QX*lH8<3hr1mgvsPIHQ+#f|4pQx<yWRK?9_a$6ht5zHPp
zQ!~;wXf}z$B)X0GT&}liSy3<9@oon%A&;AgECyq<w7(KUS+-+-@k^f9VvQ8q$D;kx
zGw?BEHp=qj9-|Zjh7;o)z#M^(y{5&@>ZW-4RIi77WxH^Om!+ONJg?H+p_Q`BRvEm_
zM>njj3^kLapsm51q1z#zy=pIVY9+x2>zvS!orlyB^^+-QkIXrHhkYuW7($M1F$U;f
zu#v3?QQgU+tljTqIqkxxd4siZ=?ttznU2S{Ae3{YvtXocLbVSGaT+J-wd1UFyH=JR
zM2R@O)SX9Qoxvu0HRXdN^fYHjLtB*=_N~>9ONM3#<w-z=p4_z+B~GRsDghU4az@#;
zo4?qiiF{F#XT1ybb~GaK>9>UGyZYA;?-G)E@BUD>v3{Va+h=E|r>(XYm!zgHetg8Q
z+Y;{iSq9yBRgtz^Vi*MPn+RRPykY@_<ys}7EYyCCR{_EgpPJbDqena^Obl)mnG>yj
z<w%SHo=&aq(z{WtfzKc#`R*ztgFKa<urQYKh{GDM>$$dt^frCL$fY;9G&TW4bH}i4
zByM2x_)wBVj`*<)Z`g<yXqO(z<|r%XQv@!<Fl-M;b`X*0HHg_;{^yqcDIYfQW3T}A
z|9<?bmu8g^rH4vPuy-ZDGZi5G!ia|VX6@{vzEkxoMx~2v>C7vkOT^qpGK7#>9hcjf
z|5&&Y{;x6=%Kcn}=4V<s;Y;e#l-8T)L}!*MkoRUg5rtGNS;lQIWs=SSPC&80x;ttb
z6cE;_BfXq%fr7xWL_HkhMM(;N*y-(Yeo&ccTR(k_kyuD(rp=}pa1);*GOlC?3-9be
zx8U&l(-?hUc;{@7RekZMP6;(X38o4A^qKI%!#*D#3pGAIjbz74oe?zAwG)~xIh1xR
z@f0)6mGq5MwH2*!Xac^Z=siHD>szTv5txnRm2sGuMh8RAtbYNYl~d*#)277mk=c5c
zBIdvFiKH^(n1)A`tu474{N3gaHQl5ry})SDal)L47goBC)$z(WOiZJLp)vk-D{Umd
zo|L>l^F-NWi|nyk_Sh(UJd`~icQDPhYSCBI4&Ix1qU1}9<V&;UOQYn=q2$X^&+0~%
z!pS{E)}ctbbuvAxJ$0G@8|ltz6uMn#bhik)y&~x4c5)vCU{_}}&2zhV-re0D(Y<Q8
ztLlt)n-NI6M(}{VEn^w>g`14!ZAc3G8=9L54ie%D$bb11zdJ!+=urG|0t9LR@{m#{
z1p2NY4L5xYCrWE~j2{aiG=iOQLm;dV{aZ^}_0xa05%WBqrIg}>e$lB-k6+BEbZsl|
z1NdO65TaZDV@PLeHv8S2TKl3#Dqx9~uB>d1m_cBk?xEC8zdj4EgJ53)mYAnG%kTg{
zSBGUCi002>F>U^&I(8mGjYZa(vv?apZ}1^ndh+^@-&~^;{Zr8n>h3xyovWF%cPGt8
z=6i6>bpeF8@Q_jMT<H`ktqt2b!k&g?D09CptZW^p3jSM3GW^54l03irqb5yD(Sv6%
z7N_Ie_3>$Os=L*p_t@gP+c3Bka&8HaU#C$)hh2On0&5|6DW98&yfn0B?g~qYHAnsF
z){OS54Z98Xe#?f3f8MgWTrQWRcU^7!y%^=02j2_yQ#H|~*us69F}Xhc#4^y7#jwBQ
z=MM`|KP|wX<V4)E6I$e#6?N@(d(EFeSUNL7baRbvk1`@(ZYF26pB_f5>2xxAHknY&
z|8tdzecCfEQd7j4>-JV$2A5ZyJGwC+v>ngztW|L1yT1&Q?WL2~THMKKvWi>8cBQlh
z*<imKTQAG3oj)Cn9mDPvU!%)1#oj~+)#{s-x)>{CXWM)g_WzOfe;rv3OWj1j<Bg@o
zV6>Q1BBx4b(Eg~a)uwMhJ$bz&PtE0(mJOvw8BgL&{2Vf&7lbKHvr0`1_1pYeT2Zf}
zuNn5}Yk~EPTXpB4lkPYczA!q&<6h;=1aJAz{ZN%BkhC7wHtmt45u4B88?kJ+uMNoA
zBIg2qcgA2{tKL~g)8<!>rZyx)y>3y-%0L7&TZ_nEs~ej~dbddH=CsWtHlThZAn4pd
z<x6?;YN@BX6*^mOlc;|WrpKSQ7u1j3=e8LSvdwpb8gp-+d-6o)8K%>{YxZ+vJ`CDq
zP_Clhc5J#^YUmI7p1~`fK|g8rX-buKe48$))-DT^WTe7V%d%1~BB>j06sgHk^E}ki
zC5HURrrkUKW8dz~N5h7%4s>f9ISFr!(JfmI&*O-WY}xiLS~2yWeTMhi=3%y&x$WF(
zH*Ht=?)tsjab=;Ts;BpE{>-@r>XfYa@Aj!#W}nWy0>FxMXTUkU<u<&$-9>!)jYQ)Y
zVEU9=IGe@U6RL`qX`#?02-)eH;rlEMzAEE42H;G?Ji$@U2pP*)>5vB1N>^P>PUw@b
z=eS5ZMP@i<NN7ab5Selkzx^UJPje022paVb%y4ni^yswdvGerVM&>B2<IL#jnep6J
zA6f4hEsbT-xQnS80AmWD2nY%$JD;m<lAOqAbT&St5q$;;K9SG(Y<$LJe472-z$bpf
z`I#2pj_NEHYDFKNkJGWWU!v<%IgQW9X*{}j-?&@pc$}QJO}9ui!^64ACo!cXIE(dZ
zTkH%+nMfsEL*yn|oy=-<K2}FOWtAkiC$k!#kJS-ZS>Xh_vD!mBBN27U0!PJiAv=m-
zPI_puvG&^;H6m7^;N)>bUTkFs{|yN$q_tDvPR#z*dfNosS9~oz+P@uZn_#$4HPOEp
zm0ajYvLR!<5u^1o!f5>B%X|gSRfyKnmUn5CvyGMMXk%sT!Pxp#vE`Rm^s?j`i`<_z
zwsM_dzq9gaITS7oP0}rksbi6*)5Znoe=ffUU;py+-GX6cPo6R~9PzYiW4{(jba-nC
z<rgen04d&Ee>u-&FK4w3CcaoYWXcV+VM}LBUfdh{*_+)1ru!kSWsHCzHIGnF;2dZJ
z=s<l0s7D|6Ik<!oT4LFbzxXduO9KQH000080JUzlP`QYjE+Vb~0Qn&T01*HH0Ayiw
zVRT_)Y-MvUZE0>UYIE)V$#NrCwkU|s@fDySCFL$`f?#BG&UL2;iqR=T8C^zDN+}UY
zns;b~mT1VJNKC5!<4vBuL7Ba;xU-tnN7R?pYIf`HU{Fe(Q@6~nOhLGB-+i<8>eul%
zjpjGa^U-+S%oekBJTLO*U_33F*9oMoiev)`=}mJpDw@xdO>&;3(_-Ds7uWOYBFT$Y
zGu@7-@Ec-1&E{ycS+2w5;~esCC~tdSY>ria$VBZenyZ2eHW#brY>|%#*aUQf+a7O5
z)Z!GHUvHXM#cDlX%-7AufRe}aY`V=0tgX3T3^v!vs%S2!MY1lMSL5|~^RUhw|698L
z({a8zI%%JD+K*0-Q+WDI`_b|0=u!Jo`_ISgDJ1-{eIk4PN;cb^j?-1L8W(HXjx{l|
zD$#th-E6SSRHJBqDAr4O9bXkqs#`Qa7SkfzG*tt~jmGge2Mwt0>0)`a8V^UC=A%yM
zKaL)C9(9@@m#dpMMLtfNuQz$S(cl$ZFSe_!;5oy&TNQ<#57A7nlJOLK)!fc;p>XB~
zi|KT6J)RF?3|TQ>7a_Lz=GD1+ZywRCRVPh;-_vwHUT;?8bc?%XJg25ci)8^1$)-8p
zz=}?%%@lgFE(Y7FfK9V$H2?nU{N=mv&zom&e`@~y?8Aq%x92}awD^ndrdeDST+w*8
zoQ|Ph7}YA7Z*FiGym|iN=}X9e_T<&;SLZ)9a2vgNb^iAG$B)ey?>;oon(xm(oWFYd
z{p+(2&G+Abc>nI>^EOO*!P`oX6?+fU24(YN1CzDJnSEhi)t*`v1DwA_sOIMS`nv7T
zPoriNG@AeYf8Vo&FwJ}B7dFCGvTA<y^BT_MGM2x0celGpKDXiTvWTsO!FZm(ns18L
zJekIW?L6DSY4Hc*MqCHC16YvtCYfgi%-cs;rTOsi&>zJ7=nsM*f*J6!(Rn;*PmB3*
zGZHW3PW1A09=&X}f?NFdIv(_1_M`E@ziDU5bn0J=*W#ss;;Uk_UCnRD;Y)E9zTWNh
z`_Ty`TrI|Vv$HduJ^T3a`!~-oo`3vvd~i}uef#d>?b-ROAD&;lIeUNa_m9ud?e8C7
zy?Ouo`NfM5@4kQg?Be~q*FU{@_4+mDXs9fC0rOP6U%}+9HaBs#KX-SYnmjL#H#bY1
zv3Kdua7^98aPqr#={I3z@(<!O*tIw9<!Z56V3mi5kR}UTiT<E>(~qy)SIKl+1ZK8|
z#pc`TB6Zdks*QWzg6c3Gg;NcH?eLI)Mdkatm<|pP@o)9pkeWC=<X<u9>n(8u`{3qO
zZHuVYy5a3`9b<=aJ7AOTH_2uc$M{!nhvxNeGg>XKo6lD(sLFeq%;$?u6L+d?ttmSZ
zMAm3|sFlI{csB%QDVK}s4IJL`W*76|7B^^cdmXz~Mg!Q|Yk(sg-)nok<L5B6xgOfl
zNi<h`{Ur=;-j7})D7(J9^RHp&!+8s$>lhz*P+8BE>qm1)hB>>5Z~S=>-5kX8!^8P@
zIz5PQ4iD?M9~_^7xXl*x!Fae`As7e`I^udY-l%8V3E|Byu+EMex9^p96@dUx*n32-
z!=O8`cjdMIPzO9{o(1M=U+s3nE7pJU@b4dC${N01yM0pBF5(d$9`bKHndM!6^n2dV
zm)l}><MmA!Z%h|`SUcXe`6AoSiuoqk1)<rcs)6G3a<SU1yMQokr$t-7noU4Q?gkd@
zCg%EJ#c=sz4{t#1N$wq#4or7dTyDp!!dG1k!b%GCHHdU)uVJg*v`tULf&cU0Fk{Ui
z{OSf(Db1ID!rLtsnaB~I586eNjr_z+QXxjct)Iq4dzNhA)A2w3-apTd{?TuB1HXq4
z!Eq2A9v+>*xV)s9!2jcBvS<SKmNp0T=D0a)E}HA6*M`0opWhAqw0F{Pc})*W`59Ea
zDwfkED<Hko7isTNzr9(!UR)Qer*QT8K_D7=FYCtzKn+|9EPi+heeV_h07e)k?TgWN
zJ_LLynZHSvalX?dd<{c^!3DRaJa>0E_6WzGt3juwLFaL)5VRNN(1H2g-9dJEnD+Ai
z0loR$vAms)lGWM9?*v^Rzrq*%!GkNHk<XiAp8IgHFcJPh_XTv2U*Jy`1R>?8PjKw?
zFkU2jrQ%CG$H{iOS+^IjllgF)3=5IPX?y*w$i_2(G|;zi6F&<OHp*f+mi0f1)#5{u
zEmrwDI)L}*v*qT75C%9ghlk$V1)&5M+J=Y}KG3wg1>V5SCc?8Tg@bBkfdh+;yaqHE
zZh4u78<J`5c3W0l&cu~BDz&@$JY4$qtNCDY4*1$SnPX8OlJsj_{vJerf{AjfU<YQf
zgb7Vp0&q^x_&CL>dk+2Zps4~873e_v5so`FYtrAqLX6cHez8A4ohIvbu~r$>tCOXe
zPS@v)rOu<??M(17N$@N7!~XDM{24%s^_3H3mSr-O9e<BcK+Cva&H)bLyvnaIa7r<G
ziq~|-K%VilG2C9sjZBbP)<v?)MzW0;<0$}f_~fOF1>mhVWQIBan5_W!|B;tSzQpFS
z>z#BufAGSFx3>nn0#n{Cj-_$m!<S_7k-GPEF<l1=ok-&joR&nP6X|IdrEu#ey%d1T
zYyYwhpuGS*T$UC1!8(aQm-Yqibh&bJ*PD-skmK6mZ)N9v1Q=fcPK+7WbxTX=yj&po
ztX~;yr8q!UapcXnvlQmu+%4(d-Jm^Q(=F|%0e~Vaf9wuwLW6=?JGg9LT%>?Bt&5d{
zH*hOhsc}lJXYs)IPV@2A@nbJ&XX~|pyIcU-3$=ybfcNBPu?#z6S`0RThkt`ekzA|S
zkmLtqR3M2Np1`G*Z$|LjSOA$l0O~OGM&mp$=H4!7C(9*5&3l?l()D5rbRV~P!Y%4r
zI~`%F<@WEZmP_$o(mm|#f<P5HU-+;&bGVb?#>@cXkEi*nn8SDqx&YK`l(y4k^>?f;
z&f#KfF9w5kv7v+`O2~kwoO1$Z=40@VI1RrPG4ufTeo-oUcnImR$ongRMsa>)yp9nY
zZm$-AdiaH`#ShvzKh(V^_yu-doMCN%>Z*jNR53tV%uX}XJ?Ml$$z*U>&tN)z*gWb!
zOWKPkyf=isdjK>qxJT{r6EzW520c5whTezMl&@=%3%Y@Erwx&Uf~|>gdd^9cIEx^;
zv%@nT<?x}1f}}l4*6*(88okXCy_m$qZt712U9!1If{>oDw8&fWNF!Afa~fVI*b8nd
zv#;9>w%Kehasn++>1D0p2pkACA-6kWpa^G!A>Gc;M`7Ac!|OIPwVqE4MA3W?p{ZD(
zk2ipIXKjAyss}6rh||1Sy*z*O8laodhZr*J=dSe};s|H>207@rD}TdWjPuW7PB@bp
z!g9MFA-a&!z}~M412&@!@sawWNdSpCf@q49mJ2}c0^&;m+Gb{yJ`x(1+H(g$C~7F|
zWFhZHI7U!O8)l2(_yJ%Cv`yZv#zQD?y#eN!Y&JmI(GK+h#398);As^5>f?HIgHRbL
zYdGQ(h2=y3Y5k4=DR1?bpNrWa`Yk|XBRF5a)5HjH&0t4+PZ3lxpjSRz0~sQ3)!mVa
zgH9migyUvpgi$5{7?w}5l?C&!&zTBO+ZXFM$$XnkF(H;8Fh_<H^fsA6t^-J>`9cg@
zKE_rKs!(QtiO6$$)>$oV6jw#O!5_F~XxyH9zzOiMrm@;tJPpuA>mso}_jOIyjmNju
z5U@NNu9(E<{t!_5DW-fVkT2Lh_w{oS(jsPtq)HT(=B<feWTOO<>_{|e;r%aOumjk3
zk)FZoe_Y|Q9IxL`lkuE69?&+<nLljfoeJ9mAF(?5I3OG*K=^n8;1Zr=>QLGq%)c$@
z61KX=o0_-qgkE6-XqYku8lgM&b4X4g8O|M5^Knl#vee(8i!y0fbFU8x{kZ@j`k_d2
z9uz<`g10XKu54Gux=rW^QXg%Nm;e|R)>g>dYxU*rVqU<2lbGfb=4;MK1E3|DCt$G^
zc7hP1oF^|TnXE>!uQ0DcH^DvI#j_=|@s@2^-8frkqV)Z{?_b3-2RuTCGvpl?c@Q2z
zg*EkA)jcb|R3GNh72a3X{ngxG7ALo^JU}A@AOE4yFW$`7I-YGe3p$Jn8?(S?^a^Pf
z%_qwMvCZL7sSD{ek1{}PQy`rYnzjiL@@*bdBA@ad)+ul5$dmNgPe7!}#~<(RX4K9Z
zY)U)|!edBx1ZWB&{=LM;B@=mjCh;7fy!40hdd!HiJjQZML-h@Hj^QTg;vYKvrml2<
zU8%JR;drUaX?x-=>sIuGA)h;%$6;ntSVu7j!oRH=f@zq;0^;!-z>&dAiO@tZXJQCh
z7(hMj^pQ_Zn{x+^==Gu9S+d;MYyqPr5+vj6xCl(8nW^+UixFVg#8)=~*c?z60PY0T
z;C9*od_ZhU3?s&!I<#X7vr{IgMKn>2#{uk(NuRRLu+z9J2kLSfICoPZ(_=R|0_31*
zTIIOnrEGYFhhDb4JcWO%<tv#1&{6gM>J&PS-)Ft6e$1B-J-&b$yAl)OZHOS^J7x=5
z@v=`Da6@1ZwugsH#FjOuG)MvWn&3BYw3$tD6K*+e2Wi{jR*h*Jaq3Pc05Dab)IAjJ
zEPlaEqpmy}nsK=7?DINC?8u$`qm!s}3g~Nbbj0PR#Qc%-KW%T472xG-ym-6%Eu6NK
zbAF5rjW<IY57unf=jkvLJ}b{R4&R(Yc?f4Pd54G48+?F?K-_vFOLAfqyd+4F`}iiN
z!A>pp-r62hWx1~^YBgk0y-TXMI=Am`iAi}&_})b_#r4D7K<fGvSav?3KnL(0M-{;d
z&HXFvEUs`S=f5Kov(1XrBr2dzpppQaEo^A^p|q;{m?<gMD7G1U4u1S$aV>7wt1QgA
zUcQ)lp_das08#J)PWPyNL3k37)VfwW`y&I?ht4U7!z-ro&>Y+;9o!+DSh+U|SAimm
zTk|Ga0}7)+N`ycIFo#$9i#cq?D3u5u6nK>*I*tSpvNoMN=o!i$89TeX`zu1Vf@Va4
zr@~Cv!iITKYRUZ?14Ks<wKt6HlmMazf++&QEPhQb=uEf*8Ics&Y&%2ln9CcjF46ee
zD!GQGv1yGAsXjH&FjP7DFsCDA2NDwhbTNmO+=v0BX>`vY0$p>9xFBrPb(jd4zz`Z-
zOv7wPU}k`zNlBe#>m+nKhzq6~Aj1Ua`5kn%BfJmD`B|f&dOM%Y7uWOVGFbuE4lC94
zT7HcPa3twCPxJ0~u${j4TJl2+o`aT0f@BnVd9AeNi6&pv@Ro@`1;XxG3?u@9LF)XF
zNhf$31e(l&4(CL358{bAtu;cIfg1XN#j-=acCymO0PazBV*)hpdR{oNE=mh@x+`Xo
zWxr<S?pYO6`J2QL5KVOhOES>^^r?N<`{$>2KWH5f0etp6TRddSC0ayr{0Yh&4+V<w
z>}Jj-23MvwlE7l4RfQ`^7Th8|nF108gi#h)*S?(#ZxcmmAo6y12lR=`NXyjCb-pkm
zSSM#c2`crOf$gF_i&`y}s$QtFI)y8daNJNTfcZC$PGW~VYkMRraua)XiM|)qbwM|e
zGqzK_NSl%x(L#9Gk&&7**aa3)EeMR}2K-M6{NEy@uIS6%kxB8;%uf6}op+QCK^lKh
zJ0k=96dBhZap#IYg4H<b;UiqggiGZl|Ao9AQM69r9)&*qyco|}AS`zeU*@oH)I~Kl
z%xcxsnPl0J2n>dt6ZtkmF5Y^Z@<RA0f)X_5133t%Pr9>k#_hro8Ou?}dsa8Hzth0<
zV0<700ZxwR+rr*ucX#qT9(WB6=cb%e%fL-nUD!e|Y=&>b5yt#&|LM|1Gtk5|hkJK@
zaQmw^drl}hJa_<PJbK-~&wuZ24v>%_LcWu{ew#qSjup72i$L!GqE}eD02+4y1bGS@
zXcn8V(e!i{O>wgiq14pg>=QeIH#!`4OyduwjSgE6Qv0~CQHHywjU7ad%xv;0ZgNED
z_iXZ<H~ED6m>aBSMp#V-AXB71Tnm8S0F)83Ma{0HO{=<*%RRNjd$!tX+QS0(B4x*>
z?ajiexP`eky!O;HY#UvUP)I#RkR@|lz=~DBveJyvYL=IpE<FX&@Xg)$Z|&Rbulf=c
z9$$er4`E4JOXw-!&sAiw?vs-UxFC$$RDG%0w`yzU@zIGu;54#<Q)5KX34sz4;dxwy
z`208pgc5#_j-n>g=Q$9$Ow1)}ujJyy8cLq*!@A-2#~UYh=Z{DgDT;Xu$hT(72TES?
z6hFbr4aTeWhF$=O8Mb=NIAksiUC(D7(RRu4g@0bM-7M(+?oNGzoxjQgC6_4L$(-c3
zSbBnV7Nbx@AWu*LAvXthIHTE{7<SEw*fp3lLsbBV$%Ud37%PS@k^(|^9;z?QZjbQw
zqm&Xd6@V!$ku_<<GCeB02c5GC2y7ZKaYa84E1e|vk;&h9$2hySXI@v<um?*Abgx+g
zqK^Sez~Q%voMl{QZ{kJCC{DQS-tNL4)5llNz0bFPl|`%=FfNZcB1RFdD~gcyrI`W9
z5_sJp*A_)$$VMiuQpC+*fMV-#rV$=U20!BX!4T+CfL2qW3ZdN0Ps}C@#PINNXgJed
z|8M?~(RaAIpuK4zu5=1=rvVmNDL5cEg?ZJG7Qnnfs$^ILp{1W=-9`ZIt5j+%2obQx
zL_+Qut)YVi$A+ft5{RHVoF<efv^R_ImrJFPLr3HM8O(Cy5>CSTOL)2rworj6GzB}t
z;y@XH9H&#5*`40_$o!C}1U5uRT<Ys78l7H7BiLVCfZ!v*nt))mH%vDTQ82VZ4nBTy
zmd6|C9uoVA2@r`(OQ?|P+nmK;L_PxbZ8qv(?*}%qI%fcNU<bpEYTX+J_2!n*L;wm^
z(H?3;P_B3uY2XkKqgngn+4;o>=qGN<IE~~9ayU1WIzi*|bYk<&Y=UXY=VBiF(>UuM
zoP-CRpj+<KReOz{AjVvX46|rXeZfTT%&jJ+pw@7?i-x?Yb6WT*VD$$G4G*rA%;xa$
zO3Jk2c*$x9HkKwo20B~&0yDO}wuZLByaJ4u7BG&kjJRuVq+G4o1KL)7!(4`MdysW!
zQew}*e;$Mfb_N*1ybW|W%n9BZ&P6fDx(4&7Y<z$-gMD`rnAA<$i&v7xA?8AMJb)_-
ze|E?*_Y&j-se%d0=d+2&jP%}&at`|d>~W8@*UpAsEl9NlR>QvM-#Kh$IuFG5=UqyY
zaso?<#p(fU2X4DOPJjgAZKq~4iJcUspxOjv393XejBW5kx3Nxq_0k3!AWH}Z2jUwW
zRWnGeH=T`9Kd3LTWlvU<fQYGg9Q)xR)kU&fJKf~MVai-2XtvYs8)%Wb+KmZJ)l0Zj
zL_v=)7K;tSA7px<3|=%hIiUH0V(blVnY7Et9nrOcsw0~fX^v>kkX*8&r}6}+=7OJ|
zri^$qw3q-oDGxi4UCg-D6ExFX8k$;~>a!XtAM|DEl(Z#Hfgq96%#p|~rDPo5=}PpF
zGjyJ$bo%Agd#LkxgmfP4!nG$Fs8xsM0j`SoxCN=tc#QyYD|HnP;w4g?`XpoDk<0F@
z3_<ialH-gDwA=Ae%()aZ<RHK}3uf}Xq;H5S0d^9QZm{n?MnEciW*>`Ep2xV1^qYIu
zbPn5VuJ!ySmM9)n0`~`(knkRnJ-Q)TwT!=`#wyZSslkKQLh~BaJPm+;0Ad6$A2HLQ
zjMsfox9(;a4-!YpjFKF@hxjt8yB|o%a4QjP*ro?3?v}JfgwxZUx8w-vr4+lU$T&=)
zYpapUCn+_W*b)o-@+tZnxB@bCcSkiy^u7>C2=Xn`188UZGOF~2K$mKsF%mqm1`9w{
z9~)T1t}66#qk@_sNtv%BPh3oTL_^3y1PW>sCC(Kw;!m_r%q>!xPjEt7lRopy?R;^}
zU(|a9$gzBnPXwS=5hGPpq&3@D1Amk?+)DZY@a>7jx2LU)vp`p7fUgbQ&g!Fay<R4B
zPfSz_T;iNELur)-9X}d5qP(WwuL@)jn>(uEEjfuryf}F!>HonA+(f~5P#$*~Q4MJ<
zv2zwjC#V<zH`=l=>OHxUog|hDGXmW4tNC~%Nz#v-1W@2f?5)>JKrmlHhlv-aX;y%R
zDRvJv*bX|;kf)ZqD3v6}c2)7DI}C@9aWBoK0<rw;2i;CM6gADqN5sJ>S0x#PSd&bC
z4)BEaPNlp=YAOe%chtg=eE3#N*fU2G(@CH|nnbDs=##|_8BQH6Q^WYeCQ%=7D(5s{
zifz&@F#^IF%;W@z8BKtQ)8gJ`JVkot${@Xf5H=)wdxb~v@Q^U%rIN8yqH4BKq(a`y
z{(xdjpfKPn<`qAPFVU*V-@2%Qlg9#nmq6OspMa#WF{l#iw8hMfm}h{MFZ-x>LI7qP
z;F)21BSYbir9&=GVkI6za{lM!v)ox-%IT_?ha*?xy+fQky?M?Tn`G*<4TF;tP$#$+
z41OSPJwjQ%u;`-RX6Tg^P&av#vRx(9@o*k`8&n2|llu`)ZiuQ2LRDZ;k~U5hwF!06
zB@6T^R36DG;|tHsn!0mE5BDfzLV;0NB}xS^vj(x8fHa?pX+Kc4@nvV#HlPGu8-A~=
z&8;ktIro!AeuMa&QI<tL1r&{7s-75>6w3Bpz~toyC?$;A6gjGi!V7ae^s9ysCl>7c
z-o~IUgo+e;WeriL(5uUoWZvBo9s|e?aPn%r*sfXq5wKqak>V<|O<kx5cwEvtutcg`
z7dWJsiz(dB5rSqX2|BO)zDjKc5RIT_a%yS+MXq-Cc)l)Hn<oW;2IOKyTH{iWyNDa6
zfVds!p+War-o^C_*92`4<TgYVNlt6&<wv0&l4J1gt=uncn={8TC@teibyAim1!tZ3
zp|JZJt7Myxpt;*4GUHgx6v^V@KARvn32@4}*uwR>J=N&NmRa7!t(w4vyCuyQ@6<!4
z&F$2lFYM3^v$Re))7PkFaCi5$_ci<mx69b`r1jpT2(!)MQlCY^vK8~2m;?0okSVh4
zE>VT*yYFA|aSXi|n2I>KOqUZy?5L$9Kj`{1NHGS3Vu}>p%*c5B6ESlHJdi_^#*p!(
zAB5h&VSAQY5>>J^H8hr{d}x<n!j#2xpiAX(M2!uYC0pm?F-=|(7m|$jEu{|B%s>Hh
zTN|Fx3mcC-9l@Pn1jBeuN6W~Tbs;{3kYnTKSea^9i>z3$@roVBTQ}FnV^-Xin>^Nq
z(Ig1IU%TIzl|DnB&rTjZ#H?L4;Im_2yHod*n3G&X-OSPabVl}_$QgzUyEg~iO`bs9
znv^h@BL-sRa)`$e&XdgbVZ{sk?#{;_z_kK;=bLYc{5QE?!ywpc3B=#W8&dzU4r9Yr
zkSiotfi*Nrkeu;36g)+Vk?tteB9I!_6}__2X+hk)L?iyuJ-MW^f7%<d1S^Y&HqxI(
z%-|)qW44DeshE-bzAHBU$v0Vvd8qJYMJrWvDBKzaWw1*+tRaEO=A=6bPoil&<<u#s
zPP<b`WkgX?I|&Xh@6GyA07$$f|7VhEhl0V0w6oysohSzaAcx7pcdTZ1Iz{w9fQo<?
z=q+1lT!<7vn2GIte7P;c`A+axBHxC)3}?gQ!|p75i;YWMk}MB3)MJYfPYJ;RY7@3d
zhUh+O5p^tCdS*<i3NocK5V|7}>Zg6P)<atB15AXuXmg+M?s9lRagbvG2R*^`SY>9i
zOzAwBy}Q+;kl4b<Vs%xl-lI+pSq(a`X!%4$GO9Bg`zSR9w>!8EkNx&H-QZL2Q~#^u
z8tYIxDL|#B?Ky5S76%pqfNT^L0@{-UYC^qF_=w^IAA(ex*CXqdiv!`!X*-<Qe5dX<
zL{6Crr8$ffBYH@Au&j^!d4!l4&Oy@t`SQn?A7F$TWZ6YEGV>8&tc?+|&XmR>zsbE?
zCm)BsOiH%l6uMZO;qY+QorR8#E0CN~UQCNk(c}hpvzXcNsaS6_gx;Y&9>vfsP(KOv
zTh^qhgx0LAH$~j9pVx~y;7Ai3p2($1T<Bpk;LNa41)Lv&-9j9Ocfy-uGg<)j!s<dt
zp9PhD<LX4xo0&_J*;`aE5VnZ+dvNW+-lA#|=yaue*Q+@q@_F;SkMG_#SL}7A@C012
ze<GD?fb2Qqet0L!B4@DJO|D4%JDe~{818n+@57H$PtbG~Nb?`nvJ)DNs!}*u(i3xE
zrCJs-@vyRw<T*vKHdJ|EOL+-yO;{*)0g&u=0pM0>J!RJb;I<-f8+GNp!Gz%!_Vu2a
ziQDaJ8jkMnoJw|Z7V5T?sc5A7pK>4k{Vj}wK=5XZr?zZ7b(FbMHKX4ao339X$2)-_
zfO3OnguOw3Aw4xfYH?{oG(S`I-=zDrveh*w$_RIbkdW$%j`fvd^Zlr7)u;Pd5ya-T
zFqf{CkCCphade^>&d!2Mz8tT3B3C@!0rXh<-uihqT6l_O5n$3-j?TjaiCOgfUrAdA
zuU()znDH-AIU5VvefCiQ*Gg12#<M_Pg||rhgi4Q-1ySn|rh@EZ@nMbigj1op8*GRi
z-g5Vgwwl#dF)TjAd-?$%;6O2^)`_O4nc>H8iTg>dubBH7xsXt9%B|AF)Sp6`6wRdp
zm^7zjNH-HStJ^lsitHr0*Vw{cr{9D&C8l&`cH)j{m6Qer32Ia{o!Xr2!fQ<l`YJ>k
zAij?)#l`8fsVxxji7QfH_>Di9UeZ^m-z2+{WHRNIJ=Zzqd$6;*V)eumMNKa-RrbKD
z-<S9Bqy(?#ZJIne>r!Z$;$nz=yn-kA%kwiP<YF;}-a$#s!TXogCdMn74B7FBtNbWQ
zAqj{Q<PiSDi2k$~CfN-Ep_0aH+I3)DcNjvS@UMXx5}MprG#FhKN78%1hY;01;mV7z
z7*z)tlIiow91(zhm^LQPl=hm?@KzSX%0upe&Lj_@@vtDXDlQ6ZY!z&J3r{EC6sHOn
zNCu>Q1&q1akq#2FF2**GET((%6%dFcanf<VE53=&kx`C9tDaa&nyg%e>foqO7(@@_
zySUIExk8G)k|L?~bTL~ZigI^%&C^;b(9xH%Ub-u7mQ+zlq|Fc@DvJ+v6MbBf`DoWo
zQa7nOv&uM%Oaw?vGX<)TO-5<?NwGBPqM|WeMxkYBw5ewaHAu5Xa&h?n(Y*G(_m4$q
z4&$#+$MfZO)7-Gt3m@4g@d#q?YvlCsK6!<?T3>s|kH3b?DpyAu2_>a!eevq;`|r;$
zj)U$*tHpUT(L<HxNo$BUT`m`D)E;#4M1@()yI^e>hY7{ayUf&Sk`_}-D(g?QOx98b
z<=H}CLyUZP%_Gb-8b)Zy1fYjlf4A}-up)*|`c@I?#~EHn@J<gRMRF6+_F|4c3a;=z
zDktqwAHU2A6u39x;vL0O;0OyyZ9Xd?Q`dP5rCfyB*MI7C!j8lRke5db=fNh$G5H3{
zO0f_vz-Tcgj<8;^_a-%H!!&u5;%2*SKRa)7yZA&E<HHiq89rq6?uk+NL*h>X1q-KK
zdIo!|*e*Rsqkdg%&d0N2vEBIAa!7Rw<Yxg|4<KNtI{=98dQA<K^sY|+i1PzEo&v2e
zq0zy~ZjS&vL&>k^kW%GxQ2EBKohV6?LIO@7Y*sh7*ezI$>vodi(n(DkAbCoYyUS>^
zZ-d*NWf2I4%~>6lDDLVpENalek)v~_*DKa{I9`*q72}4wz3Jw}-54kG0aHr55Wkf-
zrmbG-V9n3hS+Xpsasp@vZd$0(k%+7mSy>wP=mBj}AXw?f(@0Dvh5*P!st--2D?v0u
zD<zifc96fISq*R#Ji+P;<SwWhQ>YOW0#26o@^hu?rwBEfnMtiUvV)FAX-T+OGIOQk
zx5lXqV+3nCH2XqgXBNZ@Nz057UBLtqeOA`aj7XeSwc(;iMS|SO=uqjuH|pb6=qP!L
zMnNg`jLwZF+VU$i8oogH6{}$ZckRU1mw8fhzM+gLQpK868V6ebn#Ug#)|400x&klm
z;#BLr;Dw!<Zcoq*!09lmy5?>4unJ3n+L6@VN#%YYTKzmL^|Nq#p^WBA$4c*!NflR!
zP@^I;tX&BgcnqvV(cy{*@v~I!?9OAont|QZiN-ug9F7baQisUz?vxtsV^#3(j)X#*
z?T;o%TAsD1*3?-6W|THiQ@|L0<Cft$HJXet(J=G!!u+tfhRGgDjud=yCwpY830T^Z
z38J;(Ii2l{bjQ4Z`rWwwP1kFcEUUcUKfQj-yX*b4+23PY1v5hu6&Q~ePZ%sl`I__m
z_BVm|)iK(iq+Rs<7ACujRTfl)8umLybq2CqK?~4;Z@%)3L0WO$1Q_-F^AgWa*Bg_+
zC^Ot=`v`g5UbbB|?-9xQJ~)xvt|J$uBz%vCKx+;atvN9VV#xN@6X#4QJM3P+#68w4
zJUh*a3w%35^_&@1GIHoLDceVdL=?Vy1Lc{k=#5x$yH7$W^Xe}FO_J0L3#iDNsbcK1
zM5V6HLVIyt#^x1$z7Rkq5t$ZeNu3N!ymd&f|2|vF(eY9&<FC>#q-|i5r6FdhvYbO2
z5Nm3|WxLuaulH&7Y5r;ZsPpJQ`e>YoOost)?`5!ar#Bu%6Z<3p4li{Sn;r@%4m#RU
zX=FCWbBlv?E9r7WkFN>+Q}?VS&((D(vJx^_bLU#ttWHB8bxZPw`zTwY7DXdfH}8t^
z(5IEAvb`-`J9}Ld3Ykj=w8tWM(DFJ}1eB)<z}GXz)>FXN$B^U!7L>8$F-L+gY4yQ8
z{5BQD83{eiznYN?Iw%I0f}`xW-av2Go`c&>VL0$<xtNa8t(~yZJ1ZMHC|QluB2RAs
zA67jxM##B?pMC2B0DB&k&Wi^7Mu9-nRe6O!*E%7L&Q%m5TC1!`Ld^cEYLY+~RvFK6
zD1S-sBWj?=6JAggR)m%x6&4djkS^2SFV>qE<Ig~my~NvdLQDXXHVzhQRU*s1(FC0d
zl@**5zGG3$j^_*Igrs=lU=c4<SGi&^e?jZ|mK+4^pP&-A(w!kQ8N-;E@r5xV*FfOn
z<N4VKATftR^&RaZt?$p@K6Ad7SH;Qv=IqBxW_P`u?C0;!&t5wPM$Y&5XWu?|J`cMm
zA-QMEit*IXkBgv^|KmLcM#l{-Vfm|c9D`K#=rTuxxuOCRDboi>TTLpoVP)fFI$jrO
ztVS3RDOX1WR*6xvLMuV(HAt2^k{;TX&EX+CuCc|&xj}nJaJyLo;S6P_L+Pvrw&t+n
z%;t%&J_oEZrX?iUaj7TtJz*_GiCBaQK&K*5dSF?X82>#BPtkN5v3#;Xa-}-hN!?$~
zl^PKuRaGKPxpk%Ocg=O}NR}ZJ1tzNNvz|t#72b))qfW<K_iM$ADlxQ>hVfIxCl{D3
zc}Z~X{=@a<vz%^+<N488&J+ogq!`t%4jq76Su9;DtvH~0c&X;{IY%0%;fInVp{Zp2
zmn&WGQ*tUXv=XlQO)=l1+c;xbihKmL-C=#Z94HlhJi*6;ZnHIoKA;PYIP}P1QoSj$
z4#Lc4IdO{|Ibmn}>FAIr361bg2;oERCcyGy#5><DX(6kwQgX=AEkjBlQ&CDh?28dT
zvZp+)sq|Pex=xSr%~oF5y(F~Wy27TUHi8=ZaNNv*gJ^22;z_odb*-uTaGovh-J9oc
zzrXMVyQti5q?H@q3?5G}%6W)IQrQd4fXPS?sKk8<ZfQ#m*x@=AhdPllwyUymcm#DU
z941)kHmmk0x4bM&o%{c@ixjzjaYZIc0CbGILi4b^RvMn+X0%8h>b%3<v{uW;qo}!I
zD<vH?29FJA38Nf62`ViifoAg&&~fDHZJfuB*4|Qi{1yB0uM$C)o1wdxv>4W0(S!Oc
zddXKbvU8W+j&*0HKnO-dNVG4q0VWP&H2NP(@n59u-{x?jmd5UFPIhl>L4qs5@lD8z
z1oEL<p`{og6G(zloT%@YIZOc?rz%u)sTUP6%{tFrf3Gm<O0)5Bge5|y;gNI@05B--
zgjE2Lc9FXK2GGaHc*8-aAP5^CX+L>vNe#u8lA%E<nCTQNJSxJD=seDKIS-Y6xKyh+
zrTSWN0qL;GRBbf<gXse1*hkGjz&^eyLaB@Jz4l3io3WYDoP?;^DgMm-2X{75@Elcm
z*?EMDL)JY53&vNmfFntK?wXn3+JgFuN~#UZR!nNRJ6`JqdbJwUMrTmzOgli%QYmzG
zW;M)lK*e|J;<XI2Oce-rN<A*QjuUCuOQ(x$;)U#Fj&H_>!d}c+%GcwS1*B}X-_#|V
zhAT9QjWm@aef$w$4<TcF{iAgA2ai7)|3zG##1S!<AUC8xvAu@6jFFpZ)C9AHZa0s}
z6?tU4L%bO-<fo70ydbZ9XdF$h{@d9UhK<ITK43tBnC(elIxTHb_1r^dfMTNgOA?pB
zHC9Wgj+BRSsd8NB{JADKqO?2d6uRP<S{U!st74jLh!jm(JE0>zPv_md`vgEL4O)7X
z{uOP%LcWLUfR`>lD}Rfjmoazb2ogQf;MQ=RsL0)2xv8l%zc{1KfqQ~C;w)Jq>WA*2
zJ<-wG$^3wH5r@=u{lQrUG$#Nm+W5u3e?+MAzpHreHgjiYn0zegDby2ahJ$7S%frLz
zgW5$pWdADuek+FUs1=j>XTNgV(*;~-voFs)?|=L+YNWA^x=HOBJVVil!emIBon;rJ
zYOrTry5`Z?pJia|p}Q<zOIS2&+_gt@>m^Qb0sO6##OT>b5AyR7dr$WSNgq-mJ*UZX
zU7)W%mCMQjV8`tJcy8Wt=forPjx!x^qy0F|EKwIdcMs3ZK6G#9P|XrTaxje_$*Ni&
zDp8PE)Cj!}Xm92cLn8=m`i?vb_QZrFDiH-{@nHX;CVxCJ8D{asUR@bO0GY(r1ZYd)
zNg%G`#zdCg+KrcOaJa3@cw4PrY+}m_NUZEzM0}3Ps`Vy`Kg(vWwZU}PGWTI%j=C4x
z|NB{dQ}$yok}UqK<Mh-6`W?FPV}b&uU+~XU{PQjTc`07S?mkSo53t@#K$$UQ#bOzI
z9nT~@p>reC_(Ve<_BU@Qay~nqw_n_0Cri&z$|9E$(;rWygMEHwUI=G^9q_{#opL@S
zA2x2<JaCiZXW}2qhTyjRDO#0*s%Xj+u3ha@h%4Tu&*R25Uynej0YWJ4!dHCsU&Pna
zvYE8@pU2OwS5hqgF5c7^-@pf}=(G4c`&GZNm3-hpHf=`E%-$=>l~ExS^iFru1Ep3?
zD(K$@CGq>qSh^7g$YB?@4US)G55_@seR%lRcQ%gOrneK%k-5KOLY0d70lPcSy8cb#
zcKQsU+e(d@gFVR2;s>xTIFbTy3)F$-pb}(ggHTP~Ge<Y%ki^vf#CO|2N>N?4)Tw|q
zeR8)ToYF=mXY|&8C7$7rJ@lsx3T@9b(T~yw<B5+Efw-H}YkmNPQK=3@YfF~C37q4A
z1Fu-~`XdKN5gP>k&-5I1XhD4J-Sa@Wz5BMNcfZ`*xl$F3bKAZ61v;@4FHi#T-0DMh
zOt!q~YrM;qE>o@pCtgS->+#pEr%-LnlkAl!vD{0UEiEAkgOj=pYA?hJ=ZI=%kQSh{
zh0FbIe7VEl{#SIECmRlvyBAMKUH?TDfc}b;(jB$Za70J%U#X^a;9k%f^Q03mI`8@2
z9a6d{!h641lfMGxCv`SnlLann_juwja1>uih!9<w8qt%1^>R(8!n%V?yy+LP5f6&P
zLmb$Zn*S&MXJ=3?L~64#c$$@AXX6RlZ%%dH8QRpYY|v!iSYMc_sE9pzg?cUjrW8M>
z>)~G@Ha-xF2Cb4`$Zp#5mY*TH1Al4km*q}kx5V}fsnyB?=PHC18Lk%FW!ZdnRYQXS
zDY#jUhr?o}@L3K$CKV|T4-YKe9^{B?%UZau)LuihqT{&UtNOg_NSAk7sedRYq?n5K
zd+4^?Hdtc^PFXi|(-{dLMgj52$WBcL{>ZxMYIq`m{ve;jfk4YIz$P0*+ki`8r4u`a
zt1MbAtM{)Q#FkMzR|doyp%UXorwl~k=ZN?Y>4y>Di5AQN+FJI)Pb53WuMq~BTvi-&
zNmwp`GO-*k0rGlqA}+<oLLgx`Z^{T{<X<B0ZMKq%HF#<C3I0I(1k3o68S<BLC%Qb<
zhL@L0n6yGgs@`S4uSA_IBUVz6@vBrnV*nH}53r}OHIQ(+yF-`q2T%Zy^dyeaI-ee9
zwk0TcU_vcV8I`#Vglu$*Yfa8k{w`0(tX*9Cmom~43KkhxoS-Hr8e>X?jZQEImrlpi
z@#Y3?`WZwA6-qOj*w{;xyys|iQU*`0abGlXaUQFhJ(%gl5XY8N0q$?$ev{;h{AOy#
zDw~8@@{^{MuVpYA554CSn&|X~47K;Jw_a*7gTD?WDy=;(GTscOr0x@E8z5FD+#)0L
z-~+XPDVUhEotXL$J3@k9c+y-56>bc<(hVXv95td~&seuHj#S`~w|zi@zC#iGHc*p&
zaH2a1J&~F<@40nr?XO92(<75aav)>xsX5v7M5{{Fx6$2Q(cK%1O-6q+BNG%=JhVfy
zsYq|(?aor!HvO8D6RaVCJU$+<6o6|?+&w}}qd-iYPAj;hN(QHMJ7n77;Sv=j`J3|v
zF8-oh|0T4_EY<ESs%tWj<=y~bI(L!&x#|u8#El8U)-^H_+OqeCV++EDTdOEq@m$C~
zZy?M3h~n|M7cu(QH*wsS9P-M^fx2J^O9XUuU9O7tFVC+w?7-g$q$#2wGLhgr0P6O$
z^CPcC0XL<>$cMz1U;l$dcxbiRwFKO$IC=iZAWVJIhnFo8yft@Os{MN&Xiv?ZD5-2l
zwH=<IbiwSP6dg0B<Z~n?`&>JqUX&PUR+UG5=V-J1mETzXGYc$}AFWU!75lQjRxd&`
z>~5}HKVpm<cKJfRCLzQNa@?L;{tjJ1gKSnKBAIAN|GV&q6^qLXhf2RVBNf1rQ+W#@
z8EXINsJj{YMz)iV59jH68KEj&lOljg#Z{IvX@sD#;^$dGAf8w<9OYoSOE{h-`%>;%
zyPe1CW5U>=R{s2ye{~#mRjR4~M}yk*`g;^x+;FH;yQOTclPet*scPvez9(7(_`veZ
zj+ahXs?H`ssC21E=(jntU0VapB4^O(P-3|%=oKG;eDJOQsT_;-MrMI01}q7BV>T{K
z5~D!c81<4qa(PibX41Fffaco4f_B=QpBCgpKpK0auV1NH%2)_Tw^5p&5mw#480Vj*
z2RZX@xB=AsNncO}Ci0hd!9-C{CKQZ;t?*O<!q`GxCEIDw1gri5Gz%>iTe=l{vzB)R
zv*z_N3VHQ_UfNC`aXUECkEjY^Ji40GQqlnbPAeo?#<qj16UV`68VzhGj)Q(QYwPX<
zQqXEeuTyf5i1vj$*9JnmjnE2&riEd-g{(J(%KPyk8pWnax507iN{j+_4QRYc3v}*|
zbF5uLi$Pp)=nR!&`Is2l`(tAE$FMiWQD{Gv>U9>+PM6)IlW_JJh4~$&899?6kpjoX
z=#&iBzB>z#W;@($Nk3YWGY17T+*)=)xOZ?kB0ac4WpLBl!Lgp!&?uAPf{n~*W@d16
zK%r)8a5+5U_JN(}wPrYmK6<E-Cq$>gU}pYOuvc6h{!-lt%iWTPJ9mb=Je}ikmyhQ>
z+@0mS$}%Q@vquNLk@40{Y>m_Q;%qfeB9}%@YmYukgmMMwM&{VcZ9kGeI?W|;+Ww~d
znANG}c^IMY9Y8sQWl0i`G^W-Z;dtaY8||EC8jez!S(s!D0fW)B94gUNA>{s{?6`yQ
zy&y~oV<;8+1(~PAUdBF00kE`AV4+ax3@BoZzXCO5<z_^G0yN|^RX&sn&vcE*m9FU(
zX<B)%waia-Zle`YFNGdTEg<PwSJ{fP2oEFUw$oz0BH(O{jJ`zHI?=a67hb}Ybs;(?
zT%^%0LG3Jzh+uawCi|Llm?s^;yz4Zdiog1W@H&8%2zHv@MR?^GXuE^n5|qjF;UVd`
z7`vG?w!U@?<vA!rPZ(4j1{RM{jS64*j!6UjCLIQ)Bs~xvGU&1*TyR!Yb}_Ayrd@~P
z4#@6NF=h31LTYMOgB{%<wx?{PgxfSV+|li^8fT4LfE;6tB^Jv1zSgO@32YSo15K80
zcaGj0`EV%g)6?+xXqR+-<*TAzSCn=qg})q)2b;eZH|S4SUPSUHQdZ3Z=dmuo6W{0;
zH}2qTxHhqygnbzW8);zAL6Q+zv7xaxDJJi<g|g_E53)2Gaw)6tv~2aQokJCUjJE)k
zsvQhN;?`(K?7EuFTK=QQMYn)6@<&vz-EUSt<d8Q|x45Tn6G+#s*qV{pa!mBPqzi9D
z1dXULnv+RTBpuqofd|M<=QgiX#7~6`jTsmfRJ<cA=#vZ|tdJ<UJ2{|`OD+sfr-XD+
zGy_e<3;@Bi?o<k0Yz3J>$3_Qs3XBTw$pB`zTR`CuNe|S=^Y~&ArM&U5JM@8)wXAH;
z5~+yj0w#2o^D((9n3HRKq3Y0D8#n=B3zcl4?m{{Tsc7v<Um;c1J?6jI&Wiw%v~hIh
zi36>GDh?pEf0BFRd!{DL%k33&Ps3FEOLnR++5Td1?HxK}X(;DbYBr32t8$9=3ADh}
zoJvrT!NFXY)_N0lyUXE&r&R~kHpP`XPN~?jR@%lDQK#1KI2snX9k)|t$H~!fTyiu_
zahu6UFje$yyCM}%aR4aBP&Ij~H^I@#^FMwwL^o1$dC=gIcL3S&WRBNtI7g_+hka4=
zRSN5vG9M+;L9i<tkMeV^8)5kk>(G5DRic#SwO75AkMIG8)8ZJ7=Kk&r<&{j*IIj5I
z$}6KK!7cV!tEYE+9U$FK`u#9NjtmZr_8WIf54>ud{v!2NUXGun=P{7f1Yw`<+-fXz
zXg*;uoMBs@gabur=EjA1tiNK|l0Dt49u@52(Dbmp^NQTwb@(P#D|eaC-qPv;kJ`!l
z1Yz;}Pmpp)4gFE-$i8)-KC$l8%eD$*7$uI#y+IC@Sa@SB);Quh`-E|wIKDGTM;3d}
zw2ZiUovh}F@M3hyq{~`B&2b(RyH4xRHjkQQ4%^D;>d63iZZ}^nfNol>AiFWpYbNOe
z-GYq9Yj#>Dn#*aCkmX9z9Bnqs@c0--)YQ<rJuf!LoB6TV%6ZcSHyAx)y`V50{Lr2*
zhR%x)@P!5VUK6N&g-+q#Eb;<RcEOJ#IXpCq#?p&g53SWQxT3sdTC7O%IiM$1G1<3o
zMi@o_ztK~ZJkDW`8YB<l8iilWZ1DKT%(>zIWI<P+&rFm;RaqROE|<;OV<5U~<%9;B
zCxm`3X@NY>(4%zLS1<$iImLjq&A+~KRo0ofhc#=a0Ugs(vVM0xM@KU-1r&Kr;-y3r
zmKkG3(5=SW!<z_=IkEZMT_9`#iHQQe8lsS$T-dM*i^pb1^34n$8lZY~+_;cmO^84f
z8{GsSL+uc<8-X$t(pgL$1e!8vQE)olqV5toLagy7k~#{H=u8BT_w{H@4qp=F)Lj+x
zjSLLy!!1wtS;}(=nv)PncU33VC69hcEUN%;K##w2>s(?ew6t%u6*H-<m_q^MnDeX}
zJd5<{@meAzgWO*5)U~mvD|Bxv>H}p0&_ZVT^u_^FIe~u5<`W~TKgTh{$@kj%resp9
z<`q#HMJA#3<r=0ZsAB{F;E)U@Tr8{F#O76_iYR?7yOtdR>`0H|^bfg45AwUa&f_#l
zDQI2!GPZ(8YHv-*>c@CR#Y!s0GrFu2Emlo6&?K*0H|ya~AFXgM!kTDfm_dGpf0hix
zaiwD4G32EYmE*e&BG5wi6IJq(*kvQdkiyQHYJYZu0liDxO#iPhwAVq))FV571ao)_
z1bh<z<aeN4n4BUjhF`OzM<|1#h4p~u886r4wWpKPqZ6dflgBYU9pzL<dgN0nB%<*>
zIm%m)MAFL98}%2e5|%6Bj&O5XA5f1g!3aOaH1@~=Z&Za5-_ll-AomvLz;P@p^FK|<
zhv`lrljLYH+j#qPi3Ht?Qi%8?$bDbVXNjHjOZ7hEs%^qwG%{4$vxv5|l_-KO&Z1O1
z!@x#99UUVg{M2?sfd%@plSGmwhk}3anAVg%Vf6qZ!TY?&M`C=o98)-;e$ZEuo(OUS
zTwH7x+z_sjM1EGoEh<f|4Iq&9%s0hqo=lNn%OD6FAp(QrM%XZzRL;MO>)eqNt^qZS
z;j#(ZU$Gy~h!QUzPyn?{=qpEzQbpl&t*fIh5)q$$H6>5&=?FspNY;t6p27Sq&)K&`
z4QtQt2_twq#xHVsO0uPD_%uomx*3fESr909qBr@1Ve%*hA-d4X+Nj)QgqZ+lrzo31
z%g)V$8?yWT^L8y+HXlim(3ud+OPZQWh1(}o67NMs$|U~kQ_u&L5GrG%gnNeG?5JPp
zIhEZCp^DMnoqGHUx;{$)anfCT3K->z?w&7p33I}Tebrci<RDLjRo!A;RJWV8LrC`&
zRkYe8fW}tQXXM0~T!q+irnPxsX@PUO-2!b>?@kYf6qFp6gqfE8s9{N=iGHSIMQ4S)
z8tEXD0SXJ<6&_g~CC<qHQRbY1%u!Vt^xe3>0Jdc1W-YqXJdj(60rKyhnNXZx*q0Qt
zRDmYqH0DqsEaYxNC8yH2s3<Ssw;Txm%SQ~UICfa6gu%)gd^fTE!oOZzE5GpQ@=sw)
z2Q<;%Cie)#K<ze^S7hXV+y)|i2K_|6-`x>4rkM0HwdT;lNJ!~6Zrs1I^$}(tpsF<-
z0<@m;Hsg2vz3-eulkcUD&KFJ-VP<>6eoE=y`3G{ApgTme7o0@)&99yCcgaOMPn*sK
zgc+8DOP<$WvB1=OUz&TVp1)eZTNd*=Funi$j@KVYi|e^H{!$&n#*g>bLs)cs4ORIn
zg%mSXrSFqr!J#Zln=*0X6Pmu-V7if#gHQzzb$uTT35n4%q}<u04h&;gC7T3Y*x67b
zsX*%Tf%+(+Qe2^4nzc8dDTr+Dy&!{77&;ZD=AhK;@fvn$1%TAm(4NY?GK;Q<ExKz!
zkdksbM@Y_yghg3*L@TV$FkGY~-k`M9GA#l!i%J#bC9OP<5mV;K>c-D5Fz)Dn{($PM
zi}}-0kxc+Ma}(H^1D`xRaaf^{H;HoNMjqCH(B=vkun_!R;Z#tmdNk1(kmPq!uK=a6
zw3<af1|$%jHd8%>ESC_$0^=VH<CD|8`&Hs2CkrMqOgK(+BmsOi?5=h~E|x%3<xDfL
z#Z@f5IFQXT+nyb89rbWHct?>Iksf%vm>)5p3bQuH$^{KGpnR|8RMYYTPdrkLofK8`
zeulqt?SkmFzZ6SyMDtpw3jH9{4M$@rt|a&lg!28jwfS@tDM^~fTNAc^YQm~*;%#q2
ze%UsXfR1V0aQHV;PxkOoJy}Z8D%VCT%yK5ODkx{-hOXlwx*3DjD6WW++O^)prFo{n
zuy=RLZF6&DSOF9jQOi|SCGr*PkdJUoO(BDB_$pWpP5wK7gUk0cna>xS=Bm&OS2Q(4
z(i4AF2WGdUIZ{l>SZ?t=xZNr$aDu@jxrLn-dKqy?{0(G@xUgBC7w6IsIUj}#4m2WT
zuB^(;{mb?Y=5-3EOaVo4yOzTvEy3`rWX~Y9mSb25)%y@*c&yZdW53W!1`lo{HD`6j
z9(m$nv}JO56>u8YM{!`36rh`iyc4NPGzCO{a`YmB1=BhpXpmxg!Z|!V7`9zL3b{=x
z2^tLD;glx*wsHzO(W&H$hB3g1(o8M`bmQ>`4c&|*Y2oR(1WhLdR8yK|G)WNLG%5&9
z3enWGB;HNqKdNbqjhhw+rOD2#I4HGe#WJQIK|gw4DH<i}njl|Acy_!DdbOSLpwz$)
zC4$A2fW>|$WkXCbGll-wOKxPaHpAIbZ^{ukdRlTMT$th6Vg^4>bR5j5g7$L%%Yq4$
zY76|x$vZQ=JmuV$97=Oc-B&0S!59yV$=L2fsZV{#v`|j`y^@@Wz9tJJnek+NQ7Z+r
zl;b~mCH9}!@5{X;%~W6od!Dqo{}FrtBh{l)$YO<(`N{hB6DI#eDbl_~*`wpU>Sx`c
ziAsu-XuHWn>sZ)Km7s(}Nld8}SoiIkd~V9@Zd9V7j?ls>qMW-d)E(N=+k48`^3<U%
zulhn6+_+BuA}{B4!f;|<E1@oLIq3P&giwdi<r3wHm6+R2E0-uor5utEEjz7T!gXmj
zl%AASN;!8WA}$svCF(LO6>U9koC8Rummr#?$~gNoTK7q?6KSaVS?~pwDX%Iz4~C%E
z`X-;{4T;TErOPZAs{3M~KC|6dWj=W+gBA#2y5$IvsxJky?Km#iN(BOHsubm+=$3Nv
zz2YR<<v4mowbV(a6i@L@Y@OW5zL{=>b6?)H*Wa(E6jOvE2;G(gNnxNO&QuLm1q9Cv
zA`=jmG=QR!1f?d?(_jM2zbi+cB42(hRO=A4*kY9o%fXUq+DmD14>kj*yvuW;Ur=<@
zN2AV437VT<;w#&9QW~`z8-FxG>u?-OH`EmioQm2gQO#dauqgeQp*)G={Tib)!9Lt<
zm8?Q}+eLjs?5aewxW{WF5yYYN`q5U?9MbLn`pM0CGDM_b8-kJV?yXTgEE1eH6~J!G
znt*6RwhDAKcb;yg#X{-}TlR2{3Q|QGtCy%6`xzp+^wusPHSVDZUP8m7=oUZ`uv?dC
zmLfW$i^EP{i*0F!r&x;PO<|vZalFnxsb_lYs1YuShP(U7Yo!68lgwO!`fyepV_NCj
z!6geVCfmx=UrUI#$vE^8N=_BC?TN4Tz3%Slg{XNCO>gK`d7_qIrE`6~EC<ANlTT@&
zTDZMH>yWl~orNugDnFWtwEq`5$UL00Rl(k`+ynJJb-t$<K9Oghw61VaPh$(2jS8Dx
zLWGl1%Rx;Yo`?izOQl=XVp85432X|~O0_3<VyO!wzv&m;xY1LkHd%{(xSd*QC-Sm4
zKSB*61>#=0-AIHRaVSMi!By6eGZ`=G3|e7@3SL0bquq%3QOd9@`cg+sH_*I91uI#>
z(m!q6m^wg>Ul>k$>&!zI`c<80u?oY2#XpvNF~x3RV=(#QXboS`H+;k_m#eA;IXUS|
zZN+6W(ZY|eee6}h^d0#qA~#EE9axPT^%dgR`U=U(QC)@7*_m5k=hWCH`O<P#qR2+5
zVkMz)MfCwItoFgK|L%_8ESI2?7<Ca69pyRfoLXaDNrnXtM@Uf2IfeShV0fsU(z2<1
z2M&cw(#M2+>k_O?ID|x>!EYHIfkEfwJPS7%40nNNc;KtKEl0G)SvLU>R(qpItsLja
z=u`Iq$@AIaA>ZIYc^fUUZo_|Sy&{HGdqmC>sf2d1hHPFS-qLkI`ZFkZqClWzRcLXj
zcjBqoh+jmCr&#<gjmu8&pCz%j*vPW@_@AHh+ehM0yWXevr{hmYeRw?)kIJup@4VT+
zJ=v+R;ioo!!VjO?AwLG)p!?Oa$e~jI)A8M>_T8s%?mo5dK6URt-Q9ii?>+^0pL%zn
z`gfmh?>_DBK7G3T^wr&`f8KpM3ZOFy_VsJ=)qns0{$Ky=|Np=L|Neko?)*3E_zV2|
z<Qe`=DCNo7YB2df{<r`0{{tf$i}$tC*~3GMr4GN|5y!+jIKgO);zL>^+t6N#6Y@$d
z)pN${x5--yIWk_qKo%7;=+*5gKBlGXHBCvk*{9#w3L<fyU<ey;h&!qw#UoXv5a?;!
z<GaRK*L-TTX^pYN#L5MR`VNzw$kIL1#+v%^Fuh0hBssbc$`EtnAAe*Obh7r~6w`$y
z<wyz6oX~u|m@X1jdU5AxC(hG-LKJKsV;AFZU0Beho1t>EYWi71Hm6tvmLl^Np8LP<
z88!wWCg&R(HXs5*ay|qfT9F@v<Djli(TCY2%Sy7;<aY{nLfBhP88@pHXjn{=inzh(
zWuadtC$<mzi7@?A251<AWz@$Wpy7jTNhP6boz*W@rjpN6vl2hmN<w>tn313feR6k{
zK`g7F!leaRKq9S6(<nL3$*eR}_N>~(XeYjRPm_ssL^ih_QrA+V3aBQdG2-Y_)oZK2
z=}xQ@*Sa<&dv5>HW9{C+^1CcG+sGQwSU6;Sr{rkOQ)A?Y14k`F4BG``KR98oaWmOv
zq~^HWrD$kJ8mL-3!o<~qsVmHwlto2{Olp&m7DhLf#f^j%Crf6A)P)gu0ljpN=i36#
zr<{^3K&RlwiZ!}yZ#Uy<e2dDbo6WQc>y|WS@oxxFlR~iXQ{f?5(l9n=5QA9j<)A|E
z@HB5_U7xfil*v$mgi*Z-5j$aIrJYm^;Pht!X{8Q@os7Cng%t#>HguRe_IW0}PoKUz
z@i4M6`?IUaIpOSSMOVN_rH8Q$ZnsZ8xZW@%xA;4}_@4rJI!|Jr#J1H5@mc!@cua0W
z#8+wTMwY=QM4Fi^^MkHPEr$3ZWxs?a#V64yvg$=czQL7z2t%e2*__pr%}T41Njqio
z!f9lcceWhMEh<SZBa?^Age7UDu)0T%cB>8EwK93`=#LlO9y%tH8syjj)LY}q+$gVD
zM@Fl&7)^ty4&;+}Vz|wkV=3E!)B&NQD)O2fBLl5KE3D$w*)wd9gtmEkFgO<FCf3q^
zV7{BX1O#<Rb=~UK=OC~mM15vA4+^5<YFeEE$O$`uZ$}24@;GGV13-pcS1MkC7R|c1
zm%4j$x^N`)Cv7ewYskg#=S{puov4Un)w81ksXxcLSPyxzif>UDgdK8bi>Z8CEH`UO
z?|)W|DJo8Xen1Vn%Qi}<K3n`qYoFgH^P8}$9DvA|?Bf>jDm<K|AQ*ltH3fz2JjQ9J
zJT;ZDkX&o5@T34F0TM5)zjitzbL8XcX+~iH6H8Z$#N2>HrObG8@#o?)+@ty;`)gv#
zNOu=X5fDu+xbCEno>vG_k!*x&mAsq3ZF7bojn$*o(L{Do-}$`PI%ORIb+MMmn8D0)
z75cuF=}xFKR#Q~tLtc`Qa~_ti4>aeyr(`0RR_T#b+vcR9R~KaK!4|+DAsutUt9-h<
zD<RaV7S^#Y_PUiFGdYhaH*%QN>gbcd6M&bll8wz;t)ge>rETD>vzUrm?3|yd7HLPz
z3si4Jlu0y_7-P4v?*L^+IxxWrMiiXjmbF@W1_!-m-&TEybu7iL3a@l21{Aj-h_-y`
zNtACZ;UgB7`X?Ui(xHrwpM!EOG+9)eDAyL1YEzZ*+mWu5>(^fk@*Svpy@_QDQKcMA
z)--;e(2&KfjgTi$j>dShhVe#C)-@nY*W|Zq)4T4AZEPCqx+B_>s@PU5Y=~>rx^r@1
zqL@}kteu4vnyo>a?s92F(k<LQjRXeJ-^eCQ^u`bkR<ny|^utlZ@eP0A4F?+Ycrls}
z0~!pp@JgQm>#ckWY*;7{ilrs3j+bTMVf3tb%9^z!;Ih023c*(bLGb(A;g3S;>%dU(
zC5W?}ZnH_aPl3<5>Qg85`3?&&mN19#S6~l9_8u!%MZV1nc;kmX^Eyq{U{lc%*0=<k
zy>n6WZmBE!z-}|G+8XuMS(P1~2>PF@q=lmD=t-!3#1}Fd*TYx(6-0T|T#Yr;$jau-
z_5PNqBEiZr_(l&xZkC$*zO^;=WlfvKS2Z~Y=JR)d+ZL;v`|_|x&BOY?W_`kdim6$U
zPk;j}?4&{rkc>fb77@s#4$_7;fEO3}=Hi+oI|SNBc^{jibnBsqcXgwgvt_WQTr_f#
z0p^8DAI~uarDh839u&T8z~Rf%-k?p6_1thl1G3oYVtASX#w9|XXm3GU|JLW*T}WR|
zEzY2kDXBXQqg9!pN<ih7*z4U6F~C(ZM3u@_ys2WuwHWIjD&N#Z6dEF<r1?eRhgjvN
z?J4E=A5t-j5*-*-`&~%jj!%qZ2e?ZKlh4smM7#C$11|`=l%}IjK^n4-LQDm+Tsp)u
zs6>tI4t-9bPz9$2#eTu<B*p~I9+(ifbvHqGurbF28;S-@d3d`MdhrpRl{1QuBxF*n
zwNn;x7#WemP92?~lR~Hi@P`R4WNoOZv};nsvgJn_bX5b;(q@Emv#^Lq-HF+f;Y2O7
zyUOpU+Z8naOXVck%ZCx|toKw@u)@qX+p&&_A_ilo1-kghCG<Xb)z0ab-KR+!%V3w}
zvIqZ$^Dx;-!tL+r7xt;P)gy~YQFFumow=V(W><aVD4eo~w@qKtdkwBH{UYVA0b&+N
z1Ru4Y%cN^kCS5ZtGCbaKj<&u;71y}S>o_Tl<R~$(oJbm_4Q~U9i3GaBa(z;pTsD>{
z*;ulV6w-tcEfiGzi|MH{K!9^8+ma><HFmKQ*O6$uLX2yNswNsQYqvcVqdCo~gnzL)
zicupPmG(xYN8q$*lK#auDaufFhy#+BIZc|Rf3ZmliBoM7R~|qQpe;_bI{9~6PZflT
zI{^EW_2+BLe4%nUl^j-#987-n(F(PmkV_EuPNzqs#Wd&KBr*!b_i)ZhqSqkfZtfA;
zYwS6IWXVMR!dz{1ir}+_NBHI5{#{z2TJ6XhymDytP8>TltKyL>94ktk&njNv9!qQ6
zhm=&r?N*GfLqKEm`jCDFhxE%NSh%I}7Am+OTNkItSs?Jk8os!(ZQ%pE<Vgh}DPhI(
zTaq#vAkaqdE3Ao-ymC4g=73)--QUn?7?A3Qp5Q4mnD#DaW8Ss+S@u+SOY>WquK5F2
z{CjJ~aeaPFYjIqKjmnD=!{wsqW;z?rsmuJFG}hXvrsmU@RURgJ<iYpMyCjTE1>aS6
zh(BNc`0@k#8~qbG8UySnzaeoo(#=WA!j`%ixXXm2=h{(ljl03DEQ!HrxEaZ`WN(zO
zF=YG0x>zIdswjuUlEb5*wH-7I8kYmh^D<L)OVVzAV1<p^8W&0p+p2a|OczP+ZlDV3
zzIO+})cu(H8G{)6=u_R>)wH}bYnYPAn`d#J1Pf^e7No2?qVH_1y<0&hDLLr!FE$?X
zBSy6~>gc-%!`?495GS&UIH?Z2{rgWWZOQZ=)365YYYee4l?F=+2}cIIx;YL=y~AMT
z{BHYgB0tz9BA!XYV`8L{v(rg5Q-sYD7G{PbQTWTW(c$3%y-1V(-lyItKkOgFtm!O1
z+`d8B!vqHEms)*H2SdFC(gxj(`@=Y^x$~C2%RX!XNS^ul9E9{2eG(f*oe@SRW7Ga2
z`ml?iYPOdaI$4hAXB6Q$DUWj$C(uzpXFFxNdO+`wQ0>(fA)^O5wrEQv!c5V#NCPld
z{;=e$%3;uKMdIE{XK5TWQ~GZ6vh8X`QCsM0@{;M)+mW+}LF$^>x&noyhUX0M2ED6P
z0R+h+iC8gSB@_Em32l1%5q*V-B+|J$#(9N!p6rp}b7*UI+i2)r_E{`_y2=@oeqE(M
zFbY(MQxTP}2dSgN8o4?9MeX%N^#4(4&tt?VmJ^EHU*_LdFpH$(!zCJ?CKUHtDilx*
zYm4`+>qLDmBrM0&hhaeE8LlVvC&-KvuqkVDV}{(xK(3t3kVe`~_U$ej%EOZw-h=Ao
zq=)_Mv#M1VR~4N#G@6wCCnbRlKZ{qI?jwgm<IycvV??y3G(4Wb4$YYBc~SL6kG?CX
zZis$KE!vR+!m!^P6aibKy}QFm!02nqnj$5d#G`E~bqun4^%~9BN_`RllpHJZ7W|N+
zvXgN(Z|Ur!YewY|zgP4zOtqh*Kp-Iov6Hc+Vve4Otdd4OTR9GphJIQ+Ob&o*c_}VO
zAQu(;`YawIXj2y@_O5+FiiPknKVJpiL`sp_xt)@(qXar_Upza%_^`MpX1;Wq%!z1{
z#i__@BHbU^#E>+L@Gn+R5)PD9Gjo1oa!pXYKsotI<+iLoyYf>=dMYX~%(_^^h4D>~
z^q2DuN@V(;Q4`V*{|dHe^*D<cU^R?7mhTR{3jfWM8lcJQ3`40Y2g0xNbuTq4Z2$bX
zW8}s41&>*;Vtbr_#!h~p`jf=?Qq9qq-O6a3HDR(e>m)6)PFzgDo_dF6A`-R@r)^te
zn-KG!DK;PgtL(Le)nXHYUr__7zzrT*0?B(35H*Ml1^*=JIH7Qb@(yLWQDUc%v?w*l
zF);l$Oq4Iu*mOSkFsGznk(4&j-QC=f*|Hh7YW{L72OYtZ#`>1*Wle?0XUGc-TR}FL
zCE18*X-u%+zfA4B!z56Jms&Z%hO!_asveGG!WN~NDQu*c$Jt8X#`CLWI;QaOrh{(c
zZ|Y@^G+(B0QoB9aypmC-8Y7n&|I(VL)p6xc8+mykB~3m@P_u`iQ$+@(=}4l#yl<Qb
z4^2#jNsNS_GKKT$MJ|~vhEWY9(ADuGV7qaUkbh$bl#^iR2$M2q;+iokXE}P9CZR(9
zHOLVAOY3HI2Gky-I0IRqgS^?!%OjRED7m(lH%wt7rY6=v(bJI=W-9!PGOwHA`2^@g
zzYcVZr}lNZv{3J58TDQw$>7{SIPdXvcbOnD=Aw&8w!7&vg<LlxB^5-d$6q$uL(-?5
zc61c|fQru%`hHSNJ<yAqF_$_gw@FBj;<b_Wl_!gPxrH`*o>#D?^fZ?`KL*f|6Zf5~
z>!TqadB}oIvCq@ay#y}D+R0UPn1PmJS$?xKd+Vdi>}X<Z>XECQc(TW#PFJcNFA!o(
zD4tm;lRi+2J_f`iR)>|&z!6<G%f%A)W2J5w9+T?rvX{mlut3{*M+>Yn)tllA?1_@Z
z;PB9rk#~_l;lP281_I$cGP=FxJdwiBP-)q5oR;wkq951;hlhV7>4dbq^(8`wo+P3M
zLS)nem9+}?P+Grb>ZKPoj3j;M){Qr*8!unUTGd^(sP?EsDwk9yEqkAYLRcw@&6jtv
z;lG!+<vu@8-34<kQ6Bd}@-OYVVi!8t3CVLAX7}mGk7D<Jbi{aR09d{=*uZ8k4sA8>
zA>BnIQt}qcJ#gwM#;zD~t=Ed}Hk8{^(qrZTh>s~0*Xc1ldA5Upbbg9Xz+fnLDo5-}
z0~yKW<1(333`iya&B<BcE*g=$U%1~c@?w*Wr)z?v^0|$_8Af<DX)z+h);oHza>{TR
z)UyF0%S5c~#4z0xOhj$c%-%PdwJDWSc|uVxaD$nS`sPL7t0HlF7SF8&IQ%>D)5E)x
z?CTVDMmSyZOYNpXH>sbKgytkns<SK_ql`SDlb+(JMtNH^-h~N&fd1D91LncEbM*78
zDwg4bk4z}e(s$`*&rL-uzSF<Lw(v}fWg$p@g{y5@XPNkz3Df`5`5OyjG+$*Wt+>lJ
zyjYCl5hbPVb?;On`YO0zUl_21NflxshOE&}?s+&G*$-%H!02OEMjTV<+@LS^oE6J(
zFYlq+9UQqn9#x9*C=)!G8{OOb>9=qInn|aFd+=UDUrn!uDS1D}Acp3)kdEQXcdSK4
z?z<|p+N&e0y((oN;IfpcGS^J*?$|?JNWAc*JLFp(6(wt`he7aJ5OwXa=lb%s*t16}
zTQd|L4__tsoonnTsWN9dGu%@vyWFhQDwF&6U92lT`BJ5ZC}@=G)nA;N)zs}n3`*Vw
ze}4?YKAm@WD5E}+SL_%qI{n^1!+r}cFH}*wgVXpb|9q#yBz$!&{!uUcAgi$4(vcb%
znk7FS@J{FJ3q!UPc)g|$+wkW-Y(pnLSrPvgPL@aR%qcV%z0S`^2Gc_JqEtYx;V=%F
z!$|BshvWB?pWD1?<)TFKn>wc$N+wi!TEl*YL)g$PLK)>wvL>Sv$Ix}wula;IOf9+o
zM~~D~7#j*VySc>Uc1-Wpu+qB9ck?(SAEVH%S+KqyW74ems1Iv{Q4>5~N-xxJ6ka<V
z8tc^=1_3+i$k?MpC0?rZ+hqr-Xd240RgJf|>@Ce~^>@nD2q$G20M<?YprF5@Gedja
zfFM}I9-4Nf55Q0v`0N~hDgk(#aMg-fC3;r+1dWD(9*w@tD=ev6HAaEWEM%K=r44>y
zv3C_8mfERjtjeC4y*$*s)uG|7%FWH}Rl}Q<D*V-3;y;}``SU*RB<Zn#fjjw&)pJ`5
zN;)5{RfD=mh^tQiUf!h@FAu<mVQiUBSb9;q6E%uaj^6ga)Qdq~FBEBP`tVS;s$)0-
zKxI$mA6Hqmewp~dCLT7xnade9y)cYh-G^VnyLCqCa@p8bv|%F~Zkupext`6*^+L}u
zay>j%HC@&m^oHs4!@279UAAt~8qRlNg@;RP`=p%nIumIn?!y_C9mYMYs%YsF_r;Df
zsNsL4mEEn|I!ET_$gn$S+H*FA=KDbhXOi}*=FYLaL(v_t@?wm)7JwOrYs_@SDZn#k
zCKBmoOtGGT$N;cLkBU8dd3bm!Ns%W7R8jaTshIbceP*2~aVrMtORGWp8d(q+>e`GV
zPEaLG4(<!U6QlGbFsxj=kP0H5AYGnBx#6Sg8)e|<+TDnBtaTs7@&iWUiOv#?5}n<*
z(u9kg!4Lc6sSsnH=;0paNLJ-&0A=sRJIjWlv{`Kdh2E@H8AbA7z++inXrzYaG$bMc
z62-`;%KiLp%BB=!UaIiwO6$fT^~v|>{?(Chs9{BD<!Uke!5R#@h^KAn*;a~xN@X%s
zJeANHD7#%=A6+i7vwQwU)~#AR#l0my^nJ)W!!3pW!trMrZEnM|0EPSmzt^uA$c^CB
zM8=PN>I8WcGqDtxVk<V{+QIhGvabf$&+4rqYQ_IBfEki7%I@;gkT1*AOR~FUC9Fn4
zCV`M`dpeD_kiH?yXbwdVy$!cJk#+rRfPE8yD*i?w!7~xtKwK*r)YVVDt@PJ+csP?b
zwm}f;M;*m_Cpns~>4pKx+_nq{hm0G3Ea^ee7r1D;a4(~bKZ}R^@Lg*s(D2f#6i5xY
z9--cq(c<hrv^a~dAE<9|t#M-N*L6whKy~W6iZJiW7&9(FdHYikuo^TO!{nmm3vp=_
z&j89y>lXTKy-P1aR9z#Aw5)T~Y`);Z+K>u8$SBMY;Odz^ka?VSnNydMPL|YJ%Vg+A
zsn3>4MXnth9Tl;2yea0^D7K|FkU*M@aBb&bA_pX?(d%n%s0oEZHcChnQbJ-S!;YA7
zICU-7oRL^l25+L3#nQcDUo9wR?@jyWZXui!I+o!T#1ux6OP&?2EJo1_bK`d)Hzv2Y
z<iQ{n<kBEvF9uol+Tso3V14Mw|5q5FFl?%~6!eX%7HWDTt5m@U{REgvXlYoe9zC2E
zxTpQ*3l;akV3o3d3pM8f*COUXH9ioXjvmxIDb=y?OsR*_OVE8$wVUi@+U}=Gc>peP
zU+XU<DPit<t6c|+;f5csXK~+>FsM~qJ`+y-k}%~PbyuB;lAej~)2~xBsh<#~YeHOU
zvkmJ2XBl&#-tjl5<O2o2QW!0<qCFyDb**$?umCob5?X$c!5PANG*9<`M>o1kfUCbZ
zScL1;Q{~!nD3ag8nn%1ab2;+Ln<sR)#*(lL;FV&@_Cv$(Jt!GIlECZNg;D$R#gkeN
zNVPjFwHZpGRQ7L+FVjTt5lfUX$*FySPVZ|>m=5X{22v}yfitn>JRfG)3c;vk#BhDC
z;E3(QM!Neg6GK&(gFa|$jGjdU=`CX@AeGeLb0QwNRBkX&6}}mH?Jm6}1<63tB}C3;
z*7_D|=4G_3pvtOHZPZF42t(?S@sC`Bf(&0=_x)}8`(+C!RE)Ka%U(#W{t?EGF&g`5
z9bFD3eXANtS{@Jx>^w|iUud2OXxYbEBHjEV3qM0ofj}amF#pwjUCc3_)m5Rs=lB_r
z1A@P0($>tES=amK@PPy_+B`_nMNy7MU4bdX-l(spHmaRA6HEj1{`x6;=nT>FRF~w$
zm_U+y(tB>qFPO?%apx^v7phc6>w7qT@91tlIEMZ0&K(Sy8<pVHuN#vU9KJFrbmaP5
zc@}4hFG0~|`^pX)by<!gRfRvggzb4DaUC&ecMizM1nhobJ0Tm86EdU#jjSo{6(noA
zyF(p3<3QC)MiswY(}$0h{lGy7U5bs@It~ww;g$7X9RdYy9u}x(4micZ37s2DBd9?>
z%8YAM2{|oid)DzK4T+*XXV1sTz3XcCOTtMf?IyDPU=mG#L=InFA@W<S3!$RFj_icw
zV!}T;$t^SVGieD>VN%%6n&yKe6xB=x41S*!2m_jt`G^wtN<k2d<?1Fwy1GlCYlnv<
ze3OBk$7|mU6+6yiQ<NPWq|)f0_;fIWESVM4^To^Ue3-1p$vl3I`~RydewA8;YN{!;
zC?zI>(f!x_CFq;+pP<<i=z58`sCFWus&WVPJPJ%hR$$&@FmNtt><3ib@@mEO55mDB
zviVZ+wmZr?@A%XDIH<R9mqvY`+WF>FdW^;-2}jc21t#i&+;0Ql_Q0TL32<E`y_w^N
z6poA4N<{tFf>67+OAT%ak5H~0>nhvhiAcMd;5yJf@UK>eVEqS*$6^6fMS3*;1xEva
zHS!r_mtaN5lr5>)Wo4>4LA{HIW8YGB)pc%QS?vgvx~PyY<h7P_lHi4f1*GK2o*=}8
z9ud@tDQg6dNb)W1Rn0M$Ed@g902n!1z3+t;-23w=)xq32giCaWK^UMUCt5M0<OF$w
z3|-N5Q@Q{NbPQlil!XdDGuD@DKReffMZ)=F<8w5SZvsd)8KQxIW8N|HLR&{v3!+AG
z5D%?cME7!4xBW)JZz{dnleOFA@DPem?kUbr^=pcw_a2*`0z|z+ML^mwr2Ibcmu_g2
zv>bTF3Uv|<bchWxbc^L}3ig1j+Jd|->-}t<m6KqlDrs*42EtCUJ@#uE*hr0Si2>V^
zuCyG)Nb;1$i>AF{A2QDP=KyXC3_Y2-Vz@%6o%f-zKj7q1v;~Ta2Uu#`iJMm$Dc?cD
zpQGHd6#GR9Uk(o&&R8nij4I57*2}Hd)l2>`NAf8k!%od(7v`pvv2HSyII1+;%46qT
zH461-!x84j)ZRCED$x1cO&tp*bKOp|-@xJ?Dl)azKL^b3MI@N6D&)HQ17UejoB;N3
zJ5vnjfi7k6;ql3T%<EVIRy1o%=9R?f(0y1tD}GX<%(dfGn|st^E~u=Ykw51yKA?84
z6`5Q+_4-3jLVY;+8ljE7llDoc{piGt%=+NrQ?VK`n28;?k<7+#E3^;L`ihJ)MAX5F
zqMR6GRkdJ@?^}SC?5<C;dHF>eEA;xpuujz%%jAqx)|>*>sRVfBor%3zuQE;_=byu)
z6T1g2Rf})&3wHvm{iwp-2pt%PUsE0$9x9a}VS;>B>`B>;H_3dPOwUz(9C49in4pi)
zAD9vyoDGM~-*wn+_4?6%omr0@%7tI%=Ogtnke(0eoT_Jb!TlbNuO3JP&M#?<$&WHC
zilOAAnsg4+wMIay=EAPrPWtZqS2Fc{yit>|Hlts2Y)|X?-D*6PE|X0h+xRv~%t#F*
zu-EIr-MP*@RGf9WSg=jVwFZ|k(ICU#Nk=^Tv-oodD5(x)Qesq@(+UWsQVd6dYIScI
zxym{;CT@2-v<~fb70DH!d1F#G3~ERZc0^7}P(FhAMTg*|3Uq8)Izvt*MNTpvdFXXP
zhfJ8zp88D%vc!B1JESM)P(;47GxdpbV=byQH~61PHIY2){nKw2A4zx953KkcPyBA|
zf68zFxC>f-_ux|=U^EjB#;iagTxg@kcAd;~bctDxSExE*hmSOAChnk0D}@$R$ySs_
za|~6iQa6QTJnFP^L{Mk+o7Ih)f$u)Pd)p>L-)9#CN!yM0*<IrnSU`=76$&z^3%G&g
z3sLW{HpR@h<L`Q{#9(wS58km1)&&i1MyOi~#9T%claXfcb~`}+%P}h}<0*0{$>s%>
zLMY%Mf6I{8zimi@W|9?w#{*<tt1-g;y4#6L2v2zrI6Vvh9YZ}h@eO4**8$Z@M>q~S
zLU>mZVc}U(9Vk!M8#cTJQhJ<(w*)8wzXULW^?PA6foZ$K5WSm46J5+oGnZzfGD(1o
z80eQv<vN!K&1;Bq3s>W6y$L<~ff`>Y_=bOh>|4J@xA7kSg-?n-8G7mos#-svEjKr`
zB9L*>M3S+YTqWZv1q&Yo2E|m`n&6v<s`MB>_~PUF*@yEB?B>Pux6dw`i$U|^{N4H4
z>x(AbHvrStvJ5p~3U;ta2eWrd85x$sUiAEdd~BkwPxIo<*^k)LCYh=tfh_ZWvEINH
zL0G`EA{)<=DLrd25(0J!vtn)x>IhW%{O$L4PvypthPg0<{N8T2Y34M{_RKSXQ^=6|
zRVnWg?4g4^bf*KU-><l5|0q@q-3m-NF*$Hzq%*eWV6mO&xX7|bo9|yn&;sGaIu4~6
zuVFc$lGpLG#Vquu1GrO{p0J`6%g=5^Wxxl<2ud$lFo*LaLjuzf?C`)=!cY8c#dQw7
zZ=augLd8esw#cG1^rVe8j5K=b8{{Cc5CusX1HRxQZDaj<bYfv}JwhIc)CL^F!R6E)
zsb3TxhXFaOXxctRY>ioXf(Tz?L<vV-!oheu?nA&luO9vSB39*2l@`=i!>z}STP+U>
zZ!LU=@f#bX;glC9h@-@0_|d^-I7!1E`D)IFLZLOrVo+%7k+Bx@?xJ1>PvNi-GUy%*
zLZd~z2c9G=9ug2FKgyYsTasUXQZ*P@U4uHn_b13%g<`i7|9VFx(=RqkmL{v$#b84z
zPw;#y^i6kSXCtV|Tu(mYm<vVfXdPGQg&hh|(yN@V7lX!9amIr9nNc!)E{U74T%#m2
zqaukz;nX13btrI|{>O|CCjzG331Dsa)J-cPkvt(bT1F|=_|}|W#^ET@LG~!6j0TuQ
z3+-_edGyRdL4f25X2>W~3&*0KaSZAid5r4WVjbE?OJNzfL#%j*_?|4@Eek|J<&*+g
z=I#1Lki5BGT%_C02D$Vl1gC>5Z%&RoPTDIa0ivi#-$eDwaBdb!7|A4{Vi9zb15Eye
z?jysw&^{kAFl+^_c7wLl1UT149f46H`Q#M<n<7Nw41VQQQ`&P14Gs6gMHRcdD5H07
zWNbS@ol_U>OErq3Xff+i(_cKnniVf9>|h+Y>x;GO_Fp@hBi3B^<Qw+e<aU@`u~dR>
zs^C9m$Fsk>5mnA@#j4-<stfC-6{STGX(?H`)J<E7GSMivqjWd*eTIHyjNe`3n#;O)
zx@5aMxVvLYrJJ^LcAz^O&wXsGcAP<Y07bILxh|KZM!lAT%VXib+7yB%4wV4Hh&t6i
zh9#o=kO25}3xlAYCB44b7?NU}pa;aK@hu;H%G}7TEx8>}0eGeBKON_rBgx}CPT}b<
z?MKI}qetyW?LQx{r;zZ+_KAm~)88y|a_LyCfGQa9tkPNJdxV~3n2lRxesbI?($a$`
z)Y?PU;xV8#t2z7hpBBR;y9sag6}Th6kt-URLjFi)_X&*x)7jQ7L@JK;cOi{p0NmyP
z)w7M&qg#_@CoW{53`E>)X?|E1?~C!-a;%BB@4kO!9ptsl7;66L&gjlQ6}JfhAv)>^
zTAoVP7D33`8s16B$=wtS1as6)nJzOgXqjaiYbHajn$`JKr5QZ!X<IIaz<71=s-_s~
z+T^PDPup_!H5G{CcuJbk7-+ho$3a_1=e}J_A}?1IIAEMA<}iByJYvH?k8U2dQ0ViS
z&Y8Y?tgmMov4oAYQ0p6<DQp9_W-gx)=_O?1T@I;>+$21|DxjqT{z4L5jgn%_4XdEQ
z6!@s_TKk)f+W}uC5^H~y;n5ZKYJEXR;hwx@ht3x@<R(1~FEst=<YMSlA`b0Zbh5<u
z&(>K;q1>@fqEs~bZ_<f&5n2+ZKUitydM?ZaHyp8+TkD0r4wj(H%H?KY6x4jy6Z~qv
z+-``7;c59u(83}F>sDz^Uvw6Nk=5^*?BtO&W^G3LrgIZoR?UdXIu8NjY935>^6YC>
ze}mkN>Yl%(aq}sXFF1JsZfKp%E3b%oFJ(QOP8ZijUM^9StY=pyy~^;M;^M<cNh;ts
zcvFYlla>?jP{Rp<0s#vH@!q8X9*E)(>x^Q0-cm7)gf~ZK62N~90I(<bfO%1sQo_UF
zU07K173$0XoX{&|bGZ;-?3*m;_VEj)t9^BAF@2_-7x?zDDs?@o0$uFqL`{H%BH_QY
zY*ee$@+zsTQ#e=Wg&Uo(!A8JZaWXOL5$Impu+}xxkPObObYx(*70|o8!x%kid=_`a
z#&$I&Rbl616%X4rkX~%#Qg8<79%;X~6G}z5B|9gG-P|}4zCN8(5Ibt)D$aY?eK+*y
zm5fI9nH)`dE&mF=(G*jRR6oA*f|hqo9;Zk;f4)GCf{p)KTyf;T+ZnqhUdC6^XXITg
zv@MeEBd(P12tato%k_Beg{czte|?G;rcJs@W0T?W;lF);)Oqxm==2!BKmI!42uRZ1
z18;+H7EjvDq>Vc4Y{>r{1AVe=#i(|$atrBg$mJA?Un$zCDNFm6%e_^u`D1cuj5>9r
zqm#gC*eOeUl*=ND8p#s-I;-4K%;KvSe2p>tRoB@T3OVq0%10wrhKrXx_Qb76)9Hmy
zA=1QH3J(?Hj!<Y0P#5wfZAGTbPtznVrd~MhT}khAXgfDXmmik`ZZ<Md2|tT*9^wpS
z#v8pcF}UiQT1ohDr2^iPOR|}>mBc?1*h{y(kHf1SS~#M=c#IK+A`!JQQ>m$QO<Vq|
zcs?yq`7JO8de})N!<eEFW8+gX!f^Zmot%A^3IMt`uV)Q0_F9e4Ee{Q#VMs%O<Gwdo
zWUythHx?LS7-FNUy-LtfTk<B^=UU5>V?A}zIKyj6M<i8?-{kP{z|k+ISlI#kug=;V
zv~Dz!rRW5vF=mj`F{6(sH%STw$LqJrTk>T09vy?@`W9Yo`wtlbLLC~!(O|aOH<0@)
zI#*MHJLBk{`FKb*+#glbeVvlUa1sE>nGM`9k$6buCNUA-PCZ$-oUeZUevl-}E#|C~
z;L^M&VO<Prqh<29RG=!Bet(uwAUO|(N>uJ&tvMto19-HaCN&NbrMWrABSNiQ?}*L6
z<z_nqgda62Z!i{xpTr+|4KY@NYzCFGSfxfcoZ$%I43?5}O4eKT<eS8%7HtaemNx4V
zKyfd0^&o3EJ@0gw5#3uDv*689sl%SZhKE2=_RpF*9e&+I@L)S@B%=qYn<xJM+M)9L
z1uE63<@{Y+<R9AYAe|G|drmn`yGJKs@;L3DAp2aEAPQ)I5iW6rMPPG$3qaMoA9YfE
zhKrh@#wJR9K%VZ{0E_(GIaVnHv<+tOLId*Mo}rsukviIVS=&*Tv6Tu-dWVSETiSLc
zwu<9PujqG8fso}`ZaNVWjZ#ZwW+HyR#0aC?aqTd@Q^1jq9gm!{Mnh1j3(rqkU2VQW
z{b`kmbs&~gTM3dNG{92Npz^>)$$r-v|4*6S^5hDsHt*r++qxATa;@GelXG^5Bq>))
zD!m#Ku%@W|QXN&p?!KZqYeuH%&${*5G2TGoPuu`Aib;GQtUf+OXmgm%mXUQA9G_C^
zbmJrvU^*PSi5?|hZWovg;4iwAhc~{RmsO0)-h*!QGG}{0_kuDgJ<weqI01=Nq7HB&
zqrG$<54v!VAo)CEL!B4XMFJQa`7&T=J<{mRD8&yL_GhyoX_}9rykcTBC+Qm1%tyxD
zXF%@e265I+TmIl^6j-I&>ut)t^B<98J7wb5@^cK=5wu3XMyINg1g$~KFQ_Q00HN+_
zmHV$}Z<Gq=lfe^Wv?Y{5vmtLU2J`2i@#SneegV~m?^6M3Pml+Vf}e1k;5$Bkzr>p`
zT&604WIlk00{wfFy17V}^NUV=#?HCIE3OQ-JaeL6(mTJrTjEgG;Z){9CpY}%<M<cE
zJ^q2|Qp$fW#i`5;PONGu<$Pg`&SfchQ4-i6FzMT3qZJFS;>-{Jj{ATnCYHM4jK-s_
zd)_3=@FkTjnf-*XF;yXrDAi0h;R~u#3Z|biKYWtP=^*~`2l;Zo3Kx_a74y$Y(#*rG
zci!ekU16uiPLjk#b%plK?K6Sb`rw(cJ;_Ub-(aU^5Z<WoFEHVwl`yBFeMEbpcj?b>
z7aL}3ze!|CR)NN>FXrL7EbS!zP3FW`DNldP3x&2l%=unY!ZUKC&jY%olvmnyK$xo*
zkqgbV+d6#B6_Iorru(mn-t)x8Tu|q657X-)QLo`geEPuK`+K=wa^t>4%zMQpX?Z2%
zu23ELo}?V-qjk8UBq=4pa+1xxq0;=Kh2f*bN`y19n1xSM(XcYoQF>yP4bSX~Xp~Z*
z@sTQfzRr?m!HVAJR`s-U&(c!oh|hjaseHI8;oFoada!ttWUIwGd?^!@Y&;w%DnXCs
znvxt1l<&)PAsO@QayPV+%4hn590pm%-^*24{QE6u)(J`g`dz6A@24x?wZs{wHJ%wj
z00&1JT!e4=)K9bR6gtEUKq?gL@D&v}AFUP})cpA%LCgHASZ&Uw#?Gr$?g)4VavD!%
z_?=37lYE95;EN&rEBA+9p#Akad_pUaH~tGY*9w0WG9kQ7)gvh|zR|C*rFVnyr$p!2
zplOT#@LqpVhy*~vUvwgEjMrRWa#gU7!5J^+B9S@=Z&P`UNnh#3YB8gcJ(1al;X8al
zsQHGD8=zok%zgPsA}5q&>98-uXLiDi@d{cqI|sFS27o?=KO}q{r8x3$d`?M|jFcW;
z(dWfAYVeQK?FPp5jt>A`hT&I<vydgBH?v*_^LB1*bpe(6Djt-QwThN8!zkr|_Lxo2
z>Gj6G+U%1}cXVMi?@X3sjDFovroAP;f?I1Z>D%!>+^(QJvC%mG=Ah9uio4Axi^T@e
zm1NocQxlPcA*-P@n*aTOf7CfSIf6g`-u$>+-MlICangLf$(u){SjyI!?Rl{|M!TT-
zx@dfJ+(6vxtDn~yocmb*A{RQ6&u#d-EMhAG@$pv@DXI8ob9hmF7?=UT*i#Z13+_T&
zZeySx?WJ5tAIbY1wv4QUGBF_+ITHK39f!HN3Madrem^>agsa6kZvt(qJA3x=<M(f#
zUp)W#XS7EyrM`W4@%HTe)ep}v-kiO^_xs1^=l1uHuim_W{ruv^hj-t<eRlEw-RqxT
zyn6i_b2L<zynuNsREWK}+8;m<EuV1`C+1t#Ej%vP-MaLf3Pz9|lx=|z4<St!wi12B
z5P+zIn|E6TX10dK=G*Bab=H-9ZFvi-!*ui-HUawF=U-9zzAmPK^yA;^w;?rgc*wsZ
z=|@(aoG8@+a-&wuL|%XnlWRA0!-F_}Oqjkl+TU#ej9)iN|H${ACiD4X)5M)BTWiWr
z1d%mb9%^Oq(rvn4%H?8u0~mUFvrD)8DY_(gtE}@`P{7a%J+z|}@>HN)8B&lz)b`Hq
z?kLI>#TCsc`qU1s&P+LsL`TsN(m16U8wV(vVE%1-cv!#v$ZPT~(9DDJaJy1!xYw((
zR>`HE5T+E<xIAv(D_fZ3#MTF)?k4uGG+1gK@L;#rn5%sSWRh2`|Kj1_Kf;tX923bp
z?}|J^49tYT?PQjB`O)ur%#HC_IAOq^ZR2S1wft1bZJaMMGM5LcJT%)@wOD*!!u`7L
z&KCK0TD0YBDIQEp@pQR9SVG*cHb}?yjaS9x7Vb&E+`WLRXn$pl3ekxsit%*6!o>gi
zZ#cM`F8kH}sa$2+U5FBkUzclrW^tRNlKSb_aE`t{{W@DrkJhuJlSgO*aWu=1{_^$o
zac%P8@#9LNuQ#ijR8{8BUytjm`uDGwj~{!Yp>>wLR9$r*h1u2K^<2%Gd(={z`Q}Jh
z@~5&61)R&7l5;if7wA_-zak@i{)m;cn$8<!Z+@Y!FRH0Dvt*Uuul<7>F~!k%Q_OHW
za);B}HZtnA9<aSNr{YRni<wxd3l<IFb96?60=Cb#UH{yXqZq;UjhkK-To1)aY~qeB
ziZ(u+#58vOS)s5MHm+3E_u<T=|7@wvbe^mL9tRkyR<hi*eoSz8H=*JB0Y*o%MBMs=
zlM3h=kOw}_X5mQ@xC%mD7!mj-;2)O?CJ*AgcPXPrD-rl02(~bufsE2Siiff1DFODN
zD!_)%N<{5Nqu30fPEI|H=SogJiU%#fb2=kIK+_C+kEEJPYDx8j3bUx13X-Ur3e8Se
zM<@3dV<|NiBPsP4izzwv5Hg;KQ9MI_a@S+wEb{r#*Q}2I0L$;4PRF)%`g27(JyKHT
zt2(Ljpqsi<<$;naOFnv{<lm!JF$leX^D4sbbdRw627~&z!tRX`cBe+AL8#8thC7;$
z=MztfwTCu8K11&esB74EC@g=eCEbIam<G|N)!NyT?q!_#Qz@Iy9wh1h1qh_APo<=w
zo4fP%>2|90DwbNC(K~+pbznJ|*iOAbz+JZFfXAlsvS56<M=oyrI#u)xFDaT^t!&zc
z^kyX`^B16G9(8^NCF9!;{{9nChAWLS<o?y~gECx+Eo^^43a&KDusuB7mQjZ7JtzZK
zVWAAUzXeEtWupxFLr?}Fr^Hswfj*Tf%^O8l<k+2LKAr)bN41R&hG}dMlDv4uNKXh*
zGLtYGIW{nh>2#4z&_^<PZ6{YmL9o+x|MKO!-)%ShDyQh;<+`<(o#qqeA{ei@8C`K0
zoHb4{LR_02{IsP)_ubvhSaiuWIhEuhX2o)AlF21w@;WI4<mApGiRW<dy?}q0@r*8J
zS(jMF6{U>>LVRsPd8MTqRs2+T0|OVj-H5#HoVRc82D}FR6Uhe(tz}+w%L64RDxLOJ
z#WKZ6^o~=>mB9{EgjTWy6zBXZA=aN{P3!nJ--P!33)Nb$FW7_UUyB>E-a|{{^)ks&
zIeL?Nt>*ymxE4T2<6Avs*vF`OCR>JYW;WWJWY}tWu5`3EBSAZI2QJ&VfNyY*Y*FDJ
zCsohD%FsIoAeVela}9H1)iXrHorXlA?JAL?1`Z@P5;<=sLJfJu5)945y&hgGZ7IK0
zG)$gic_je(i1z~)sCFqch!uvoZEqIC;Z#aep-u9vdC&<<;nM`n?f$-*^HU#*ofUK>
zS$rg2he`92HT2d*^vbnURiKlz(>%%mFDuaQgd6Cce1m~B(5t*oiyCQ+$);p~$5RGC
zH<{;h%8(GI`0lu&`8#2UrGc7Fx5syvv#WMOqCO?9llmpgeGXMxzg6WLDqKp%*)ZDS
z<>+%l`nIxr3MU2KR4E@-lj3H(Y|Enq_l7!fyaY*U`IOgPkxH+8yfCS8w3wZyv?S~p
zkAu&lLmau;suQFm)J3|neA71W+R!u4J?$_W4#za+_!j6hNc%QwoJe$Y=gdkmFD-}y
zz9)7pHts6Vt#zF4Su<Pb;J#(!d}r?Bl~xWHV&4YKXqg}n^5v_(i1+Try+hFWfgH(B
z7~=E3L!EDw4cHd}U5;KPX_gGxW*K7OG^z|Xz_Ih-u|%*%D2{f2uaU}^aFVBpTgtt9
zWQw9^Leb~}${-hm0-%bV!`ULt?U$yXmnhuh8N57N;ez0o3sSCBbA$5$XF!<0#O!Ky
zilqB51=EIc`4hl4jP(}{kB*#^r1SNL>O`e{XULO|aX0LD=|9UFcEQ8uYzoeC^>FL@
zDm|A$>;n6I=9Yi4jDoE3NlQd2LS;#>;n!VN*<y;E6ZAI1-F_`MFM4Wwsy_m`fx!yk
zdhgQTuyW*HtNTA{*!Kx;+o8Dt#h^~LriMgFy68=KC^DWR)QBnXa*QuR(@$O_BkKij
z^Q1d8q*Eg4EMyV~;m~?<C(_12>P<P7=_ZW}Jv2J7QwP}4mtoev&<L(?UgBOqu)fI<
z7zkNuVi_RW;KxX7hU9CvFhMp36l8;qMsqmWuv>|sH6d%=K)S(g!OGxCTf3`7wA5Tx
z^Zhqf#S!e*C4BGh8l@CyYum<})uv<#R2yBIJRK#grwCZmHZ=HD0whbhGLo9T>$X8v
z-5gr!H{)>AP|tEzpdKPeJ%UArS%GpcN`UPt?Aflog~!fyIEPs=JT&~^zmOB4Uc^_*
zm?*5WJYLRaV784$&y!leirT9(MGj8Q1zgYtoM`1lyye+rBD(9;>8LO)=%XeP>^C=N
zEMr{s-GBk7G!D~7+roOz_AqXkQ!zl<QEXE=K<=T`NR4d*V;h;VO-|vT;`eQ01tZss
z=~clp=QZ?k(x+=~gE)w(dlLjTxMd<X)Hmi2a%5J{MrOh?*9M{L6tybZ&_Jr*7hPW?
zH3i3IMF~+T<J3&aH6;QXLxWAN>5FTKBMo7ZIwImo)p21Jv}+MHqnc_`*6jcwqA=D#
zY>1+UrKMlKi-zhhno96HgbPVMZvYyz@rJM`X8%oMgL?z&N>_kr4D0U~*cfJ$OyVkm
zT^qWqoB9JW1)3YEW7J_+Bcd2f>LswhP%lVX)=3GNiL8A(9UdN7Z_tRAX&;=h7HEx_
zv5@2<&#poc0QLx#h3@i)B2BU~M3{PZWmHukh+wp1gH3aHm(k72Cj=k|?9R!P>2|eN
z1frcLrg9SwTO~?7v&e2q&nV8RC-%?-hM}s8xQtq>oIC9HIOn^Bde%mkg5`m^Uh;4-
zH5hAVka&udB=L|DdM~9N5y57k8ZKuFV<(@?=Ki8K?IutDh(w3FY+wugn)cw5^eEci
z(7l4N7d$h_%=U!$Z-8OTHNH1H?r~(%aZU^@iTIU2l*?Bbc)=LU1okiCI@XdF){+YD
z9+fM%IjnTiac>+>%S}Wa_`S{aTTZ<;`$$g}-eal*P97^AB}(lLdUZlF%o;x?d4k$h
zU&%Bjv9s|jCTlDNZ&~veqcij)p2Z`t^#Wj8RK$J_fO@L#;{aok;$&B6x^`yOOif{;
zBo@zD1>(~V$|t?|5d5k8K+yyg+DV!KVZyZKRD~;0*LqmkygC~j=Xg=-g(NFzS8L(<
zB_Phi@G=VW1!RMiDik-ti75$*k@{F7vut<2CCWoI9Ml49(7_(^of!dAbpN^i{}r8Q
z@=|=M=L+qt;d7)K&1d+Zt2@<>ck>18UW$qlx2L-w@TWpirO`wpv-C?2Tl`9!F{&6~
ztaAd!a3_TaWki>XlT24)x(5_jlwa4Q@nG{;YzD@oUew2Asz33g`jBl_Q~J_?Px3{5
zn*qwJO37zj<S%v{&Nhy`jL>Gjos8NunP1v3xK5h(F0*nNtCxI-htU9rhh`BclC4Ui
z)oltM>28HqVtnqXQWRh<J9hVEPi+i%A9IB1P+=)WW@a;?s#9f|kxn`=7&PF(H2%z@
ztU0`F6&cH9P6|dDh=WWcOdLJAmfg&S4ldyU1*9A1eLtVf7uRqMS($>o-88*cBa5;a
zv+V%i#xDG^b6UtEQc4*%&ll(_a(>ffU*@Po?nR2>XpgF!g}LQ1661g3v?MXJ7x9MY
zuaWAXN>JUDx@(-++}3wm*CN9;`F1^#L#qt6Y-xxe4u&qeIRHFCUpU16F})w+_8DNG
zb&dnJ2(wb+0SV@vdsnJ(wwD0K2IJ39j9dV%%8cyI*U!Y67)Tay7Ecr;8k}a)fGALh
zXEEs^H?Q0PIT=8m0%{vD4*g|ctBnUYE6>mXNHg8I-2%6*76B%eA9f~$=*4oe1R$^q
z>paz~TN{~HdIgf{csLIwqINVb27s_9+s)!BMy_QCh}mSgLXU{#R#U${RZD>)HHD&>
z&z_Jbh9+N8rWy5WT37z-<YvLXXG|J<&4i?UwODS+{WVH&!#{O80#M}9<_rf>+adZ4
zh<q}vHV=t-df-w@C0=jSZo%y@KA=z*{$+{+hB+hwvTy_<Qc+tnJWvxMH=I`g>mE@T
zfRrzB6tTBiZ40l@sZ0*Togh=cHt}t2(nMtgG<T2yTq1rqddFzju7Q-zXez}SLbPg|
ztUk=?uwApddY}#)jiQiLDopu9i3CiKlzAEIX)x-2cnJ3$Ne}<^`H3=pQ~HBAYZsS@
zX-?=1ksB4mSg(FfO@?8+ydi^n{Qv}Jq>pcxbho`)KcFZvG@Cao=3CEI(HZPnVj3!b
z=D;j#HUB`m9w^o$4VoX@s60hRDM4h9fQ}F9F#s@;-cDdjlu}OJTpTg^^7!jkrJj~|
zdJLsuKBF5Q^5krQv8V=tv@wlsMuDYHfV4}-6A3_dEO!kDwU(Kfs3f37BU59Cvza+z
zQ$}riAgl>5=OhK3V!NRT@x%unv{f5EG0>sx?PjqAFaUpBgElN`v3gk`e87M<==&9M
z)4@hs%5I>mPM%1<|DD^7nE5usJ-;qc-2>|#wMQ!ZG_Gx`)z}<y2(=|=INFHoQZ-Sb
zJ{|oz@~4llkCu0L!#0CIKyr?X(`!;p!3lwU9&rTiN^l@#xGHA}o{QEfqCq)%rjVlY
zOyf-p9q0^7d9LGuJM`;#*}A6a@|KW)*sg)a=-0vl#b$lG{xZHknu_A_rnN+(@(7w=
ziqTO#g&&xl$D=MxXt-<vRT)C&0%mG-I{k8Hx!fM#W|_4SXgsYYdkkvgZdA*4{0KUd
z`&WULLX>VPP4B~5vKo%(=Q#OCC*Kr!<P7*cJamC;M>HM)UGIbA^F3hPzJV&DjxUtZ
zEKt^v%JV1CWY?1qUg!ZJ`dCZ{p5*+ox~u|50pPQ!N2LSNF%$+O$gi-f>e~l=|Ixn_
zCq{Fvs4PsSMnTZPV{<;96|ez)Ypg5<+JDuE8V)DJ%>n$#hIXPuqF_s*Pz!w-kwOM0
z%37SuvW9z_$@o553`hx_MZf?HB^-(xN%zLDy@}F2_lg5oivU&B2php2;<Zu~I@e$x
zPG~J7aNVJLWLv3%eUzR*t2$#8qv-BV#y-_7g`A_M)rU#LT6Ze6Vh^Q+_hx5-A0VJ5
z64j6rNub5q0}`er245Z#zC833LXPnW*Lf}|d(07D&>i~PSO#8E-_N38b6ouy$+QE(
zrRlarA|UN0B#hcXp_(ApHTibY&{BoSc2Q#`QJg(9Z&*Dve`U;FD=Y!2G;qaBYDRDZ
z;}j=l7*lMiZq^!v1B`(yMLV~|hRX?OVhL={f))zFfuWOzuq?R|{GcpezlvcCm8o{l
zx+ww50FdThKPvnQhB7mZB#8;oZkX)Z4bYoiiIhZ7NREMDPWxfxhG89@4x*9V3!^?N
zbSNra?Ou*A3ftNHhP?)vS|;UMGFwQUGRty;v4>>`H3y)&0cy)y^MKnz*3#I|NJwxA
zYxXU5dJ@}vSL_+XP;F!Ecwo<nj<WgBPkGD#bOe8cZ@xMXf-kHN?1~-Uc6D=O4o@OR
zL1m)KLkV%4$>G>;m*fZZWwdWxybj0%u#e^aOGQjIb1%8k@BmiV)S-ig5>%<^SQAqP
zGqNlI*2J9w1{;(5{*8K*{w@eGP7jQ6VneivglMT?m}a2H$_l2XS>;}~SmGs7e9np~
z2Gv_%p<~N@K<+K!?(_P5x&b>G&ynoao~zOD%F=VaMT(f*DvGRzZpOGV78|}kx3`l_
zeEFUI0shF$IBz^}UI8xQDc(YTL!MGcRTdjc&Czx%tlD{Pbsc^6lzOwnS+j!S{iXfL
zGrG2yXq;$`$W<(|_dN#tQ+PnzMqIq77PYvu8&_C^of}2fu8$6~-K(ed4o(8r%&k>K
zV5N1mv`mJHBxwp;!d|8josirTl|d4}2tp^xsYIZ{9`-K0^&C>%!=Qh-A(l5)A;4uD
z)6r+bpC!iN=>#v*8D79-jWBYgez7Ffr2lRerti1~*H^U-uCJ(is!l%dt4)4ZJy~Cw
zj>zZzB~>@*xYc!pKIpEPH>b*msng_;{h<WiBlEVWPbLHO3XXkUpCDQHNImbVPJNc0
zfmhuX^}N5N?nW{!q>qkLT;P(h-HPxK8Ciscp^zb<2*+U}vYHPk@Igry`9O!Beb^p)
zoK0`h1nlU<lhLA*>9mQycsy|-Q~r>1!cLF{BFU}%p#Ipi6_%{l;+_K8r(ky#EjDiN
z7#L-}v|p{fRCftN5J<^P{}O4480<>m$FbF==&6~_>dd8L8<2Tstb{i0q`n>Z0Lh_N
zVd>1F_9nJgQ4m+|0+=OemCh{PaCA#nfs-YEb(ECb&+2scP=N)f5%qdG()Pd5sU5~<
zMyt71F+?Gjp$qF`w=?CJ#)(McxsraVfVEuiTc8`!`Y^Ioj&#Uc*d~=g*-{>*MTUwP
zE7KBwm9RsbcvB8l1xcSD(vW&xYAPf#*v7u$R!1x4f@(G}EjrOI2M|k=LW~ok5{;#K
zrJeWF?JAjCldHC2pmj%_w7LUMYC_a0JYai?R8@=8OqUm-iyM;Wj-8tY144#>e@N$f
z(%jB-TH{~sJ*Gdr_n2@`@BN<DaaM$JJFe6Eb<=)t^RnoJn^(pWPWvXYFZS3kRKi@#
z$<oFaYPKG*c2b&P_kd+W4u_4krE?#-M)gyG_a5ph%c+>N3NZD9f@?Q^#bGdp2X4pQ
z^nYbrSv5UyYgr|J-QghM><mMt{3`>XIv&_{%KIxjE!l!@zfIz=+?cc*l$DQWITDxF
z;|?|U0b-4^S3t7eurpc4GfKwIE9tN=!z0PM@fi^`R-H|2kE=B&nuuKQI~+O)lyl)k
zzv0%q&ElF1F10T>%hwZ7xv>%kM#X7P{%_QQ%z8!N5k~EH_uNdi1HNa)?MYz?<UN-v
z^~YVuMoAr+qsiN%&Dxo$nP!pUTAKUcR6!pIHlaeWZ60FpgmQJs{kuWiSvXU}MCNpx
zO?(eK4HPK{b@GF{!(kh1*j6iFKA?)nt<R^MSnkrkgQ*M*6(A|~f}H>Fn}jyT87d#k
z5)P}30$rmz!a|jSRl1oUQN*G^G>F&#Z^jH?t>%TyfQk=$`TsbJKu4fcOer?`jLugm
z?ih9EGi(L-b98TWdIQ~`%d+oEy58yN(POWbptu;H(B&=4Kv?uV&SP(1MOC>pC6mJl
z(&J6E%Bm$&>D3qmD?j-jXZQL(S=rahTeLV{GEe|tX446DK%Y@ui+VYfHV)=(Kzy7m
zkW_$WsASex++W(D2(?GRY&&-JfQ~K7m*{xl+fYQ|;j-FqePc6kXG2Q+-qS8yd{x=*
z$~fp&9u**kB%#C1cl56feIV8;q+k#T)`~_eLwaz`RP;yB%G#B`p{XpYRpcX3nX&eV
zEzioj8J&TUxzm~9PJiPCR7f(=GsB+##uKo|(7$~1ag%i-6xss+324W7YVQ3rIr`=7
z=pUV<|90_d+v%L09DUlpfd4+V#iyf-=D{cbQ_yF}{Q{`PGeAX%lY#8YAh^40Kq7w2
zS}{68fDBT19AD%h(k=~wMvyuq=%x?q_T8QLoK~^O$;*isgvvd@t(w;`6LP8r(8TLx
zSYXV{r_z;LTc+LJ=|}i1NDU!S1)eN6<e0WphLZtQ(=Q8Faig5oIle4Oa(LwX>?zTT
zQar5)&uE%S!lWk9iBy8vikBrz<{>4uIxBpe%Q=$!xhvg;$f8H<aSl_AyNY|MNZ)QE
zryamwnC`?g(nrFiWK|>tw>o{%_%^PyODg%vxJ7OhM~}>;qiW9+vqe50jFBrYBPk-V
zn~ssC%mEekJ4RUCj26QMMszd)5W(h>d=*18^zyd2p2FDIn2;A4T!_!-uph>pf=7g6
zYEuN)Pz7J8SwGZ9-3bmkxc@tX+r3`_l#&m$@h^oAF}uTvTSZxbTy_1fui7NCMNY@3
z>kJ0D`IPqldD{QR?}mQ&;Plfmr#=o&DLMGYBpnaOcxFqr9DF+ZbkzQ)i$5|P2ih^K
z*(}8uIfiN<_rH-D$r}dD<Kbb$&GpYu>((9o`^w~VmZV(kr#WV9a!z-xAnP*#5U__|
zp1*lbys2l>7pK8`BXooycN1A0(~~qjMRM3BC{p9>kF%nd0dD}~+#+l9)=(dE(+hzi
z#&)RT#LV3wQUT4>!Q<WHqdxk-*ez94rCaht-nBZ0C#l>w8LHS(R?gb$yphT~p~!Ge
z)xjkBmG1S!!-0G)a^@B`U=iUs<6Q$k!nC2Xp~OWDQ2BFygEme&$3QrFP_x*rYhcfl
zJJTq7#Bi@`sKrccgi=@b@dtGnAYqrDKo-d%u~HS~WmFQx43!wBK#48k-zx5$j=BT+
z?RXS+qUGr-TB6m5Dtj5D0Dl{IqV4G@+QO&H-WL7F%H=}%;17D!zF3N_n7~6Irma>q
z>n;27<t~jC1WFaC88S?n?NANO1|Os`XD9f^_e_djd2DA(ZKZR);t$X2KKNVKb0VwM
zeA8S~xZflBS|-#1rKR9bmVFl;=(J6tr0;VV6_72-g|W-s=dcNpH$?eloLMQ2X1D9%
z6Ol<5=b`t+E9Zr3-S;X6=!qwK##XkcHSI3iau!|kyY{v6$EIAb{U)z#+3)6c?I>OU
zsU}elw3g|a!8-mfF4-)DdgYQWMO?V#k}ciml8yQvP&Me5Ev?<TcXxYB%RzDt8bacB
z0wl=t>Xtpkt6N3}!a1@&T|cyN{tO0_sBV><!P+_rwVDV`B%FvP(Hu;R&qvqfs#OWr
zoI;S3a<AbgoaYHF`UA8WP^lKiHa{Z8Y*(WpsaINP>N4ag^+75OJEg=RjV1TQzfuRj
zo4H!rdJ>orR<07zbX>WuZC6zmjD-b8chtRR$2i{pVl|4qu{%*xn^&U}YIQB3&}=?k
zEN>`Z6VCgeYFsV08;#~U`l(x!gZ?H`AWe83tcn8C2AgZZlSNa@pquE8ZUuxfWL;py
zBy?&k;Y5fnzIk=7-T|PDHk)O5d|VG#j%VY|p5|fIWPkv2n2pVi7Rv%2l1+2GX<m<~
z(`E|2Sr>!tRG{Hhqxtt&=P%!Vf8IQM`&0ApXCFSCy*>Xaf~;_zZZ}Od2B(TJ-YuZx
zO&HlKnQv~I050A<|M2uB<Uf1z>h-JhpBha7oG)ITzkUAkWAnwk56!dY`?C+{ubzJY
z`s_pV{r4Z<zx(*S-TYV-RHGU%_MV+xq6Nx$y2jakVP4^OD$vL3su<uLE<!aw*Vor=
zca9p(4{$%ha>90QQhfQwz9syx@%uj!!(Zk1e{TH#qn7&ebk0}@hn`IUcOXMC=}AId
z0disc{a>P+|NrUt-<kYh;rD;ikB9%m`Td{3KA6~k|0g=0GISWX!w_8wRQ>)B|EvA}
z!+fKYRJLRsKEUt)9ELWx{r=C@USGoC=KToqvgQyliXmdn$fg^{_*n7#KZj(PGeGzK
zIbi(<hATJO>-T^7Fu(tk-`Vf~@Iik6hyPFb{hwHV|0ll>#z<#y0xLMt7$a@h62>^Z
z$B8di;rRU@!cLp~2EYGue`;U2OF|qoO@*Vfcq=2FvR>X-#|WRLHE@q2OAska0UVT9
z74jN|L4ww>%ay&X)^<-$vnYX$Jun*gdN5ddJTSh0uj;zgFnzkMYoBbi^FB(+Se+8P
z;&!TM;0fyTPK~&6a5|ONywtml)OnS^$${-}azGv&ROoTC*CWrCK}4gN?{>-;j^q4y
zR*KY)BBhN|cYQi4GT0rZ1m8PppLF1VFOY`cmK$vAhL?M0?Rv?kl8A}`ty!$RveVs-
z^6Rg-kwExM$NKQNi}v~4S?P9Rzvguw*7LT+Si1Ttz9p-4{k{vKBuUivXFfQgTn+M3
ztUtm9Rn7?HJ95{6AQsX^apJOG4LvS4hBP+=f#smMrRtsC>D9RYh3imPJ+poP-shc<
zh3O)9yz}K1?|cAi0_JEbE4@-4@;qkuFrp&Jzkm<pUka#s1?xSA6(j;aqi|}N>cP0T
zoAI>0k%7$oQXliW=Gm7!`n}-#edOEbqy>{{r}S2oFAUC{EIur*C5fay*$M)pz~~a%
zzJNJVXr&GlBX=LVIP$&6n_M&>qt0X_E6bcwXEM$u1B|(4Xhw;<-$RW?_TOr1gu{t-
zvXHe_en=`4xg+nRX>(L8mDThLnaOCbA(@`U;tGP&_lZpS;@V)t%+;g9%6*j=SRA{r
zeAhb6b28$l#0j#7Y_qNa*zi$97RAL{1<L$kjQW2E9Ui=L2!vj8my7Wn4#*m=FpEno
z5-Ua}nVbU3LciUUP^LUqDHQ%$c@-rp_Vr>o&V1u&6ldjZyIBz2R_>7aT*Csw{%B-v
ziIGCD<(F6Fm|gHn@%kTKVQA1XAXL>ggMyp!3|+1{0&|s&oELtI_Zcb5&m?V1OCw23
z!>|qtKcgz|Q|(D{Cr&yz*|PWev980FVu7$XoATRc8^f>gzNX0v)Gn5Dvno{h=9R<E
z%-NLTq2r-V;?}&TAg=WTsGk#E!*W&pI9gSTviea2uIQW@;&ANYHoWo6N+5Kjx5sN#
z^Pc<U5smI_)=xs9AE?HP`{sGi(#h77n&!<$lyN5+O(n6v4MO%bDGw~Ko3gQ$%;r@U
zN=kln=CGSfJr_1~z6YWzXo-$kF%qvI=tFN72%XGQCXTi{w#mrU@jxYSG5IV@L9fw&
zgRAgoX~}c8SNZ2K70cBapy3AH6{*J^Oo$6|oVd6qBgxLyOV^|ynbc5;lAyJt)I7ss
zn#KurF|+4;q?(a9iIhW)fcoIT!+y|(t73B`U%fCR6KAHbXpv@Pjv3lLI0*@5;T#mL
zx^&;6{@Zw-O}7{w0}uEL@JtrOsE|WbV@Fqz9UWCU?Tz3j^H;4nLz_9(BzgxZBMS?T
zdP+V7)<50d!QUUdqxSeo!WVqliB@r5Coz}K11Q(g=x7z)(<|zR+}7B!qjJZXaz8k+
zDjAe3k!1XU>yj%KHDKas$U_+NK_=acaYOW`8bNcuySvU~xDf5+E|6M){$Y7&KM47u
zBdCv7zF;?S`<IpbhnTuMP=1{we2{1?t_+Y=(13I_e@}g-NyDP?AP~;}GK)>0VF1w)
zJ3Z7#9R0u2_YRIrlTsKO+JN=@kx}Qq7p^;ZEnrj%krho|%h#7YF9}?3a5j}l*>M_`
zmCcD{;A%3lHJI&td4e%kgH_Y8*yyOQOdB7mvreLYw&6(P)X^DAyC={86rOyO8n1?0
z9FPlr1d;T?vx<(1<htM^tuGn=kooPWloCFr#{s%Eg$xGTpdHMhMBt@yfibpqE9C{u
z1qNA3`R>Zg*4Y^l=~Jc>he5&C>9Qh8p;~s$v*a@!mLXZ_PGRCMIP_D%=$Jq^ghLa@
zEIS<%5u2myKt|<a*op(h49F`XdFV3LkLUkl^^fnX9{0VeK8qW*mC@|!;#zkK&wyL;
zE-K0@<ihbhmzsU4IC1Ej8o>ZrF;9(?!_n!~fG8BdlZIJ=hn>CFOsClMi8}gbk>o9t
z*F}>|mE&}N-|-~O>C^)#OBu4rI;}hk;dfe;iB?ug4cJX1?vA=5b8E~hyh<KV<Q7M^
z0MK#IKQDdHheiMN>F5r&7XH8*!B5cjy;cgRx8(&sy!S4&&RicZNW?zL>kn!k^&a){
z1d_9ky!S_ZK_*VxJLz|a6o;OC7v%6xnOhCa6@>VFzy<H_FzN2DE<55cy8*dn#G@NC
zis~XHalwA`HPU56L!3~_IFKPj3<1Kpbj6ur?t)*{m_)LoRFZM5cv7?MFsythZqY&y
zV?|OijQi%&dD8H`Obp&b{y7cjUu?i79dtG5+0n&rLl>YK{dPN|h4P(ks5h9|0bYyf
ztHqj00B>zccVm4un)m}9s?smeBWtIRh61wMcj?bQCK2L#fNH%%*~swjF7b;mdbT!q
z%#rK{d$%q`ioVDD_5{3gY#Q(3<CKPO?I=yXX43Oc>}_&;O+}N87wv_-pL|f>016@=
zqEbpdOTu#EvqFz#IktMg<LSf-Sk7AnKBWr`JsMbS6!v+#Qz4qvD1n%-as-Pm>_^!)
zZV%EI=35$>Ou@dcEB{BU=4`QD7bv|pZ)#ADtZaZ%M=zUbGbkrdmg|CsQ^L&6=oae&
zs3Z^hGs^j~CQB=tQ~`sNihGelMGEaaF1mRIq2f!XRfGlmP$7mkcYv8%fh>Y2N%G-$
zsL=-fsPAeJNoyp%0lQV2b$|qG=;<l7GCNGN#dbrRSux3Ek?qpn-l{~&*Lk@HPX@d&
zhj|ZaX=9;AI{~lK60vE_G12`NAxect$qRKYD(OXW5B@pm3kxrV`;j(^<cqWaje)?^
z07M@xQHn}>QsWL*&DOaSqj8=W^H5>W{=gz3$-AxLN<zD^kla8jRkqcUXs^jzUspYZ
ziEme_@M5JF&XbEsnKP{l=Sk|(eRNHolwDKf`BAu(t#FNr<onlVPwjz`Rs^p|YByFd
zC2dLOp=3k2;ee?WV8u~&`>Ic(!MsZ$85j@PP<3o}bAQ>BGbA@-jB~8Ye2$Tr$L{5?
z;-N+CrD))UZvr&(=m_VvIAtQ2P+}Af50rBpNi=fQNF{i1Suy_5pf}uTJc~-C>#B})
zMZ9@NwB*6cCR<l7NsHMIvO3O(L)RvCfw$~HT?V|OS3DMC17dwi&IZd6uw>7LcsemU
zX2i0;WM|9i-5tK;oq=MuW!#{k<Yi7a=E3`Dse<QJSg9h}A2rOu4>Zpn(1Wam=k)`@
z+#PbXz_w!m46?;4S6h?>7#nn<Te;PE*z7_ECWF1;Tn1(rBU`WjR4E+P-Heeo7Lp99
zvTOxa_wJ!Yu+R=KFbrb-93%fqXWW<Q$cq=~QdB&HSR@4c4F3lGe9+HHpK%j+nx#2W
zIT<gnd4a-NG@YW;X|h;c1S^x{c@;e}*+tYWQwd~(LIEAl*!I|pdigigf=^=X;UsvG
z3c+SJsqTWr$!oM4Qp5W&CuXNmZPk&A*ok_4gtv*hE2Upl?u$%A!ds?y5WyQ*L8{Yz
za8>&q){U!J%s{C(H@R2oj7P-mz*-)qeUC>Un!RTUB!|zQHC6aOch(|`1-@CaLq?vJ
ziPg11u&ZVmS{aHUx}N~VW1N-AB`(plkjRK~$!OOI%=?}j+L4{7aW>a^t^lAjO-Sh!
zrC^EWVv_vb(%Oe7g58(G16qF%ri<&)V?4uSL(vc|vPPbXVNP3|eNa9r;BF|Yk$<9L
zjWw-aM<rFoP-s6$o+NsD&yf?QSf{bFf>rF|yE_#6WyX+|!I}iC@8;8+my90m2XOT`
zUsb5t$Q+iv-cXs%vd8E{gdx~h#a^nG+t1^iLe&$_8(C;qYNK85#>|6KMty#&8SQK?
zU0$uT1|(-Tt)JSqB9+y=BDM)Y38ADRj4m0f@&1cOu@%0+Pq;7EpgvAa8|Iq1p~Au&
z;?kTNGVQ3(5jARvtggfVD89`9P|>AcadfH7jw4k=^$MVt@IDU*<JEd|MB+yzW$kxz
zTTT9kQFFn~`M8u7@sL7%8GiqUeg^FN$iigf-Yt6+gi0smYMOz{tN8#Wk2gCZzY}=a
z98Fb*lg^_*l|Smz|NfW%(BEc@bPP~g7yQ$Ibjsg!xj#PY?E26_xy$2QnvoBSYv)i3
zCgXES%%?R(JS%v4I&MYEQei)X{n+s2Jh#^)pcDde&>?@(6m+L7JuX*(c!=Gk!*)}x
z0$vf>EtVRL><Y~Fp-M{-$3FSw_+QOtsFA%X>L%iVG&f2ezq>oIb(U~$7`XmFJSH@0
zO{QTDvZ<4Dc4mgILV`rO&0ZZ*!6WH^-zy_-K3!TmY~sLne>O4B3jiw^nvm8M_=vS^
zcIdgY>^fgI>KJA0%cQu556i5EVQ0n>JfI{pbiBuhsClxE*jxYCis5DrdVm<y1M0K<
zkRRVuQN@Kq#53t~5byK-?bo=u6a&&U*pYb@U!O!B?OSsd;z0VJ&=SBrP@X8zzgxtX
zhqpTbC5mMnH*PUt5uX9l_pAw<T|QjQyTqy6PMi9|p*uD9zHa5MuRVK0<#k5$Nb(}3
zd6kve7kQiUGn^C{%XHlITF5F=T&C{VvQ}urGV=M_`#J<{y!CZmU)mN!3i~Cq9Kkih
z-xV{-{>WwO%0E6u;?o|T4jPfO-vXR*%=5T;dORIlSTxR8xiC2+us1tu6`MW@r}-do
z@Nk^Uj^(vw&?W89oiGb}|5`R^F*%)r!<Q61w6Hp<U4o>t1O^M`b?nMDOly}W`NGm9
zUs#&t;Y%Z3O0>S#OH;cLloOxy8uAjNo83Ui@(Q}YY3EzkYqUy)9Gp#En4cOY+*``P
z0yuIyY!<q7Bjj@FiW>U?B<1iF*-O~CZw;+u^xGF=lUtMSg{Q}m(8N^FnqYW^KdZ;~
z+!{6guTN?GP2E*ViqV8%AFb(aN`}Nqr}GDAu5$u=Gux@O!SO-|<CCfk==^~y4R7Ve
z6>7Yzt<Vmkpl4_RY1^DSfZvR{haKUnTGu+GV7R<3X}+VLd9<~Rkqy$a-ys(OgZd&$
zGExrM8e7)jQqwF<Ei9QM$p*-A4^thKrkY{5zvWdyp@{GCB4$|HWzT5js>-5;DImC2
zx1)(ks)TzxktNgYcj|**>V%_NSo@7{^S!;ZkkE>5XBwBh6=~ajyP<BKZg{yP6@~&v
zjcfogvOA`njTy$2DQP+>Kkxba#X08EUP;|r-yZhBl7|eVm-i8<iW7DPpuM4!5hq&w
zIw#B6fW$NY_H55Lg~|bb^@<fvOZc2bh@{SG>bf`p)MZY!+9a46fQPK&+B^t)oou=E
zm0(+u)Y@bO<dV0VU69Bh&`ENF1s6vnDMgW_pzgQ3z(OcywZ0Dibg#DqGk?Fq;lb}_
zIGd5DfrlH;=EiUqLu@K1ijrhXdIecZW->^)7>L3#oGrvvIQXB2v(DuI3d7l~4=3k;
zG{admV#{p9*-T@@Dp)cSXH~=5^uOA0HWSJ+j$D6z*>E<8q2;#WY_9e?5Orv;SfJr7
zMQDbdPlmH;jE@z=S&Y8}bB3Pha`GLRE5q4rui<R^FvHpGcQ%|&A7nV2{#O~!*85?x
zpnhM}c(hG`Jo{Y?Yw3(;u)^8D<ccM$cg6C-x~BG3U|(=lk3s#>Yk&3|EOg~T$V!+r
zY~IZ3lEUUArPfN!6b!TEvVthNiE-+P)=1Zq>D9!LmO$Q(lj&jzv`)Fmk^G|a$-dU*
zR1BP&Pt3r9FIITsSjCi4S()c0DYEf;HrD06CWSJYCTTH^y{F6@W1^R1oDkw9!-^WF
znWTBSna9jTtM-i;UB~LP_4jKyEOI{M`#6~yU`<2j(b7^;iJ*|_TE+Q*p_;`6Lt1wr
zg@(urbLPqf-{K5%vP@`NjEdtjN54KD{mC7hW*KN6TE;xIKUtg{w0@}cLWZCzwJ=2X
z>!89V<T5^yr`lDU*`xdY$^7{U{`|N9=}+eW4gO?~wWHJZF?+9TG}*y)32knkwEx&X
zY3y6yy*M*XzT+rt@Sp72VetETc374@J1h?mm*op+d9P=OrR~{a;4jOb9R?4%HwI8@
ziKcAYjlwUsE9<;;X(F2SSgXpVc)4J}<sIK9fOcytR#DJisLYdWxpR${2ioIgBn`C;
zlM*t>!L$>!It~krYsrl@+@2{yh6SW$$EZ82aT$A1+Ja=kWAl;*3KLXAD|So;nW5$P
zb$(FO`GM;EU`M_Hq=4M<=*TV~@9wfL;HSA(3lK_00R`p-dwXOdFvhdQoSjmZj{1zM
zA+jlyF0=>JWV1nTf$l*n>iW>trO3}aWk656CRL@`o;NIJdCC8Pbcv~A<3t#nu-4@+
ziQjCMZ3Y$|B3b4e$&}QWMp_DXZi++$H*k3=M=L37m5uXSx6YrAF35lLkr!A4J~IQ}
zHy)9d=Yj$il;=YfGS*Vv$n&y?Z>VuJ9&G+v+^{F+O(Gw&&1wpdLCOjtfUNy;1of?s
z*0L()^PJ3^IdQ#7R-5|PjG7GG#S<jRI1_xM6Y3@rf6olUS)$yvN7&apPt{Of$=o3X
zc*+~b(dwp{$rG&uU6uQW9|4(y-JOjVD-`nG-5~%l@3uZXu|ILONK9E$e}XH7Ob?`1
zeO_K+86JEfW6PGUYl*)F0DS%T6=FoI!0fnY3pZI?D%EN8536S!1$fF`tKD*F*D23@
zeHGG}0`}&V&w5~tY@S~sZ`-q0g`yxwGxWM7da0NS^j0%$kJrzb@%Da&_y_<Ggj@bF
zo+>W8Al+<+eQ7)-m~~AaBXj<QG37$V1y%W`CG!PSM6pX7T&!U8xs-T)rcsj}Ghh>}
z?u$dYfQjEch4gqxy!t_H!0dkkG&pLq2j-NcT?60cgSueaI$mi#L{zc0QFXYkJcl|k
z`D*jvzIk^3+{y+>z4YLr;n_@vos=$yas(;*!cd_EYN9RR8nj}Mwh9of+c|+JH0ia$
zVp(e%u?y4olf9P*v6=K-vQuTCu##l{LV2qlA0EOTKlX_IuRtqm>H2}v(laQ5eb<#o
zCvwXx_LuS&@t#|}lGCOHd481-C^(|7K%8r0@1l;jh>T_^N9VP&mbdoA?M3MQA#d_)
zQ+2}=9rSB`5_%{6$$Z&C>*$PVp!~i#^H{R`Oz>Vq#@D`Hs_+~Ua)kL*XYxgz*Id2R
zfh>&U?@TGzQ$W|YT_r*o6?tT6Dd?!E5M;Q5axg7UMn;+5OV7++LRSBf+*Kur^3?el
z(vFf{{V6F^PRKV9GQSNRQIm=0!>Ogxl;~Zm1<E*i%ETfuhC_;@nx4YN-)aTE^$jh*
z%PpbwL%&?mrbEXZr6edxCe3)OJyi+!cW)=8hg&)QIZ|{VNSy1DGQQ(=#k!Fz-dEDv
z12)dr=v1YGEW4(yqg`Mtjk;Cr_aKnPjg$@A2-%emTr@ACi*XaeOj=`UzaG1Aw0l5@
zXza!bO#RSP?eImR!%=SeZ7-|Usu7k{YYi^V64KPR<@~6w;ikTjO_D;*okToBt`G9y
z_6eO4RkQX}RkxZb3{SO3Dw)H%C!U&nLNUx!ghu@@P+Z8jGA;}>C@_hr$q|tinW?Xa
zJZg}jmv5>3@sNA5jfc@N&Y_X*u27*UhpiJ)=wOsOxq}Y>iNmIo+)g;fpf`O;ttFHE
zJrxMln^dDHY#IuPC@Z~6MXhu|-}LUz!)SZ#)5Dxzy4ixnfo-DxelyLAz4w}%r|txr
z9HyJsY7Yo)shXCqUNJODZ0E(8fEdMTFNfjRPALV<0{mncc#Aa-e9+Z|4J^H;ce-4M
zp2C9>lBbF=>S_!z@BRYtybxIh4P-0gAbiU3z9vVvnuJnzE`}~cdU@SG6>x2_!;Ug0
zpgV2R)P7<wL1|P0BD*udv&StOn#c3;UpUN~X|5)jeX()GO!WZ?ov_S+X=C6)Q^RLv
zDRx1W#apFKpn_v*i2UrFqKp~1s8cMk$Z4kb=XU>&*wKJGxE_arPTSM*Y`i&N5Q<TE
ztRx&N7ncXDT*IDox33aBft4!uGK<)s%uYd4N9Hq>D}>qt>e=Xp5Wm$kA5f=1uG4#T
z*%z4(TEXSu;vO0;3{FE~DD25mHxDxa$b=Y5ejVZIfDj*?h%Gw%AWuuPSi2WkD&!Ke
z*g1*tHS&++VE<Ui3q<gMIXZAcDl`e@$mHiiNzEgppkJCS!~347W|M?ui~(6P!#1`P
z1M<W*Sjdl)m|rOw`4KW5xjpnAkYgkQjrgf6pF=$ik!g02EIW%$64tBHHu-%STWNub
zOQQ?<Gb@p~B)Of9;B;Z7sPX$#E75}8Tf08AU!9Pdbs4RUmyx>_DcS(}6YMEWGebAE
z>Eg53k82%8lC~6V7R?Gk%dJ}(*@`vpEc2ZDP_dc?VaP|Egf3DwMv+hJ9Mz1(W;N7R
za(`K5oWYizlb@k`{7P_1W;#(IZF_xigBXIXCmq)kt+iY&mVj%q`_i3|pA_Y#zDl~n
z+x1IPX@;~cYP0lGGF|L5J>+<NBw8rffsCX{ZjVTF@~4tZe=50ln&3D~9vZhugVP~7
zOTJ|}CE!A+$FS`8ir%2#k9>C73)SK8sD=<~D2Jp6)vp1@`JwJ(ZNbh&Ip2}dqBU9q
zsg<G1$Z@GV)Lae~J%ni$m&}PiJFuhA4vgZ|(2$T6g%*}g4KhXAwnEg=r%HNHhOotj
z?BCrT_^iqXSW>ly`wJ8MQaP$F%pB#?9m_l(Iw2s%WhsGmBO}d<_^tY+&b{N?xGWPv
zhS#Bi(mj#XN8OT!XodL}exXYgEV^7MPD*{T@z}lLtM_-t6#rG-F~uq!8rOv6lwEmp
zZ&$G3uj&LAs5Z~6_unuTRPxt#087M;B$`><B@Kk^%Pais3G@wL>ZGJcenThuivBg7
zq!MvrZp91S-*<P<kgR67X?H%lLW66~ygWQS!}t0De#ENl2dM7*-!w*9_yNPba{6Uo
z{i+fexf)DqPH<>WX&S>NBi+6scs$}GItf*zv~f>pWkXDr!j6}m#W1qL+ztt%lPc#8
z-IpN$+2oj?uPmlo-Mzo7v|NFI$UB)KTU5!udQv6=q*Y%yCQZ_&;nG$|w<b#~q2D)O
zziGNE3hM5RSw1-HCM}8G<u+~`Ncd~);qRSF%4<yG@6X#v_PMM3{Z>g$%KZyP<eIxo
zD3ANkSR`Vr+e?Jl8Z8p?Wc9X<k}_HlGZ9fu@AZRfZd8KBRaLBIMrjqFx#<7rOg0Pg
z?we`}J<J3FjvxVuomOF2(`4TZAIPPU!QSe2`3Y@LlY>BmZ6clgrl}w-6oqk~8iIxo
z*vtdqgFSQuA%69Q)R?HqIZ=my&$Lv9FQTv=ZNR)076|y#lu>pA1-_WQ;kb3k_Pe@B
zjd)P5B60K`B@J}~qJvEB_q)3sJ(H#eBS%TQ7P@F$`vH65x9$eDH1}@^35VS6z>w(I
zZw43ABrE{1rY`G8l}W>}Hn1Nu12zuq?UVOwg=%Il^ZvhZpc-GALmJWk8N|7`LGhh3
zM;+Qx6D{ubE#g$+#<y5k-beKq*nuQv*&~xtviZWE<USfMqGSd3#n^Ev>geUsLS<!E
zY3#|1#%tZQS^%`6*k^Ql<pd=u=0wLlr&FzGQO2!ApZ-!#RB1XP=}@Ir^x31v^^xQj
z)rsMBYkHbe!g22`9m!0;VI~?6m<q+{e29iX>%sZ~tp{ocM0zF28`1B&5NKLmT7xs(
z^K$x|=!E*7nLkSCfN%`eQY?)g`}=XoKo*8rQZ3bww~KjYGhiC@<e5B>U+fF1uGMsA
zC0#u^TxxRg_@8rd{zus@ozvfGub?WFWG;Fi5XtbK%FD$=AncXdhT0+D;`QRXSUpYF
zsGQ-zM#betw+FZ<;?mm7biEIyI?H{_uQXojccZ%zGnj`)Y4IH_n-<pQ8%Rl!D6>5Q
zgQm#7J~}kbNX>*a$CfoVu@zyu9s1je{JoF&mD-l4Dihm5{NGSZ0|XQR000O8wQjXg
z<oPtt9Si^f%0vJF5&!@IWMOn+bYWs_WpgfVX>KlKb93z**>dB!@!em6*flldi74}s
z<uO&Onwo4<*_S*d`?kB8f(XcBOc5*+@-Zy`dm7*clHh6OEu)$;3HFUfqq{-ge7-=R
z(XR(TK^{Bq{E!l~_XCQaF^t3%a~RmYB7UIgXUy@hco)zF5%wGg3=<lo-N_H&uPf*v
zbl^Nn+?yK$uw23}L&|RocmR_87>cPxL@Y)}M*O{C0YYTFeSVM}17M$U^hD#tXJLZa
zUJm=A7n}$c)KJ3q{29j-MFGVLMNfX>^Kru5T<wz84dI5hw9KV#-R$6My|iy)!(Q6U
z+nXeS0cUCDQvZ^(MS;JIaqQD1=c5=VC$&J|PMiyoCB+5$Cru)_^`9t`v=``KG@u?w
z1%sQ53n}7~6vR>wG>Y9F<A===#}9sJa2C1i=mq`BKSnI(ION3>fa2`fe)wWM`-C6d
zkcCuzvSTq!n&Gh^z)?coghn_9YinSV2z!3`;F@m@0TCyQ*3cm}p6Tw<=OEIHk@!CZ
zs>ec3Lpik34{K;wH_3N;jQFdDSqmoR^o1KZ@E=0g1KKohQeKAaImQtnFS?$P^!ea(
zDmABWHu^^VCzYERi@^OG!vPH+z<C3_qd~d{{lFUj!+`^p_=tmzB3?lEeDhvLiS(j0
zn`C_AY(xAc3h=AzhXJf+V;3;*aU@Mxd|)uugt3r)5_Y%hZB?7rn8wHtqZ3ba{}<@4
zxxA%EtpPTbfkra%!#ztQOb9rtTzBU3i=aMx!XgZE!V1eJcFh5UOfh{y8=Zn>ehu-m
z;ABHk&~p3FDd7-#jeH%t`+&X}G$doW#>}Hh0tQMW22mGSx_Fnc;Kb=hnC#a4u#poZ
zF0vW0O*4AgsFP+`>X1M)YzSkU)<WLov*B9wh%~|IKrz|!cneV>fd~eW-*MtC#=sFe
z4zLG?jATm2GA#j1FO(kPI$*6n<z4J?*k<}D=O8INaj`_?=Ab8u`ZY(xN~00_*2sK^
z^(!8cG4x8{)H}uSz>S!n`AXrCF@+=olpWB|-O)XZ=>Sg`?}7LTCB~7HkfTTnT}RTC
zpkw7M?KfWF3T3q9Q@PY}BpXeH$x|M4d9MWhEZQ@XvhY`U=A32TCrs&tnZob2Ooo$Y
zaRH*@rU>MhzuVTmb@_HKZyxWX(;aVy7iAuish#clHN~AF#iveZ#;<TH>+OF%uXTQA
zb30DF7}EB?3j)oOp<WG`N;a=2@{N(#j7XYi`(gtY`+>S4o81M+6c!yzZyJ_5cM~zy
zr8!a5%t>cRItx*8x+1R0Eqaj5PF~0E-j5S*cn48nL!C1Zk2GCE&;M_X@vVONmoNks
zItsp7#I{^@^OkQm1^#-Z#K#DTP#Pi}67;DmiP7EqE_%66r_@`EDHY0Me5J9NSVOd{
z+;<fU%|alfsV?nS6)o?L<hWH*PXt!ypDH)b<Jom1gS9moY)NluXKn-bL~{+W5(H9N
zqd=)q>?ESV8zGo>$Lf%4EUdERbE$GcGSJMisnQcE7N?Xw_h@qfr|NlhLzJst6lde<
zx&baC$KtHOWG=AIK-QpHi&!{ps0^-TlkJD4!G^Z%I^7;38DLzt54ZY-E{9|GTy_`c
zAdA1hd0@ii-#=Y?EHEzrP`89~8E4Iwb8%3ntR5%Kw~LF5uaER~ALFBFI`f^8M84cq
zEYtju@)(B+tmLB`GY(Phle0DneYk#m`)V+w2N9lj;cohf9+O_G@OT#4ykXi$ItQ62
zHT%&oHawp}Sk5%;<+9OjWc{+DNZb1_lyvogR;`AQ)$R&qjiMd)9v@<M3W;b{Lwzs1
zSouCL8(UBe`UG8BmX&pu516oL*MTSE{}=clKkV=)b0L3A=ekG|Vodx~A|N%brXQdW
zp)am&Y1BjqyYSS!{3u&`nzm<cX^RL{h)f7+>vy$x#81OjES*$ofi*xxC!c!4_y+fR
zph*!nmCTOlprK55DKg||G^?Zs$hujVy`7e7Ff=uLX;;&<I`OikC1#O0s4<Q-Jf-#W
zUZG-dj^HwRbO&!9AlhxNeow2Wt>#VE?R6)^rCbApOQPoVcOo09`=>d;V9B4E7(5-r
zw7q}^kq?j=>(TAoVe~ya#ae8qm-$wW`L(H4llda%W%P{)9J#QZH!@tc#*)?$YmU@!
zM+vw6oHnG`#S}k+`z1c1E`DM@tl`#Bx7n1*Qexp4_^ocAtb$6@S{`^ZWZE@rRbxqO
zh&4y*w>=W79+c~J+pm*?F-t2)qm|Rv%4uok)U|SY+*@(%OsVz2a;gw!>9o@5v})_L
zYU#A9>$K_)fYoR^EySetW8?woT8E_@s;j+GVpIWH7emb~f|{Eu^luK?zALYbE#m(E
zenJ<ZV4kG=fMK3B!W0heJ+;vd6FX{Mj|Ac6j)w}tw<bXLS3oVRBeg{XNZj^A;KuVb
z+sA4fmVG^nx!Shs6G0D$wNT^F2rY5^S4`%*OblH^WOI<VAaS9-M^L6%FO746qMz{*
zebnTP_80MM?6*P;wF1tJD6`-Q$FyoPWp!oyF%JEs?5em*rj4vy(>x{!5;;GFyaI`H
zHyn%AJPjTK!Zd_D*i7UCp=b(*DAbxg4#Hz2JAz*pZ<&y-teW%VO|_&Sjdqxa)_$3!
zI4~r1k52(tdtLK1>1siZQ)ni3Td$(GrAF4-%Ka9zfc|s|h5O|nk{OR>j}V3z?;vzg
z38k&0+D)y`AkMot_0!$6DKX3HJ-XByi)CO_qS*?r^B}is)WG*qGkUcHW^WCw4j0i(
za#8AH5j{m+e6?DwI^M+6Y;tl$?57Y)YyEavJMQt(4_@7me}NRphY;}(`uuT$^1B5(
zvXIHQPB!v&9MuwKc>eQ8O(ksFcemurw7FhpLHHcgT$0kxa4EW>6P-BX-zd@H>Il~1
z^+i2#ooR?P)|k4Y>^n{WeU5BX>^dZ3VOS~Qs(Z<3{JZ5>s=qoNy5_lhEsXbAyaj$(
zcE_&~(W;w$pHaJ|&_^C6DPC7*T(`P!?N_q?AB;u^qsFA<aRbeo(Gs~ev2y}WMYdLq
zW@QSp+J{{Y1oyz6!~t%}PEB-sl8Ocyao8wyC6r@7NK)+!nt=~BbHZN(YVg;Hs_!5`
zl~+nWjny{r)6V`Y-HYF*Zj|W^v?nC8M4e8meR`FPt$RbSNe<>ElmxSerq;?;vsAVk
z)pqrc1x4d3h5~@#pjmh8E3R5Ku9o0R-CR`Ta8td-Y34py<B4i_My^Ch?O3uc%J1SN
zH|MRyKXECX8OreI>^<q+x8!vtpWT4cH0W>Pch_zV?*agAHg9Ezy%zE;5hF!TTkj;V
zuY2u~um0{_*&VW^7qEnO*l}H+fmgePZC87+ylyFcMX~tlOmr`Pn%LbwdTG42Sx$sK
ztV}C973?#)dI^kdE*0)n`d8&BmZG=YoXQCur+&ZBFz#<Zyp`(gk{m-hNFMR-&Zr!%
zda0wzOH{&>5<U&FgN9i7zC*i*fXWD$edeHhC%B+pf~2E2?}W#Gq%dKGbTZNbZ@Z!M
z`5Q@F2R)>aP1^N^To7%eWea7|54{}%ZwWaOzR5tZmPK0I=Cb@$2{NTN`)&CSjkTDI
zY0t)V#$irzl`)EqK(gl`ITNN)KY<Qey-ivTW9P4Txhh1oVy*X{H&-nC9AepeYndLM
zE0%K(v78REG^?;B7JZ`O`)9F>$~(NPgQR^H!8#^#MQ&#c=A1<^r)%T8dz-f3O!ljR
zkT7oT39aVJP{)0T=hSzo(LUX~?+%8howuGZnSB<?^iI9@yf5=5bIu}}-mBNt!-JBQ
zq{i;NgDFst0)xzYa7SfEIyWg_Ld^+4UQNA6C^r`!fQKevI^sLI4j!FfwsgUFeCX35
z*#P;2o_spgv=qgLwX~rsZyq`;^{!=ioiCruI$i3f>WQ`5qg^*!v};{SuIoWKy3a+c
z1vg=)RHQEZm-7D(x%{fGgJm_9SVf&3-n?NVbQAxtzM0?t`t$t)8RE{U4Yfy%23ptG
z5wc~LE7JEFMh%YBWBaS~fs%i{GJ8HXIgc3ihW%TYs}2>@)!cSNRH<aDoB|AUM0l8#
zy>pbLU$XCAc6G7Kwr$(CjV{~lvTfV8ZQHi(F5LRf%$YlL-goXg=a0Rf%#~|p=6*8v
z&iF=rBDN_jjJ%$Gm+A@$rG(J+PWS&66Xzl2ay|wlBc~7m05#kI094;%Lg-scDE&=L
zP}9@U)6p={(|!vIT5~%mV|zE6zof?BU;RsFOloS{th1qbPgn0Wk;N1=5scT)xA4{e
zasjKCy{7}7Fysqun5?9NLd=u|f4v?LH<CmqmruTE0#Xp?dY^I`>HqHe-qqR#u)HIS
zHiUL?K|I9n)77fC7Z{A^Uv_d04Uh$4@CR1y<uiEt{T84eTb!i_{AQ%Y6=@L71QTAN
z2{jsj5`O9kA<{7A$Q9T=qYs8bi+n;6E!JpQeqbC^2F#YDTYm%^PzruUVeG|992Uaf
zw6_|$b75Qub73_r|F*l{BoyG7c&?3FdgUE5elrUa$>5<CH;IBDkunfMyd1^*4F)B9
z?l^3;!wrr5hCwG`J_YZ_yH>5iY`rHWR@72e143-`VZ<QrW=ZCkUt~$(;?h&i>i5|n
zhG^28)VKC&^ik~RWIn!b3*`Pa{_x=Ld_<_iBapX5)a!U0CLOlG3KED{fqhr!-wo(I
ziY+0~yta)WQgYma6k$?-z3!<{%9_cb<$6vCsqOrha@BP45U2TW8|TZp)jLep<$3JJ
zdPm=l&<AI5;bvCn;j#!zsZk8hl<X{mBE1T%5%R3BeNAloR&3sRftFXHQZ1}Wwud_I
zXoSNM7~Z)(=3~X&i8ah-AZ<@Pp!#)A`_*Rin{E(LId2dU0Z@pFPR|Y9E3G`lHVAZ6
zpoDw?lR9!&5;}rJUd{T4C<H!h+p39VUB+ZScW5MFSG!Cz{iehkC6jdHfGcgE-Nq(9
zSn1UgSE7k|*@d;0f11>U`OkHes6@F+ehMYS4(y4-det_{)@P|HhB%cWTHznwgasA!
zdpcTCWiq>c(x#@4zvUrjE5%>4cvLhcc{pI;l_yQkG_<PL+*it!Yc!zyIgK>7U5gX1
zZeubwAIIGY)F<ASA;A{ZoiW$>%cZ$aNV^)GiI9^W1hY6z_`)$L!3`-m8)_*Hi`{#B
z+{c&X+ZmX<>2DUK0IV)epx7JFRD#t)EFkjru=0Dxevwz<M<nf|t-4>D$)ZicJ#ab`
z8{745T}-g49BTwOBVY{Dr-bA;I_wtP{<IRc(~=pO<q^BKikJ2$^d1;Z;jv!0#%<<g
z2PI@*1ve+E;?GF>ess)AMPn)x52M6612XUXlPe{x(5qsPPT<^*Dp|3%A$rLwWQG(q
zX%MklR5l%@Sq3{Iw<RbRN+hoCi8N|}Iby+{h}`0N^tR23l=;^{lXpQ&<O;yvi8axr
z9!1&{eml&^i8s;Yp%T-jq4Q5L`CoadGj6rlH_yHu+|{26y$dP!<lzgfMOyQt-0-Q@
zsKP@9pxm|yCfi;!#0?Xhl_MLQsf;egX-(RI+IgXyP!^I5XNWR2SR;Z`Bpxv8l1fS9
zWI@@hSVKn1mcFiL!HT1<n0lIKuQ9wkf@3-u?#kNjCaD7T<Vk_BBT3Z2@~6DR8L^k)
zu=QltIVjhcEo1CfHG!(_?GK}g!d7+`=ktBp?E_H9PDthXkG3e0b&HISb1M9q&cQiR
zE92WtcPz{Et?LJlXP5REI=IzKuIt!Zrq;;|tuEp$bblgoCxOo8=3r}}&fYmeoCb9E
z8$z~$1UA-0R1gL%46X<zRSmGg+tNPw`BaVXHMJFWyB8l<yrh<y28JE2RHA1Rojd}f
z^zF6gJLIS`vyRzc@rxfq?qtLRbl4kpH%8(~w_nyHhV;VmIZe=R7V)_m+`tMsx}jLi
zX6KKs9$<#$usrFocv?UC4-KR@vaNL^Qx;w5Wt<Ox$E1W!zR#Jpn_G)(wHe6Q+x`e2
zX4{J;;-=_UJhlqUq}kTo^@oNLZ&J!ME@_sXY@6?sywrZ(+8jgR3Cut;T3NgbD$1!Q
zsP6E9i1y^qVtT)5&`Lg53ZspJwGp$UGQk;QdZUS^y=|hBWhx!2pyD;Y_X~8_w0Pme
z_MsO}-=pqBn9Q-4tA&R6<o`kbh4MSJVf#=@{57yni>7gHtmRA;VqC8e+$yLX=pKf^
zege9UP-A(20ptNDBB<oz^0D^%<0G?$XFY!JF%LF{clU-<|332<NY#siBiDq<+$!L6
z`<{%~%p`KU+Y~g-2OMLdo3aOWRL5kG2Xg57nFO}-_i+vA+&indw$P0Bf8;Zzz9XS;
z)1E}2rC>_7hrMkaPkmo%J=Gn7;=R8=(fmHot0ir$2F8PXKK`J}Ecl89`+iJeL;DT(
zF&eM{%5JXw__KVM&Vj?W5iJWo+T$8wFX#zWFt*yw5QX>M=p{v2aMZo?3R{BWax3Kf
zh|nwiJlW&;AO6y2U|@@hnX&vux)G(Bi==kaSZGj6hQD@{NW!24QRMn$Fi<plJwyXl
z8nXCve_Gf|{SwB;Mbwzu#Moqj7-VkLq)^J&e2Z-<x|1q|P>Lybn)>nn`MC<XvMkKG
z6XanAZo6CZSR)yS#kg~CF-mBV8s_X`j5SO&DXuf!{$@UV4v;VlaqQ;C@%k<eCWw<6
zZLUnR{6hKY0NChBgVT_WcoA;++}x$1y{xivul)E7cGj+sQ;}eFX+dzaj&gkG%ljqP
zW6+CRQuyIWDUpa9)4cXF;f&t_qf(B}_H|o**3YcA3exEz{V=7i1PU1bSw0<QsB7X$
zMb=}353ErM<SbY<wY81T?oHtQDk~NB*|7ohTb}svllMT&L5Oh}W@>_5nDHFJ*7T!}
zAu-wt_56-3-)=(+oqbv8p!QYeQ%+J(XSwf10Q7?4A>`WEN-F!PEG{D!jay{C<SWnF
zaPW&^@lzOE_2+tnO;BXf;E(X*<{j;Rl~c_v><A$`8q#@SezGB(b@caW9Z8ZW6Pscr
zb*C=<;}4sQ1&+l$MQ7($i1_XSD$zZ#3%Bh3f=~bHw`4ctTQzDr4)McZ!jds3Tz0cj
zmX@j82Ulrb$@BmvO9Nm{)UPqH8%Z7@(L|*9p^zS>EVtyEUJ{C^?If5tSDE_B`E#b#
zsHk6DdO~<RO!P7b)uyy?H?0%)+m+XI$CRZTRw6(-%Ulj)U&**VO@S{KJ_lz7yUD9>
zs@4weqZYUPyC(MRr7n^xEbb)Ctw9#dFaOPDa@O_h0|Eg62txt@p#9G-)4%vi1~xX1
z4vzNvwtsm|m8#Ow>n!k{*VTGWWOHCi`%d~cIXU43!AzacOC-<|Sein=6!1=0tZTkH
z1r?Hr)$2|+wP3=rx>DWldvgm@eaZ8aJ}*CGuUP{QfJ$V<i!5((cv+RITcs)}6ziy-
z4}NYZNN7@68KMSOu023s#ABN_iG?a5a<r$;!8pcI;{P(kBL<TwE43Qu-du^wOp=~j
zhO+Ul^S_{M{x!!#|ISOZOg@^}fcK#>!%?$XeDa`=qp!Fon0>^EZxa^SDP6K-5$Y}n
zd4ls(vD7&&34#HA!vM!x)fPIG-0Vk`RP*7DHQLwG!u68mOhG*rUsWstKO;Pjbzl~u
zx~H}pcrmL|$2A(Y-eEse&MU<r7{~z&8{*xrxBQzeowWo%9Qm$-Eu=V!(kC;H&mbs+
zhe(Taly)S8ge>h(uL|wblyQ5^l~ReZ+yWyO?VckbapqJ<3*`<48r3mMN^(Or@Z65=
zK-UhkHDcj?ZNO|Tep-Umb_SEis>&3Vuhux~Ne4@@`ee>R<sU<M^1qpkTjm2QOhrN~
zL9avdZR!84e!%sX^OQkMn%4K&Q1*;!o38c~-5aZ2Sl~M?DA<Ez9^<h5zRv<lhy^!j
z{6k&@mQIf2RzQ*+qoxn0DkdvpsYi{O7uX3~J6D;pl<Vws|IQOhpD?#^XG2$37I&Yv
zu+(M%qq<%bMIU4k61tZU`4EELZ&gb+purIVpc$D?PQp>GST*Ga>&F2$^dWr;B|D6U
zNq$Nd30~>d2Gr?rB+!a0npI||GWt~IP`GHdrb|lMwhN@H`$hi4xYzE9?f~g0rBq&{
z+vNZ<3z;=s*X=MOmcp&0?Uip?D+zJ)SKp?A^ZC+N7ycEV+r2aLD{?{%JavOG67}d0
z$VQcWm{5B8m14RlU)tc_S_BcyuYAAg{L=D(Y=9h_6^7QK)yH`MI_`Q$Q?4whp*8OY
zxG-$3@>2OS^3`pa-1!EZ@YTcIj&dih(|$gDU7tGjjcK;c(S){&s1Ft>hVm|_w!O6#
zBHET4*v^y=cwg86Q?feT#5&h1pM6?#N><tq*(~UFsba~}`SWpHOuY=m0g#vg2@!8I
zuJfzp=flrs3Z7dyKk)|7l$ia)O<PRbO$@bQu&UxLm-Mfp;&LNA*cuME^UypSwA5!f
zLQ_3L)svj}z;VYHsp7FH*^i;dCKwgf7(lWDs2Z8^a)uFHuA-5PgS(y8`9Cgd1<E$o
z-d!^M6eqRr(TY|D4=u*iNjOB8RjK6tYF+GuF{mJ#Z+)<{-w8E83(63FXi}yW#A9q$
z4qli<la(3sWiM_XZp@LdKcu2vlgZmQw=A;Oyv=K_^<w3$&v47jq0Ysmu3lfj|E|Dl
z-SUxvz7?1d3jhG!f8I|1zY6Rh$(~6~tLSt#_)qU{zjfupO$u?yRU&PIN}0t>N8X*T
zY8Yq4ZN!M4RU^#9?(E=Zctii+4a<Vdh+Ov*`?nG3U}LeUF_0oyAHb%?z=NLWGFE@)
z&4c$~VYSx<Jf>8<`Q$F#BWzT0!s$bYd7y!ii3g;`0t^Pk>0^XOig$+^r{6I)_cZ-#
zUL2G#)fk5cd(0*UczEF3R_*nvda&{806oLthxEM7MMW*%m^n~7K-{LBuavZ8)c9(h
zcr#@h!L$w>-eek_?{1OS?|p*?VAaK@+T2b_D)cO<iPkcNO)^L!!&`eWnBltf25gXe
z3$#UgIt<c!;8}Vp17$yXP=KumevOECyk&fC<-u2T9duh6G{N1nks$DEv9a)$M+sBq
zX4K6*Lh7l}3rU6R%KY?d6U5xR+TYo=W_XSJl<4x^pbU5+f?{=vK6VCA;fLa96tay+
zClbS`?{M8purAe~YR`|Q{F(VPdKWHySXrp{JVdTlxA@D9nFJCtWV(9vpltiX#^>X;
zLQ%QEoW)jLSxiAp72N=_zMoA}gE~#1D2WScH;If7*BxG*Z$hC}SuX;XZRqN|Bn$VC
zCWap4Se(Q;jD|GRxbCEE<Ft$?B1mPGDg?7@)r$9gX5nNx)Ct-Zexg~#grlu;u^wuS
z6D^dLwav1bi&vi^hB8C+?vpJ5zOn*uzrI24gbkshbUWZ3cR;o|OY=qNS^R^k$3l@o
zSt#`m9fJW6qqq(;>jAZ0rAA7^;kq|!(l6RW6CP|QCEGTN360~W0TJ4B$C%90B*<R<
zqw2ZqOzh$rM|X>+_PLOf-*NMzW<}#Iud76M(q83j1Qcy$g;{;Gu>p*}0r>><{`rKV
zs{n{$hisPQq@z)tu@1$Rjw5p=d`iFTZn8W#l9L>uHOiC)bvs+TuOuy;p*6-D+*Pcf
zm^BVE13FP<6<D?fHGi=Q{vuNx56-8IT!qIN<AnO%A2D>ZFqaFn62KfYB^^RuAMVPd
z^FYGV4oPq9UCABMoi$m;uurU%=sQU%3XhfP#wO@mf)e&(>v%+u*(caYV-{37ja`1o
z4{elY_=DiHj+gP6WFkSF<=*nEmA8IXI)%L6@`}An)exnQo=IwVw@i>$wFKJ$xirf&
z9KllpI;X)DmRqYu!>7T7lYXMH(^P$Dj>6qfWmaL9f`XX|)<As+N+G()%1aBHDG%}k
z^2lsDcMH0Ia3(bV`zTRgYXMYm3%R<d3b11RnwQv)IPC%6vLy!U$j%1MeEQ@l<yc2)
zL-<dZY}>Za8NS1O<(l_6Fq&{G*l+Y2KGYb*4<*A~g&eLQrIhO-qM)i421R$TRMR}Q
zR7U1#jf!+1JurGe4N06qKQd*aSzbzj5mG+1f<?o)O@lwxHe3&Omg*<bT3bbo`uTy;
z+@w82mVDnKCq+qLDT(-<)uTiix44m|w%qv15kIx&OhB$>4-<^BtJTa1SQ|*BrBL%o
z9qhia%0RY3K1$-SUB=9{?easatqX*6)bUv-)C^%Q!{Pd93JAm&qN;AT&*xN*y}Gea
z=|kmNqi+DFD?JX~Ks}rJyxKfKAK|>1s<pDF1S3p%&}>$A9W7v8GyId0jC17~lUBW=
z@f7M)dB>fYF4;=_;RXneKp)Ruft?Iu-8|?@8nS8imX1=AzEk6P+<nU!rBQOw&6Ljt
z=!B2vWq{4yHAxRUX!L~gl9E;_$4qEcxyF%+D&4Jm#9YsBRqCZ{N7PUa^gz$WhcPbN
zOw)RGWkN&k(ipc0fmkqla`0jLKF4f;!q2QU2nt_zjEI<S9{P-_k9)+Z#I}6(){7{(
z0grsoj^C$HoNzVHWH{<II7uN%?^GT|XzJt>YzV+`PsOpI*J-%bRei_wdmK-@uAWM(
zV^UgDMJfQJWhEK_j+I@8+kehUI+fLRC)+emMH=sX`6zi=(0{~s&$I)|eg2foicYDR
z<=GLIph1DYPv~HK<WL;sX%J4qu3N6|B-b@oO(UE<CC(~7Z*}7Rf*Pi-rxa8oNy(WZ
zZf77Wm%B{R25S?yQC?E5CvQ&}1MU;NWluNwz=n&`tnvve(ehaj&X<HR(o+#`S42)J
zB^7K~1vo6SojKQKfyW>T&}?EeA()<zN_Fdq!OM{sh_7=p5;U9t0neCC1nKFmsxml&
z<T0VMQIM;UzMidOrVm1zI4#?}Dw-qPRFYiwIPa?Cot~!RZfHtFRMwbnNGVzIFs~p#
zhag|Xo=4U$z8j;GwOWe2ayujlH|5Dg@!5=9?Z1&qSx7P+w=pM2BZ-lyo)02{YpHye
zR9SCxTC8WL#*1;Z|20DL8aPs;8ys$MKic+vHb=y6{N2dKth3P_1SiAx<~LtFb}xM%
zfyisZFXtA+vQR_kRjvCmbTfSF;B=0BxK*|Sm&1V^y&P;u0>jB=>fzHen%t0l7sv9b
z<N9t;Bb14MJBio%@LohEDdvgDbF?7J?`^s!9|3#^%=Jz%UX&SuyYq}|c~XbLJ04>q
zQrv-6t16t;qFL)o)bY-kIyS#hDAcB<RC#yUSyU*#JhYrS88XKHmFc`x_-P845q?b+
z))uUUTA54!DuZ-3>w6d7=OZjheO`E&`CWHawZ=f5;qz%IN++DO!zcDD7hV&N({ZBR
zX34%bA}YFg{o-PodicSvWXqOSr1YXq9lX()0=mRwy?E|4iPe&VUBru^`vd&n{fSe0
z=-WIX0DxiW|EE9kFY?61#>x8oshQ2+;E_cYX`6LAn9gI>U!Y)?e3xy2b$~QA{XhD>
zd#-+4(l^NoBNDZVvs`q`;+kRjEIK!j(*#K?T*t~57!?HiCde1?zGJ>N5)>fwNy|V5
zKKlRJP*k)_ji=h|$uc^?-nKA~k%-tbwBLa_&k!Td-RJhWs=xT?KYNDav>dVi)5Jj(
zi<RSgkb-=cqV^d-PC;522f?ty^-^LHa&p*jtzUi1G_U~;Rf>m2pX;Y86EGL+i=HD^
z$bnXdJwlD{Pz&Hv!Y*LIOx<g7q>W=U_%hGj-E2XpAF7f>s2a8Hn=_K#Q;nuRLk}I3
zIIlDVBm}SyDNIia<g6cFRqoL=NbO=kP}aHrI%tUkl7KcINqys%AMFF)x!)(gO*?Q?
zHsk{|S!iuA7okagLheG+OH33fcernBGY_V0L(&$iWvR1!Pc|tVJ)Rln#fR>2nUyog
zu71An2_cQmDeNlTA{=IxFHy5ZJZ~nap+<}mFr&dU8Hwv9V6b}}UGI4Q-MvsaLi~#J
z2q3<KS9pJhNhiThH1alB39aPQ6WI6wntvbH$$T@am08n#d}|^Kj8P5Vi!&D3;*gG$
z?SPK8ZIMlXJX7p+XaFpOjHtMf*NS9x%I>!$^NA_R7Wh7vBF1E_NfN;_pC;?d)}RT#
zPTqdw3fl36cJ+NM=Z;ThMb4q2u@a%W0iQoFW&uYxPs0bTKaT13D}3r)-gy6WgFW>e
z+U+ih^mSix=Y6l{*LJMA`le?_&|@O4uk&nuY^M}-j@L_Eg{aHU;{)wD%Hl0b-BKHB
z)76KbWPZTQ75VKQ_-ZGB=JP(<km{g}Dq0`|j1<@VzW7`hd|jwyb3eOqsIV*RYZPX<
zxVl5{`}77TYF#YGP}o-y@)IZ)l_SIh+`rqqJ|W#r{I|V(|Bvn6!PrXQ+R@C=$?PvZ
zUZ^r|y-o+;aZU+=+6fYC&<=~i)|^L{=CG#u+ZRz41tAQ1q|vx}q&pdIwN`l?B|coA
zT9vcD9`5Xj0$=q2q1kVom^_hWn`|zd2~|&Qyp|wZPBF9tuN$Z0T-xu7%8;{qf;YY!
z5}$cdk_OetJ-Y*@MISU_b^HAOcw*QhVRs}kvV>pmz@i0<jZq?B`Y<ix-XpIF?Q*<_
zLszehlx}Vs3GMtG0>q5Wa4E*TtHPH5Xx@ZTCmoa;!SVYa%!Vy(lai1z{GKNVIbX}Q
za9QKKAg*Gj2?f6-4K#H!GbzAvZYz*<NSg4(ncqG)%+!=TaiF1q8FlGRj?65N5}r8f
z*h(M1ppf}hTSlF}^_eC2!Ov4K;?fQM6Z`_t#6>RJ^bt(`G`4K`LJtuTdz;}S4#&UV
zVaF1!KUhL@B%8gcb&ZW!8`60<bF!4nl?mp}oIzHOwFTScHoLqyu%<Tws;j|DQ;l!N
z-!@gLvS{+AXp=KQd0hnypBa|gay@_$l~do-Yh-X0v)pBxijSt!5ex+RWWTa^sU*ih
zwD~9klGl(q*$i}ZZLDj8XId~^1mBo43zUhoAAP<|zbtVVvF=uLs^;t}*UnCoMhjOR
z&}hiGzRw?;`lnnTX3;uYkyg^#FXiCFJMxNnz|P@7>jsJ*G#7o{731dl=qn$w9FLQM
zRN3O+WAbsQmZm(LmZlKqizYDh%hSJUZc8{)1Ss*nU&MK>HE|hK(|$Mk2bG-Jz80o2
zbTQx*Uhmj*I9w$p!%JS38?0NSKQ6y=_G4XbKL?#r4}Uy9K1BqN+ezqedjnSJCcd0v
z73nXlX;3su-V@DGd14Ooc{Srt8(Y?M&U;-s);#_Qa1;Lo{C5LS%N$SQ`;Ir6qyA4f
z^nb>inEn=UQj`2E;MDaUa6*NM0Z7vKh?UM4MiGYNx4*881|^QNVnHU4akMPH@u9`7
z(<!1FTMfq#?|%*2=3*m^WCU~YWB%;t$^E*5A4Atm&67I0jDOYCYt7}F&6AonbmQxu
z$wO8!tkNtOQ41%avK4zuII#+A*_qLt3?Rab*P;uO1SMCHGYEb3&7iQ8c_k4JFK(aD
zyh5)Yy|~+4$|PSEe2O$TJjR!Q2%e9HuKL~Xf@7dZ4zlnrPb-)3h9=MjZ(sC_?F59e
zZ5M3V*B6FwqIE@53xl}6mw0dCvRTQW5R9tddGxHE@WBIfyNi}TZ_5JA(~!)74ftrG
za&i<_-LZaAC6kKI;|zUL@6waOmkUx2&|mA1{|jC(Cv}Chfb!@Ky>J5K82)I=NcZ5m
zuA)gwC!W@tzx2{~*eNCq-U8`2Iju`pCdG6G3ev~@vz!)wsi+AR*`dX5kAzgnC~)?D
z_-pmgHCgtKfg$hol}R%#4AEHDSu5tHsL66u3RiG9W2i;u2Ok%S@3O2?3jVMqm>-a~
z482g~_HtwJr{X`uG#DdP8HiV8{5cB?Uq1FCy`H8jKb3H_s8J4gOK|~4>z>z2#Z{s|
zjY|d=bfjkyp>+9xnW5?Ur^O`y)MrvE{+>)it++!E`$<B_@6KWXe7XWpePJ1rcs0=R
z(E73S!u=hE+S8i9rh`%*WhbhgXHoy~VvC?3l7pd__iXstnG$A@ES4~&vGxqhX@;VR
zbkgvnmE(w*&JrDs*Cwr3Lkuk}M+2rBR%{}53d&GuKVhwY*xadZwrMFshOTWD$>zf-
z<B9~_v9K(2y?5~4@H(%|hD=|R-K&8C?w0>H>?&(d=zTuoRXVD!tdEMD@e$PFYuWtO
z&JDL$*z-UZ;uurlA<5Q)pg1r0%D7F4O9-BRbsg3f+iRRHMRh!x<U&xpZLBagpi51f
zgD&+ks8ZNe3}f!89Z$4+^0b76e3|YAx@295stV54Yl42{H&a$q<^D;iCZ`$C>>5Rn
z4c${yW+z@{_))7onsRchX=+ue631wB0s^bRR#Pkt$b{TCMIexFP1<pjcz>p*3U;Zv
z$kPn;u0aPreWwW+U|{43WE;TFZ=;Dz&BNtQ26s*2Ga%bk|I3Z{Y;b&?oLZ-i(HT}6
ztoZbdhP1qA;sC*&hYhsLx#cUALQ8hjtVVt;(0koTOj&+A(EUld#nh%D+6gH+Zn-MO
z*Rg!%MHbGw?OssbYx~uXV`$<AlvB^R!M1vgiDd~mcY8k`RO}kD%zgy>ID@Ei+Roo2
zT~@uHAT!KRbkhugy#M&j2?v*;aG1JX-94tkm{TLz>2(f^KMVC@=T);^aPQanENIB=
zk&BpI;m(*$>$KqF0IgW<wGSxAX2l5iM=EC5B5(GULvP%lZq8-3b~&Z&X&vn9<4YZF
zd)NOSuCo3`tXBXG0PqJM0D$p7hpYa@z5M5H^j~;#rK)E184JAkb+uS?nG9vDa#GkP
zp{TGj?%Mow*JB;SEnkJ9<v0uYuZFMAeWCz(#68=mP`znS#!oI*&Njqv1R&q%t(pLd
z4_2K#xmeSjMQcdL?5+ZCw%M~h(N3vt{)Ys6W9JsvfX9@UOhMetmO6QV&p;}opE>k^
zUr|t7(?ojv1F5~Gb7KPPEsjcdt03Hu+QToqR{YesA4aVSPqfc^*<UNFE9Nd2^v=YJ
zY-}wlP+hS^f|hjJ2co4<LFP(Xu$MIk*$&{fi%h@@m0k3og;tZ*W_0qV>b@H-T!@aK
zd20LLX^O5<?7S4}pJwCSfELN#mH5y=45~^lZ*?=l33lb6+=w)w$?(+yV?5vnRjqt|
zYseVae~2!3^L23>$A_2%wazjr&upL1h}^V#nv#7R2tuwhpqTm&HGZZs1pU@1S`|Hb
zx>}z@&K$5T+aw-^z*KbQ)feTwRr7HmmQ6ZR1Bk1(-6(;n5JrTmq<S6+sH#BZ1TQT%
zj`hq=I`|VEcIXy|r+OJ4n!P5eL!D)4EKwcDT!~I9TN4>~o)-gbENPmQ@`@6UDAA>m
zJ}Gd3767>wqyJk(y<}FTCbZ#hZ&Y?<sj?p_jr|kU8h@D}aE(11%((M9IKn!c3xn4Y
z*>(#$MRh{Hdr;s8W0znZeFIP9mO@1a(2P&cXC?L?p-rR_;JFW^)226O62GsOlY;wI
z_1RT7wXEfJrR=-Vg!23*&AOE>4z4>qe~R5%8`CS#Akwb37FQuq`FDGMbrwGeifN#m
zMzihR4J#LQTyV3TeK_>sV98$Uh2-QheEc;Z&y+Bl+cqFyv+df%&cwqgp`&g1xIC3v
zv_dCdH-)oS5}q)3)T_cNW3x6#{H~czSg5g$y_BLk@wm|7l2;Z`Q-xeUUHRR53^VJ}
zp!yUjN{6R&HqQCohRqji;YOX$D;)VP1Tf>Jww@CJjJE6Yu5MEgTO>RPpNLZ3N$`CP
zZYNjwNq_WULaaTDF+_SGoML@w{M;j+5A$g9*X<|)x)`+O>RC)?5XZGyiS}bG4?P*r
z27QpS#;z{!?itkQ#*6x?$}()_@C><;<m+2jJVNHZp{ZKlC@61j;65V1>?@Ops=jlz
zEiS)oeuIc{AOwC{oW+DvVKcsE1*g{D7C<QotXkv;MsT{Z&u7B8$Ypx+Aotkkb2SWk
z!`J7#ZzYZQOR+Xtx>1>q`n7SclX3EDT8Gy?@4vesy)-JcFW-wE=_ddH)BkSKGyT`9
zZ&Z`5-eZC9epW1yEo-1eKz3c*tjf<T3oiT4ds$~^xB^{qI2)ydV%%<842#pjhxB`J
zBV?p*zh~bH?ML)x=tX|j$U02{NG3pbic3;0Ck$&SoftMocNH5G7Yu2+*uW&B96pYF
zb>s`#z@uWlv!=#?7-c{Y*%ktjm(&cnhlnV%6?;a;<@2c0%^5j6HI(jS8|jv^P+S@c
ze>GOL?qIk&B>cdI)64!WK_#Q~LW6e}R<u|-M`LU|B4b^_qm4b*x*)28xxZM#RJdkQ
z5;SDTb8#nnNT;35QpU><Hw5#nWJTyluW6%uLbsWD6v0GRH%M|nqbGBG)8L0fJ7{y}
zAJU{&5Ktbx0hFI23uZGU_`(QLmovdSYM0a4B(>XS`B+<!w2?v*a%)_4O8-j2CccN0
z`@w<7%}yo<aTr)aDHS5VP;?dd8jbR?>#MwSVn$K1h(=8KBX#fX2j^Oy+aD>=Ya(iC
zMYM#cX%#aKti7fm^1XVvz@)hfg(Ljr`#EihVH&XzrV=%kK?`jcf_H*zAVWMY5LEF6
zYsKC(dx1Vit9ylJhNsH-#a2u+Kx4mh(5(RC6O$<Ce<qyj1>J#`d!h)4;ziv2fQ3Ys
z5D0t<@Iqlh|D6@te1#ruTXo9X61)+&U{G!q%G9rq#?WTt#$@e?tapt*5nihMCoEv+
zalol7@d&gG#Hn?TxBw)mvX<~E7X}JnUx=hH5D<=z0H!Jz#;>6X%z&jJ*Zt`eTJ>cB
zvEo&U{Fo~;<@b+y9k;kw)9TZ9YubxMVcd!KW7g0=0WmTm$ljHvShAOIey3q(%OlyJ
z8Z<n#Sy48Lle_F3+_yL*1jz_fmaO;FFg`epp5|<s9W<pV!(W_L$9Hk#b`|z!RhQlB
zzR)Xgo|s}C>+f_Uw0>AvVw+n}mjF%oJ-8#Imw|?1A((}%k>k;uLNeV<q-AGu4}j9R
z1`lyn=N6M8IDw;SrlC+2iBb2k#sgRE(YLYV31~@Q<?!yzp6{H;Ljjo3+k$$Om&LEj
z);bjL4v+zRBfbDP5Dti)oRtH!#nIViAAj7(x|q}Jawqy&BUcBo_uR+57V~UdA=sq4
z8>*X5j(jS{5?vl6B9<T96)~DWE<Offo!M>uFK>rP?wNNpt$Fw^n18pe%1@NdN+Y)K
zfReGW)moqYlsHfHELScMA#@6b-C~WcV#C~AkB|{@mD%R9R(w#lNv^lm8n9hvH?fhB
z!Xd`7pD|dd)TYI9NytARY;jxRw6rwJ-roYW3qVvNZej44FmIVjHzardSPm3TxxCJ9
zwab0`Q(UZ7^Ku%_i}=RijH|gN;fGpx&l8K){pY`_^$fl!BH?ef&JXoJ-AVpMt^XtA
z)%cGH)wL=Jx^p=Usb;M}*Cn0hGd4JKo%rzgQAjZ<Y^kwdJmfO#M2(v5xTu08#$Cgt
zaSWka`apgI+5KUA^_78|;*;~-kFBOkxxP0Y?n|(h%sO#QX`D)a2VlA($*%iiXN!w1
zR?U5=hRr}-4X8u8{jQE|f;N=^5VRAc%EF$hYnNi|Eo6|JAo4|C@S~BhKt(sdOFeUf
zrwsu^H!vGXCPvh{)Yhz)N?nmu@H&+Zh8>K<+AEmS)X2?Co!?#b8+=4#X_0>kx(Y~p
zel|<xrkDoG58X}!%*@{0;odQ|_PT#{1uy4cv7={P^PWA(P9MV{fzj*JIgVpYTocu9
zSmtZVuN%(%8he}cXNxBB32!Xi#Jh>lq~1+Rk+Uy!L$IBB%qLo7l3D3JeclOfDkZ|d
zS3w@(JjXdWLS|p1YFiCd&()D<zAvfCarWnb7APTX)c_)!FfUaP+$0n4qV1v<jFk?{
zsxY3z4*-+wL5D7ywTf65%b}3^vb&Wi_0y=2DV8Z{vf$9cmC_f_eXkZ}jBjItGrXHQ
z)fM#V)(|<D`n?sb2kd{q@ezkDHYA+<zyRyO&MECn{iCS(@D>KrGz}!gDfyH>ch>!_
z553SEyX~r@Z*7B(4^_i=WMNadF9V?UiEDByGxm=!ZApn8Vk$0}^Dw_HJ?%Eyq0vq!
z^W3OfTQ`DEs%iI0vc?cl7yxRU?0KgC3Z1B$nUqv9oF2j_P7&WbOl}YZbSlh(!ovf~
zoY&nS*{}bmu{pRi*03M}0BrdH0BHV4e{g@#$NoKpwD^BPSQ&c0_*yOXu*?C#Fkw!{
z6t}csZ9N=li2^HYWBHg9t+o*#T^%CPJh9L=qasbfQYswpW6pzJ1UE6SmNo#@oozY^
zI<gf9Kj_at{h&y2-*iPu*rx|z4<Y|W4JhUI*KO7pSD&Zs9Q6$#7d=JR0A$cBickXf
zz;wtF#IcT4JctSCmLHHQT`<ftR5;8K(WV3P?F}#~Fk9v}-9aEg5yS<V@q1Gq7)YyX
zuPib*>$r}_!s_pD6gJ%X?<g#`bn0`+=x0v=BxD<IP@zQ3z!;vuTv=i^_wPlkrv=ca
zKzc&Bl_+&6v0v^6km7EJMNESt3v*=Utt?@B^MlNY)RXq=tbVu4UNW-e-{h~`cg@tO
zk2Z5MsEq9dT^+yY9q-58y*7BjD3NkrDp3T233^QuyVpa)b!VTSH~s>OK*0#&%LZV+
zctR58uqo5N)pRHd6Fx+TAVllzWHV<R>O?pk5q+D1Po}rwTcV@tuXJ;}W#fqWf^I<=
zg^x-%n#skSE1PfRR10P%%?f&0qGT42xeRhE@@Q_I@*{D>qezc^)O<gg0K6MPVF}HS
zltxtf*mk$5p0%xq&F^Hb;GGZmtdiL0AIPc5H*yO0cjPo5vw`81w>w^T_+e3-*Uy;W
zVJQDNdC|Z%Q%@+fW_txkLwm26?sjG^R!(aQ_H~V(P-8)jJw;(PH&Pp&a}io(37S*%
za&6&#sArxI(6KR{{D7%U6Wf5eiax^6ECPr!Urx&qEpYxX?DUoojV9`W@^9E_@87V~
zHKAqtv;q2*(7&)#tA;3-c(x!$y9T&9&h_!4K?L3%M+w~KGq~vW&J4fMj0<39lw~rR
zT_KsLXH1l2#$t7_GVEVL%YR{~;eTPLWFqNiRQ;`LYog~g0w+s>#_WUGGxJ5Gm5Sho
zWL0(rexU^wAEAbJk%T{GzFUOxu<N*76^KNxObLgrhrr@R*^tb^9Oaqe*6AM%yC9hb
zIm|XhuR0+Q#D<zkbTSBPXfBB+(7Rg_p{tZ9w!RtuU^E;nq)@PsVlR$g)kt+m{u_O2
zk6<z#e}<@WbfsZ*Wj&GF{(X+RpJMVaLzlj_xQMm@Br0$X0+M*{pbFx$F(TxC*$IEh
z)nZLNoV8tpjJv8PK<7ji-Z0vil-lDY9p&XJ^`aTeFk^ja1)fI2&toOJI*%s(q(SP1
zyH;#f_F~wk2XmKXp7y#DYHKSmjW>sEwbKr31L+39sXX~6_aK=yijw&&garif*L0Ds
zBX<s$^bDC!O__eoy+sV0cK`E<%Q%i_o>7#en%jJJJ#2|Kz;9mFCpssJ?N>(9ttMZH
z=K2VQzpLPcm(i(2#W#7%=!tbwX6apSfpON{hSMH>nl|*3QZ;#o&{pRiJwq=QW#LYn
zpjb>=jkkS3$z9Z;sF17LwMNS`!hJXWZYG0N(;t&*5A$*nla;bTUEQq<nqF~n8i5jk
zK#_(^DtEDq(KK4!CC{#o^nARIN@((-?l<q%=#(ipqLbNFeH2BMNSVYed0gWfL5L$>
zAAiT`#E`RbdY5eB>G&J}G-~Wj;}25>r)<Z<R$_ODI%l70jDsIc``YFlGK_LV#Z{LO
zDG$D^rnhre6)&XIVVL1KrozRIhrGak^<56A&G^|xp!vkwgCYy9T4`})5L{ichhzhJ
zHUZW=76tgvcHbS`gOuAw2&ux4TXNcgJHq^eGG}FO&K{+!8WqX}I+(v;)Hi~FL%KtM
zmSHDA+Tf6ku(+#$C2f0iAa_6#!G))%pq1yVD-o^drvlgdU(g+*SYE^v>)|3hVcX$R
z!LI@woIBpCTczKCdhIQg&dt`BT`nChX7u202B>SWft|KanIQAdJ$|uh#|!F4Z-&-a
z!PHDj2-!#V-(b`Q+e3sLlBcn+(g0mrRT5CqH!GO8>h7TNNQ7!M;O9TI86|*`QGkE^
zIZ;5$7w1A&!MI!uSue78O`T%QI&kmh2!v)5YUT8mF!vbo7Nh8u?Lc<1xri%pBv{fX
zcjOc-o>dZdZ=V1Vyga#2>DCgQ_2jfyG0~0Q22<A5x5F%sdgSsj1c8eg6t&12eW9F}
zYGxpL*eD$HU}2y#)$$DmNY5T(X6yoHPLlYEs#-S{axpgNq6e9iO(}$Pg1D+3o_64#
zr*V36Y1V*Qw<JA$B}J`*wBt}x0JC-RqeGM_);1IE;$kZBgc+~T%EhaJ<zx)CkUQd<
zNc<6^r%0J8;~m}`IaVr)rVrsRXYO;k@H{WeSDg%pE-TMT^B3ECp_e4;YSSRzt43S7
z!X{85)udj4nH#fhL`v^~?^H0eUwQnl{U6-{b-rGbCwDO_to+6~r5}d=PNR-{4A;^!
z@}MB^xWoWvssOg*Cs%K6W3qP<IuE)?MR|AsgGR-%uVT*&Gz2r<O~_M+foKWWS5I9t
zSRZU7m@<oNP!ySBM)>aeo0y#dF;Omprd#T(9f(u=V}<x(Rx$AaGjvvwEBY<^yPxMf
zt>Pu_qMdTB^dFOzUpf~h?;j`~m@5=s<L&;jXe5i{4`T2VH|x$|U-`>%p`C;4r$Q>3
zHY;vEk(nCB8jfRARV4a%>9yuW*1f-<*=5qRi<ni98b=K~drpWN^M7LV=RFSyv)0ub
zd&jq1yy*-<<cJ_)t~ehEHrc9PB5=j{2@&C6v~CR?TRyT&YhR^V_QLU^IkTI4J=xpc
zP7{iN0LdWjD|sJ3e?nxJQ9Vx{k$AKvjBRd-0l>IVXWV}+0<Ewh_@IAxN;7*=Zu$&d
z->|w9p(5Lms?s_8h--|@QkS;g(SU8TqLtMBXgw<TM0>hQiwvM-Na3h@!?5|I`Pf9u
zi*^6jwWE~<p*w6#dNbx}GOW@<Q|5!I;ugRwrhiOo?tG|?TblWtQ3u(cbM*7W`nvNm
zX=S?}dnvxu8+~3RQ}-*XxBh|s*>mxFF-ogMqvCdsPAq~jmJbu0{iIDCO^AxBrQd;f
z)zGP;VC}KW=PYyX9U`6vK*S8Ox8pJLHUkNK`SbltYc}@5*MR`M=L_K90|}NR`+Q8_
zuv-Kh006`P&d>UX^S`Kh9rca7eR<3FIw_kqLm}X&8zqaCD=x-g0bY3+*Tlah>48j<
ztdm`Pvjh#$v!IPUxi_vMa`|{aO{CnSkwF+T1^N1Qzb@KE<8Oi>P5<fG@Ux7J?{Vmf
ziZezgi~+^ZO*a-}2w`9)u!EVy0%e!r2O}%vxI-3VQwQG))sb{L0RtTQ#9ri336NW|
z(~1pf^9WeR97`Ci@rRfNj3)PuDbIF2?M>w>1kaBE5JK+8&o8O_5_4u6f`meh%ZZ0<
zGn2yLo7xDWBD&ekU8M(^J?9{72f1@2QMYZT_(WqLVh@uSLRhHre(d^uy<8nA<EP=E
z8DTex()me0HL~?ng;ipHrUwIdzzxISr5--eH&WpRgV>Bt|HK~A@MMD@f||~x7s`~~
zDIYc}7uzVX&<UiHBJH$#sMw+1E?}?4>5N$jmQi)kMny<>yuw__l&hdXKjOkQXF@SI
ze6|cVpvlbU*ev@k!-Or7AiBrdWk;wj$NRg9c|Utsr4n-`7#<X$XT|A846B<=SoWok
zX3QxV%kiW{=*I}M`{oK?i*J0|+C8vEv-H%Q&Jg=3ndVlPtOz#xdlk(5QY~{X{rnsD
zuVM~Hz^#j;bFS-5QknkK=OfE(3CbK4DR11OQt~|$()6CjOwCP1{M$1r?%hg42p<3l
zU2uajO;PxHKs=_S6&pI?*QAa-#o|K85Hm*s$0!CkT*4L9Bp+xsj`H8dwkVZveQ8@j
zNh}pvjp1IfDDHydHv8lgPZqzRVSFH9tbPf1I0e#U0}1{S;_q1PMZ?h`AqPg$_ZRyj
z>1mh^?1Px{08ZZmNnz<y!4HrnZLgSE3ur^GS+$3_Swauy1qq&#BipNFj5>wK;%G-k
zXyS01NCHP6VHxuD%@g)9`jn0_^S8uspLOstnoq}@7g?ox$gc^a!l$Xmy`4;)K}M7q
zRoOz4B|(B+=K(IYKGuBfF^mQHsm!4>x94)MX;Ejqxu9mH2uV|zC#plC@k>J3^oL-l
z6mbipS&|8rmlhI}gyFlPSa_OXCkj}36`?TrnIBqpyzdu_Sg4%9Ip?v0jG*Zw;a5}>
zxmR){B#nPpo`#{E>cePU7$zA1*M)tU>NS|WaWz#%hcP@U*EpWEqlW9=Dlj{0H<Mba
zV?RpS++#&am9aXSZm$_bW7vXFv4K^Q;-PwLwBO2(IE5Z?YFKluRIJH<9+X;sbD3>q
z0L2bUUz$+6oSa^Io`A4bo+3Z%eCb^UP?eTEJ7qT$h<Iy-j(j6{D8>50LYbpSu?jQV
zhMcnAc~F^a{(K2k8(U=AfRT}MaAPd<XR&&T`jMTj!@EB(Ghts5=dSw?(pUAt!r}=A
z@=^N1fJw|SKwhSJIGFBtJT3?IurJ5=C{J3E(KKApArQG;Q7bG;EQe=!tiZ!0X2rEp
zTidv+6Zs6UFhvL(F2Qvb=ZuOGd5n9|kGcu2Fkn!dj+E69Nx*qHGIOkWg4Jt+6?9eA
z?SAZWDx}r5<AnPfD#il<(szgjSVP24nr2Juv3LU>_MboKm8SwWV@YRZ;l?!%!Z_iD
ziGTz5Z}L%&T{@)It6&h@BAn4B)BO{6{N5#BJ%ABgs1%P+9Vr|j78HV{7-MSaMrK;)
zCjkc9GX&3g6%D}x$FX3O<Z!apejH!9^{y-E&L&ucU*QB+r?gq{XcZl2t^Y703|{Zo
z-%`*C<sKX%A827eZ+Yg4#`0czw{=SHhVQxR4`~ht&!oxS%d4B|BW6b|?+4Ycw;7H8
z>~OPDnM<ypa?TRrz6TIB>>U>0`PC9~$9E0pH<nB=<{Iz|)S13gz@8_2J@~*_p_(wU
zQV<hhR0pg3DaiAuwr~VfFzUMOvf;V))4)1)zNFX!7@GeKaa#aUvB4#>Hp)LffV{0?
z0(e94-Z^^c(|cr{`jVE&{POyHx!D2YPsFxxy8XuX;0Z{F(X+M(XZ$h->=lnH*{@|W
zw$o9XxcC4aq?d8X$d(kvk+oU_H6jvln?j>er-xX@s5gW&%PO7hm>wsf-$R{)cEP+|
zThAZ9BWCxpH$85?4U?LFG>s6L`tX!ZH~2|AUz_k<Dm-Z_zAB9vOmL5!9A;>G4!`lI
zezoN7oLh^tm3LktGW%y+AaN!HMy5tN00m1Ehx0Jwsmp|*Elde6)&4E7Q2dvG-bl5-
zaQ#b&dEYdUVXGp}s+E-}i{?t~$C*i{q{N@}C4@tHkv+9FF-?26@2+as-o!T_FTy$;
z>TS&xOTby!b(fD@KL<Pmi;YlWRbLer6m-J!wxB0<sH7Iui8@k8YFfI;$LhsgjU1%x
zK=$rN8wTNrPJm5bgbS%D&~fRmaVt&?BC`ue=<*Cxqg=-+Wc*+maU^JP!Nl52CBqzB
zOY83rwdUyqEcWe8>xC{;z9=ZpB|hqdGsZW_;ic0T04iMN?_iJF2Iz~f7vGhMndK!Z
zDa(6{W$i~B(%$EBH9_cY(ZB)_!HH&CxBb2|kPayK!tSnYTPDWcH0&trx$eE28et7*
zVNmAdaz|X(R=5(yqFXh&2@Gez^qF_aQTNjJSSa8}P;RvJGFg5F`nveM=UFTDG9BaB
zEZ$&@Tlz_|jOne$^uwMP1qx%;=gC127mrL{RC-HhZ(2EJVlEVyRZCZq<J-7eZ`Nfc
zkLb-$n8iHyOe*?1WK@bOo2xjUZjH`mot?<Te8tVSp7jQen$@YTIQ91!p@K?XSz_76
z#6;_UD<fi%p@K1^+j5(GzkeBLe=T+akYXn2yT4uP{<{y7NCVQ~_#J|@`X7fN{{@iy
zFE2!8@*5h0>AEKG00L#nan1xf1wcR157vjP@xYUepcaY+3ALU>cY79hPFkx?FWEF>
z4d>k!RUk4hC=7^DEa>i29Ve2Ll!$byEo?#zJ6J_*63_BP(afh-2-K;Ub@4NlPEes+
zc$gE;+QzYs$iVAP4>@Dm<ZnetNpjETxYaBPqpO5hBBeMQWL&8RZ}zL~O-8Q^l@6~N
zPLPl%@8e=waX64V%`6<^-0m#gy{tlkC}m6lJS_yL$qKgQH|c2-;ruN?X~3_5Jbe?S
zZ%>kxLs5YwE*W#FVIC&bhY`;IzS-K%pi3asN&Na}23t&T<w^C$%Ipa@Kok0uk{xO(
z>>GviM;c>VvEPj-pcNt`M=mH_uw=aCUCY6FJ`Z`hW>2WFxgL=V&^TX`oATl<DuH#Q
z`y-|*$W17mLN4Y=9I*(Kaeq)9DI{5J>@OE!oAhcmOZ=1PO@Zs+^<3Dw&5<4%wE1Co
z7Mi494vUc(8WW|*@x(mm9r7|ho9dYIQd)JPwjGW0hg}e=r7ID6G%+`NR#i(oaotE#
z7eMkHX+ofWSAZ9jnUjC6L;D~*T&mU-cWah2V(cx1$>A_Xi7U+3Xp3>=Ba}fyie~1Q
zCJV7~`q-Js?Sda5Z-E4Eci8VMCby3mBJF6cQLhl{rUsxnwbw(E@vHXub~xwqn-dce
zWma9d<@gByhakI<Tx7eLUIvb_)iWKK=K}=XXHIbu8quVB;q#P5g-;kMY#)y&Uzn{V
zx8>`!ZY*s{EA|!Z>7Z2HtIhX5%*P*LAmdl-ag8-U6jh){`*FvI-(TED?%#PEhU}b3
z$TRmn-~L%P0s!z=;eIak>F4OT2mRL|{r~r*&8+lIjU8wmZ0sF%4Qw2L(b!s>hRVr^
z!a`wun?3-nxR{W__w~Ds4FCz^8!!S`QU4VEzQl+N@hg!{H_p)i;Nyc2++B<j%Mdt*
z!5Ee+TfFK8+z>n@_>`%hftdWoLSWzmML+NDmg+Y2&N0vsz+u5w!kj=)C{@6NJVOW}
zAi84$8g5M43QZh=0@=s+Fh$|qWZ^O<8<`m0aF!_y)4VQ%sH!t%J}a<$URhu9{9pn@
z{@ro3h+Dy7=Hx4=VL%sS{uqR;EC4)|$Bg3py8(y`%Lr8o==uHon#KkcFOL0wHQ{^w
zhnl>9y&L)thPp;(4uADIF#7ARoWtBW93RH*8R+SKV~e(sKy!U~6TLu0HbS2c;0m)@
zG*S2%$MHxgzpmJ{(!9l%E@sH9pM9LApB__Ot*&nGe4bsF+9an`IZU)SRu1KE#Fj3n
z$Wxy^(i**!u}sse9H-x&fpTu_R_j=c1Gc_a@70s4KXpvQKr9$%mM)7k)SR1a{Vt4e
z93LIjj}vA<{+nvLXWfhYYj$zp<3E%L{p;+EjQ>~Di~X<Z5virOUO8U9zQ1a<4rWU@
z^=^u6S5$6)nDJ_9>d3P(cD}UQjtp)td2uckUD2axCEm*{RUT>IbQzrfq~#eq;~34{
zcz$inHre}<b}>b1aIuj*Fd*AH8c=x2mj(U>>0ey_-3_BSfaIUk`@1P0Xqg>meNXML
z@jo!-zoz&9G-a^w_pz5_nfSgK|7FT-<A!=@p!s^pIls$-+GF|NkwUr+d+~0C6krU&
z_ptfiaiO=s2RaJcrocjYbI~7ugkX=}QV_z+3Nc#Jh-GZlD1z;+%lYE~*P;~0#=;JC
z`?e%t(2s)+Ao-?PoD|6dsB&9Ur{K-De}CYAuuq+%Q2D>6m-9VHzK7618)^Kr&Bnj}
zg5UP}pUo1CC>&^F3ZT?c7Ihdte0~%XF&(ACy@ZrzXFA3xi5OwX$;iil@FM4k8kQFZ
z^s}C~?XqUbG}AEJKhiY`AevY5_}~D24Cqg0<TeEKMpg`Q4(-j>YD#`(M(>P9y>#Mf
zes^Ct&(aa$Se!LDGm#o28rqfe;mI1#eG6<uT<`qiv~i}Q0Mb8yL<oS3@BJvIhMI--
zTiK6&H!A!O85DB|+JC`<{w1$x?$D@qZjIUc^V5nObe~y(JdT`G7<!>ei|t&SDcmxh
zh5U^W0?0imE+t|_J<f1&<n8wxhF6_;@PSsrqRDTdbKE7E>D^Xc)6WaY_C)@!M3=<7
zi@?TSa8ipW@FHnBN>cwOlYy+-ug~Mx)z??@&yU#7(#`(pvW2)#C}K`yVzK}+ezc!Q
zi8KkfP|ZjAv+t{nZ9IAmcoRuWu&Gc_&XwE_XT>7z|A(=64ALZQ*970PZQHipW!tuG
z+qT_h+g-M+%eKufZGAftXXfngY)t;h|Cte)_jB>)^DLoyfy|A5U;zgfvrR<-AoC(?
zoJ%p)1(_SxXjG&%R@?$3%cPZ>w~}86tP}Bdzug98b9)f0YM|uQ@LG4XSLtE)Z&MC0
z6D?spyyacvSYm5VN5WrE-K_KcicisHhbQL31hUVz07Zgh(_{Z#u)?H0L9Frehg@Gw
z+-rP<mUn4_UJ}6;Rht$)rfoHc&o>K5*iMSwu-%0<zbTu*{w{&g_&Lu1qeAgIa29hX
zHKQ-TAq`U_*92NzE_5VQ4IN-+QzdKJ#-g@fv_^@tdWf76e|O^OQbLWe2zRKOZ+&6#
zOj+OaULN(w8>p`(JC;qLyMJROO}6w`xB%i<e*lYHQfSmtJ|nly5pNVjG%YR^s3v$j
z#pOx<nK*4MrMA9%I?<?ray=X{P*$yLgBdfZX0@_`&j&=NJ$N6Qs`5a~)e|UTPpncY
zwQ)ktQI8RFx3#(T(E!Lpnk^bliD4sUN_=34II$)q04w8nfwJikXP_Gw$;kUmwhK5i
z1;`cxC&S*nf5S;%;7g;m9%t9n#9nFf+_^s^IKFs%@GT!A70Yr4Y7~_)SBgk2S8PN(
z?w0h5Ho?U8zjLQwqM%e5ZpoRAmSvTv1*WCG)U;#eD4;3|zkl&|icNc&%r9gl4wP=`
z2reGbY+H<xM$0S4q%M*P<R!5I1qt25^icI^K~QQA6t`NjhpDgdEs0Y8(oF2^8`3q~
zJh&k8R0~@?T?HbjD-2-fX$$7@@b!@1y4jlVqs}c1V*XX*UU6W~F3j2QE!P19zF+Pj
zgz@b)F3$8&>};1Tq^T$w!oHx%;Oh7XsRzb^n7CC+@Ag|Pu{u)pgXenlM!*Io1a`@p
zqT%DE6M8E(muC{v@V1=Y6@~cO+MMbkp$o%%)fJ);N3Vv`Y!R<Ri6INII?~;$V?hl3
zX^%dyP_caa?hm|gUsMK7+MO0i5}TXtobazLN93L~p3($tEr24XjV+&(RC>O7Cdf>L
z;J+JX&*J8!mbg|;g=E}}@88ROJsE=`xp=^r=%klzXSBvD$Wo$Sd?PeDYz8!!7dCk@
zw0PtpgBcuv$mJ}R!am+(Y4`q3D}8n3Ver|+PuTf211pDU7EJE>xE4=?d`FuV<hx7m
z;zMTnSL|aYvym7&RhYi1dSH;rvc4ia_1n3);V!YlUsseh!f}s|w7DIlIWeh}*bwSr
zZ3{Ij84)dyicY9DDx@0ShbZSux8jeF9s_x_8BwZoV?(u9l6W)xIw^8?qcJE6W&5(J
z+0>k=R!f6Si_uNxXT;fpDihTMS-Q-=p~nAm<+RnfxG`#aw$EPDeQ$V?)^|856hB$^
zOVXLLz5}KqjGpMga=7b)a8A;%3|W=<qs;xPKt8w)G9hu%kcZkUsdc@t-bA^#NIo93
zXJ=>gzR#FhR!!$Ui$J)^1WbD~zm#|g;8DuvFeteMIR*Kmc}$J(;k(StFBz~dBAmk}
z#{WsYMgdUG*4e+TnY(8=`-(BaTh6SBKj3b6%=}X)=Fi@~DL^CqR3p?EzVn0+srCv0
zc<~P)z`t5qAI+-s7)<YbqBdWOZ_9DEjbx#nL~WQA13jgDzuujABaBMG?@pigkwYGg
zD{eMoqB?jHdnYNWLs@NO-_Y`dc2e{oG+{tvSK(eoH_(O(u;jQ77HhfPIT)FA71X1G
zaus_fvjw#+ERYHsW~)8yQ;TbbURQJU(rhLKZY{kpibPmtRi8GO<>>n3{RiJ!thmaq
zw!wE9ByI}T?&Vbf6sNn>4ZiRp|J_lB#aD=;P3%-a82N+F$8uQGe@2F9Mk@pHCRsiB
zd;LiirVwg0#r~?GXr$0+g&*Bk+eae{!@w)KQ;$4heLa1NioTIJzA1M(O@XIUGxMxD
zwx=~aMoFX}|MtF1!1(yLDL@<UAok7Va+&cc$2CVS&#f1Os=lvEWfQ9N3XHY+j#Y2J
zSC6|xvAKQ}qTh*PRz1@E5BAbEVP!%y8R+_nA-;LV&OwJt1mU~jB3g}>9GV1Sqr48n
z!e**OIVt=|IN9N&OUJ<O(5{j2Q-JZ#gq%DLfx@+kWS1y$Vj7!o84VtO{mUqwUG!Ou
zn=phVE&J%Ntt{bEI51sooC0}N=&lMHw0-)OO6;aMv-Ze8aw>5M*^bCv0^~pLCC|wb
z4cSjcqSy+ZLowKWI?<Mj!9kCtpjiDv<Pumt+?z`d&)1@U;Hj*GH@5r;qnavY=P3_i
zro6Hs#i&dTac;Og!c=$nPQ9RVl!F`a@uuCy=kt_4@hjwV;Hp$7WBi)*7VjA6$DB{X
zn^K0HS`cM3I>WWovC|I9&+AqW?lT!qBvxprplIgXy*4;f2_$}T#bSCX%#gx5vJbKI
zKXX?nk<9|)iT}8`r{}sREwM|4*iC7E`KKP!HBu4xFOMbGV6~v2Z4DFUx{4KN`7wZB
zNZ_w2`3QqyLl&>!TB+kR3dwP69Z0630hg3U+!NLE7mMI7c#&e$5znZ5a<(+QP|G(#
z`4XFG9;5t=LF;*`vRSo%C_qD4soRBRiCAv#VhSP8<fzkp+ZeI^_T6;^{(p%J^0$N2
zOh1Re8QA}=xbWYPAphk|{vReqE9Y1>Tl<4{q^~^v!dv)8m){-Z&vpn21E6agHb{hP
zve`P(#E`I2B{p^zl0;NIwFd-Cee?Rug?b;2P_-ur%v^`C`B?lcgYE)&_@Mb2#_qI>
z3*ZEk3!3H{Xdk%c1LHq?#8QWaZg;-B1-SX~`%hMOTbU=VsZe2Rb0Eb60lq7z$-<rP
zT8^3;p0|r#!CWl;@jJ8(=4e-6`g&>?%{VBpYDw3SPO1^ooGYj@i{13?0(?fCgS>i7
z0Va4f?X(ZO%UG&11B^z^cw)41i`}e=0xC*k&9vlpQDA&h!;vz>4w!Wx>m;Tx`$Vdq
zDM&NTah!fbz`>n~wd})EWWck@qfcHe1bD#)delg`HEjm7_V)gLy_ou&U&09Sed&I0
z++R+9?r-tYcTaEA1hqSQn^!+Ky&WCh7=iE4iyM9ZSo>bR&x?nnzo|QpbM{Ec`=s`;
zptJ2{zOg4qU{C!bDV?TAB+qQ`<Q*I8Y72QiWcuWFLH-i6v4+x0nG31gCYV9h%G*d{
zm;BxZIa8Unrroj2zdHNQnK!!B8KrL&*H%}7bpcQlqL{7UuYWsJxe-LZeS6p~;~)p0
z37W#;$e4G9+!hvz@!*@%;B&nG<iYd8a&?&5NmYEixj??I%gS~@(#HTPpK_?7mcsBV
zcP$3N|H`@c*y#K>@ir!#8r!C>nd+5E^U1f?5Tl+~a2K`cn@j~_wIM}=K@_AlBJCh+
zr-Or6)_BqhI5`xdCUge=x<__2;6K#PaXJsTW_0WO>n%YRL1czCO^j8xMidG|XH|n>
zi5_OZh_Dd8hsF@CBWraqDd^-8f+5!7x5-E}zI-Ql{pcrt%A>|c2H4Y$b9wnQvr13%
zX0}(eKR<-^u4~e(XH0qpaoFb{n1J`IYuTNp)Likx@aGkTOb==D#9Ys}m1$*>VQw&Z
zpBhGUZ5YKdZ_aC^bmxr^3}0}rEwl<K@~f9RKHI28X-O~0wpCj=F$UvISy&^~&MmSr
zM4V2x_32w3D%Zrs^oC<_kdMVXb_R|FT4Js3OKCh_*>87n`~)rD*6yqkgeL%<$)ORu
z+o9&rRV_^(WD}Y}a^MN#!O1`jPh&G;qc<P|S&{SMf&9M8Ir(|LO4ytaVa+RVrUl!~
zPZtH;e4?*^0PL0}k_yXh+@NRmfpi}M4%5}CfQ>H{b``((5m6q!=0?Hx`H`_%$c<Sk
zkT?41N;jyW?wnXcnj9+EdLAI1`j<+{4(*CSaH#zj*CQK~Y|DC%;H&=c2C&Sr(v~@p
z7XvjM$3K}!ek9pr@h#4#i3L%zD*ZXQ=COnU9k^5!=KQ#}sQ)w)t%}9j;ct|b54iMp
zvDkfs=?;kz54)8TpkFi1N<M0$E%qqXt234il2bVFpu0EI^KphH5atE2Zb9W6ipATv
z@uwOr5K=tK{DkjK732<aBi<{H^g+31ecI~aUJtJ`0=;mPshZ$u$IwiDr$D3h_3&}r
zi!*?U31kPbyRt+1EM-CrqsPRRi7njlr%_Z6TB)OZ*LeHi4=U=$xzJwZWd{v^t^NKG
z^~C+DNW?Ew((cGwfD)x_fjN3bMOV+!#3HO{sjP0K3_Q9GKY0<q5h$U|U8n)EG$Zwv
z+4$^WUVfVf19BR`Y&{-4JvDI)QwR#G+3>dF_o%G4E%RKI{myX$nmR-6`%|x)m76ht
zM^M?%_h_X)^##>Z+Z-Up&pV>b9juj=PvlSM425k02b9;0R7a^Jz&#I5{Rf(DJT}R^
zF&RMwwO|jGCJ{F<*AtU?gO}Q!+QlyoX`^Jh6tjp4`#AC@<|5<O3Q#&o(EkCYO!5Hw
z37`uCihb7!C20fiB%5ZgP;Bg;C0O@k4$3MTVv)iPTZdEC;15m%u8|fP;d>2pAgPHG
zmr!SRWr6E`mbjjX5Xm5nrWPIXyhFOoX&YDEQ<dH%)i=f~v*XkmWN<ZG6O9t(w&S)O
zlEj&Uq01(pyTx}Z6~(OMdN}-W@77vTEG9EY<Avbn3{KX9fYVxE!QL_6$%Qu>D3gL2
z8-o0cJ&ft4=_>K5Z0yb1xdR0uI%pMvuOPFlM2-SgSC6Ze{DigQ$^xW%vFraoS*ZVD
z;C?o3#WpYi;0peK%hUY#0rX!c!vE09RzKBH8%{q-J>L~|g$!8f5mMW-bcltB(b(J(
zmfjYn^)nA%Y{URka@0aV0&aW>!nyt9Wan;f+Wu)F18Mu}d!BAUc-=eSMUDkCspCZI
z)7cAHy8QB}G|f0`zC;m9;#0N%x2Lm<&*k6&g*9Wk{7MelQ0KzbJstQ0cRD<CEy7~R
zz0BSA#o%_5#Km6<(P5jo$rrDl^<PKa0Vg>J=!Q8am&lhBF(n?|W91Fkhz!r=UBtUd
z3#7$5F*Si{lI#t(;k!m>h%2!p!rUX2gQOCk?DNX;2gMQj^$`TP?KDm4MozN?MJAU+
zKxCHZ3Jg!}5c^3Np;Ky-V?CxBcI;1W{;(mX5*e<|mN|Slu>5-ZG4$X92VZy2=hIiG
z$2J~sC&Q=zF0Y3_`-kg$1lqfMyE-v@z7L)crr%DlpU-bz($&?&iq#t!;XU`=k&`H%
zP`01Vd&E@l5l8-6+A+J~`0uN@hoaQVxzFbh)EvItWu_cbWk?r>Dq3y`(u8XN3f~+>
z$N-m4qHo_Yu^xD`uZZAr1#5Z5kJJ%AI3)=X<Xv~Wdv1M3lOJuh&D-!!-VCwDu#e|m
zN{9f0xRV5nKHVjx-xX|dT>TTc&JI@_nP+5^M}|w=Ij>BGUjsuWgytpwv*K-%u%+27
zRjyr;W}SGcW*3i7Hf1BliGHEXF^M0dYjiUesJyGFy^5I_V9O?ta#a98i!evTt`d2O
zCs8xZ6>+#E+MnY>*R8{Y9t-z#CW)GM0-3nR=?ISi!g4}CST(dmePL?4vPt~yi@Wh`
z_bT*`XfG<tE=LYyIU=|!aF1_VROK2M!noaDvt6<8HpilJL;~=%jY)AOEGvnX(z3tA
z#`nzQ8$_e!z(H_)f?=K|ATs4EtLfRILW_!mwC(bMFd31HE_IIQ_hkY>PH`Q@_p<Pb
z!^zKGr7@fW)t&PAy%meYUSC6dU*}BJ!kr7%D&eW%$6h|>%@_tf(mn@4#_E7)4pbG^
zR>6?=F-e@b>3N-(T?MJvp?HN2Rx&Jfpe~VP^zX)DZEeIHR?sFp9<sg0a|E~C(?&rU
zy+Um}DpK=x5DHt~hwc|P2rY)B_ge<zDT4n5)B%^_gmOTdyt3RO=bM#;${4H!x2?ZK
zO5Bn5=XZJBMx}9N(%S|>cV37``yn&!MXv;+i#(pC4LXo)q!KQ%s=p+2KF&2ajn$*Z
z9PRH<t?;tzv5@c1IW3byM}e92kzg}0^W0;<%+a_ptQ4bhktIg52~1<W+J~f9S$<A7
zp1c`2sMYFqqG8vA<Ts0(SC(6vv&-}nop}>bHE_TIi|7VD>YWC(8!U=q^C8a(12eOp
z^KtS~b`IU|n=JemW+kYrJ#p!3^~tS>m_E{#78gm`v+V4ZvD;YW0&H+<(JVi}svC5P
z)jhors_;$d98U<WXZl=tH(MA%D_*!P$z!bSX%O&-YB;E9G8ozjPt&CFb~|?>qN){X
z@;K|uD5y@4uap7joBhX>`dGHXcYD0y7^$Y87$;>oG>k-^fJDWGY?}vkN^>SL`jBem
zt{1arUD-9&Chq&<B3};IGYjf-pf7Zz_Z`h)7~k$MB*!@@>9lbBL>$DC?M$XUo7C<c
zgfNJ0MimRdxk0zZQ9IlGsgiS&YievTwlu_;Fhn;xCUp2fK@e2x(a0u%IxvKl%&61%
zj~9ylxi9+z?!mtBbWn)z6J?4Ud0MwI6gD-7ieHwR<)|5T$enq+NDe!&p<)U>pFK0W
zit5CXZoMVEBSfY|@Ol)~?3KrZFxIYlfJt&n_JpQ)1C=$yFD-Au;dK~%ZK#W*%rzFu
zrRfttCFsxqxb`5Sm17Ug0iuds=pC-6?A&7+77bE|r$CV_A5Pr3^PB7bdS7V5I?|9T
znK3L$X|NrEb9VgD$YE!nFdp3U=iZBcGi81E-G5k5U;ib{{0|~@(SS+a@CSvUA^jf`
zq5q4zXyrVu{?n<<j_TLyKWu50;&dq?8Ti;Ar&|IO<!TWQ57!!AM2Q*MxTchzq=H;L
zj<CM7%CNzO>e_J9Je-#WNR!B$biY<{d4;5JKT7|Qf&yWPrj~C{6@_PRGb-JBM}*(Y
z@5{%}&%xcBrRt`6I*yef4PRjoBoT!Fpa3$Yw<$59bs|Zi!G<p$6fwFvJB12sp5x0U
z(y1*4qU%*rvM=TW%cI~4k{d`i76j^ON8%n5;dVz>ssP0_gj;P1_*K%a)GmnhCwWLv
zF-d`!?%%zG=_NQ<DH|y@y;Bv8X#q2{zU`h51!#2*ow;JOvCqguR8<5hk#b6_3~Az&
zEKO_yYbTJpCf#fYwL}%~52UAxw=Lvg{NlzPLj|tSRzjuHBz6Xh9tPGBncf{o@khL;
z4P+u*B#heqm<H=zq5$eP&+k<cwqHeEWjA>?gpOrYVY^2L*IJc2fkWrb7>J!p-Zz7m
zL{iTjql-C_@Vvo)84Oea&s`a$v6~bwKET`EKTnRJy8wJCnP?_{Kf|kQCaOq<(D@=H
z&_nZtCPEyQ2mr6!IKXcj?e!xO4lNYp^>5+v4X`34ldsb~KyvvGfOW-TwM`5v%3tG;
zF1bA7T)+N4!Lomb(cQ!>bexxZeS`=-2KwGcxbd!Npnz8XgX?TqTRcmxVpg4Ydi8dj
zbwNKqziKNm)gVmLj)*SOq-&4F3vvx@0b=bJYf8GPVj)bH;&57?XEZFU-PmlMGa{oQ
zHv#N+tcSO@UqBOHd^su9Y;us0UOJXMNo-)<j}nI7X2C>Yv)b@M)l6gqL%|ml3#Ado
z=9O|UQwcXQ;1snYWWrp#q#K4;IdP4;LW2~$$F<H9y!bZ9M6$fE1zK*)iJOQ&g!re`
zEL<~#3T)=16skNA=nJp;nuXx!vz0&;i+(hS!nJorf)S}PZXH%^eOI{Gp^QMXRa^@$
zq#?D+T-CpHyC|Az_$yMHsw1f^4$~!W9`ZLe<5|Yigp((UINR_TFNbMLSi>?CcdL=*
znAhzQRy(hf*(RnzA*$jC1maAI0fC%!WI3K7k(?k&jXwR5VX7K*5r%JyTf8w(e)~Q(
zplU*kwVjB3vMqQyCxk4i&ta(tb^V-{m54SBh_8trHZ4)cu1pW)Ix*ni%F<TQeO5ZM
z>Ceg<uGj9ATw3+UUuR7a71_o0ucg}$s8PnykMa5kVxj*AfNfK`+6I)J=-xn5PCS0K
zayy;7=-==yrcN`IP@#>E1l`EB2{if~?bOOEUc1A<Z*ZW;jT+I#ukeY3+bKBN2y{N>
z+1LGIn6D$w7uF*!;>v$-!mNYN_aA02VocF4w8UwKl%}g~sMA@p#BFaq_kO2DG}N)Q
zl1f)OcEhdha7+WQo_J$RkGeE6#!kZINk{uJtI-LzlVjd%8MDA^Wo<n$&VP^t#KNnu
zua;IT`jsh0?_mY$<8m8dZbB6zeN0yvAw0u29&=={Rr!-KVkfsJ5gzPpVudYdT8=q!
zdH31}Pl@YCulO{!hJ<8oi3`|Aj;DV=DBHs{1vzyoRf01!av;A`JrXVfLokW&!A7g6
ziD9!>xx1tCdHTFRzMeI8r1#b|V&LM^hUH00uR`o=w(REfQP=UMuCIPpR@4hWBtbr(
zK99%{7HAA0$L)2LVKauY1oi8=9N2o`u`tTn?DR`p(ne4Cz}#!gKRgu7G?4hf+}(J5
z`8J!o;_z|5eP?(R`@wP%zmeasY<{?meU@)WcY?V!LbNFVvRzkpHSqOz$ymd8dC!0(
zn0IascADD`yr2(VEWUzjnMx~@Uv4TUD|6gsh>)URYhI%mGeON}LqVM^!aG6%w^>-_
zv*ohj$7jp89$SN#Iv826G6_d5CP!VE-}g2C3Xg;A1G<f)vwJThjq(!B#><pR05HJK
zM2@l=eYndnZk#oR)9=4Uxo+cqK;X%&inCj`o6!*s_cPpLAMSjFaupD5Ly-wILfOe`
z9CnW{Yn4F8^O=p|)Y|@b1D-!WbNif$qwdajZyM1ZZJnmP1xEFgdB8YrdiW=`3%11a
zZOtcQzWwL@Y<aUza#VJi)!0=-UQOU4%!EjHVWe<Ostc-H^s-uMx-GO1bpC0>S7XS!
z0(r`}8;X+sclnzn52-Dw?`hv5eP><aJ5$~#%>P6z|8WtdlvTlj{|qbjAIgmB|67;*
z?}+8UD6{`N*83mE?85G6UVYt^DXa>oS!s2kUID0N5?ap?3ESw-!iXS&rAlnrn@bW>
z@MiBouGpSUc$S76ldH@9$Cmaw@^5mAuiUlyPGHy`vqqAvPn7d;Y*FcQUgE}J38<`o
z<vr#2f3Iz<ZQ%_Z1UsvizhRjNahHX0iG&AsR~!b%WZP09=UHxhw{2xB9d&=!Ci^HQ
z9Dko#HpFB(17?Gg*@UT?-GJRx#mFQlX&aXLqKtE1VW8<PMVdlRDx6JI#>8qb6qN}0
z&fgWYXlAjGLco*ENmxc=E`QnNi`y{XVmx2x&EdG=L@q@Khe(}~z2dXL?nh-SnZh73
z^TOSvPyT&(z<^xTVKg^i<MMWKeY(1Qy?#9hSzGs&<LhhZ5$NQ9J9xdmJiQNpQ6F8o
zcu}V?PcIvF*Z1#xb^AKHzTbbWtD`6@ODkS!{10YHhfXS+%ISVQIfH5$7YWJmG-Po@
z@;`}OLq*pi=oQNkXGrQ3jY}zdC{XAauaQ~-(<12>dpwo(kxnv@G9CY<*Cw&^OZDtl
zR9BF;Q_wp*#mxnRywAK?{(c?qIc9d%efRO?sFZ29`;0%kf<|WACET_*M1li%gbNSR
z2&cnEUXcxAu^I_kH3xy9(9CL>FrR5qDuDL=t(k^1O5D<L%qsUfuhr~Y&Jgr6rD4%W
zW12YWNqy*CZ+y)_EBGlY%&sbiTJQsOV#0w{Nb*E1e9+b%IQHq5u|P-dNx*XtNaf}A
zfPX;CLvhIJ0dmTgi&GmC1oI&+dBf-@<u<XxTy=_5^ib_P_eX&*r5>qgT9jhNB_?E>
z+pP@LVjc}?$lZeeMJ~G?0-uN~8!)2YsDv_vm&A%<W;MMY4!&w$!x8lFNis1V|6k8<
z_)5zU%Pn>8Qqe`+!Yei3Al!!GPxD<uI|Nd-#|1XdmxUWMC+!bw(T*U-X%t5x<|F$5
z3?Vj_iT!DvOdt11%}Wo39@Yzs&igT`F_X0jQsxHOrh%8^?6viaUPY)-U-G(6)Tx8o
z{C-NYfPO&BiMmA3P2bwCp5vN#<Se*84*f4w9S&Y&{H0vYk~t;pSPa_y5Q{zp-=&=!
ziVocK@mphk{OX<(2#8rsx0ionJq3QJ(Q=pRevS?S^}xwGj%Y>gTLzE{z4u{jA_)?e
zY%A?;bN;~MhHvV%7hRgN&IP69B8igaZG%(wixE%iL_qo!nu=M7sy+apVkam#aMoMM
z47n<|&V6L5A4~q60MrUL`$`zfaMUF#>p`O*e74Mb!MVnIL~u~tYuQ2uFN|7V?Sa@n
zRo)(y+ST*q>y%-?A`zhMHE~Gjt7BZ+Okd8Dom$8|L4P4}tbEU-S5iRfCj<JobnC<;
zWOOwFPsc3`Wy&fTw+@cuGzQZvR~|@J|2%=0GI?vLG$>(;O_h=6(?G`c2yIuxA{#60
zqpa+mT5FbKH(^>+kfx<78m^LnQPdp2kpmK4@rmsoP~3>0S-k~{aO-$G2S1fkpB-+6
zGbeaz#qL>gla45VF0NzMi<yihM7h9Xn8c(*k6hUi+@4Z2CtQqJyTuXj&Eri#f*LD{
zA%sdJcT=1tfF^}AnF9u(;RLbfzIA)12!{+EJKNtzY#K-LtiTzcJbpR}VG)!g@qi!I
zvS_Re>k>c>7H&2wQ~3_j2v$Rsgy`~+A!j^Y5HY!6J|YZEOW0M+y$e!6xRM6a?G{uG
zFS<nn*6#NTz-7fW?jOKYU~$zgsY2*&Im^T!39Q9F4S}1(!!9Y@(vlXa$AkN{msO~r
z(~d!t7kLCf<^aQNi-lt6ftyY(VM?dW*(qszswWs=M7%@_1s^mBMH(j%k_uRg<O^<T
z$drhvV)M@RhAIK&{*BnLo8=3fS=@;P-CeGT{ac#$a|{+-`c+hH`seKG*Rs$}T8`pQ
z>&X^NlOSTewEa36qDA<1#gJC2E_o*j<lW&|)~7F3HbEmKySQ%J<~#QiY(h&K-1?wE
zl^AbWfvP=p{V~JYsR@%?AjBltHil3DT#OVxTZrlw(t7o`8Vww!@`d1k4we7VU>SO4
zPD4LKh3<z2``?5-{`*k*U#uYig9wXN+p;@oMeco3rnK3MU>lTewO}Y=6l%?;118PR
zA>RlNCS;^cOzKFa3N6WLk0Utk9`S5sNiormYm43<W94GW$+z#_>&kxy?-##*#gm7&
z3`Q_Lt7hqj_JdDxW9HbbP(ld${(Sk|o1X{r@q@CXVd+Z}zS~`h+$BUTxWV?VEcI3|
zSFxgj5a_{~YKQXsuv&D|YPf!Ra&3s|Vhgn=)BGvg)zbOXBlZwv+9LOPMMME5c^4Ec
zz3iAf!3<-UtH@0NFEX=kI>r>&v=H*8G|ov^GP4x|>4q6?j1@f($?&m8a`2<VsA*=*
zrC^9=B#9G4mgAgR6=P5%o1pX2r(b+Sh}SdGq(Z`{<CxFd+4t$>#?RXO8+wb|y9?;Y
z3*>L<et7cta(BI5zg@lQet$ggpC8}*e4NE!Fysrw+1E0BKb-B~FG$0x5ep0F9mWP8
zVsV&veRcO1{m@~?c6x6yx)l1R=dG!!&1F05`Qkj|JI3ZCw_G(cXHxb~oFP4O9c@_m
z?}ve<E+f%e`?9T0XMPM5CRMctX<NmO4GoTuSb_@t2;o-@Yg}!OV__oSTYQt*G+~3!
z>9^r*q{x4SoVtTVd9lgpaFveno*g8@2UGMMISi-#c{oAO7G!1KaC2}#e$UzKTr7a$
zS8Uk|oq)!9&$kv{gA#N`HhL&eRMH-2Qf~+4N_5`>hNDw#vtzgfH`GF%h>FTZyF=y<
zxtoKFHEQeW2|3>oVNP=heSP7S1^FLw;*^imrGIpodG81^8<830v=HRcas1$*^G?cV
z4Q5<F9KSjK9NGmXbLzU-vOtTQ1YVpYwF_`4#m1qYZOvi4B93w^N<bpNSSR<b^0v5X
zC;uzDC#xs9UervQbWq7B+S|=+LZi@X+xATgTGTpZ_|GHXS8&><@A3Wnry|V)VZ6~C
zj?d0dfs;QN;=+h-swH3Q<`G#8XQR$BkzUC<lP4#wh>_&x&rxpS#TW=pUflvg_UJIp
zibnJA`N>p_|L?@uZH;$3laT+=-FgdZLfTxcJ`zIT*CfOXT>7A{kK60I6VdT*XR=m^
zg8N?Lz{P-OBjORO@aTIBbU^>2I0Me1Smft{?<w7@RH{5~b8mu>7W$LQ4F-k7^5wno
zkyey}Iyn!QB`oLw9&3LPS=Aqqinha?GtkeDoE|P!9uCX$r!)yyC#RsXKY|tu5-3D8
zWjZ{mejS2yau@ZX`g6^@%TkaVUpQu#M@K7EjRz-gv+tWt!j}}P?Hom#O=yDaDYaG*
z!gFpF&FJ9UX$CFZ&jV`5y>@yzC-)*(Iu#@;cRH5Whn$w|z(<EmJUjoop<~so(K;RL
z;)jBGlQEdd%-G~xLV)L*q=4?nbI6)MYNP|6{pmYqtQn;yvu8l=SDwEz6?1Ag9~eNB
zlA#<g6PB{0m5JA3$j;`;9<_ik_pHzPTOD8u@%>s?z>S>THv#WP+<UEe(A*-L`K*Dr
z7Z=7Tb`e;dhl@WEb~oSpmgow`53a|^6i6}chu(?+A8lmxsx_s4=VC2Ihmj%Qzf%};
zskW>1Q;fAld9b66^-fHNTq2aMvlFE#oH`|&6M*p|g;Z5^Q3u|Sy`#^)cYR}2`Bm~D
zPNpP*ks6=hF|K-;&@bb4LaaEU;iHSnA;hRQ``bzn<I1MCJk#0NHv-DbfLysd7FzAn
zvj#5Cf3?`CMx}1!R{{zb8K5eS^GKQXR0`&9Q9in6$gFb<C;uYxaQpj1fc?kQFRJye
z5y80%%_yH|M<_-_Tw=uJNkC(J1Z5|SEabfDScHMFWh0R1i8Mknpc<!@7ayJrNUkqg
z3tKG*V3>rBStp1E7{`akXoUs-<m>{jK{DcJQouIrk#6Fk^TvQh{kO~!t`xWcMhg32
zqH%ySw!(lPZ3d=K4>)bB8PZvXFW$mYJ&X#RoS_ipjB}Ad@TmGKj-t_`5XV$n$zUIl
zDvdcfGlk<YLkI(AM{b_6z@B{)Y9rAn#BWmX3eKQ>J?|NYG0APyeApaxx8vF54_g73
zMa$eQ`k<>Hi~_V;GvAf$E3+6$4ccrTF%A=F?mgAV%HCV>u1AcCJuP+$WC*=B>kJiN
z4@;i>L<gx1s|<-sRkI6s;l&VcW)k$?s|EGfhuU^n`CC{Pdt^ON2hLXrdqdY_;}2kI
zn+ySK-FUrq^pj*s-ho-dg2jUnp?3rqJRFKiFFOF>Zrj`}XD!O3^^HR!CO4URX;Fn1
zS_CtH1-O!#-`POuwcm^<qQoH;eK}t~2kn($d{&PK1Dfpre-=!bz%f*)K>z@H$p43|
z;C}%v)*oT0Mg7JOhXeVWmT!3IKlVsUp3@f2wfp`GZB|jQF<szC5k$~OdNL->MC~LT
zQHf7M-&pU)?7jT0RJn9uuycg_B$gb1+%Ge;uS29wC<eXgcPVZUvl#d7DC}PF(jFb{
zz0`RT58&^&&$Hp9BUu05Q1zCrZ(3=x-B1QYa5AY|A>fsTSsGP|E7H6ygzyIn`BM*h
zNqNTVm@As2Td!hVjW_G!%S1lmbnzhiw<E9u0G<1S6Dcwuq(+5QQ1W)*js)eA6e}9N
z0%$~|i-FZboXTQ)IL*n6hmxmw5p;16TWatKRnK+I-mR3>s)s(q@dL?Dn=nUFRx&Ox
zOW&-y1U^@n6>XLY6J+~(7~w5q`F!O(7@c@Mawvxz!olodpjJQRM{k;$s2?SrVTTUz
z<R&b>fE*}&D_IN>0^G54`{x_H0I?~k{p!0uj^&FD^yQq<vm3M~W+k^gGPv5mk#idu
z<lptmovd9{DZedRmAo<aiB3dbUl?)6CJax#o+sp68Ze&?>O1@yU}m{N`dBt<<^_5N
z{w}A;l6g+<u#6c2${g}ypce>$Y|VHe3>#!d5``?J<6m(7-ebS+Qjbl0FP<6K?`|?|
zdVUGYb5yPd-0GobXJFoZi|%Fb_xyMx_x~OrBntXjQ%P%vk#0o9BZHpT)>M=}c{_l+
zAww4mp@zB;F~$EHf+Q01P)KoUgvC8M)%8LuKA6O51KK~~+mYANJ1o}sbMf!lkXC<~
z%F0bf$EXRp{2s^kz~p~ic=`2Prf{AK%{YwN1%4+>H3La~Fn+*oUfdkv=G;nxFi3ue
zfZxnZ7NWeU8#&bpN#j;D*I3xILV8MkW6W}NswswwODF3Jn2)c^?3As`EVRPRj;G59
z`mu%1e5d~W`0)As_!yR)VwTzdTYyRW6-T)Y)PK^7mj`d3&S<W>8ODGvuHMkYo`}?a
z9*&Ya5GpiYqDIAW;B&@tb1zU^Y-fvsvXLBa@1`2A)4MGimGZM%^@~mO$WI|P{kfwS
zC;nsxa?}ipy0A~M4)`0UV#V)4N-bjxhLZ;SWZLa`02^M-1Nci}Q`-6zXb(jPH&dq#
z)yJYWX48l+pKTiluid&qP0Qo$n*S20_DIIFgYROvrHVVy7cP=(2SW6P@ptCHg&LlH
zv0H$-N-FQf(5rpSV0ht#{9*~<<<#fH6{+~tHbN`(LQ|>qV(ZwphTC(G2-&?;|8R!X
zt~c5{vKaYPIbp@I`%e$}U#AD=P)a74Xwxs&6S^diILiLZlW>>Q?F*ixb16cjU3Ue6
z;Sam|$BiSf5v~b%z(({e<&sVyr{P8cX*IcD=w6Z+^m+>OVjXhLpW1`Lc*tHfy*Z&F
z?dJ6E)_alxMK8|c0RIYwoOn_O>}ZZNeVDE^zbTFZut_9WBsIo;G92ZO;de+3KJ39_
zvN3?F&M()F`exoy7d@>893T?nXh@k`X+{~3=mK`&mTt&AdSyrtv^+$ez|Ilde*&2%
zs#IL*Tzd9P8&$P{Jm(|38Z^kgNXN}J%mIJmW4@-&&Va0SZBg48-J@y5l4i8$O*zl*
zmAnZ`0|iLb5fjylb*fQx#}|p)gF1e`9*=+1s!9&!MLm&e7NxHVkK}JOrnv%iIZF8?
zK}3U4XXBetF{f_3;Pkr$k=B1O3E@T3q4XI87GyF<e8<DmBTpDuMMzkE$3y&yKjZ)E
zi*sh_esPf~oMOa!5N+yP{-S=OfU|Jb$zvoeFP&j?boDwT^G^|acSMI@ho|lB&Fg%I
zL-bHgW-(ex?KE8Mj!yz{X%Y={*sjw15Bn!<=`EZ(7Dq;^;U%=2;&l@Pz2v1_T)I;2
zY&cic0h4;@35D_;CwpHZI$54wDFss<e-^E5E*J~;MhLHiSs$B9(;VqL{CkTWEm3E5
zy#IUNe@Z*jTa$={Zrh}3`?(!b*?cv-;0Co`L(|LUGO+<7HUHlPDz&#<HeWC9eZVM7
z&KiHc%q1@VZS0O(_)4aPIFqNXmjgC-)Sw4W_1edllz_;Ao$<Idu#xOL?&J`0#|I-{
zxpiVoYF2lijMM&+5_8O7P@cDwoo~D@GpiFvdZ6V~g!M~S3F}x>*5*U_+|lZ<-lW1R
z`xAte!e-@+Mi0H3>QyQ1jzNfUm61iog)_&5ape$N(5JUNawph$HkHe}u9S>KGx=OJ
zIB7NXS1(Hb!v1(ZbyT8au2r7uIXUrgn#(Lea-fDXLgoSqyzQ71gVZ^0aRjGbg|{kI
z-{?5slp#+b|GtX(JaTZ8eu|w7(Lqcg8MZkm1{tcEw)#T2C2bcrJ|mlhah$R&7dPIB
zBjx8R{}8XNGjr>y3N9Hju%T$>041+<%EtPQ_(6utWoHF3A+7UE6qFNtpP{jyjml4*
z7PFD;@JPzv3JA;*QYg%&tPjYBT?g0;6>y4xo-@8Gvh2fRlxK8pv^d5_J!u{zBAs!(
ziDttrj+@TRE5n$>Z{YuqT5-xiNf>`pP)0u?hW{hf`oHLQ{{yv_s%qOEu%mvyP_yO?
zppUXX0Fn^K8xzkA0)Q5XMT4JzG7M5Bv?HjcKV<02b5Lh&ZFPFm6{l@bs|D;YA07O>
zcW&Od$3hGr!?>+R6(}5^8tm!J<W%?)HzTukM~2sfmxslsCZvxpNWY&B8Hj!|m|8pp
zF`(7KS%NaHb`&y}!kSZG?z2$OVip8MGmqG3loZlP?Y~76AoNZZqJ2BQR5WkRIAQLm
zcNIuxp^#p&@z>)(se3I*wM^V&!eVJk4_1;MscfZl@b-=&m5+)h*Qa84I_e{9mYR2B
zP@UQ23<)6zY#TPhX)Yd|$A99Fv+jK}4ALpYc-a;rZtET$V1)Vx?*g$YVi^Ao&`b=B
z=65^WEAT^O<?J7Fbn7vqM38!m5}8S&!;h3Y(2k)tu?xKsxfb6;<;s9(G<KqA?Whq^
zgC0PRZX1g0)A}Qg3{V)dHnD?3UWswhlxh*lNFO&6^EQwvTPX_<WIGjSWJaR!_QcQ|
ziN#V@g+e;!c<QuMU(#D(K}maAzgOLn%7nl#T@5yB!*J@j6$C}}FsYJPr~b_HZhl$_
zwnbquEW}Fe@K$jQe@?O>;j4NvF6rfNY7$ob3@faun8V_eevdhB=1$l~DYnv9A@UUL
z@^K!Vw;`F$KB0sgqNQXgV(>Aj0}zM9bGQ7+Px_iQ86Ufxsz*gPJykNx2y!k(T|Qni
zEm{zvIx8q$LG*<F^LO1PX@L$iuVnybjoqq@)iJ1MuU;Q>(wq0j^t4$I84EK7n5P_l
zf$nw%>b{<YBQZB~7_M^Yb72b-O!*0eE`Ncb*IWUsH7w_)oi7}h42+rf1d$c1He-cP
zC(^b}-nv5wC(uAIJf(FZ0#2P8(@_|m$e}yp_DG&WZqA6OsW6BgWubX(#6?5o#a=y0
z4*7m<Z@ekKnaVni@hY_pliRKmbcLc?^~pG`5G6hG7A4w7>0?jAzUxReBw~sBvYHlZ
zpz8O*!`s=LY0SQ-)1}m((kFet0LfT`hxXvH(uSFQhKkSgQ3r0ku(AW6D20$9jzC7j
z7Iauqf00L_bX8;b0*<b;?~%U>P&`uvhO2u=#%$d05JNtj*0I~bp+h%9b(x>?1@;El
z*aWu=dsvwiTq+LSqFq5CyuYHhiUiR5@2;Ht2+*No>KQ^b)v;(2R9V%Kx!q&6utes8
zjXW)8iJ<2k<Pd|eu}llne=8XbmfQY4$Jwz3axPS8?v}oR>V_|P*vG0S)$n~VCiZlJ
z4$1N(&@>m^jKi;R`4`0T3&A3zb;j-`3Ljlr9tAF%2$D~ME@q765h)}Ty;fycmX#;T
zKTfEcW)Ava!o}>LqsoiFXqxV_sHNIPcj#Y67z4qf6_nO((C!Ywj>XTjQ*un*F)j8o
zY7)al6LZ7RhVjTRZVdT=+>1}B|Nj3mXSErjas&X%q=5c^0#yIsYrw3WdwRy*HZ)o(
zIZxCT+7qD(J$@<AY;*&IK8)+GB3&;e6&Gh{ovwmvHzZaka8~?_&swS!s!`Q<G-s=b
zFK4LO%0UO1iXZzju+RcSl-WP8efm9a2^Fu|@N3iBs~_xHEc$GoeY6#i=8onbuQ|EC
zw~mcUK1`F_b6`(D%zJF<Ftk=xTfmPj7D3eot11ev8#pIdL(j|9Cf~72?rpf`VN@NP
zfoftbp6#3Q60nyYRA<yhBWnA+|I_K=h|emXHpAlgN}<4c6+qQ*I~hJs{OBz^^XcBM
z9yxPUKAgVG$-<^f1LGylKK5Ab#*#0aM)hi>2j8f$5S|fxI9WNV+xF+S&+C0}d3!h;
zjW4^I@sB0EFl%15%Nlm=M~gL|Ji|N>Rjf&RJ8td3WZmg~eZ53G6!87`Z~EdvA7^^F
z^6mcVtqa54d^-I`fL%VDKu#d9&+qwc`fT(#T%JInTflqXE)NatZ}~`6Pq<}pqh~|l
zxYof`FKgZOQL_Z$P9^5<2c0k*$IoT!?uR{na_c5{Gkx&vSoZnaKL0WMZ9R)Tz<QIp
zbA!)To2>efy|c1r)Eaa2vukyWK55qWwTsq>#*i`Zr0yi!h)w?YodM4*`@!%gL4>v=
z$|jtF&~mm(9vY*)dA-!b-d>?V#M?Xps1PX2u5s~$$6Oxz!=4$b-f-^e-*H~AzgA%G
zuU9`SkbBO>4+8x+W|Gd9`jG60Xn=;*ht0aOc47zB_qlzVHqKs(jV0RkVjj%Q&AGk3
z+@8;_q9-xTztIVB)0KC6`h48IzW$YAq}$62@V<Ut4tIQhUOsIg*z4)^e!PAycAcaX
zZ1=rA9bItPGm49tj>BY>?GHke+qZPYR(*E#y(}GiI(B#H?#J}V`!h7gYJ2EZce$Rm
z8JgZB>?^Ofv|SxpHE0^7hKDDR!)Ql-6}WH2+pn*TyJ&-&wT2BJzn>AiE~8b(dT$4v
zGvb9R=Q7yABfP1r^wve6?cO4OtM$QEL=K94p#}GDBe&Hf*vT)oMrhS&Z^LsixnZ_}
zu&?=L+lV>F_#e4hY+te$|K0!nX4Dc?*=;`V)4R&*ST?bo)rcZw5}OvTh1J~$l!1~_
zszd*~&B0?bTX!m$XS1MxOZHL?3(mm04k*sXr|#-5E`M<D*vmqEbYAD`Nu9CXQ@|^<
z;PUuuyDu;o;e;;2&d6s|$dpgHmSCC)>-dtr_vu8)#T#)J0pVoh?2)jSkGFcq&%p<L
zpI&<k;$Y7$)PRupG$Q-2M{%AdMMzuMA8sD2&0h6&RZw7F!yBXy_~7e5+o>G?MDT74
zJkc|%e0w&a>NLK)!u`LYm6va?)~}L_+>qjLZxj4C#%XWvi+3LU`qt5_wCn6UJ*+!V
z2iNavr!m&t)TTK4=^>}-RpC(c)1&{IZROJ4Uo~4ysy9KMj%^JDZH?#<RAbWXU+%$0
z@QwEbF9e>|Mpa#TsJ>Q43u#CO_JSu~U&7h6Y_y(Pa^CuX<Cs-rh3Ib;P?x?<$a{2^
z5~FYpJP373G$!U}NKy|`wm&SkTg)cG`FK6L_r1I<7VrG4vD<yQCGtQ84G$L|Wu#}Y
zB){Eh&!o*7@62R}csOq7vZl|v_`MR=i<ZBG@X_qPY40hEAoYf&(oLPVNJ>N4vxs4N
z<Ji}u*{!*WT4nC=^d>}z?a6R43ML4r15NAa0qJ{#_6ZQfB)giNcjK2)J23fT*Bp71
zi@$|~1p~*}OugUSIanpZ^{xfaO#{yzEft>AOA&!MetCgd+cR9Be1~{Eb{@TVW0z7Z
z!|6kD@%@0-zlA`k4G`nEkMg`8>>v2`3bKVUC*&6>potiglF#4YusG<Ed72tkcZ*B0
zab~uq*DZNGXv<9d3%%^>>46w$7O)_=(<}c$E4WG-y{EC<hgLN_N~~Rd@9F}$VKAGV
zrXzxNFoH+uafcCxqHTslqVg%Qbcg8<&6Eu>SBHl9I{^%Vj^o)R;naR)if$+IyJf>x
z(~%2BeY<?=`uM@&Y^Clbc$jO~`obhm)K_Am&hgC~@ePW6q9O<{qaT@^)e!0r7vI4F
zYS}f|<6!V_=wB)YAZJ*(?iR}>eW9V4RSX|S{(kJT%NIs9%;oA7(oDIvvl!C3;yoLg
zyT(bo>X+f4dq=M<0jL)=6l1iLCX_s1K>10sdwyIHoFNa?eFJ}}h7YN>=g>erM`lMI
zyvf>_h0HWD#;I|}+4bVe07HAp>GbFUZR-hG#~-xXK-b?e42eFG)5a@2*DhcCp>X#0
zaBg6~yR~tp4|>BH#`j}7Uu>9kA)s?54&ZareifpeNurlJ{A^A`4Vb|Bu7oS-0r2Xi
zp}qEVNA{&ZgI&3FI619k$44X_tnb>Jp5y?<FaRh<U@tmL$z1g45q*~HU|W@N3o1G9
zk2f@-o$asF9>4tN@axXfo)-aviKzl^5Nw4){ndCnEes6Gf?3PMQvEpXXw^%crOQno
zyWSLUum9#z7%a>$TKwB|sz)`nPvJb|?a(LdNq!F-fOx#RN1%?kc!5az5sHB&W$ZEO
zXuX+%_QejnHedr>F};c%^Dvz4F`AQ)kPDANrpeB{n7}&YwRw-xU2AgV82>uGBdAW6
zdN7>fySWJ!MCCB}tmbfSjyo8e0q#Z@eN?9mdBJo6=WJ3NmW}_gs-m6SSJ$Ka4RmcN
z_acy)3#d+V0y5t)yTf~HNBvQm9s$pOiqxJSkZ1K{?=%5oj(*17aY#6Jb?5<Juc6h$
z2<w~zOFd<;U~alOhPDCcl_BOTOoEzIax4pcry+vlCJySe2Hd`@yyyJV>(OQ193eg4
z09J-}@vA#!HY7E0KAx_y?eN8vI_pH3&Opa9xWu1CL8OD%jASxrG+{^6APe5nZDB-E
z37^#Rjr}op&ooj`#?YYMxjd+DV~0dgLSB9InD(6ni7JXSwjS9kj2(4T-3Dyynhm`Z
zFx~8_Y0WMqE+iX~JC9)jq<JvW*7U5n;kxW#wp%MT0J$#%J)-ChUs$<;pTHh)F|+<L
zr;4Bfidg2^;N|-D3@6A@h`?mBJga-bHH0*C3+FUvul^O*fq9ZYnBzds5_06mC+tF0
z9O$co25uvUwNLUSk_<q02AxNxpu-5*1RF{RG*3@a`jWEJww%BRC@d+gjtg(cI>Zzt
zu}`7*-+}yrx5)0+j}2GY_5zt=TC)jgEXF$riV%qk|FcN>{CD)}7`>2LVcB7b40<yB
z!{{^DKe5ega(4KV;S;@}0V#)J$I=M2-K@U2rwp<ZbB>0fHV`(k?fiOdNQeT_X~2<%
zd4LiH06ST>IuZ1?av~F2b~X95VbUx6I|FeNA%kQP$}4?}a0Q5T(T50}j=-1(LY0!`
z&#yx+zKd#f_NXf2?R|tzW>!0SzFklcjYW+s+C1>nBG*KX{P#}si;;s3D@YA|ICYtQ
zXMae_PgG@o^f8Rfy!U@xkd{a+B1&XYQV+{R42_Dwl5V6~&9`4&7?*%n-QQ*P|IBH4
z(+-}(Et&IJMnTp`xE{i7yOj;KcS+PJ2p~cRK_LkkfOH0&W$>gng5O@ibO+Q{Jd_{M
z^X6!50C38`1xZ}W{NTr-NC!KLt!AE8NTfgEIw_Og*k1l6%;if1iU^`fPlSM2Nj%<>
zcPHFbt2aX82%qMcBcK8l4Q)fad(`x|>5jo*IU_CU4SSDcSOHo|p1|nZh7^!Q6Q1`)
zN#j<i@6Zp}E-0H#y1d%VIQDB{e`6P2$)$GuUmv;CxOS14bBJ%+$AWJG)YTQUmDiqk
zrT-YiYi|oH@oSIw8aX>$kASeTUSG3?`#e~*FFZQ8XipibZKi<p=dDXLS@UT@hS<YJ
zO6g0Ic_#o3vVksQ7VG4KV{M)?kv<dd8fD!TB=QT!eZW8VME{Pyd_|tJda650$e)fu
zqynmt*B4}*beY4e%pqr=`-S|G3nr40d(25XxW61rTw&P-(f+5m*_{iYuBFT5AqS<@
zWml1H)!Os&VLsOu_~Dt7hIqrckl(FVkiQM#VIoHD0pj2cWWp#tIgvyrhJdH~MR9&M
z+ZjC8qLpwr^KmErCa{<!iG-NC17gNhv)>B@v|<6eDEeEV2F`+-fOZsx;0;TVTc8Fi
zrWj23^SL;xDY?uX)cIdb_z?9R<h~Q!gK`J8xaE_UyPL9sGVxo7kO{#>mZ=9(>5Y3x
z_+D%G_n==DX?3RHg5rN)E>KQc{qmn`-<kCJA77EpF12Jr+K7T8ZZhZ$h9~(=|G)+E
zt>WX;BWW+^ED(ZiS_kcP&zrFi%eEgi<CWM3^RWH49jf5T1pHC)ReDjVZ+Zn|iS4|%
zuo&5EY?{5mY#?#JkB=*!fhwpQo<~a0Mt%^V`EKr!R0~M2yW77y|5@!JH}l5C%(@M0
z$*a+%nO`<2^IFZj!|CG;eMFSge~5=KY<~+x4(xalNjn~?cpF71bbXMW0nXF1<Zb;!
z{vGvJmj6u<eWI_}KHu!^A|pSd+w)EzM_oa12C2A^H&}ZM0LJ^{j;jhv!TM6y(9}MV
zne!bdF~v?JmsB3W9Vi8C(^_A+Ho8!GZv4AMrFhlslI!(ubU3zMyRMP(!t2fGI8;yW
z1MsUKhI6a<nQTu|Q0YSJ>@pr!fq=UV7rriIM8w&l%*7$x;r{|hK)AnR<=!M*1&Szc
z&D&%RD2xIr5dsas9A4)y=dcx{R3dax;B}7ZI1)t2+H~%q=O}w*?Ck#jM}%qx&4>a|
zg_*8}4fCSZlKV9Vh>jp?Zy4Dr0YnW1Qv`xp{DxZ4nQ#R%A}O%hc81(Bmp58nqVe-p
zasx|a(;694eQKUzsB-dQPDjWNBqaXXVh$_05d%om=$=0Wy5<gXLD;72FcC0;AvCy{
zhS`q5%m6`?k~+!ON$7MC7fdxkh6&8`d+2IMcps7TvqnMnc0QReZsyHpvI49fR;uZ>
z{2CG9NYZhh=H2gLJALc5<cAhK2Q7~T$td#jT4~D@O}?n%EffD52)k!7kO%|@sq;f7
zo#1H@Xfg*noD<DGh$rT>)(Bk&YUl$N%MSJ0$x0goxJT8E3DCIfdEvmiC@s+Gu9!iV
z{hF0~U{y@zZxcg6G}R3($w2?&qJ7`{`$fASv>puseD*wBJY>oxT14^a0?IrZ3KZel
z&74aNu1swtfyG9v3RjRUxI=m}1tbaxqb#tleLEN4CW_EN<n8_*=o6KZmZ_WTd|^Vc
zPR@Q3RO&MW+eLd8wOT4wy-;O!3RfcGxS>=4^KTp-#}0Yc_DEFZCidzQeJ`l%f^HsX
zY^QjUHYGKph48Q=BQ<5P3oM{o5E#u3_@5H^ze7e{(U-d;lj5P7o%l1Ica#l58h=nb
zBLn;t8P^_h=ZZdp)i~+lBV5RYOXVd0g}fb6w2t8(g+Bbg7|&TCEO!rI=CE(nMKv|d
zYSq)3WZ94i42GN&`8Gl>-g=wzLiopm5;W!mIS8juy0dV`?ZOZl%TdRBRyVSrX<&LV
zK9GR`C&%+`Vehj0d-)v?yoQEzQ%<R6;HIlCY@ru6!#CjwWB#`PbZMd)Xkwbfy}LfR
z`%{}eCzKo>JODBtz3$)V|JB<ZAR$47d?$JRHi3d2D{xB}f!zN^uds9hH0}Th@)S1E
zEH+=G>B%gb;$|O0sj0o$Cw2mFbU5so#ve)>9kw2%_HkdM40lZ%JBS*Y+2m8)<cQAi
z+2lEI@(J}ZH(1S#u$l}&rbvCb7682gC?jNxnq5hoR&^tnduoUGY_-$0hXw9M%8pIj
zn}t(x3v+FF?Wt$jHo6?4ka~(BOXjwK6{~(_r5U5uEH5=(dJ3Z9o4fJf*|*n^`Vtf#
zUx79cVM$p_=qcdORb;U4lamOzAdK2neWlsAYHQ{3(Xl|_G_rwHV?@viff5qod0d3}
z{3Hd05`K@4q9)SkIS{!_%q42C<l@*GN}lY)y5aW68z*+>k4P0Mig^dfw`R%*N?!2{
zKf%fk#;f&)UI2(0wtCDsWG)O{&u1OccFFODe_pcPEa?6IUVVa{zsdq7mnhoFoaDDy
zdV+KoqfkR2Pf!3MHwSh&quHAncFl;`HJCF)RRD&`g`yD{D~2wT0z!8lsxQoLkMQ+O
zN(q??z!a9qnzUh=9+lmL&e;S6HVv4#q92EqP7?db<ZrxZoZZ?pZz^lpgQWwy*DL|i
z#{ebZ@Y_VrGA^?>@uFlDCtP;#c43d{<7?;M=UczZB329-mq#2CqlnfOMacTn%m8Ew
zyl#+diy|>(Ba>Ds;$|>Fv2{4p2oEHKA94I(2=pjGt0_>0P;TZYW|IYCcz8H8oawIr
zH-E_JJ6v7R-ZT)`It97Y01K=X9FUvBylO}bU|t|qGOU5n($BGOBY^f*Dm4~_2v}nx
zA$N?{&_RM@LsNDIM9>^g6Ur0Xo5iQ)QYqxn(Kvq&v)s6XlW_hDp00u|R3HjX!H%#v
zP{wEDbP6-O(;FX|AM%vIhUkbZeLY2^ldEV1`)dmjd<0k%5RCSQ>82qHhE~YI$1l$E
zc;nndVjnR9B5`R66*7I7v-pe1N1(pVM*Z<&U=yoz22clfFx;rty-`qa?ifu3pimX<
zp*95Nif54q4)HLWwJ)EaUw(vs;--w#NS+{vb2F(EG%imjHqXo^n3jAl=CMDGv+luh
zc+d&D<vv}v*VqYS%!SA>i{{i9OythoX;KPm4VSxU$cs9sg`Waee}K^N;9ALS4iB%T
zOe>C;tae~yY4T&Bv$ZcVW6Nu6XdBEcz<6l^<LKImyXHp9)rvi!ZPho-W%#xSS$8HS
z_6+>zL3m(ifDz2wKzGBO;GN-I6mzU=Fn>l9m*dP}-<<>|b(8kuwPbOKxsV+X;EKYZ
z9dgXQ1o=R!V1n}bY~nE^y*Hzr!#)6e+#~I^v!PcDQZ0eiu<!Zz4qKVd1F`*imy)EM
zz*1tddH~yj+b)k2AVGNBso6|oCq*f!HUU|JDiI808~o61tP@|ow1Ec55<<a&_{K)n
z3=->2XJgb4>I-bylhq_3V(J~oet1ZAk?ht^H@R?_G8YM&?R5JFTBNRaV**q43hoq9
z(BsR+VuSDpnI0&E7tKu$Xnvp=dqZ0$?ecL)bZwyO$Yw>FBU&>gm#pZiJi)2C;HM`k
zBi;-xCV)=L!wzH@GcNT6&GeRrrk1AqtVYTQeOWpsZAnugNTf7#ByvkB8Habe5<TP$
zohK=semV6X>O3AHod>&c?TH3z)nR#ntKtK0LFzMJBS73rU4?^qi4><k$=G+~vimAS
z5dDqhI3rjFR1|~frI;ZH0mfM{ljjwELsSW{lYn%CeeVeZQrR>6Sd{WS!DXc1+_R>0
z*j{t3=dZ9t@l_>oe{cy2?-ALf8<JJa_&aK>B8`<AJXkF>uQAQj0O$uGM)2|xGY!gk
z-3N8+Zg%k?aiq*B$-#SwFQdBqfrJcq62XRTdT{J+NlQdHJ;`}Xj*wnTv5Sg~!xXx<
z8mWAeQlp72v9K?nqOXA~AVc@}RD(qC3xR|n-y%JLcBU_*N?!<cspc6Y!2@fs095s{
zfi>)^LLWCOs0osk`8x8%#iU0xgd9Ympf*wBToEJwMC-)dB9-|VC!{s$Gr!!<7svcX
zy+?o?%lG(L0BRL6Qbk2tvwb!2M_I$2qz?e!o=ALq+R8W!bY%wk+Q99sJ{mXcWit1~
zM5Vwb&M7mLR$0*T%*YYtHT7XtAbZ%{Q4Md&Ni5>U$ty|!502p`3Vwj{xXXxYNMnhe
zvp70I#Q?a`mW5I8$&KtJu~e85;ErF<#~VqKo^299fhV!IUM~T`d<`8YUYMp?0T!m%
zJ=9=3=tM)FTI!-yk{H`n#gpzZ96rIlG?xm*^0OawJK<2&G#?)k2cuk-WDH_WGWi9-
z6V^MG@)D`39F*Qs3q$hZTP<PF97#+kf&OR`sS2P^7Pn+Lb+Akg;|rTaeZZ-l(|{?q
zNw>rZ2xl;p6C7qV0U}O|dzbMP>6L4P^a4WIkm&6-9>K#y!jP9r#!88**+P*Dc`y45
ziY<Y{fUB5S{2;zUt0I5vq6SVL3;10DX=8r^lETKIN~qHoGc#hI0am{3quvPtm~DV(
zhUtwAg*%oGxj2rMcnHb)-;>XBXLTv3t6m<CT#fe*aqjfyIbUp&sn0eHPEJ6b;94;F
zfw=PsW%a_Mi+Y=(S5iRT<W0(UolM8WdFX9W85~aT8Jye@RTqS+z@Q{;oG5A&>Y_^)
z=u@aXl2gVPo|!du=ZYTgQO1M<qpnJn3SMRnVmSe6J`>Y^plajG&Z=!d3A#4?URRr2
zSsrulr;Gd+@j0U`i+Tzu8o^XOF(@gN?Yn@<%MDOU7_}*KR1<|4=6L8=4Ihpz*!RiC
zpe=-o6nbS1QKrzVtCVEk-4PxG$PIAvdc4@KS^W{PUjvciDzi;ps0Vml(mJq2s#}*h
zq*se6+|Ch#W+w?culv4AZ3PgGpk{JvY5zs8cJ_F_E>@eT1%L+RVnkZwQjfcc8>WD`
z8|R@x_gdcN%?j59Z4l%(L={O+Yw6`jp&pWB@a>)4FKnAL$1x}^<4AQ<mL~;go%pe^
z`x>icn~$Km+aogLSj-g3;^97<AU6qc%DLFW^|?LK=*5;<-o&k%z=gXd%@*&(L#EB$
z)SfTw&<wM*jycn}sAX_}|E>2e{04W+*z=_I-s1?f&EZm?MZvNa^P89h^!AV`vg|HV
zh3bb-ulYEJ-b+kH99*W$i6VB?(vcr@{TZYfgF!Jx3T|d(JpQqmIRYNYp-E%Nc-#*{
z?_aPz%Pfg1S(+LeOH)3y%P(Qd;yKWz@;IW#2F#MJ^YMfxuZRmtM*Egh2Wn=Z0J*IV
zPw0h>N1lz~&M$&tyr!dNWXrk`pFzm6adWIpwW~!|tk-zO4&$wxYvVC1?%GWr>%wRf
z1mADm@5@S`A<t(g4<2IHt{U*!v9H~!`$^16uAy$`Xnryy`%dHx!-d_O1MVhIAZ|@c
z7|am^F>*P?V+iL-=K8SWg?)eT;}76k0lo9hH$?uMT(4me?6d^p=kbQrKdi&pa24bV
z$yHztjS?hhd=3RqQDUS!3bhEN#&t!nY;;l(H!snMfAl~usqCNjMl8X~;-QW7XAv`a
ziS3x}VN5D!<i78UO@I7dR$?A1JXz67)f@`9MnM_uk`8M~AhJ2>PQv488c#WO%Bj=t
z6jB*cRMbv_gUfrfeiQ%_FUkLzWZI!%a3bw2ID03`fdI&1a_}9inVn1#{STlbpapu%
z78(~K1rTOpJ0D+di*UXZ{FTVJ;V#43u=ub$%idz+5|<>)Lk;!VBE(ZdaDdu`Es`O+
zk6J_>OO~D)Q>ubYsSJef2!#4+->mhJ*7^VwVJ_O-=llB{UQit57{EbKFg;e8nJiN}
z4`%Of^(Z8^a8|6Yi`56zsUfRD=M^oVh)70tMq?kPrr>S|x8Wnd{arV>=w0-`c~oN^
zN+$)V)U-XvEym)&A^?z$f<i!hazIU}_X!_SeBeWnO7nVTy>f9Nyg6-$6PxeU-G<01
zGodtxabiRdDG!$QaX*g`6T>-3+P`1@^6DduFoP_+s77W!0*tjWBG#GGIOI3ESL@{C
zu$M{6Hk?8iYcm`k&bqVEv2g{GGs=r;u_>C|z-|^Z8$K25ZHCZ0w8x_ung!}7p?=Gn
zG?mbrmG!2G`}O;JF$WxJg2NNJG>Hp6Oa`187OH^rBd}YD!|+acTWm%PfL>T#=;*Vc
zvTt0SNP07KNiutj>IK3U(S8rEJ=j}REdrgcRPTB{M?^kv{&4pGT@xVoasfz<C*Xqp
zS5m14$ettahj*eZate#x<ch?9zzLIt;ckcgKKv;41Wi|gH2*~{JE6g-Dush3Ju&xH
zs$~%q4=Xz(&nbenq00MO%1dx-!a}hNfMmA|0JlQxDZ2&$w-tHYs4M3UCJeW*ulK}E
z+-+CWaCCp~RI-D!P`9N_MI+V!l>6ZCZ($S!f;U?{wPoX}qs*168U4Q4bo~-J-U$Q&
zlv^w#><#({>8Sxyi%S!t`I)N!Hr=O{t*$vyMz|}4gj82_tgjTC?-ymOKHbNPAU3as
zxpb|3jC6&KqhrNzb{1Un<#@#tx#H;#pvThp)-STr!c#1Z0F%aYbRHf^%%b0aByAbI
zc7f_(#=k)2Y%FB=*+czbD^b}P&jNWB-XZA|Dm_jXM6E-Z3bKpEhc(s{PKD-fupx4I
z$K5a5YF1apu=ot`=|_Bk1I3tHCz_sQh9AEr?kBarV(w$)LPEJIw@MFFe+p$%G?xZo
z(wvSV-AvG|Zrd~~vXkUqV+(hkeiPc1n9`Nmi94oMQW_K_s8P{$YICwnuQes;s}N~`
z_&%-_7pKprwm`rqu1J01H~wIHNnf3Qlk7&4$&^?2T<4VU!OrT6)e}z?HNC)8*#oP7
zU*5x$61<wXY4YT(OQB_oiy`vy3ZCFE&(D~Ui^UXr2PH8F?_W}z7_Ve9WXB_}@}ne$
zBp^zVL--FP`qN^VWVZx_N*b?e*MV`}VF-P~zXoPVXmVH4V02X+N$&w4LR9;ND=)rg
zR2^VQrq3sHL;&_-+L$;~+G|3?TUiV%54i(6lRSXN!-CAJxG1c#Rj}zTJRN^moG4fz
z8IbZ7Fy>-MI!MU67~4FunC{8fKp>99amV?t_$E3>MmY+tdSWSQvT_lsgQGfO5Pcor
z#fA3B6;kY#6iKaTi`f!Ul>7S|p4Li%j=qfb(p_t_q>4f!ZH53*S$v?I=xjyiqg^*i
z-K6TwD&r_J5g;wi6sSHn8KvbX#nPmUipFpmg_fbwrk*9#Ak7xZ#o_x$^V;{`KNg)i
zjK4h@&zIXxbHi3Id}N!%BZ$3kk<-Kb<Td7Med|4X@-19exjNEFC@EFz%h&Hdd^*2;
z6m%zAEzXmP9;z%)T0^wya=B2W_MnR=D$H8mC2PAlOek*NWu{J(w3u2_S%0EsvX&|+
z&ldU`V&uDP9$}`@FhWBn06oO|yOZyL6)|+uw~9#5W_TUJJ3WXL$xT4pi#hrzxW@aa
zoU}uI{4ys{;NFCbcN9y3BP<}b`MiKkUFR*7auH@<|7)icb|fx<ygXVs4>l=|$v03|
ziiKzaMvEzNg!O`bFsVTsrpcQWx7%g=`FWGu#V4v5AC`E|@FAmjPmH=B6MqUQSUBa<
zGuT_jcIi19_3L7DKAshe?Z&s3L#k6CKMT-$00BGQ0YG%uYigjRcXj+%oFB;X3}}4`
zjSh}?dj!}SN`5tmlq#2l$~SK9L`jkq5^(xpv%0;*Zoy*Qw37^%PHNHs$y1u#T}GRI
z8{F+Ii$ExB&g!T{aaWIFQG*7K9Gx@0Ua`Kz@tUNq7&p}IO*bd*#yF7=m{Qt>_^rG#
zZS_hAYkslLl4U`a6F@s~(?X4oL}aDN%F?h$4`_=5!AdutMq)BC1VAQIeP}9O38E2N
zDY0a?gZu@}YJi*IDOOh?cR|&dLXDUZaI&nIpDR^AL#WBjOlrlE9ds;8OTxX9nJX2)
zGfrg~BUsC!*%uN!vmjnbT4sdk3MPo?v$A$(MB=Qf4HrEs668ikhf4pwQ6H~DN6Aw(
z3QD18bZ#`!mS36C@CCZBSPcufYbUn8%+r$d4P``;D%PCRIMDLfJU&ZUQ(j2x3cR?B
z6Rq=t7j|m8JwY=7r^Be~nzuK_dIL*<+L6@VN#%YYTKzmN^|Nq#p^WBA$4c*!NflR!
zP@^I;tX&BgcnqvV(cy{*@$*#f?9LOtnt|QZiN-ug9F7baQisUz@0A+u6IJm3o`gc0
z?T;o%TAsD1*3?-6W|THiQ@|L0<Cft$HJXet(J=G!!u+_nfyo|8jud=yCwpY830T^Z
z38J;(Ii2l{bjQ5E``x(xUDs=sEUUcU-@SgzyYKzI+23PY1v5hu6&Q~ePZ%sl`I__m
z_IH8z%_FowNxSIzElhS5t1PGpHSBka>I`JJf)=0w-+kj5gS6tN2{7u#=Ovz<t~Vxs
zQD(T$_Yv~Ay==Q`-XoIpeQ+$dT}LiRN%$TOfz})<T61C!#E|W)C(fBrcG$gsiF>S9
zcy^K#7x-?3>Nzv2WaQ9gQnrr@i70&a2Ff#6(HpVicAtb$=G9*Unk1<g7EqBjQ^nY2
ziAr6Yh4$jQjLj?hd?A2JA~G$`k~$fdc<Yc{|9!TUqvNGm#^0n}NZY_9OGC_1WjTj5
zAlB4^%XYO<UhiUcF~8V8?mYf)eKgKPro(`@_cGYI(;E+>iG30PhnG5vO%DYW2OVvw
zG%_3Gg~dU-lXSVE$Jd1Zse4wE=ju8XSqT}expOURR;Qse-IBcF&SXo}qG+V*=3Ox!
z`mEAawzs7lXRm8QA#=%q_E_W&T3)A$fbui}_<F|JdJ5S37?M1|f--hI=1A}*tv;BC
z-=~5&BcX@+S2J=!2gTr0aFqSl8|cm2b8x#U3<o|f7t=AiwG%daXJtbNC982-<moNo
z!>VV-2swA~v+rF1V9$fndC_3sC=h76DzEV8TE~RZxr#zWYn2sAh}mCNO%mwBD&sj0
z<uB=dL=Dt<!V7A`iqP_-!eW95(q-C*#d`B{{23^+S9p6)hzUT_#=%0ZN@Te=nxHeG
zvVwEMcPxt8@qD42kQ7fGEaFw_Dpw5VFKJ!hk%NH!6I9|>x-(=ZV;B=NzAz@_8VFpT
zou7UL5_2e2-_b78`u^hGbLVS$Rh-OkPk*UocGt_ve*XUa^o>(s<b3~d`uz*%^RRmy
zl6$tS7*GBDQ4v(~pFL1u^r(R)EPs`bW00yIUFK*oS5!bEW%}S~t4W16tZbZ2$Lj)(
z)d&M3<?3j_Dltk{XeB7U2FX%K(nGtlIXq;?HMZC|H)!t&ZZ}IHoT1EgD4o^7)*M!x
z**x{t=YTcFw1fmZF7<>y5!OPKh((wHbSeU+2bOh-@!zxX6iufQ%O?vYSE_@Z)cw_5
zsSzPkRVBidTUXkCH(b|_WEnD1V4}J{>uF?K;hkta?sTkmzfruX5<?4V7(YdPa)HT`
zmju`DZ>}$&<#an7&yU7(rbw71#i(|5=m6BpV(C(8#R1L3OEs6zInpo<Kb0H_O(o;M
zT<LnBl2eJHm2k~(i}@Da#u>v><RhT%4(r?HK&jy4F+LV_o2`p!k!|QgBMv<>m{e~{
ztb;JKSx(&I85Q5zemXkjNkSuh6GHe<y9uzo81c^cOIpaPtCSpabjy&^$5fOO5Bp+-
zkL)Q=YbrfajINVM_+~4w>s}ICZ(U(iQX4@HeK>Arz(F*%Rq-U-%(~W8eK^k+_wMbB
zcb_gj!7eJd8)@Z+H-pF1i*g=fkyQ2qGhi~(11fP}f;-w$19rGh#i34QjP0r{93DX(
z3x^37y3MNn$t^DnQ|JEw>>@?3UtEz%5&#|JuFyOzua$;pxEU={hdS?YH?7sO@hEC;
z*h)zUjlpBXS;8nsPl8HINTAt#1ausEdK>4lqqVnG9)HDt{HsKe<!0#aB`t<ESM;F%
zieB;+jqKcIw`1K|DG-9u5EAW+Y=DV_7>)jiQv4Sw`?on9sHL%co0HueTae%iJl$?K
zFz;wZ0{PIb&{7PL2_(TNPSmGm4pYF!sS4Fx>O}=iv(9tZ&lM(JX*RwdVTn*_cqAPJ
z01S#dVHE(RU8L^51N89;-f)m92*QR(+D{%^QbVz&WN1(dW;($NkBYD(I!|(4&O>D%
zF4ZbdsJ>QQKsszPRU1wJV7h=g_EGZ>u#fMGQ0gLl(mrW$Gd2^NlMppK#lJEC!JQ2h
zJVzB?b{?VPkaf?%g7H->;7AgmyJqIMwxGVEl4`@U6_Xn7j@LSYUaiKo(HT@a(+-fc
zR0>_4Sq*a>Q1OGhcrAl0Qw4&ZQjbfn<3!r^(&-|bcp*EP<D0Reuop9y^7VLa0V!MU
zH+6}o;R;P+BTc19AAiKxL&(@(|03P|!Q-#Se-T$FaYW1|$PMYQY_Fj%W8`KUHNh;Q
z+sz|#MIPDi5O0P{`RQz&7vz->jibrce><DPu+jL^2Mj0>vpwlcr=<<5o_oj)P)sy`
zN#YW?#%c-Gk@7GuRgUYNKiA|&ly)bbLRb7!3*&uyRZNo&k)kPUCv>Fe>AahFp8`mw
zK}(O)f1>Tz$oEhk@Y2O+<!>?cGUkpPL82!b+#0SE6}i7JH#L>!7pJs2a8K|?oFywn
z{m>n>CptPinIDiY;*h$oKRBy^<^(`R8^72Oj|f%%cNNdwX70=klaB>Gg?a+baL_DZ
zd3ZSes&<hM*}sbabt{JLs1=j>XMb|q(*;~-voFs)?|=MX)JS6+b(7jNc!r`8g~^aM
zJIgLc)nL!Mbj_o&Kg+<_Lw8xcmau5lxNDE*)=Qk=0{B}eiP5u>9^~gE_MYwul0KwB
zdQOw&x<FrjDwmZ5z>eAb@!Y)Q&WT6n9cMb;M*DG^S)wj_?jD|*edylIp_(Ox<X{@V
zkX5xjRH7iSs1bS{(B8}?hDH$B^c{H=?1>3UR3Zw@;=%qwP5yXdGR)$My}B}n05XZK
z3DB0plR#X@jfpI~wHq(n;BZ@4@wQsM*u<6<kXYHbi1-|nRqJgMf0oVMXoKmlW$wek
z9Ca_W|M%1Qw(Q4VBw75U<Mh-6`W?FPOM(KWKk&~p{PR8jc_m)Q?mkSo53t@#K$$UQ
z#bOzI9nT~@rE??G_(Ve<_BU@Qay~nqw_n_0Cri&!$|9E$)1OSFgMEHwUI=G^9q`i_
zopL@WA2x2<JaCiZ=i)bILvUCA6s^iYRW#)Z*RJ*{#1-$-7jff;uSX!%03noi;VVA+
zFXJ0&*-TpdFX9*0D=8NL5O3;>Z{UMf^m+V){i<KsN<MHPn>Hh7X79D+%BT<udZ#<-
zfl{j`74#p1lKA~qEZqnL<gg3d2FI_o2jd{RIXrylI~&Js)7yy`$lPBsp-RR4fZZKu
zUH>+5JADe!ZKcM{!5-vh@dMZv97%z<1?s?ZPzf@$L8zwgnWI~BNMdS#>bvb9rKql2
z>Qum*KDk>EPHCf(GkWL07SHj=9{Mu|g|_FJ=oe{&@zlqNK-^8~H9r8ts8k1{wIxg6
z1kQ25fmf_~{e^?0hz)}N=X#Dhv>-nA?nNNn-hE%wyFVW6T&W7ix$R#30iD>1mnZ>v
zVfCRpCR^V0E#BoymnqkQ6E7u__2k>uGpM%ZN%l&VSnj3FmX;8N!AV^PwHIQAb3`>W
zNDENf!sY%pzTDyO|7UcVCmRlvyBAMJUH@ejfc}Y-(jB$Za70J%pQ)yF;9k-h^Q03m
zI`8@YJyN>I!uzmTlfMGxCv`SnlLann_juyp;V8b85FxrYHKHd2>*a<{g>?s)c+)Ro
zBOVlohd8inHUCfj&(5G)h}33f@H8vK&c;);-<;~YGqkB)*`Ue3vA!@<Q4xFc3iVq4
zZ7F_C*TcU+Y<wgX4O%6?klnQ9Ek8qY2maF7ugaaoZi(#|Qmd5(&Q%C2GF&aT%d+|E
zs)hyuQgE{x4~NA{;j<iiOe#_w9v)b_J;)K)mbGwQslA41MaOZySM_<<kuLAFQvXm)
zNHG=d_t0&(ZLr1;oU(4_rZW;gi~{13k)4_h{E>Ch)$l|B{Xss51A&%bfK4`rwgH#G
zN+)&-S6Q@LR_|Xsh%KXbt_+AZLM6tFP8o>6&k^w*(hnoP6D^nlw6*MopGbC$Un2}M
zxvV(mlCWF=Wnwv80_64JSX_yXg+Rh?-jor@$iG6|+iWEjYw*hG6a0nr36}8{Gvu%0
zPIPsm4KJ^hFlmK~RK2TyUx_+bMy#YB<JYNv#sDZ{9$-&lYarote~&KZ51;@Z=}8=;
zbv`}JY)eq?z=T?!GAeTw2-)Zq*P5K8{47t#tX*9BS2EHP3KkhxoS-Hr8e>X?jZW}2
z&i!~g-rS;1KZEF?LTN@58+&Pz_Z*E*%HXLr?u#Za&SO=x2Q!@*;@EO3!2J!}Z<0Kb
z-%QO|Ws?v~e$sUEjSNQPq4!)u6P@0Wq4wVO)=MpB@YjJvrM1UJ#+#v()P3q~1H{UN
zTVzBYe4zF(1ru|&6I1_TM@Y~MPnrv%!i^zUx<TZIqec|$8S6I2kqR90whu_q4=94)
z25Pboj&%p2CsMQK1GjFi{S66jdSsGF4rJ^-H7A>%XjO^&HoCtrx_e`>$>?upWP+lK
zhjvId73nR!+gU2xreAY%f;9w?$HxPf0&tCqyGMv=6o`q_X$5yw$>3yehfF&>T%v*`
ze{;UT#b0#mzl2tqrP_T(bxr26+#3K)=PuGeSKR@CxG_Q4x<)2KTlT?lY(dy?YZXN+
zo(s9>4P==gQ9K^^B1Yf(CXU;ZLtZ&KP#5fAiGYr-%T=-d<Hhxc9rzo8G)447CK7xH
zK;3?Re&n?%;HFd<`Iy-9>)%L(hgO?iOTe9q;}?Go!qg{yc-a!cTXUDC+P~+4_SD>o
zlFDXO+u<on7t9Vy(J^C6K1Wir&$R>UMTvoCRe8h@jyB7W{Ko2^Szwv`XoU)?*q8OS
zdJ&pocXQ?X5o6r2%NOc32_asR<M!0@cjyWlWV0F($wWi?--SP{SX@>(RQkmksQ`|g
z%3A=*Q2R$m-Ob21vYqtkaGtK05vtNPDFT>OTxBVfMhFTkex4Ns;;ALWQ4W^7gyUJV
zFXf)K+j*isCX5Yg<<E=!n@2%crJDMGF{n+izelmf4TmbVTguitxza(As+O+ed!jXf
z4=lgzc<FSd>TD8(N|$<sew!oPwKc#jat4hKC6=p#Uhx6Q2jA+S%CT5)WEOa0z>=Uh
zX5+#nF$$!OQ7`EumlxGzCVeXoXs#VBXs5mTNkKjYq_H>p`jv{MjD>J?8>Q(PVb$%+
zasF9)kTdUw8$it;_XSm8B7bQYOceEGLcti=3QrXvj4jkvvYqx!u<9Q`v(QqprCYH#
zYk5a7YhE9tkXH}rmF?saw}TV?h^i3AqpLYBB@OT&v_g_)Y&)nraU7ha(ZF`%IOs>S
zw(dS41+7-}CMEZXXkWN<Z6KuE2(3V9S{RmF$a+JlydMvuQEZBI8yvT;#3*3bfX17&
zK<Dl_$J!;d7{mpK&QK|qkBO1JKPF~>40}@?h4xdaUT5*_WZ6AB4rfnLnBP&FkuwPr
zDR5kjPRU^HyR-0Uw!_Vq^rIy?b5JnDtz{R4dk2Rj(t{gR1~;u89P4QfjWQW7*vO1#
zW(GG06l$ghm%}4&AJ}<bYldU!qlXH4LUbAoX67#id&R}!FV&5(+%0*yb7#2AlQ|A|
z`DD(+-C4e?EMxMwdvwqn8E?(R);Mi1PFLe3a%t4G_UNNTC|7`PWR9)e_9N+|(_8{4
z?eDrzSe;s)hY{-D0hBXXmL%~=V`|M2jz^BO(auSx;V6Zfg-ON`Fc?kCp%P6MLhc{R
zjynk73&MmjhEkzlka;@nW$bel088r_77B&VfFj2DD^N35ZbtMcKtn!N<wKe9T-S(P
z>6%`Vrj_Sf%lumBHd+DoQs|-70+Nn(m8~d?@GvrNJ1y2L0?x+B=u2d+V|^=h;U!F2
z7ouarMH<}_)Xu_)2zK{kvaczJdC~#QyH4||_|Y$f*8!|Vu+#J|!YjW(+a2_lpiG_*
z4@t+x*v+J|^|f0l&p{b_!l2?Xuy}-ORQSSoOd8-f=`biI>4E5wL6;Tbg0rHsi)oEC
z?K%{9Kz5IcDXXVrQd6@U?C1uuJ!Kmu+@`7Fj&6_DIBVPj<QQWtu~60zwNAxNV58_a
zG+DaaIeKs8!=bQGPs87%UDEZHuZntIQQDmp{&F-PY<?_m(Vwooh~!PAteOSRV_kkH
zzR@3U+`%_+ZDKbG`!WhP(!idBBqOk5Lt|}HOx|e=WzjDmWN9?yQdZw-+3H(6hbsCQ
zZviM(I~az<t<jFybv2o_{Krp<ZUJZHuc%zR->iJdA#b2=@j%@skgi*?H6yX*nCMMO
z7v6>l8c|_1CzGH^I<$cU50IPAZC<B{p9&coGcYQsct=*yCmB9iAyII5azG)MTo{~8
z3F)9{2AYT&0D@=TsT8`{3NnF?jSlP-7!}-;0nBc<fWje?9;lD!@x>rYdE;Ss=mRBd
zS=pQ>QW4PwOz0}-EV(Y2lWTmT>d;ynI00b`m29EzLOKVjXzfW~Ayw5q=D*m^ivW?d
zadhR01Fe864j{FEk_X~@rY6kG-8FMh!&LiAcB(Jg{$g<L9XexaDCbscHjIC(a*Fl|
zw7}GyN>Gr&!CaTtdJ}cK%i)8kRR`2I#g#fvso1er+Qt=8r`GN`8Wy-6w^L-t$<c6J
zax_eFo5@EoRrGwjA{9<?04T;#HF=^p!O`)HzkWAFH&SwW(BP4G0NL<lj@N8BN2th$
zeNppO3hS6MA0^R2uqzsm@^h^lVfhW~(0wRXqLk#dSG|;v@BxO?;uwwQ{_YFql}yq&
zuK3)_E2AaBE%rpKr+0fDAl;7p{V+q03=WL;8+S?%ylR{NGWAtnj-RCGF_6>*VV~~Y
zYAkeUK4CDNVOySr14U@&#)WvSzhc;uJ>9Dw73|^A^sv11irn6H_$E~=cbU)L(&_<^
z+R6F^VeyAgka9;2{ZZ=3zIC5IweHiawhChyC636wK@OEzcw;QqIN~|`gmIlXzBfom
z7JJXNjJSD|tmcUDVsy!*%UVFqaUK)9PV3J$kD6o-+sf$b$pCk5H(xG*Zd$A$yD`vf
zCg}p*f{ey%c3LKy%W092<x0^UZ8ppB(IXU5Q$y?ayx2V2%pZBJoHtEyi_s(23kt)*
z5AEq<=)C9vUs!<eHG$e!=oIelA}{b{7yKxa!$YHJEWN1p&{{2nE6Piz#flW41A0;w
zlYRSUgkc2m8$C72;~eIwLGlo;QTVmY29IyeoEz>>7IfwL%tR?vmBk_Ia@m|c2BN!G
zPH3QcLg?p`7RciaJxXVN1v6luQw&Jk{OcQ6Wu1w8ShHpt&@mk)>-RTvbTk7~K#|uZ
zUP?4!nK4!b-D<2oyou156Pv%=1;Pf9m?+SzAqv^ag$=8)cx-kg-^}2l0jfvGjSKnJ
zga|aT(M|9%)D9uL5hybuoyF8apechE1*g+3>MoHZ#2RlRsiW|S&P3pN-;BoO@FhV`
z-E}eF$iT2Z-120fr96kAISGMuS9MZd^5}=evMRUEC5A#v`$k(algf%Y6fllCPpiSR
zNS_|BB|<XD?FCO=8+*D!_okvgP$mE^WQI>~9Uzqx=(lV>F{1hl95bAJubpp7Cbeo_
z5tUJ75?WubVS0i(Ht<gl$xy<@vZ_sNUNx$S(kHTO*%82w^e9gMl56xJzrXK1NrRMv
z)|D?~D|n>#)`YBnj8{~wq*6Si%PP@g)l>sb^15}i9{%*v3g<Gci8h8A<X8A-$uJyO
zD)t>iUK&w3zS|%IEo47YB`=9xHc|{J?3}6gcPALo`?SsU|N2sU9kfh6vPX|$4o`r9
zPvT$w4wMU%6J*8kYj*S)WiYg`9?(4F<$ApKbW(bBjI??3B!;J>oa#uAd@6-RG`=TC
zdF!!AS~+^7{z6s4awXgmZZ7Ks>Tx9);is6!9y#ERsxabv+G-Ny-oYF=jzwkuX9@W*
z-3erp91Uh0Z+|Y4pnFjY5q|`^AIkYWv2%W@-sfDkP56sOhDv)D(U!InMX<$Llxk-f
z*vQ4vBSeIs*={JXKtFbpNV4Qm@E;u0nzARX9v~!mpZEAkj8B(i3J25=`YO^BL2iJH
zi_L-?!Znh}&uX|urKz<61hSs_rdZ9BDe`L>1YsjYU~t?B8wQig`8RQ$J5s_mpoTGA
zHbMIv_QM%b;^kKqK<yIx$`PYfQTSZz>ZprE#Ajbk$uoO8f{;Iwb)u|iFh9+6_AODv
z+OvDY2%e7diyWSkY^fSPjgo_IMx#I$1j?Q0O}=25JPJXGE_AXsDmNKnCV<%~$|lgV
zbF<)v?0)~gT}zhD87UGv6JmKuQ&XvM`-Dp3y@*Je#9w_1`hXHbWo(pi&(ND4^$R_x
zvRffkF}lB3kH13KX9*xqx@*q>qg>J5^TjS<P8hMT8Visd<Y};~Tda%fcC&T}>7JsB
zR(k}{*ed#*oEVd<5IfGaHV-T<a4xr7pl#~i>A{eKlEacP)3P5mEGab6&vdNltdLhD
z9b_^<VWGRiBdept8QDL|oHLL)sw#uN8}}E$maN>YMOT^!atkp){+%-uit`Kml0ud$
z&_tZZ914Vm+)b$DRQeVb<punn1Hpg!h#?in4l9)~SUH35CbnPrH;WtP7am>yDQxM0
zCfeKN9$^@$-G=gtjNFggK!nerpQ!iyd!oh^lU}CQ96A^YDc#16hc~u9!t4W7wT450
z)>GbQ{Eoj5opWgNgVfRa!f7JRY){xvDcw8&NX`;;he-B<lgPgLwG;j>xk%?})46~!
z!*X!R^V%yGn0oI^b1&8N*X#GoVqOQP_n+VK`fRkgnOoy8)gf&BcyB#~MYq>bm9J7r
zF+)}QAsH4N%A&L>6Bj<A>8lN<8!0&mRq#;PcUDM9jFutg&L(wW7`rOjB<RA<h7w5y
zQkM_ZnS@Glg?ee$-h8GYvbpzy3_@Y(RFs;7Qg6m<*r62wQddKJD)Y)Lx*oRZt^q+x
z%IO>-IU^DlW!(|2usXwVk&bwS(o)N`2*@ldRgjmo@;pXNnIo$kKfA!Vqx<<2s;@5Q
z&qhTy0o=?@U}p||^6<oAg+ksW%8eU&SOY?vD_p=r@OOn%L8a=^L}Ngb-$lIwl)}<#
z7X28IKy=zn^$@aLLIewpe=v-XPx9_JiI1Etn8YyQIL(m+@YS%p+6lQ>0!@`O&Ab-Z
zvGn3VHpgsxcEEMi!{OjPMOs99;N4<=#C$5u+8iqvG|YhVy_Qo=%L_d5STS}|RL%Px
z{>rrrqBs6hEXfhg8=WfjgG@IZjiI=f;5!h?_utm$(@mr#X&P@$*!rmntG0=^y$Shc
z+eiXBrg6jJ-$*^#!$b9CDMhPX8>ukMnaHZ3oQWH{iHGQB3|6DKCPr%4dJmW8nF7P!
z-z&Gx&5dCNP*g-MS5cM7SFA%m!Z9_447%Z~U^O)P@BIxf-?L;sUu>GILN8p=)C@^a
z{8b&8-Hzr+F(G5Q#q;29tEj*U29M+xc2?+R#2xWBkR{^6W_ezoOF!g%7%n-`h>W?i
zDl_-5+B2BfDV#C|6vf?I4v(}1!|ReggV0)zVIfrSLyY0EQVWj#LMs_OxQ*1D)fIc>
ziHFga$>CMNX<Q%0fl*R`ZW{7Vq$<%A5c$c`%LEoo>wus^iscFC@bF;RcKImeHmM|N
zFm#7gn)KVsDd<F}k}Dd<03%8>xeU;a$6GXXGmfN%r{fYdoe)q>X_nC>L2%QkAT%jN
zQ`3@oH;w<OrY$yZS{#%nJFnuP)SeZ~n0f^L=y|1Rl&EWhd==r@@iOSucE*EJ13Q!m
z7E=Ni`<avtF~Q6f`d=@(k-^#wXGgs$N8spb$&qkjhUbeJ{5a8ZFrNzA%l$74CQPa=
z@FOSh%<%G*b6avK%`tUfqfi86JS-+-y9=d0^&!(jIq~;Oaw7VgER1Bvlkr8Z6wFeN
z|KOF_e_p>Y_mVVIffej|(&GLX?ENoPk4hnn6-wqO>)WrG{41qM`x0f3j`OOYb%Q1<
zDNds8CJ(J+VKY^N5)LIXrBYzsw`=mbDYLs#iH15t3#W*3?y^vKXiIM&C}Yc0hqk=x
z3uSQQI{AydoYx7%iFvJry1eC}=R*@h9X^*!lp|JRZa1x5q8ycSNItaev~mg8rP)w=
zQc@}9+?9y9SfG@s%dAwi^|)~kAeCN%Xp$=9?9XW3C&5mnq2_177gVOas^~lzf?n&J
ze3myPHdB=@vs|d|i-G#gc3+kG<fRN+Ab{zXBS5OY6v(#YxLhk02&k!2l!u~Q%EkAJ
zlVq3U=n>UY$CXk%#ka9_awGd@x)siSdD~upT1_dY2t^ROD+iLoKt-IX8mbBio|i->
zAS!79MI#AHO`@m41eSkSjyy%a{8p&eA!f0~DjAl8CDXK*(&8R$22OdO=R&`r=%$ZG
zos|+aH-E&}w&|oaYBx6iXoA+^IFxRvD;78vwNav)f1qGd`Y}U!62<#9MrVS3xY;UM
zh4QwG`h?h3iDq$+*G3|UL+SOSt)@Ao+x_*^+w)|INWV4&Bj4Ryqj*>(IBhC`-Ig^0
z(S&Rj=xFXd-Aapv)EBnw;T#pDiZWI&Q8o56L~`k^T|R0&KoPuxhDFgWfFfYGF3~JS
zbVL`2oxB#?(hN_r6vvywKL6o(oqbx*^wv=$ToMg;_mS6113)L4xdQd!tT@KB(zSz2
z7FtZUm8HLy5N(rj=p&SzDrVbLU+a6_-_r|G^B$Vs(5v!9Ex$_V`g&Ooi0LMu(m=Iv
zcZt>^ZS6V>TL@KtG!be4cR9#BoU>KI-mlyP^*wdIrx-qwXP&gKa8S=;3z>}yn_WVL
zlTph-O&y+y1ZPX7ThwAw-Wv&Q3e-xqCwF403nRbj58SxXGo?0Ji+#AAT4^WpvNyj#
z4I%~NUb)>!gd1@vMNPp~){iq8FX<FoVTB4_K+&V!i1<;;uq*mfM@%=+yhH^nS;5jj
zYulJQK#e~bPI~LiLl*jVooBHM!-B;>mU}V9ZeU|D`Qc~{U(h#v#4MNVss%YY=}T?J
zWirvikFI^}b-?r;`6wbcOKBZgjT-e8;@A2L$;nY&h0@uXTVLnI*e3bXa#f<pMyO&X
zp>Rd@0V}Nb!LI-Qp5H8&ppqDM5fUBcIqaNRV_ivx1r0|?P|P`n`o>^*sGQQWseA_x
zg-X)Lgna7~tV}qBM4!QL86AN^=j1#KHy8|efoFK&tGO*lw8dFB0S{JtqerbA=f~(%
z_W;TB+2JAI;6QmBEwOIHe`dWRhE#h*P7|qwcDaUZULfAlbwK(vD0iYjpk!5Oaj19V
znb?RwM2e?a{4I^kPVb*5v9{RAviQ;8FY>#`;$L^Yi}uB%i=#fg9*f82SHE}O?B5;l
z)YtH$ji2ztMLXojpc{0*c_ebE)W3Lif6>0b`0oCqb$`*lzqr4@@b52z`-|TFMgRWd
z?*3wTe{pet@y-3k-|sJu0_aSFef?H^^Pm66|M$QC-~ai4{sp_-`Cq8xFY)iw=lD0F
zl&7bw!Q}t>-~QkK9Y!=3A8MtuhldnP9e%wdj)`?}jL{gy$FxSap}i6(<ds;e=Zx3y
zl6MqxWW0WfEGlHstJ_hWrKRgNO-Z-er{CBLB5|Hz2peyRJE|eYBUPmk=xN*IyT(}8
zT(sG=#@JzE<pM)}hsjQ4=^klgP5pS7KA?J%99;)xh&l0(&sYVWtUWlzbRkJOQi3xl
zG+!^Liv*Qk-1*sw^K_pO1)Im%#rRtn7BuN*sNAfYex8ucDb|3c$b5z8{>MGT#sI|R
zd_%(qL_kQ+hu}ji@?&ru)YU2aFq>pqNtT-YPN7Z+d#fqqX0-whi%C)uHyFJv^vmSL
z_CY@preDec4P&s3`q%?Be2^`vBvh@l`lZTL@>yzD;@4V9Xpayx5;UPt?v65uWffGo
zv;Yf8q;+W;B_}zVm1fGGRht;?#3%POnMg-ubK4<xEhVaeYBCxljxJTbw)&gy#5!@U
zYeTZ<_8&jd?hP!z%TlwAtO1RML&kSXj@CRiMs7H8)FQ;NT`=~8W9Aw+lU+t?j=Noo
zhIXWZs<k6bTpgIY!i-5-RCLIsHVJ8AbW>T}NJw$AWM)WR7;zWSOXqmLE#Q30DaitK
z3T~`eqpS9IGoHqGsC>HFOpCB?NmCa8h5$7w1p7V}9+D*uV`By}h_zl0D)bId@>bUM
zNn1jh3>8Qi)teBp6Gm3rNyPw8e-@Bd>QLCpsLNDXLBMK5hpA(qXTrO<_~zKd$j0o?
zt|I4zv!@kZ0Uwnf#xl6wE_!giVMuQAGrag00X&^2F;8OK>V){LeFHopHzDGiG<GA)
zU=t$E%$503SELq0{FJg^!jj^XXcSrXq9NblN<M@kQ;2NN>d9uMRmr5CGI`-NvdTMM
zj^!4Wq?VD%!)3yfG*VdIBS*W_2Jc##Ja_cRi*64c6G;tnYyj%5ab<3lSF9tW)me<D
zK~x9w$vZLJX3epbZ9wXPP*D|mO^%U)R-hGDaq8?DwnswSygV2ji*gfdX+JRE&0PY5
zI;6U8_3CpFSP`N=vzrG6QE@e`&H&_u9l*CE15SAyGV%c+L#`_ouRx1t-P=puJvm)C
z68e)i7m+pO;`j3=UZYM_M6v4G(SX#S<6NwVyjaC|s0+dlIkUx7J}s7;wWRkyE5;NR
zr$0ZT2HjN~rBk0Rex$X}?~?g#SXB-{<V*H(3wRYCPErsIzn7YVLUtbGG*h0MN?1s)
zHCA|10FnTS7uH`p9g#Wm@$@94Fo21rD@9^%K%!D+Jh}LDaTV@SeUbe&F=eE?3#AB%
zrWRax(nrrLgs4b1LbXcX&EK~<Ly*Sm(duX-JE-q`-fNw*4uHB?%VW%7X1NM|-^z3+
z)ETQOs_`K&Nys@5OV<aQ^F2^9kxQ%e$f<2}($K35vh`pK;E#}wx!_ek-QSlGYE%pB
zSQmTU%8r?wN0b{mOlo!X$=?aUOIOLpX02AyGxX9naMoE&#VmHtPgIMvqvZvvHzLX;
z8cB??TiADiG9w+B-~=NIPH@LstvrK+-m-72KEyhf;#P%Mx)KA5TM$HBzVsx@x0Ub_
z3rqbIk9Fx#M#s-VxfYr%s!fz@i%PYr%J}U_*U9zkuLb!IRK4EBvW2Kp4kl|Fzes4v
zV%A2;6DUVxJXyndqbBPHkfj^)Tea!k^u;zd4RzfSZAn#Zs}(lH4QkyvIWSR7t0UIV
zLJG~+AWe6<G$QF1?w&>h1L$vLlO=j%hz6_K#WVWhsNwjAKk$YFjd{En&4&RE23mNn
zPk{ASJ_R-`ln2Gql2*sdvhOf@);nd*+7WPBJ^+Q_D}f;R{m0>tLh0+kQ1B&)vz%_T
zNw`me&$;STC-nIa3on*1hwxWm4?^}HD^^9m%?fzqhduK;P1Rsi(Gk|T1e(2bQSxr7
zEBeT8Gp*Vh_0?IG9UTk$kE*1FqUz{LsC~p2G8xyySNau1dDL8uHPgt-=FIi}o~R<h
z$}#vx4?=F1n)<%CHT7jpo5eRZIS1zR4}aShtJ{b2utv?-^?%L!gaH*(vml=U2Ugfg
zg%}_igW@bAkVze+4Q&7~FZ0di4M%new2ksUHbv>yLl5ujMl)y2U`x4Z<RSyi3za@z
zU<gXh6xe-L__6_qFH3uaHaXUF!vzh<Vxx=UX$BaV2z8>p1!?_TpYL`deKoZ>gGQ#L
z?l6p2Wr8XJm0M!3cRR!YSH%!jDp&EQiV@dhtb3?@Qxj2Wh>Viv7lj{Um7BJwl;3|!
z#VAU2U{vjQA%QzSF^(PJE+tGpM?(?q*3%EXAm~z>jyeTt$T|u!707bw5X+zvHL^SO
zIe|hIoE8-O1$UDe6Eu5ZLfqEf1l_^L91m<L8ZhPI-A?GmM|4)sC_a*qNv+mSS;S#v
zL<&1~bc{|4p$@<wCbW>Xp`y~RNe#=EA8F844M0nq5z5WNA|7=oW=n<>wao4+f0%Ap
z(D)yflVC3&MzpiuQ&GVRGuv#(IwFb~jF}eb;vbjL``lGKr(1TPCTT2#U6RWl{2R{0
zWG4x?pVKewQ*En97LlUnhWVMfpG;;~ed8#cvWK@#U($OGt}p!}<*or@7DxmiwVunQ
zYf>g%Gb=JY-f@n$zC;z*xXbG}DU9SOF|V9R8l??y1Br<Qy25gOQkz^hmMGa+vX2zf
zgb*zhRQ!kOsWL!-b1B=BCJHrnu@cvjXuCp;Ylo^P8ZT?NJrtuk&8dWcvN?)TBN~<V
zMx;mJv}lt4$u=p<P<4m{l9xG6nxucSNeYQmZ4y@=Ko6iTPP01szi2&G5GL*b>`&I8
zuPyV1%HdRUSTS-idFG=PYCR#BAnct^k4B4W&bdis6o^l7&Pk%zAmeWC5!q|(Ie=uz
zME$~CZFGv@vxP_a<=*}*El{m?WDQ<9G<qkF9hz0~$Q6ziCC+CRFK~~gwe3SnD&lr4
z#?~RAv3Y$+zk);hWfCmh(Rd3L+>fn`(??k#@WUFuxUp^F1H0r&1t2M5#qwK{G8rJy
zM(-=EiIBW<Iu_=DUn||;&}bNt>V}@+DKeP$E@oriwfI@~RCi1BTbZu;SFHFaYsGPW
zeo1R_T!oFwixI=+qUUBh8_ucA{G2q_+Nh@H)0R~pCVAw+C+1xeMy7)ADm%pAuYP&;
z5&ez+D>)hi>?gk^aW!<EQ*bU!5T;|>w(aDLZQFKEY}>YNoY=N)p4hgN{da3?_hM^r
z=V~sdx~IC{exAh{smZ~#POSE+kmA!#C5PCqff~BV0n2vmiDpy#lsab9&!J9D(z`0E
z@S&uk;(``@Hdvf=(5Xij6<3)>yYERD+!l6*6r5JI>#7Wfr0pF+^hMuWgn-IV@@G~E
z=9h)?&bDeRPm5J1@<h(L172v1MHo6sEmzUq4NdR1AX#On`D24Wyhjo-);7xv?gsGQ
zecOUL;}i!a+;=bj-@}V(vV=_VHvPS$NU$na^(6@oruEg?hXKnxaO$(St-BNt!Ez)A
znPj{a;y3`FOi@;`bvh#>b1Ib3K3QCR0)qKyw)0!PCx);3Unp}qi~Ic-_(1{+CdIzR
z3lnav3-knzGxKf2QLUNWwky47BT&JI>9JFylD@O#b*hUPCKl}M7sQ2dy)W6Op62-p
zCtiVKs4*$eoMNuPxDUV<_0$Temw$+LT`d$g-*|(V4hgb(RGt`4K*K{gxq%u&usJQt
zt30>NVMgYndv?0525r=)utsvaZ27;q96mVZwdqxKDl&FnivZ3uy;2w=NerpssC$~s
z^>}H^rKR{YT2ZpZ*%jtl+Tm!^c(8mCo$4)dk=w>O<MSo8*^H-4n(siR0`8os3Ku>}
zeDu}vnGHtkI>Msgcwuh>QvQY<#iJjV-_{^4GIT<Qg*&ps_BG|g0Ao#^ZVNri3mal1
zKp8(AD9M}yU!j1Ic}jqsRx&Q@kvxRcv1u6FqFv*y+kzrN-tZlPDkUY~l|jDR-^TW;
zvzo$%k}CmfXwx^X?nM_u031%dT>}nj5qs(WJ(!#2sP0^J6{FXa9>7)PNyd614h<>n
z`(FXnI?nYspE!uPfy^oz^#U1ztxTm!!b<g;Wv}{0GEl*hW@Ovm7+Pv>Op~XK1*RS=
zP54_+QM^&rHy$_$G;>653^}^<lc;Gb+r`GDV*uOJ(t(i^km{6-BLJkMVtvix9!V&>
zld8e}T1J^JB>erI=8Qr)YI^oM#RZ>y-s<z={rz}s1fKb^bjeg+G?`9bOda+7XPhFe
zL@UI<!7It3pd>5v5jEK+=m30jLV>2u?0F+KUwBbPDbQ$j1cxE!)~lp1$6k?S=`|)R
z!R<|>p09dLs~f1=Xt}}1eNXL;F>e`2PQ4sUS`L8Zms{susbuu|*~crauWN9Z@l4Y?
z_HJ=?RKA=~Hkxi7*L$TdepmyYT&hKB73q3l4DzzfLx-AJZ_8!7g|Zcr@haN@46JEZ
zM_z-G4fPd;BM5GHH;y979}!R?WJ>i$DK*9%N}J+NH5H4(6Ivox35W~)50+QtlQ>%T
z*bxpO|BfnY4!pTN4VzAzsaJbU*8!YCrLnEHnKIhY@bZi38?M7NcF;|Ti^`Y;egBwQ
z@8VMg(sVCR0&}E*11mi{;GwosjmR32w(!oXe{kd(P%bfthI8V(p#B!>pGZEM!BDnr
z1<%l8n^iG8Mcym?_0-1KxM@yIhg4oXat34fhT>K;70ikw`<VJ1^}L%O7R?xze4|$3
z%GW<inlQ#%5d_i0X9Q`*g@k^`bQ1(XyTvh4n^4qZ7dxdDhg+f092o?|HS{&xiCYL>
zGe@x|JOjqFue*7T0l`T&Hl9Oh6vo!Z@MwJa0Hd<OKB~t~>^y}4{-;a9HV<oqbQ#!Z
z{WPUp@+7#~@8CxQ1$PZ-6cdKd2-B`?29<GFQe|bK5U($@Vm>n8Nh=A71%-+?yuw?`
zmSxbM3T)>}XQ%9tBPxAdEd$R+j|3gd;!{s>9ccxp%109*e1PL_M<+kdL1H-FI@%}i
zHLv8JQ%$a}SU9#Nb=ol}Pg5Iz=X4xJYZ*buWF)0G-i1r)<UI)SXvjfkD9br%>6wWj
zud%D<IUL@CS(7fEl7RX}*gkXRKL&5BD`42>Soh|B8kHXE-u^r)DL4c~dTdY3cT@zt
zGfN_*S<>Pyomo`sFSyh+{4p!+e4>v)J_nCC&LnxsE*%3Bmoq66Ya&r`dPS{jL&VZ&
zoicqdr6I{hce@>r<j(tt)Ec!NwP@>j?h+>{v&F_&DXNgvq;(%pOxz!DPo0~`$7MaH
zHI!pVLh|3mJX*KH;M@e>bfcF9zb`7cTM3Dnbcldso?!StCkONDj|7W)Y$W9Nh1;Oz
zamH8w{fWH(uG@)p(3A6-BLuvK2s`HT22swr-Nnx;EI?zyjmRHI=vfhwX6Dc*14aT=
zA9izcp0A6LJ3d1{uUQy5COkSRxM=dX-m;BCG?Fn$S^o4CL(-PRg$wcFBQ?qnPs+nB
z@ePPBQ_NiXCTnFYQ>Rj*9fNRYoLAWEKlRX{lv~_yO9u?~q4xRtY9#sQ7R^GH)B08J
zu$@snJ15QOgh;ujiJ7D%Lb@!f;H^;E+l+QG?IX_rei-)izPZKu`KgVt=-wqlk7#``
z>|AwJT8_9skp6+4E78OVI?`z0Omj_(jL&5HX3XttAQFF6b6bq+`ZE+gLPemYys3{U
zPhM0P^!XeL%#)!?3}HNubA6N-UYz(HQU(#jZ*Dfs96AgCVLYeR0QdSpP_;9VczLK)
ziWSc?5ZtlQ^EclQ7P27Ig}WW{mi%eu$vPwH)dbGi(hl|<tJY^sTlJ{7nx(pjyK%Ex
z`30CkCX&W^=IADlZ#i@rR-sd*cST95vCIn#EFWBH4Z*vX(IA@7yQGm_Wa0i!&1tt|
z)Gw9BIgNFQucdKnM*1&HhyCtI=i(uwnsr2wc%}aLNTrtC4*zh$k=|V&fk?f=={MhG
zMf@>3k9f5Fe>}$e-JmI0wUnEEw%%ER-D)Q2U0#&Fl_~yl8oD-@5{NMK2?dDmrT34)
z1bT4&y2>GrFJHv1`A7xzVS&Mkhw)rM=t<Gq`}??|_PBlu%s4yVD6unEWY4L?m*2B<
z_J4EW6e>TJQ!tT<5E=!W^*RSA+$=Gw;%%u_Q`G~k&e;$4e5UY9^0nWyL@yW<k$rQ{
zbdT-0^Bx>^ZH@Q;NI6F)Xr1h^tDGjXS<eKoMz&1WL1QxKp&zk>HsK;BJ={Y?hGY2H
z-YylxGO2!DS48M?B3i9g_b+KZrI~+!<TG*hOW;8JJ1Ys%o;Y31E#q;Kz--n<mg1g(
zv1mZ^bB7ejf$ULhwUMhu=cMxs7LewP7t%dL$<?Yysp>OB|2Wq+4<ORL)E*2e^E}6>
zZJ;)#hiA2MvvsR=bY%8edn7A|_Ib&CA)d<r^v3f@d0iRo$^RHVZ?6U=%}Us;6c8XC
zR3-PNyIYM+fz}&g>6D?S>8IR?#u}#-w|y%-8!N8Cis5AQ`_SvGFy{ajG?qU!sj2@p
zpzt$8HQ?;eoWf@BVT#e&2^SdXauq*!+E`a>HX_Bf%XZN0$eWpX7M^2r;^S3g*IUJV
z3Oj#Xb6&aZ`m<BSo^v}0gP6YhA_X{grC5~S4ris|iGfsCTUaE&iN-fm9Qu`{?b2y;
zjhmiHG;*J9KK%nT^O}q>OLna?lWXD`Uc{q+Jc4CU55x+ymT?}T5@0bcOSV{@Vax}d
z2y7TjfbRWtad#)3M4|v&QFN!G%zR7#InAwfpboc~t{(iv-blo>+=4BZQy`szw~ZM<
zDSj?xsM+C0j4sM8)X5v^G$gUYIoUtg(uI7kc}W~~Oc^tXnoEI2&h2ek3XKT}C43oE
zAs*#j7~-2uteIQ@n*0~-o(3;s)wBr$)1y_*5_MD!9B<}Xn23|Mln?<XiAI`F^ZH1r
z!cmI#s2r-Hq0I?Vsn9F&S{LUd0#7SUs}a4SuxdCj#%n7w*QyMrN|Ri8P#H2SxN-gP
zapn}6yYtA{Xt#1eeM5g=NGQCDZAblt87DAh>5Q8OPIW~1*5fxKXa|;0!QywsN;#gL
z5n0-fqSJuPiO?FK=F8shr*03gMEesCJe?4t<d&`x=A)ITo47+xYs3!20v+;aE7__!
z^a)-|+?mSh%(i_evgUFZ=qejX^_~+1Ixlh^;y`?$pw{ogwzRKxXehI}0X|4k;DTzE
zXJWxcjuTGuq}7az%XItBL<%vew_j{2)EnFEON)0q{8pPMFf3iYRM5Kr8S1$<2Ezie
za74@HG4%t26Nj?QZzm-MLABhj3hJ>ohWQXArA+`FxLPQgS(ZV%7b#u*9<E@z*{*PI
zwd)B*bcMZ0a*A7G<^;A^8&|my5<B!ASeI`Jk|n;0!TEw^aUzM^CKGOl>Uo2ua=b;P
zxR}H(j&o!iXQZ_m0!1<zx%T=?<|u%S-OKkcJbNM2xHz<xu(V{2={hniLV4{-7AuO)
z<epq}qh=@PRW<m?Rgcx~HhqYS@EA*XP{tsY(?nBI>IjvWk=+-<(df}j94}T$kS-3{
z)d*3wzD~CgUJWAt`!Dn%YM9(}T2Qajim;r5X)4WIK|T;GG(9}*N^xB|IDuu~yYdJh
zlV)knuJDX!e@g^FG1eebUcz97hkB*qPPQ_9L1x}psU`c$bn~WM>K#V+pm5bdT6u8$
zS-lGZV+h{ACvQYVX0Slr_Fb0iUS=@Gep%0zMB0m@Q^8+;p~O!(r54(;bcUk_G{<Z@
z&}(crC&_^NEp^Z`68#z(xZ0-lGYPytGiClE7;YA6w%D`tm#1?<4Mg|5XMjYvJdb8A
zO(gM)w8nE7mNlKUuG>@C-G&aj3rL?j?T-N4*T3MTeNyP|A6={#Mg!i;;{esJCgtox
zG-<Qn);AWpC*THA=;WMD$g`*3(U9{3eIuflAY3j~nb}7px4%d+(&BJyr!aBr|H-?%
z{7sE3E}Z5eZDSXjEQxx|;J{0gKD_0JH5gKHr&U7j#r3;n7^Q?*5?r7Yoikf{L$f@w
z>1it(X;g7rlAs0?xJ|!E(+h}(FxPzjb$<Ld2BFbSY!4gLm8<<j8cbqF`L!j|MWl8s
z#goz?!9aKrRn{@HPJy-EIAlt)4NUhf&Zv<j$<R*v^6H`iqfMO*%ddC>piY8!ZL*tL
z?<|)e^LT#bfzcd@$}UPN#Y!56ll7bz)s?Z<<uhPQ{oVe4QN3<qmY!8IPJd*HCiu=l
zIZrTUk89c=(`sSWs*0X{`FwBB?0j9}KD%;xuvj>01}X(ODQLNT%oNYYp9zn(awvMi
z#5AsLcr2II08y&wKW8Ydr=i2H!v#A4B0|*q&%o=DKZ5e(2_S5ZWz8B1HRnGBu6Hq@
zYP8sDUrus_{7NsNkoYdt9Qv1Byli1>tKP0qXw9CQ1zCVSG{`X*JG$5ch<7U1S~>Eg
z=A3J-v2-@FsFxf*LekgT>K#UC%G~Dc@rPh3wr^yBk89|-eFH;C)DL$fYEm@x?-5zs
z^!!{2xnQW25syt4Vw|EXD>~DguQCywrT7V{^foQH5M5ezHr)9ILtrgFLDHQZgcCuX
zFQe)eSG1gx+n)sKV*i7s0jNe(b=f)0y4FXdMjXn=H~5=h`>HoJYviiRviYKv3@Gte
zgU9p&`%(WObD4rm@`Iwy$dIZ@{P{;JCU~tt&**{vj)De4MaQXX^d*0E1dPO)^r*HS
zrB%;(hSm5WFIac0W%q?yPRw&sHVP@Oq!$JzCB!2?-2ZS=5PUKLmn7#ic$_5;x;5$~
z7ycL_n>~8g4k8{QPRE)W8w3iXn=@c*fj5D_%`9M-0*bsCuo*Oq#rFzaIByH%7BPB3
z==dtFCC2Hgl_y}&47~)OX;sy=&Y)A)5(Ud*{~3<zT5^)X80qMU$R%FDh$)^T3dCi#
zNF79z?5*mo;~M@@BS}N{k1t&KGS=+<%a^D`I2k3@EmDCS1R@74L?M$?j-#5MMU`bQ
zf=d>d0O=IbsorHa^y+@TcOcNA%wpo^7YF)a3RX=Z!GGyI#wB8Iau;bMu}1}aSk91i
zrdM}fbHezkoX_Od>`;V<EBZVLI=WREsNnUyu0Np>U7*u|EdCH3zXtZXh-8->_tUCZ
zBwH4U{D~<1kCU%b52?F?ab&A?TYg!S14gSR<qgS%<Q8?^U@+A$Zv96FZavMV^q5FI
zshm!q?Hc|w!Esao(m}`YY+@RH2wnKPJ3jOqm@>YIUQv~|UwKP@yL(dd9RcMB?>Me>
zol*MD$z$DNRC&Q%)rg>3->#)r{~;ZaqyUWVW=+t=#912Snp`-nRJx%~z;jxqR3U&H
z$HZCo(mS9MIJ;|isY#W2>6Y{jfq|%)So!w{VCct4GT@>{ytYCJHRXK(R`0)+Y0QP_
zLLH14AOE}69fxix*3@dMFXe-<6W-EvKuJES%Ol^?Awho<G<kvj?tF6qYJIAmIMJd~
z*LOs=93EVUyt&R}N9ev8AKx=xgGj)SUX2`_x$cNN@#m{n_!H=F-8hwqC_WzTWF)h?
z8tmv>FR13k%?DX_x<N^Ua2?}+?iSw$*;y{L8EVB`=>Um;nd{NdG>1=)KLB3tR_}i0
zmN$ex2g>?QR`eV3vwo(ptcUqK#Y!+})T3%+g-N?^xsxqZuiAsdh$*xouv{U3LunTW
z4m=M3HKVqb%gk@?CIUbTY~S>p#Dx(NAK@ZEZSE@Q6BN&YF99OQU=b^s&`cdoWI}@d
z9IwnKHb8YIRIelVX{daS<=LlODY>4b*ueRZ!sYw7HE#+-vK-#l8-vueBs^*T+GYPv
z$1JaEj%$Zzz1(;UL^{&~(a=9f3Em&hdwcwX67B@4NF_6QTA~zbW<2n!l^&xbn#=i&
z_MPi_?&c*mG7X=TSg8%B3Sz!>WB|3$JJbOteo!*ae1q9J93T-5FyV1jxCV~TVkGQ+
z!HGVO^2mObke4HZ{60IoOgS0bQn9$b=TEUB`cU(#(5ID?cvD8Gc@N0@*jeuzzy0Zi
z)%JVcBSB=!f`&9vFF;~wUNG*GKLK<O(~Z%p;@1yJWU-;TE0(4T!&aHnP8I>eXw)mS
z2bl?6wE-j*tRFKM>NEX_7Pq@Ck@K$`BZ7-=hrVuW?cf-ShsL2n)8`;|MDN1OpO<pX
zkJoQq`n1egdQ-vfbiuAdBH73nX&}t$$RnmD8(ljH3BOL$lan4%+ft35LZwJBT;u+x
zl9&E}B!kS8&;!RnP4%jo2fsVFBBh}eJQ2D0V1GeH__*%j%{bP8R~#j{5CFm+8puZb
zT1xm-3ahvr-Jr@|IU(*~RKR^;Oo7kdMy!EWU86`n*<z@A)6%Tz=0z-00nu1z=`zRM
z>5wxv5l)aAht@sNd>?^0yJT-+{()CIeIjl51V5n)QGD257tmGOeHrweZOtSJjtinm
z4Vk)>ht%M(grE>3s+(DR+2K`BSp07fS6@$u@8oWe4<r9M5N1XSJU##CF87QX>J4sy
zm5o*y4ih+!W=Ze{PiYLCj1i;Pk03vX(ptIa`^yvNAFE_pwM4<R_j*nHy(l8OJ<r5g
zi;0vxb}VS%t`IF|P6$`9DxdqC<Q<g`<`N@@X`;TiE!!*rd=uZ}^e!4piJ#geB$)RZ
z5#r9d;6*w5>s6a^%lzN|5Y%K)N^x!z8w89k&$wtho96c)GcbB2`I<w;sC%3=P#RBs
z0fT8_d+q=p*K=rE>4vW>aa9N(!<d4nByeXg0TwbQ_yGjOKjdGNbLzUM^PfK>9h9m*
zrgqVE(jp3*mP3-o8ofdYAh1daA<TQQ42vAAbrNG35No7Ifs(fU#CW>$JBc4+`;J%%
zO;KgnBEzd0p_CDK<l-p~%j9@5ZHN3|(~lPmb&SSpH>y@bw(Q$p+wDsa33s!D7Fc}^
z%sBF%RzY0SvSEbyx?#y|SBZ5ef2h#3P3ZpHBqYGLVZLR!FuOxTfF%yT86aZQ9`@d|
zYCIqY7J7)zq3$4mKh{tS4qRcc0QK>Y%2A_oqr9(s6=nH0DmJxh^iqN2NO?e;D;M5%
zp>*R2%9?&YB8}@%EQwonbk$!k1S0R5{g2FUNr!Gh7m<%mK6IMY4n4&#&B98P#Dyjg
zZ>$#%l78+#eda)7xS0#I>ZY*MjDj+OYFuoVq8w{Kb8dzghk|b!uRLiPAk{oiz?mp9
zhld6xnP(UlL(<|vcY!@tke4`Ckw?E;=-Z5z7RWOk<sNZ6aq!(Jh^8t}9bopa)&OiG
zJA1^ebLUTjjDfHNcl*Q1QTt&@k1`5TRMeB4Y8~9Ed16SSEC>yT5GA1hNa2j1B?tEU
z5gBwyecqbWl1DDUS#KE`3q46eAGn@cm~3`WL!P~~r(k~Gfl*hzp=*l8>r{NS6?GZl
zy3ngyOcjOEM8N(%f?A_>Uo?m?8rapVS#9^*k_<4OagFaY>65bypFo!(UoV6CQE}t_
zEXP$k-d3;qh^_0a*Vk6k21`s!N|o7ZPNhPPb>fkBSJ|~VlNf#5VXy6|i7uCE?F#<%
zE>rEaqP2kRY`WhbYqcK34uMo8^G>>S0$4BGP`C49+*HdEYaS><6U9`hT$^Z;bRt3r
zD6}y_ZE7uEM#mCUw?caf`e5wdFO*NmPH!e{F&Ae@*l>4A5Qt0oca2Zjm^6U=$96*f
zFN<CW<CT=ic9YOIQCKR8jF_j$jMx%B7SK_1a@Fdu4VQey(Y@5R9j7Z&Tk#0fNBVcW
zd|64>!nqX*nq7S%l+EeUKOJ;$mP0-MMm8<CJ*9yOiL(j(#YiiNakPA@p={3Y?P-&{
z+9s2EnQlH;Dc+aj1|@*iB@5Y$H+hpb=&pgiI~gyziy8xJq9U6`&s=|AdXi0@KTMmQ
z^D$GJwPL-gRTnOh_<T=Ij(NFdLhUxc<ru_97;)@ACMB0S%|#?W*e!h4w=K;@w>ILB
zAdQ-)k;|RuaH}tY9)oq^{9jgla^EgZ0|nND4;=r3RZcFBbqL+u4j<v}w7bw(Kna6W
z^4&paKpM;&tdzs2R1p*Bb^wUVUU8@VwLJ?Pq))0x)whzkpaxjgGq`V{_X7z&x508k
z_7hY0GFee_G_YdiPm|5U1WF;~hd_ztwI(GpY1Sa;xo92~{hvj`nr0`ybn_tGxTDFx
z&x`tyGHGVVPOMC6R{WRHetZUYoTBA-%{j=;^_D%IYT8SfxuN}r&pZ@7o@Cfs*@?a9
z+aaE6tj3MABK56Vkjc5cpV}+CM4To~r*)RwK2b-o@&p06+LVuzw8sBrv=qvhM&uIH
zWtPb<H&UhQSb59a-|m!@LEqs2E$_dSI1YQO8VeT)_74hnzfuQ4l3WaNcctgGsqzx<
z&m<av-4XhJ-A?csx~Y_=+%fTEVx-jse?0V2KEZ70iVtCaQowflehHsj8|-My=2M@N
z_xkFkb`q!sGQ4;fQ3whr-U(=aRkE9Vrv4Y@$*F!^gzsN7<T3b*n~4Pv^+aUbewxK7
z$zi6>{Xn$^bGEZ<f<@5G7|mmB;+>qdS?k;o6@HB)$=K>h{R83>kG8!9U0P(3l#5z!
zXZHoRn=?%<kKf{mf7+AXi@Wov4UzL9+gs9|<{yh-5k(DAOlaUOH1%J&t5g!mzgMs{
zF!onV*V&=33)`DOe{^lZ!c>8Fnl6ceq&C$XO3-6;>e=Huv@+?$-#bXWM6OfHBzb>g
zzt6{S+w<#oVS@DQ=V&V+7*8r5p&Ncsi`R;kkmI6WfcV!Lj%>UUz1VzUlD?#kI9)~6
zr_{2zjP6>4;Z@#qH-5r`xoRdhE)KNZsGROvi6L6kl1%36vgUz{Il4~gj(zlMP0vDy
z>ZpH<nlnZfn?e6!7}cFXt{js)RC2?Zns?cgN4SGaP;WfB8J(O#K<+<Il-GW<J3an%
zq31SMkC!fV`^Go~`4`=&X9Q~kcKG9H)Ly5JHTnBsOO%z2{+Ri!I!YgTefo_DVfY#k
zo3Uv69To&kDS@>~nKJfiSnHSTy|H$IpN`?5yZU5lS!OZ7$Y{B7$o?Df2lFSL*;gk=
zodrDei+1cBJ)&)nk)%k#VK1kqX}wuJCkB=gmT_@akF>6$PCEtQNINlU=)Yq4GiW1a
zK&n>!@96HXUx~QXVI8=$Vs;ak&5&)N_zbL!**pP+so05<Qwj!r?9zRL$4Olx@W#;>
zwyyQN4jWh)A7^;MuyunoA)J<5LnV;s@GS8CEz7!HpsFmKn>>1-3@CvWx7{e{Ize5|
zIH*0>qtOmv@cr>kB$dK5twmW<>Zvf;$+RS%cw}EGXiNM3!&|87NH7^&u`QtEEa?Y!
zXUQjH?L#0P?F0u1iE8_Ytm82?;|2yLKqK?dxE)#`a?S&u887G$#B;5tjW}n{KGYsu
zT9UK$s?PIU*KiqzEzE5k$0f3$BcqENz6~eetxE>-jt*AS-i%V^P~JdTxS-O@TowS|
zXh-DE@Y95>3!);M@@Idu@ZkfTW~D;xT~DWqaPyid_dgP<1VE}wV$A4)?3#cyTsM^n
z#?l{|!7)V4(Afu3aK#(TRoN$ODyw~j0?9{k_G*1JN_PVgMhVLHYX&I{>NJ;ENU591
z4dbr0wGiI$3?Wk$8nLbe<4TqpbtqML<}MeQAf{%=jf@<tEMqD~;@3AwRJ7%I&D4Y1
zpGW|Z=QN8AD^SGD%Wo9l^a-X}q(QzEq$_VlArrC;D9sZ(4vbFvPM>}IP1vAUs7=Va
zCy49)t202nR+YvAuyB`5aw;uZtR@DwiJD|wQDVQkq0MSCH;wwK(aFa@gh$&SjwLRB
z>qi{8kO+seMM&OYX}k%NpiJT3;fe&yKnS-hl8DsU0;d3di>^J|kG(xHqc3U<F6io>
z?k1S;DflCf=#ma8KTVukVWK%6z>rHB%&<)=$sfOtaeC~M2oxrM1B0a<&&JIveGe-B
zvOy<lcw*9Ao8d7b)hRCbkl1jBogmR6l;gUTCcuRQu3q`#mF;x<HFne`uhr1<g-7ZH
z_IDv)DchP%$Y%ZlmL^J@zd~Qz?Cx>{w>0S8^ezO;7TRq7&v@6=z}JX{4?r)@K-hIZ
zTvc#W#gw)959Kz+TU>m8ng?pwlqz|GCgh!Bfxo>9CuXG0&wS+E#;>}^OzJ?Ih5RzD
z*J=8z4BjMn&Lr>ISXf_9?62VVA*XD5(3dkcvzfVrv6=|=DXfVGgUmoQO5;z6)Gj9O
zUmi<z3%@(WZOCSl1~wQAHUiuJM-Hv9x(d^YMoORHN*F8A0kcME1LaiZm#>`n{bW^n
z$oqJK$@E9H_JZjOZ-4ngQv&lIe-6%im``%IBr=LB+GY#8{M0V>_t}tZI{m6A2p;y}
zJ8@tCNN5Z7!JII+FbaX&rQKb6j_GB;?D3?U;}|W2*&%1GO{uT!>Bu@|)1Np@m>Kts
z$DWdq(<AD9NEb2cx)%2UCJlNL%q*)m*S9cQ5@0sj*Z9bPkHaInil>f<OP54Sb^F--
zzDL*JQnl&Z?R7|x`i@fC`V;N6s*wDNDThAI2%ITorC^%!jUAk-Sq9DB-YJ@q4ip$o
zcUm+!>f+qe3V$2-EA{?+!!T^K6^)pebXpiSQ@(a;3be1h^saGlSDY!6;n^s?3Z6xf
z(QQ(#+BHKOEJBfeLyko#PnvdA6G|-as(G*z83yTHh0luoOPEJY<1~H@8b<fGZ8=($
zRM@A8r6k??wVrDz78$D^=0L!BcvdRNy@x6SGp#CTNQ^*MQZ++ss(U`o+J6)~PK&|l
zA1{qt0O`_zI+YI6J@j!a-qd|Wnrqt!Z1Vudusewx#2&%VOV_s)bprdZ^goH{KP0BY
z9;sCli%LG#2D_4w5c_qJvkgL*=->OnKLtq80YUy}qMKOu?Y&2xhU`Hq`qN@0D=_~`
zAFz_87pGQ?#Yw$sn&5|C-vSgL>G3%Q2jnw9A9P44Q-+W08HY~Y2B+>}v{`u|(cK^d
z_(KKAeeg=T9_)SOrL<z6aP*f>N8oAB<Cm@>MxXK!f%L-mIU}1A$U8Wi^dTPI?4})o
zQ{O2FQj%IQ(i)nnjsspY<mS$wU%EFNlm9xq7&Y(7rkTJw>?p2wk@p7a*f5@N5%X==
z7VzHxLjGUr;$=j&qWiSc3e$gD_H|?+AbKDmAW<V1BUK~gKW5JK%nZy-3@pry*3OKk
z|L2t9|7h9&mz90T4z~lnH!bgA*d|1oEdC0uYh*JGbJi=mY#hT1wE$BHX`VG@#B?~5
z9H10aLs(JQpwPNY3=mLO!=$S3O$g@=Kh56-=<<3Cb1qJ`J+!LE>8qx?|C`ME5#97~
zwJ2Rn#a?3lxZa&pn46Wqd!+BFy#Ai6norVy50bA403#$b6@M42bT-QwtQ_&^_IQbj
zM@)eOTdHalDaG#5vyo8$UbO78h-VwgD`>j9N+Ig6_}hpbA&Us2-l=+&;(oLi1=Erw
z7YQz!KnEkCHnS=8H|(L_>4$)_#hs3(E~ZWGyuxvF`+3y#Nt{~S+aRA2!@JkM#LBe8
z5Wv;cZaY`c>*ltinPG|yR>MIIr3JNYx{{HTj;cMet?`mqW-vzDQw06~sjWu)B7!S6
zb(|zRMSpg_BszXnRzST!Z`n|AnQwoGOpWSA$^WxR<;{3P=0=Zkd%6r0Ty;ohWSVMU
zV`U3$B(Gx|WzADwG?^XCl2?Yg=L7XiFiNV%9b#u#_o1wTVT1^w(MG6tBWAxBzhbVE
z+1E2*t%5FB*%;?<m>>pp>XP%HmpvcJzSS*m&^R;3B-n5&;5EbVJN4I$HW}Tvwri;V
zFu!3PA{0nrjoTpkN&n<h6N~V7U_YDG-g5&@($<?7W!=75wJ=K2)aG3)G2~`by`}Ld
zPghJwtb>j0QMW@e!<)o7L@*(b4KtSpWQ@66hSRt)zuOA4;L2m~Gw?`^|7Ygqfpc76
zdIna<Hn&mJ1x5Q8akYQw%}B8qlEzFvHnJ3pR<$3n&0ej9jCnY>__7e*)YZ|6#Tv0U
z`MxtX-DU-;*1XoZ%m4ywx6BMPNvl#oU|W2`=e#<Z(KIC10thdcNC(l6mPyn&j@-)e
zp`5H9Fm`oy6>S3bv6u^O`;C43JKvKa5RK#W$lMrgsA)DQ<?==}x=#SEVPE8#l8zD@
zG*zg<EwHD4i{#eW|F=lt#sEpHDeTUD8GOliT^uId-nmF_B0~8sc@~Ld{#z_ve<Quj
zj#m^9{9i~I6r0<=f}v08bgn_45;@K57xU;^>p|n#2w<1B;)Y69rg-wrJITp~Ekb4&
z-r95Qt1b2wN*Y%oZq`m#TRQAN(8t~^w}QJvSXXGc?6AEa0Ii0hcRCs5>i+%hlElqn
zW>P!+j-dk-zR^+dQeVHFXgc=+^d>DuO<=TVSV{T~?dTb=u6|9>R=vkOzf>bqOS^e@
zC})kx%+=W9?eil6VaLn4SWi!S+tdg0+4-phf_{TR0r`}Q2WXdwKY1RO+<L@KND6E6
z3uj;1T)vD(Ri;m}8E>h-yblCThRl-k03W8hruBl=kOcjQY)={F?l5xlVU#5K=Wnz7
zq(W1R%Yah>aV-ytegt)!&=Dz_7fUInj54q=3-(G&!0!FkQq$n%bqE-$n5cM|SeV49
zP{2&c(*v7Fr!4XKq~ec@&<D!amp_M%TIqpq>%CX`uEA66IoHz7rZ%*tT+GtHQKTPG
zX2Oh>Lv}V-txyhPhRy#iURU=%axGwi!8%46455+H<GCL8+}=U`ddg;;Q^@ysPei+_
zI%8Qt{+pDa^pDKH^zUPMsPp-M94aQfguLn8g^(r@4Hszvvf4x>Fuc-U6awaeDOrtJ
z@9D6$$WuhNA)qV**8SUpU;F2D<T&}+9|2OLCnZvSsaFY{#J%qV;M}+-PzbOVUL}fJ
zea79RIU38|x<MsQ?2#=_#kCz^2u1>aii5^w4dZ_|B2EEzj{k(YqDpKiS%r*Og{<6#
zF%2bPq0{nMxJonI#lQ(7J%L!<i`<Qt3p-$QkIaNv?}er}RZj7XttMIM=LwfIMssr^
zL0^P!+L=&ns@3bId`M5eDL4~b4Vr>~3;pxkQrfD(NE!dNnD-DmFqh>S<^|m1)vs$o
zxJ=h(z^|kivcQ`$dN!F|>fxB#^ijK`rb&A1_x*(kz!neNiBLbA+z3zg1b$v?s3Zq&
zu<?zJ-Qxv3Gwq)1CblGJePzvTE?Q@gaJ|4z&olae5IoW#E_xs*SWZ)_*uqoW(9*tj
z%+HQ$)okTUqo17HJ%q#A=7=jDbn9z%D1EKN6JnQ&=f*Y4$5V>(^i}IVgj~PV$K0()
zZ2@{=L$j)HJlzf~qSOF4kYkiFtBzGsB&uwXO9L=&-2A%63?wDlT6!68n;;Q$<n`N=
zL6B2aB>XN<e;Hc(#<Bt30j((f2YjJxd;}OYQgyPm2QKjxF>A@uC=b>u>678^ikH^y
zMZ86FtlgAR6Z=f^BF<w0NVLp7ip-+UpDOK-F%Xq=!XC6rw$}avnWIIh>2lb0Uk_Ar
zDpU!@BdHnY@7n3$=1Gy3(#*#n@_K%F(PRa(77wV~FFTNmbu3&$2RnNQbR#u<+^DzA
zF{VIKT|8!#Bq6jNL#Z6{j6K;uEl*6~@9zJ%^<MqgdV_8xICa~Bf&Ohm0MYz^Tkrqt
zJGOSd`rdKF8%t$~(g#&Y6m8N|6D|}SzqaEfihxHh0q3N4LQXJago3B2LJ>p>opv%u
z7t$P@`FGo3Kg)$_5%Y+4X}5b7&ZXdVVm}-+F8ig}?A;+zy@f)<%JO3}`t^PCff=8)
z<B~^ELb+5U&moShAZ}nsM`=Lzd-?l#oJ`rL_xUi9u8{Pt<@!yNePs3E#4oj)1nt9I
z&iLQ9utEOGVNC_=o3*c}=XW&Y-J^dsW_r4nYwn&vFSr-`#D!z(+=-_anf+o@x8&&t
zQ)N>#PClg-v(%(@lG;QYWSu^R^Y2D@P1QZ>*O<%GuKc4_+PJ{&Z})iB<-#yKm)C!?
z_vm*|EyqGbt|vELj7JyV@-__(jbeuYWm7l3V~bPGv&_#flQ{7^Xg^nnyfrC3hAPK2
zMb7<Gt5mbQD;K|1b*8H)kt~IVN>io1iqliY<{bH{>TWI>Q)|wKMl#P9_W}h&^x4zL
zjgt?rQ)3rb!=$xG8Ud~8CaEOM<vmZp)Ly(x-qGU`O}>0G>X|}rE<@Q6n6$B)z!m;~
zLg&w5)6*^ia)GOE->%1<f&A72rs+%LJX1oJTAIEbIp+#&agEZEFK%juWR1C9{!fg_
zTc4&^r`tURP28H1=$_!)yxUt!M*TiHw<Jy;d&HMK-(ROw+lQ0SHhcYB0YdUmEpgY2
z49EWl{&&}8*+b1M+;fay#ikrH%2YaL<y_gvWwR=mor__<1`3ZL;Ry<y$(}6%Y6C4?
zD}<D4o@y58zr*&ceO%dTl+<i59-3zU`bYH%x4)1#-NZg=m>YNPvt=6|`s!mVMNEB@
z8{HfN3XfHJTZ6|djtFx8(*>$8$okjQ5BrYXQ}NYTaI5syg9i3x(KNXT`>&3PdiX<J
zcQS9T{C!7bOgic3c&i`nn!4s{{AJ}1AWK?dE2e~nrBfSUUQqONzX7R21Hn$5xTooF
zv~_(tx_O2}p5OE<QLg^wsWWBK_n}{>83+t)2^bb!ko7a>UlT>+`=$u-3eol$?=Fpx
z{NE7*cYV8a6dpgvYuU}xjI3B%_`SP-7ioQij!gS-mgXjov;ca#7;nM9UUDI!0{Ptr
z%g%n?`M=-@X#C$I`lt2a2-1EH;g8n><@u1MXh{!un0=+z{^>I_j6aWiUTKcmO&d>H
z`Pb&<PiI?Vj%n(i+TGF?Pv9{QUW%P#Z&&298zg+e<_s3+ITTUuI}Ea;9t<WUiBtKI
z=s)**fWW{#6HYikv{?AA9J%t3Z@(whxT~+{iO*YUE&?Xc2XNlNvWEF+;oc}hA?mMt
zn&ZFFCc#S@$mb&lUG)v8nU^E__r$p;o!fWUTMrlSY+ch)00pzu0UiSE>ty>T7vbmr
zi><!<KKt*y3|Z3!&nBZTE~_{2SD37iJh#080Q(cjrj{x;hJT_$>E#zD1CZM$Zy=wl
z{w7N2KF+T4@9R0qQ2E?>O3$%KS*XjR9N|mU5(?qH`kKMpuEu#gjm=N$oO4DG_mV+t
zIb+koAHScg97KIZKwlI=rwt}S-+=Af%W-xUo`oy@*y!)(%;g4KPn>j@*lsw((7(lz
zfk&Xvd%U!!$+w)crF&zTzmKv%2?{6ObdaZNfP82Axk(U)uXiD-Iy2<`+nT&XgmlQd
z#dxM(Um~_`sUO&^>dL|I#;m>!l6Tst@*j6d`MjTR6f3I%TB+NUe)ya*g~9`irRG{z
zjTRn(^YB0Z3`_5gvXnQFc-UXHeoCq7o7d^&u4)kjoPxLRqh1$=)@79EZy+x*-|ryy
zSZ&jFM#l1iLVGF!x}fe!XCyn%Pi5Ufj(1`Phhl32dT7gv0sy)D&JKBq356*cT89Nn
z$?CDk)W65arC)64l+Fbf4$hCRX@BhPDfzy;)4wh>9*k4;<=c}=pPx-nR~Wtq>^~-q
z;xilmEif(ochxavzsgC&Q?yNV4`wj)qKy9fBq@MCk&+~Yj^abuk8@LZid<oFtNX?n
zc8&1N4s9gc^M4U+AKkQ(+t>XyGk}(CQzETBw`%IKPX=$AywY_%iciINvl_Y9J#pP+
z5LMctukyLapstV;G#F{-fV`CQUm#jMW=`>|6|Em)P<76UDj3all#HAUm^cpf^3k?Z
z`5YjuuJi2d{?ai;X>(!jJ1EK^4@}J<DMrsM!L8}cC+oJ0!^b~913s!%z9%pho8(4T
zADscgrcH-p2IiAbjb>V&QC2WTsqB|D(G+b2Uk>b07Aw6xc4_ukqjnpjgVXyV&A09;
znrQ)%Y)(jYDljoe2Y=wPOmirYggXc)ZUap$-of7%lVMDAlo~lt6=sE~GW1n!%a^W5
zosjy2(#AzW6}Y7^ni`Q12)V`FZDZjcYG~$Y$ZG3p8$m4ZGZ;pQS6p24f^|i=C~{@@
z{0Z;)9&Q}6OS)r~0)VS@L~QE+*2Z43k(_WH^V1g~v<siCpHL^?Kn%%}BYv9_mHR9U
zgs*MU{v{bR49TCj=ogH@3k>!-rSVL^J0I4fne5ngBTN7u)B>RqQ{kF%EUI9^n&ioQ
zT(DwhaV?Cn{3rXB4bUZuZgS3KNibtj(T7K}NOFmJ)!?|_0k1@W?)>5tS!I2X^!7@|
zJ8>AZ`*m>!EAQi)nG0Abt4vGWt7S?~fr1=#6*5svJFDgCkoWuGG@N1lf+Y1wXDEC8
z5XVU`R=Z@_!up=7I=6UX9+}d&84FHYedn4;r7h?^zZ~=3`3gp^Cqv~DjobS!39Z+>
zB`i7k*RNngIES8YwCF9v_!9IINphgyyfpF%@<20@RX=K?xlb%zxSmmIGs+9?7ecH1
zn9B1Z8{BA?WGaR;rOpwk3jB=?Vc%fuduVX>XT5JNJ>3xTGZg*?gY#|R0cC-+giZ55
zMRdOqL$EW^)L#@sl2fg5FnpGRZAklM*|(z-f0%BtK0a#7HP9ToS~W?=-k@BtE?9P`
zMWEYFWK0+D9tyYfQxLA?{Ej_2<y#wrgWiE(6DiF-YW@K~l8(Tk0G+yTq*Mon3sL~S
z!=8nFZ!szurn8?{?01Pi==B)Qe)GwQM`wm<@+yK&PqE5DMO$>^cpS=&JClZJ6hl+Y
z`GSX%nuq<JhO%=K5Pf)lvmxzyOfx1eC>|Y?!T$6qDN(r?H9DMln|oZyzO5BnSwM=m
zphp93tM<acbVeV9S7281W#Z*7>mI71cq3j%NC_qS%U)UVE;bS-4+nsK6Ty~<tj6I~
zE{usv!=|pri5Fx^UooB^9UqT>kTpfO)HSFa!9KT9>lt4KxSW0~?3`Cx|0Eqy2VqaU
zA!-h_WK#l9W!SH}7hXH{jZQr{6^sd8v+mN#5`g=*JO}3ngI!}B@r=QO)~$De12rDf
zmXQzril2n9uS2(!JOjk4XGT=15HP!B>r0Ng?dl{YEvSiSjd0=q*l*GBLP^XOE@BnN
z2#Lq5Q6Mp+#+nHVE#>y_ssnPPW^$DJ;^t*P#&iNwHFQyj{-DBza^K|(#W_iOHz6Ta
zdc>{^&&Nc#vrnuy{DkDQpA3{C5IWC7C9ax4XynnlDMz+o(^2o$n`$pdZ5%0(S5uv7
zrziOwM0>}HkhSG|4xd!!w%t8Kc0q0JlbEMt+;MCHyBCioJnfB`xB)CNrWM0(w0@SR
zi%y_EE}0YTW?gK?hitZ7S$qwtMGr$ogm8PhDy*=sbOtVL3DNm$35IriKg(J5_T-0l
zanbTJXyCg&r0wU-(Sx;92O<I`396eUy+&7(u(YW=UV07KrRx|ql{oF~cjvj2wTCWn
zVurGw@PQeLRkL}lUHq8Nq}6mBu6$n-g|8v*h<evQb5_WBkq6_{A70)|nQ`<~gchsa
z8wJ`}IoOgb_ijw`W?!U}&xTA7vg;CZm*NnP0n3ZRwOn+6e~~64Qi2CM;+5KZETH}~
zFZNxWO5uc>Ib&1B(gdHD+)0vt=!f}Ryex$*zOXJjJoZ2oUmxfxt+vS3$n%_IBsu^h
zA_-)bm!dSiHUCMgN^}HTiMk57)Xi9D(e(A1mRWNAd!i-55-w)IQ;LsT;ZzV|0|a=g
znS+5*Aq7y9{F-6^_Xy0?qOHy&L{_>`K-U@mE6j}Nh|GFSb8GehoiS~T<0s);<0PG*
zwCQPWFU1n~hco)gAXBVpq?;I<hN9C>M(H(?>LQqUaZeQtUrT0fcXJ0#Lz2t^2jL$=
z;1$aKck6&R&%Nz<E`_y2UQrwaHO5k9H5PwW?Q^vu>Q7I-bzk!1j7CmWl4%6lM=tIJ
zt91hZ#%lC$#v9j1{o3ZD9kc|z6gL3}@v&%Ei>C^2uK7xLeoc3Q-~33%T7PDZamNs)
z#Kdpwbiv{Do#}s)ViIE2pZ!8!?J+v{MjLnePyEMN1ql@vnwr`>*CNRHb42#c?a6ig
zUzSk>T-(nm^@81rgN91@cj&s7oy_BU-%CK1M7ZBso+XP`|G+(@U1&X)&rY>eVwSI}
zSmfeGa$}CU74Wc^era;f?TM{2;y&LbB}`ne&A&A?W#yyonH53qHR<td*Ag~-BLSx~
zj17g|NS4Sm0$p}((tBek%LYh6XKO5anY2KgxxU(o9@*<pM<SI(_^{e&bSInkXtT7@
zb2#*o+El?LHU9K(v8N=|&AcyDwi2d<Y=_f+3aHn(YgLo240nYIJS9^N=nsjf4Xy=a
z+sh?$9@)6yOxd`Khf?wuoAxM8oHGns$yO0qDmr|>kSCN(7S)!SvcdSm6}b5NV_@+K
zT=m8wxs>y?Vq6wV6Oo>APm#T6&aff9={4&;k<>$CH}JMuoZ1=J4kB@PC7zewSsJ8n
z+}%5`x}2+}OJ9$!L47*Vj@LxOP$i@Aa81TFaR@q}yg64aHnNkg@W?H(vW-HOUQos`
zeH>_~dFCY%jgz^_Yvoc%Z64OfdAfW^R!>N}65{x_bE*Z6=<~I(B475IzJKfJwfbv@
zaz~C@th#jpBnP^_0kaCd+TnA>o4sr;3xqApn6;caFl#^v9e-&6v{!&~%F~M+Q9Rx9
zx`#T(`wE|yJpY}So=ZsoD166UCbiYq>c?tV0oSxaV9#I^{ZfsscCk2=AER+}=M=rK
zE&2UZSX&i~vtiIwC^6+iv1<hy&trW`5IuRBYv)CKEV%?lIU(J7XFt|G6VaSasj#ck
zD*}zuU9tRR1rh#9?E1I)AWhq2G9SM*fuVB2!`>K%3vXvCcP4V%E5!q9n$E+cL)Zcx
z`>E>BRbHn&@$aK~pM*0Hbq#S`+Mzg31GnCH*VAl&ZK=5FY6^{FF^!puq3Yr14P7c<
zVw=X;ozNheA&qzwvGpc<A~r%QzXv$mBgsE?EbX?@9m<mtt4$GN-vwUh)OSh6-Twxf
z=EoS|=8cL7`M}ED6287z`FvUB9)t9%zq$f-o#zFNlf>tF5vdoVW%M^Vxxt(;5)zBO
zL)rpGvbjkQBm!3Uf_pdbJ779IDz8=CiUN0-89m{0+sKe@+Q7x?oD#M4!Q!*qftbU^
z{R9O?f0I_MX)s|kPIV?E(!~wM(8^~E<57)bbGxVQyc`gta$Y}Hm^@qi@;yf5Z|SN6
zd1Jdr&5(3?<%0m25^J<Hwy98jMw0~)%d8OznK2V>F!1j6dPn1)`N%|Z^N(R+!_GOB
z_VjXoTk^^04<{3O26LL8rJpbU2EgoZATzaB+%J@9PQ5-4rZ3DS*tC@PBu#%keV2r}
z2wpwYAW6>*<I6iOb`l|!FmqB?UGT3VlQw6rg_U%`iR);mya*fFl5F8l@h($LqK<7k
zp!P|5hd-JGfM5<_7fOVYec>^w_+TtUU&@8(bR|rz2WS&Kij44@+h>%%C7h(RwFaV|
zHu9e`o$Eh9Qh6jLGnon*3C~a8VLz-Un7q&yp#=%H7ZFsE^ngJJpFF7V#I8Ok9{B8v
z4Sr34H7M8w`Jv8c{NV9C!=h2C#7IV|c}v|L<ozkDih8DG;4CvNn816C9TT5H_-J-q
zzqQnJ%URK+oQ?0ttEVM_EM;(F#e+H2BHS@<b{(^PCia5-=ZObtK7tL}&+T`4sHXa#
zio*OkXfN?@INOQ5j_GI(?Yt`LMAw=<AEWRTrnpJLDRnRx0wXU)rRJ)cDr)t8bP6)}
zDX0->s&xXUz@JrAo$CggLBsu$c?WD-^%G3cs(O>*8<$Jo(aH)DF%1ymft-efLxX>h
z@V8rKJjEU6j=>>$_DYf}!ZlncwP$cfF7CmZF|Ku)x|aIwgu2+$u6Laj=5HK7J?i}6
zea{XX5t7<1>vxT)YtjbNJEd|kO)txrfqVh7>IjWfT9J9-HGu&d8>ZlShhT<q6Vk;m
zJU0`ci{UqikzH$fvfI%&svNT<PfAfSqi0zB+>pfG*`+>H=1%(3ElADChf`lB936og
z=+?&fY)L7Vx;Vb_=8{P)VuwtHM4|Ifs2^uc&g5%|nDIEPfxj`UAngbV55Ax&w^T})
zcAT8ANZq^qvUmImg@DhRn6ulrPG~&RVYUUgV21!`={CWsoAr{~KlMtUb#Oa+&x)Q4
zQNA=)R)3{v%f&&|c&aHn{l_Zq`T0r|3h;1*<DNi@tv&LJbmYPh>=@k<4+*8kniC5X
z@p7+T--jh?x<7T-9vdg8#ls&{=e%3m8dkBS5<TwWTQ=D&kJuHZ;3c*~(v@3AgK=g;
zEbWjrY>;6mAc4~yV!W>B5n^-+M_Fd26higkT-z*1o9f(vV#lD{>dstO<{{*M%kgBm
z49KQ0%);R$voz+{w4iH%Hf)X33gfK!`!HTU@!FmNC~{o9Oh(5o$YGTE9%s0e88kP$
zo*o_Ff?-KkH@y}V${n;DJ*Xm4Tk<7ije~Krb&=F~?(mZ7X6y<d4la!#ml<%=5L^@T
zuH_~&{`Tr7Sk^A&fA32pMhTBlcCI5JxrFSY9UBIhVgeZ&Z#mYq$piHy1nf3IL}TF2
zSC8*-fxN6mkjC4CdJYj{P7n4;O$&15Bh(M<q3J|HVSO_7k?03L#xqIrll|79b89q*
z@Ao~q#-bv2!tG)=IZ31ndWZBr6|X0UJEjZ#%Hdccw%3D8{uLMDeTD@Co?D=Pk(}|F
zXw1}{R+WgpNu+Rk^OGQ9)&|wwV0tVzBuf1uEtBNNp-=uW%PFm~7Z+eWSs-F%RHS`R
zHD^s_D$l*)<YzK$>jTeIt&YjizxB%&fn`_hN)L1?Q?!4r&s_*f%*+{nyhd@;IyefP
z4eZiSm^skD+UIoX4Z7K$`idm8zVYzfe4Ys=7??v>S<-T$@wyU??H(*7Je>&Iq5ezl
z>1t=*IDg@N<R_qLBn^kYWqf12M*6DLv3x`RJ0pVjHT+MKb$EAAOK^3RKYDO9WXUKW
zYIj4N5chuoJ3z$0-HP;MzA9E-`Hl>JN#)B8POOc-gx)_QNnHT}6G|~;IeL<R$R`Up
zGGgHlACh~H)zXXFTWqPuXK~a<c1TxoSXbktWXF2O4r8}i*D~1>$pcKC$lTUSu?8wU
zSH-+BRYyZ)`!AzgsNZW)ZQ^}o;=WMzxKgf$bTKbc+rY|pXVI8AlZ2gQ??8z)b~NtB
zs@8dN515m)%LL1i-x*7<6#oZ2va4ELB~jot9>Gb!&R`-iTKbLLQG>QFrtJUK=Bh}#
zBH(_e#xYg&uG}1b?S*8mxIFD}_7e|)pY;YqcjdRNrg5ik7_I23IGM81-S2>4F0~d{
z2P({)qa4x%;N;?hn#$aF<ZTh065u8Cvx3$^{L_5XpV_vIg9se9?oIMPf!qgi0ryaS
zHGR|^3`DzX3kC!i2XcljerfD6u&zE4>bPO{@0~`MTPAWZB3l0$lRCNYq}IC+nN{)N
z>!I?8#^&{#$$84B`$IZium*aSD}R^?OWF_b=xRK~v;W}R7Ct1qPxDsA3NVZv6(7}j
zgw*ys^x1zJ{2a~8m*rJf;SC7Wx0&>MTED6quv?E}Wd+x~o!~-*zt4MOVdu*@L)C~M
zp7<YX=)0(PcpUB})Q6lyo8E)&Vk&jF$sBLx)OgQ`_L0Lyh-R_7S7iGJ9u`&BBO~*u
z6<Dm>u_+kq;CQ0PJ@OXRh>HUK22Vk1LmEZm5&43nFoba#Ai8pm8r9x@L*ziX%oV}z
z#P&LBQK@!Z5X>b2MbDe}f)=$?7R741ecdu&Wa!9SFN&y-7?cex?Pn(Ne?up4-a$TK
zxW%cP@Pg`y?9j9RJ?Mje><I)->;s5{92fd5JiLMXi&jkZpdUHF)O~)A|9ya`iq29P
z351&oSy*7~NQx!mN>fNuBkB%ie~5jKgZw-*#GyEN%bn+wNmi&AO1sUDc}sCKkpLEC
zF2jI@mTlZ_(L+NzE{Y5A;4lfSY|iE|aaEMQdL|~Yf8>@er70K&$L-La?O{0h{s#um
z^8UopdpM|rBiFnCoP*V3^}E+CZBCY|dz4(OQ9KN*z}0Qs^C__5(RowGJiO|=+V+uo
zLRfJX14c<2>SQRe3nr=}ZisQH;<i}H=^zG(xd>SjHdavO8%N0zG~E-fq!%(TL=5tx
z$SMLV=_uD`sT9nKhR*-9m@&;tgvLxfP!F*OIUZ)4{<KWY_p_NYF#&(%KY`gec-wRA
zk>MxUY)YLO(Q)dxI^Tp<?GoD)KKr&8a9>2?*nGuoP_qr&l|yEUDAE*#Df5%hx`O95
zUeJRh-)E^%d8pPv4|2o=mIS3(3`|gazS#X)&-MU^2tq$<5Km{+p_R<Ny%;I8^S;0)
zhvN5SL7V>DC*r?-B4T2~6VUAx5r;!{`bOk6sy&MbdECyX>6n5SB}!$I!%oB<oSu@s
zO7;SwB$*A)^`W(a!%Ni*7h_CKL=_Qjif?jp!%zz%o@GAzRRjj<R>PMT_zmL^J0!=x
z`a*o^i_=^;EsH<Su~xY<7*1JDO!SfXJaiL+gNA1m9g=%QcwZvCA$`xVT4gdL@BlF*
z`Kz~Km?6Btg#Qht3H42FNWj}6Wo%F)?y>rG@J6;GUVa+UG&k>}AM|km<T>HAu|q}Q
zA_#zhr4*Mmkp^i8)%nzH38!Zp{WrDyZ)(><?b>MFkWbD~&%s@!kGKOv|M)i%!G23s
z@D4o``awB$r)g&;&=Fq=n!-t}so|m)iy>>(lWBRDkBJ_c!V>I7yT$E&Pvd@I3TeqP
z>N&_r%+cf~3W87YS*hme0s)`Zl#+eO%SAnuGYp-8Vb6&U*Bzh~B>r78lqkchpDCIc
zHjrLqo5>1QhZ{v(z`wEK6>MV#8(DGd%tMEc5&kpQ@_unS!~gchPB9o#L?aU>D*Hrn
zM3nfPWuyCeOuzj*^_Y$hsmIdoCq10kJMEzUi_o`4R&w|tA7`9y_i6G=eVy5KeXGMW
z8QMd2i8A^P^&r_=4t%)J)j2wiDyQLZa*mgowC)<R0CTI}&W_HbYG^lMKmV1tT@1g)
z21>=<k_l#BFNTP0ZrXjtGY7e?pKJ_mU`O}HwO@r>7Z+NL^}|nybKwf$r>K(pvg*HJ
zJI4Vu_wnUdZHx2VWV~Fn)qTh|9CW@kF4H2Pp&8gX`Zl28%pKq=7koxcdEjRK?)cZg
z6Y@x3?0XMbyYs{gw$%%Th>Q0fbDXSKu<86Yp)Fi{qvKov%lGH#Q*`&X)^7UoM~q81
z)If+daMbPSh4A6lJ@EQLRMY??k@>wOP@@D{kjVdyczI;{#q-UG2R$XdR7p>f1&C1*
z%{8@wm^Zo8v;F<JFu{c6#-&`aX*nSD328GoTB%`)+vhMjd@}5%^%&vH4>#n`<mk@r
zgUwn#I8EtMw~s18FZptJIPfquJu;zKT78rm_SxC31lgMu_^mrhq~h<yvBiCe)o=rJ
zxS}Sywj+5B`g@%vc9ynSfk1NSBoo1scWOrf1>Ddc_WsDbvU~LgigZ*5YP}c5-{ZC{
zby@JTr2+MDL|N7A6jOukshJ7-4&;1vmdz!T#y8h{lfKpm4En}>wyf3|ig1*%z`Nu5
zg}G}xkEX7Nw^h=$$;JL40hg?vE-A_aq_u{o0&%@z>BV;D3|#E|pu2YAO&U}kQiIT>
zMdbz8vn;aUFlBfoWXaS@mO3bK(WDU2AnPC0Q!4~hWS_JV@xX3BtMgHvO;6X<29L5^
zuBdEqC@FxRV9^kMKzqVts-bsvo>ik(NWq`koUR%vLIg=P_$iu{b;U<%p%x-uq7Akq
zE=npBOTY6`gR7<8S3up4jYQyT8A^hLnjJF{Q`50{2Hazz`^35TeGXYO`jmyK$UPZI
z3p>Q80zBCfq16&)xq-hZ@5A4laLdOM1l#Arkn#NYhRKs5g<lbY6C|9>pysvIao9@<
zRu=y?#(yD(U@ybl7M-S?B95(;;uLo)855#m2^j76A?@1Gs~DFK{!lsj7dQ?FqDRA{
z*vcTJ*ScgU267CN!+48-FxldQ-gkcM<sunWQ!dic-Xa&ZRQC%aq?KKM(naUru;LAw
z1xm1@WSx|5oPDEqCObAdOAf#w>MJ?P1Y&S9bYxRJph{q0YmD+5Q(~?BB**xsE-cRa
z4^qGWw{|fV+=o*{sLM5n2a)=fKaT!1`kyNy=WUemRH}wzE5vhR@fGst0wKGU%PRmV
zy3HmDS6}-SphE?D2@~vW_U8qo9&;`LN-g2zwWJ2}gJMy?vu>#x1qj6`({A!w{hiP-
z6$+IM$@-FU83@|O=wC-q&?bHdt7Jcerb*fhpVBU0W>RuYn}LbRmOP_Wd*s2e?Xp7z
zXG;rCNuN&bGC(7ys^K%~>yX3eDoTE$V@8>H=+kn?lQXB;mX7Ohsu&3D^N+x?O@slO
zPGIj}qtGo`aJ;u5GAwvP`wV_XO7RG^P+PKDl}<hBAyN6XKnD@bl19oC=;#Yr?fz+D
z)G}@y$biMW0sH(ynX^1fMB?E>h?B@!BFV@`6zRjT9*b}-Hp-K<J}0DMw3g}ZP`Wwh
zpR$s;SYN}<PWhH_H7>OyI8nlo3NxEZnkN}~F@bG4)V(m2`$qiR<SDJtl4hOcR)@5^
zhHfu-461w^uH*bAdMdn!|EE7L;Q!$dAC9~?(QN^egUb^JM<Ji|j3dhlR{br|t!(o8
z^b{{wq!&J3S+dx`i)LyYSL!j*7CfnBAEW2`zx6MY{S?}etW*Ns!b!fccOCA(kI;da
zoZ;9M^pj5M%kr#GcP}v|z3<9mjpv;N&}f(Rd#gbstGxkmAz#Y)<@)m1ne-Rq`mfSz
zQipen2^5e?;jvIIJ1mE|rhWgG8*y*pem8IBW={NMAto88#AALPb4accaJ{P$HoMCy
zX&R5RP5MTL<}c&Gbn7?Lv0?LpsX-T(b!5OMie)XBd^vLW>gQu5D|}RF@AH;YFYH01
zaXV>||Ik%Nmv4p9d(t1Wl*#e*#|WfUqYL!gTUCzK7}G&_;<n94Lbj8wB>xKE;UBB3
zcDvF+M87Nl(P4h%2Elu+&g5jECdKb$fjGj0!d_Oei{(b-a}7Kizv$x|OofRkbo%#*
zG0I2*Bp(dIFJ53`H~9kpZu>$|RCzQ^FWzRTEc}2MGcDD~KZ(418}B#$o^lVjOw~RF
zT)xx?9Tn?qTdzFxa~$8O%-Kqhc!086j-7>Dbx&Y^rF%F0AMb(Z+Ky^4pT?o@_|FM&
zJr~V7!#b46)lA`@r3E8rx$SJA_JErGI&sw-dZzW?*v+<g8Ylzhqy)$0TofCm>)6|6
z_h8<ZlBN!xsBM{?M~I#BeVcIDw3ofvMSW6Ym^SOEIl&bN%n#UW`HI4?XhtP)+t<v~
zi5hf4>mpAe(x7O{MF}4e%>*Lc&%AGu?+OkMQAD+FX_BFo$=y#mpi#0@T%(eRp;imH
zW%7wbomZ`U#z2G<38%PBiv<Q_NcH{z!;Y$Hx$sg}W^E#SN0!|ZmU@N>v4QM3<zBdV
zZsHs3Ig3EyNa2ov1zdCD0c(v(Nuf8Ixr~WnFoClA8)4i$MPs&N#mgnf^q=FE)qcn!
zN<!$>Rq4Ktc^fNk+_=wtijl}*<{h9td<PVvNHdo~f=|CqrQxZ(HB0$hhVy>^bThog
z_%;-}w^GYFCiuveO}?8BpB#;dfgTY~<WP$0>4##Jr(kcQZ)5|=3w%SfAnWU`SxV)d
zRAJr`x1S(ajXT>g_+cp`bV^1YDYQFmwy4jI3C&*X>&bVruMrNF?{ztXY;W#(6fc|}
zHiqn#szqXTWl4ESxo@sA;>%G>nwUr>pJYQ@gxz|{NE@i2EwaYgrQCMX=UL)w8us$W
z0PYT!*)|P>VWdf&fesFEs3;#uISHhYz$FYz*uoF;YB<g-%mXg3N2NXvS3(H3Fd9I#
z7bdTVl3Ap^&dWlIvPeI4;b5i)cjCF_lv57B!n%PQcqEV2q{?qC321$95pkOpla5bg
z@!H;Efz8(MB2uxQ>^N{p#}-qlFHVAr$*NE{u`u{nP`SyZK+4M{5$5n4<u2%MimH|!
zB}EAUL<K`5<h4;3FANNWjbH}!DsAVUrC((cpBWy9Y$y2In!-!T*If^lk!D|h1FS0a
z=)`6ecMln~!Tm(bQSjpxnkU>7OknPQ`1IlK(avJd*}a20B*(UY=CSMb(Jm4I&U}sD
zYD-7{{DcFJhndz0k}}JpHq!U$NBtX3``927e*f$RY4N@zM>u_2bHP`{61b{TNfq9B
z@B*>v+*7}cU3G7qo8iIr%ni0iBu&oh9X!JR!JN+YVNN;6cO~trE4o`=hO?VZr}csP
z49FY#Dwy$OMVQ504Rz5g%yu5Xsw54$YnOm5b~7LWu1I;cr{h0NR`O?Md6AnAC-D%H
zqamtOP9kEf6~H1>b`tood?OsEJc2K^R4T<#yvCv_mNkz|(U4|g;p6BL!IXFJHpSJA
zcHN-^HvS`4TK~~Ds&Do%7>Zx>pUpCVqSt@2Z%+6PjAWY5>I@5<xF2`+RxcITUsz#0
zvu<%C^+Rln7no93W|J9pQjyPrk?CDJ``}de(h|{@^fibnVkROI&rnRy93UV4(}TOJ
z>RA;<XVrWz-ypkJH>$QTKcQ+p0Je5lb@+1l3032<>#W+p{M4!`Q&&78{-wTqK-F){
z<|?|X&C5@$nt@MD3tF|jA=}u)t40+F>Jo#FYt`Y);RCBiT}fxv;me0sjg=_KU}Im~
zmk;09Kopw?Qmc+$Ha1_#ViTQzQ84rKyKK&R4e+{pQ7H3AWkTxm4aRYUtWYmzGxU*}
zz&O}o>8Obm*`+t_;t7d#a=W91<B6R-bR~^SQC<xrE5=wK3lFZ<a%(Igfbc?(eJvu&
zM~obE)UG!<));stMu1bEpN6T~RTpV0NqCJzbm(U<kqDlyM)y7V7rqo7!>#Q`3_U&F
ziav`xD7(M83CAm?kXu6ngI#*$Oyfpma1EUVWw(h_-tr(Jm$NoWB5YvL?EG7b6{~d`
zx2dA1ZC_hKBY4qS=|MRsi&}S;8@E+ywH!{yqg{~m4Qn(N?)`S#CB7AIYL+qLE522b
z<h9Zlqx$=58f`#zg`T$cQ1ZH-<^&3Pl8sZADnZ6{An+t_)j=JqWTTXM^>s1!=IYBd
zFI)!DAheMp2V<iYV#XGee4L8;U28sOq9{61MeRDxP1bFf{FZtOvd(0RadI{hFFQ6C
z3>Qm2J6?JBc!ZKeUlrh_EdbViGwHpr%c3Xo&x>lh8O^V}5ucz<>pYKNIzwrzN`Omj
z`2x3CYs>}+Kf7h8H0t-W*d)5Jg=H}0(zMx#m|J2o_Bp;y$}xqSPLipdR=1;Y`wS_j
zG%padh=LhU5KoXbKlknpYe4mP!+z-~iaB}9ykA%}te5=)TRli9IT{zAHagZQEg|#%
zlHm8RC!+srym|g1YedTnoe(s1bk?h>Y$7+6goa*=cL}*rXauhh7xfgS4*QsN_TS=M
zzb?q>f^I(wxdYKp9JYFc5he=|AhGPv{U^K%G>t&E3nAOQ;~tMLQ6338;Zw8pGZ3Tl
z2m^teADyQh1qfxtR{%XX=xSNpaA(K5k#T(MK;W|F#tvE@y@zYH-%EOf<_(gnhF5k7
zYN>;7YtqLLI`-8w2meC5%$Xr2;t7v}^Ggpg1v!_v(>;|%usg{}Ssa{We-1r{cv?z>
zPP<Ep6bI*M0`xY2@fNPXxjsnG(D)70g++R1&G;iVWa9ijiOlWHi!sM+860J?hf;?F
z8(CV?E;D!dJ=p=^N%Jt<JumrT1e3-EII((IlZ}(xF1fGZ$*fxru})3v@eL-<&uP=f
zivzgLy6bE<wnEXVbEC1HMy-799f>;Mn4BF^#Oo&FaW}dh^yW_E^f9GWdnOTCMq1$Y
zd&>Vk%#ph>g9`fPbg{BtO~wXW!BX4~ut#-Md*?=uuZQ9Owz-@*?5u=RN&-mLj%68=
zEUeoXPaGAo0tv?Y{|3V$*fquoB*5h?fbgLOjomOsbsQevTvJk$v$$5nDe6zvr^xP6
zp>DD=7M~>z<LelXsX!B~yJHms53yDvj~--8)_SW_-Z9`$xrR-TV8=e1OF})RKXh^}
zr9U4sS`xWr+36or>w!A}BIyP9imqMY=O9@N%IS!w6Ax!@cp$o~IIbqu(Nll}dhGrD
zvw29KpFPjKkb{~64f|sJsPQ!`Ev;1Rte@EWBV+!QN*~3Jz6f{Y$Kf9?9gAHrU+s;=
z7^D0lGJ;S)76{u(V2!Z+zsU;H+XPn3W8t|P=EQgYk{WnOn~kA`HOO02gH~{3XYG!o
z=U3>ajcvQJ;{2(YEJCqI4H@o&o00}gC}xuh<=a>z?>KKRrz)P8lal-hFUtwW-Z|&6
zjnT%&K%$qjY*H({JxSa=(JYZKW-2;Z>0o)u8R?u2Kz(ULh+7eBeAK*%GiAk~9=6AX
zNKa0Ln)+1DsJJdzWnBhVZ|Y~2olYq~EPcbaBkz77RMvH}9sJrILl(`=q1F#&P2-D4
zzUjJh+#!*2KpIeHZYLYCb&f`EM$`b<>dmrSl2pnl1a+;9u#P}^W(1@|L}5(5g-PUG
zx<*b8gt!R=%UtS)5oHTQ2$K&tn+)l))7s&PQwj*nn(MPbggoZ>EBHp3$#%V#xX{X`
zADwWlpibR`H0^ByTBM$$>h03YH6+1}(&ra~wAdnr`OT6|9LuGSvs&b_Tp?8LFuX}V
zq*K%QQc%+&z8xVBEAA5fdy-eK;hT_r+qroGqJJ<s>?bO>#xOawTn=|CX!yvCPv&3;
z<n7i8P`VcIddr_<u{zcYE+yp0fl9NnFz6K>>0VvW2n)_{BV$Mnbq;s!Nq6G#+8p;H
zZKt8OFDU#CxjudJ3>KY<-MNSeB&FeLIwkcur;uQ$B;YAf(J#59FYy>5Ee;Qn62>3O
z>O%ar$uH=K?BoKjgOkNs^4nkk_MiU+7&o792(#M5#B$1X@!N2Th1kkpjy*zN>Rjw&
z(N|uza71oK>5F42h?Z>c3_TiyDB81~>FJKK8=2IfBEdCeZzHy;=d=;qwpncReUV!F
zy|3u+^{=7pK)qlW9F+aX-bGuM*t#Blt1={ubW#6k9XoXcwtoa$+|fU+1^b78Kcs)(
z@VE3`vwyg~+WLpj!~Wruuz$b$mD>aQ;%k1~Z`gmsw5KhvH3RCv51SbUak)%==2M@R
zVFH|ko)CBIi?5He5$bYChbD71r!saM(rV6t4gWqN*CnI~5^0G`q7#Qpf`8w!B)3i^
zLU7Ylw*Z5VozQJz`A)2C0dY0%w?VUC+dA!LdBLNi!k&}3RjI+v4wFVTjp5rA;;2j}
zKwgRhMrOoWZX)e+;1#ND8Atl*2po4sjFc^77_5M=IyMR2o3gclw&uxEOxmMK?XuF`
zb@6}zT3+_dPX8kLU6r1g#10DPK>$)~l6pa$W+^&;g6&zgF-6;w(w^(Y_-Rh~QRm_p
z$TJS5$X+J7%_ee@5Q;McXt+a1XXva{Mq8o>tBj!(^Eqpl$WS0@1PmJ|lYCGGQ~bCe
z6Q@9uuDr4_+&JazI)?aQ|B8k|FU`GGtL5pdw8peORzK;Sy+eO8mzrwL#VJt~6ozyb
z&2~?`7Jg#2>W#f`h>~$o_ZsOwOzdTTc0MP$h_FY9u$`06J}KG0BZ?GU6K64)u|ru|
z4Vn(svD$xoTQQ9c%Y3ULfpv3MAM^?V;&Db$%gBDM*@vvUmV_4M2_utM!t;s|RK(E4
zX$;vc`>3gyJaMigRt0C+efQehL?6USB2xzyP)*3R;eU_OSnSj#6j+c>s6?9&osqEH
zW0rk^NEa@wjK)K%!pXn@!p|Fwa$6?W5tez6@I62*K3z~CEA5OAXx^f5SMPXKkINZR
z2G+WPI7ak?b_~>GLS(($5-t;ax-(ZP*>J8U3}Kq37fhZd;I5tl2^cLi{)&%(pbS~?
ztIkZ_DP@!dxkx*Yn}Kl~Fk~L>T(v|HQ-xz>Jh1~iZ}!yF8PPK+Iya@xU<Mlrj2)6o
zaoap_Mn<R*cAObBg=6F&aQFGIkUC0e1PQPlB3-+92&J9eLAZ5kixWl$S3#=7TIP+v
z;na`_MM3#5#Y3AJ@hXGf(fqCB5-%f9vMcHZ+CNv=COuA$HHzYxz+J*e<qUnO!)GMo
zH@+>ejs?&k+oNdQ?Bkq(1OhJ)dABpmqj&H`-lenrxXR8D(WGh?8tJQ+(r>1VDxKc)
z4Hs}dtg_=tK2}Lt9~IfvF|dN90b4)(vHG$2aq;DoFMoTqer8IYBStM0_-gdU)350b
z&56dpPz3k9%E$9$Z~ygg|M|%VP<rT8hH+gKQVE4X=9;60{v%~gJueq$=Tr&dUE=nW
zG^&&Q^pw&R%&(AEpRivJdOo{hFcic3fBZQ4>C53i-5mZn`f>fowIlesG5j+A**`o;
zj(*y>(YKpFj_?(}_;Iw!e-54wo<3gJVLh*bcg@-|4c4=4oMXP9^R!CG813PEmC;wY
zJaD6K6ACX7&gUOz{iN6b@yA}Wnj9v*bwr{V;lIAXf34!bp5niL#((wkUl=CZJH&q-
z;lF;uf8F4}ppqdbSAl>12mWiVmmG;{@n?89fEM^;Nsvc_IiJsGo9pXYF}lhx@);sl
zjmqk59e=IA0Q!)h6|j3*F?D>IRu>s>__YLg!Z#Sj^L7ElhXYtG7)rpsP5%}C0L~0}
zmw$(<pvVtpVZYviKMoevMP8pLFY_w3@9<m9p#)#OUCgpf-o1tYeN&}>$)`#G?PJa+
z#!c*;!WPpiPBC-f{#6cS_C=KzV|jeRk71b5;zd;!=`i`OtghfpKs)$=3F2;AXo<{p
z>dC({#AseHU8b^hB3{r&2Tq9+%B@jE6qi9A1N2Ta=v=17wbb~3|DQOPd_IOXl1Kl~
z{{{bgPGoR#$%F;(?_xqu$P@rqE^7FV@O>CmgdtyM?=#}VJewRBK(i}4(Ce^S9{;cZ
z*Z=ST`2YT||Mx%gD7eeKfV@z=9M$Q?|NVddKmQk;?tF`>B~vd9Q4H-ss-Tm5^bsk6
zI4q0eVcjp>hEMs~ri<Xdv9-f(_XqN0GS$~oJ;jtW-YXO!a<Ny;DFAUpl5T4c^7^~<
zI|mMn(s5qDK)x^Q*BD)+)i|Tmjh+FGZB}n0okInmW%M?8rX?JYJapcT-Z|uJsA&S{
z|1uQ_bjB4=exH6wL8Q)SbE!{;4L=UbUHKpwJiHldRc}aw;K{(Qk^*ZiIr*9-h>;?J
z4r#_d>%v4B=+h~&wsUgvAU5!k692=n(Ie$pyIzM>48u)`#!=qLel!42c8D`m_Un3<
z!PO1}7A>LV?}Wt*K1Y=WkVTHufzl%pjrz&@kE8W7sJw^h_4=@*!$evY-vDZ9Y{Z&_
zETWwruEo&o55GsD;|H8ZOolWG21Koho`nySrXDgNfowdf5NM0J{Zuy~EE6ZgO1T!_
z1Hp(PeI6<pXA&aIk5?{Mh?QHpK==M^J{GhZHYbxJ6E!q-+omTle8T1*U+Yd`LcoV#
z_J%H`2nIJaP%0eEJqB~j6v>Aux&>#TG1G3hXpO#)?bS`f9nheKyiI(iA?0A|@&W{j
zd4GcAvlJv@k73;|80@8!jMM?{AI9gW{JtuRp>ie1(3FX2x2Q-xryOar<Gy9qshhIe
zIhPc2ZQCo@$jFa<=ji`K_VR<48QT)pPe!8i<ffM2%drLNfsUR#XwVcnGr3Q1>mJAG
z@kK&^24q}DKASEG9mk9rZg>#aXZ-Ik&6&kTQ%@U@U4q^!4)sP(?K5(gA~BG(2U+ca
z_oihzW12ffO#&X{OQf;re=w0e<V23SCOD-)sDYbBHjxDno^$S8Ym!3Nx{>L!VY#Gl
zQ}l#^-HQJ`q?$bKURr`-ivN#&e<&>;H5`KQe_pV@U*mT)*4BpKB=Ajmw7vmBjwNa*
z?gEYCwdEPLPO`WHBqE}$`!0Q_Chd1*T6?!FB#z@4In5eo(LjJuy71u>yLpZo_%Pl=
z^fcN@%S(4|B|)V8JKIh?T3pyW_ESs2&#|%YXd<yFO`RKwS>h(R{S=KB>^yPH3TDM*
z%ilb8Tbu-UR$ejC+!BIV5hT-AW5E2XcJT`Op)VX@Tjkqa0A~n44Q9wsP~LK(wao)L
zpFVH$@oC2-M16@UWBa-V^Z*qP<Fq0*)Ec`fa3@HMgo41ez@9!@Zc>g1EU~*mZoNh$
z-r$@PdI&q<NY59n|3e#0bqR}1IloBfMewY0MkOO1>b=N;RJ2)_Am7#wE8x7W=B&b!
zP<TO|P?$jh{}`9`oU=YkI5-l35i%ESS(o&XwO6qrsvs-63^F10kCa?gMxX^HpXm+d
zjb#G~SIC8AW|~lcIArc^OTIDuGCwOQD=X>LSo2h6JJTsU)JBpV=B)L+1*X-NJ@i%b
z<(=$>Oao`<6;r|pAF`I0oUc$vxh*BxmKJT^4c@$5;_e+RHNhst15edQzTh5+jC;Bi
z_JREigMBL_i+37um+U?(n?qB`O0E~PWS_dYQfNn!hNU6kX)o)p#awhPBU1|I5$%fW
zDu=6Smdwuwan7e?8cM<wk=L3eSX^2!vTJ$-EHqqjr`N1P;k`cOsu*Vit(#?5qx$>`
z-7rXAr-2hTE>~9%6(vXnEYv=8Ey|};28852+^^N?Xk1>dQ_y#ntx;WT+}$<7sjS!k
zi7sl%PfWgXE&<et_ok3)qNzi67Ub}oTy~^84D|H<FuB-%!uvNpOY>qg2`#RT{rZ7a
z2T%>~Ie)Ldr!U@rb%FnmFL>zE;d|cQA5!B#>LOsM@$mKzZyoxK3S6wN-f{mps_G2`
zi#cQbI7~-)z3j5dk$#`FYc4s`c{ZJS1SHn`+xp1MO%P|0Z4~PPL-&}(N6bKZ!v$)l
zvybEHqRu~{2u?eUY&bZLzJ-zW4$Upv36o9^?H&};L|Wi<0R<}By0!9nlLg`?34F$>
z7+)rtKh?><xnavu^jdqIE^+8JdH1SvKA);T5r!O)w#ny%+NsVKOiVaSFig)!PUej<
zZu3<9XEBGAxMa+w&WW$ZV5T<F@=uH8g;EF>a9O<+mKVJn6tA*BQy@S6wLrxJDMa_B
zypk;6zz-EVdid@bNL21=5WRMa2=Ca2I~?p2>s#CA_c3N0J={#beDZ`nl98J8Uub2k
z<X|c7Z@5@#J4*&~Ra~2k@(RI@R#8ue29N$gUZfSFKBc-w(gvSTx=lcy!>_;MU#n)$
z{CS0IyE=d_!h!3PMX(aZzUw<uhivZ3wE17k-4%eq(zF#L@+<AraT_MoWgmEFJJj%m
zk-DX77>By&-cqNxdSg`IasbvWCYMxoF7<-aL|{h3d2kTv-fXHx1L)rfcNuA!hgxPc
zO#=>D3-fE$ySe?CdBtb2B@KC%?Sn3(0VithLS)2wyy2BpN<%#reWo<+5+;(wUV|Ph
z?!<)8$$r`fcZ^Rc@Ryk1VKG}aCqJ(Ycqe%nXB8%dsX1SOHpME&N~c+DyUUUtQ_|yz
zhWXv`xz_k9oxKZv6xjYvq*nZ*iG7hgM9VFy1a6XYS)rd%b7TRi|Dhy%DXoN?`{UE%
zThjr&^^By03*!2RDWKCNh5yf!w4~TiLKaRg;hQ?)Pzizuq`%-S|9f^V4`*sHUG_f3
zrFESJCdPUcGs@sL@-`#-yTAS){lov*S^J+yt4|00L;Pc~u7{YY0e=GIz;&2&BfmcF
z)2qXcqg9F>)EGqX#KB#a=G?C1ubvzY<*zS~B7j>tkTAN#M5;LAN&+&at+Oh!?1cen
z(E`A<96|*xS^*_l<tW%P&>(aG`H1KMSYu7+PIpZY5lfkOT52{qRBc!Uy1=6jcWgss
zbm>eWBA>(UqRo9?PSHk(8E{QsJgW1ufO}ukrPfhDVp~uHdag^nx?4wVhZ)u8L^?R&
zaIk)$yfqos_6|jncdWyLT66EnAwj#GEK)n`r;Kx&hz$G=`}r=wEfe3Pt13s&{892+
zWk&MQ(E6^(%jF~+J@`1sk>)Iv5RP0ml!00a<q-)W;hs{1R=hV!e2Em>THxPx+w1w3
z2D^^9{ZItgpc999kdh;N#Dh;l?gX8Dd2B!bOf4VU!bhP_Y7k&2FhaSPe!Mr_$>J}6
z0g>sd@Q$E%yUni64)*8WHatRe=+3<VWYB*4Ny{mogtTRmw0PjS51d+t9PzbQ6JhX(
zM;gwHQ9&-XzIH(#E&?J38fea+Jad$3xf|C2rL4AZqi3=ayI7*OC6v+XwrEnvhy*$u
zjSvHTjU86UaH`YXqx2!iFRt1s2#_j=p29)IT|rekyjYP_GNV_b<r)S#fkZHC;G;=b
zs7l51&#Dk<q3*iiog3t&Ge_ZriAIcHfjv<wfpDUwjFi+4jA-cz3`mC_NS~dA9bM0h
zAQ@CzbA@wpc@i$jLy$Ul?bMtHOTm}#fodNhu5g395^5*)hqZX`0#`#V&$hgoHYlnT
zGM!Asg2*}P;$o3$mgm*UUCCcyc?6{fRow7)RR2%^Oio%ioGEN(>%3k7BSy+=#y7H&
z2O7O7W+JK9HU@PO?lSvdbG~@0VYKWC4tLSC0fg5M;#a?-gX!nd6eTR;?@D%=PCumi
zRA6D*&v+#YZKoRt+Z)Qid$zaepk*rWc}=(s?PY$ET`{T*95D4t=bZF)V?^R9?}u^w
zsG{ODGI=%{jXq%{VTH}nyq->s@IX=Fat>QOorHDrz@xyOE-#raII0mt@W6ekHwM4+
z&$ru3+n(_u($m9*&B+No9N1eWI39S1Pr?(`cBIT%Qd37n>XB(dpEN&3H1@P0GTuQ*
zlh^JtS3cJj`r;<JKyAbU&t5e5jk1`F<$zJoTZ*c}SW$(UZ8!2Sh(g%fkiIuofbx)g
zanx?2gxB~11>$PSNFvq=dUN|t<VZK_ypr7m2b3FTOyZ3M)!9ok-fY1f)DrB><en16
zO5PdLL!OErPa=9rr`U1t5dd&w#bV~yp*EvBnB3s`60>v9Z#1YB9YYk1j{-I2@O6Jd
z2)g`D&qM0o`I&@9;fFnoqI>s;f(J{<*epQoonLymM-bgL1pLmg2nAQh7eeFS_UVk$
z+4~lI4zKv`uh2tD8jK)z@Ax)j)K~d7go3^8Q-+c7{p|^CvU>c|mCM3m1J(I7`MBm{
z|MaAazY&%lDPAnI{32tz=&Gnl^vTntxAEl3KlYN%q}Nm9c(aAO8;I(^rFwO?Aov%a
z7?p-3xrEEXNrxE@mBU(K?=2L&)zw1d6j9aBf2xVn0s3mEEbgy$BJc$RSB${I?hD;&
zsElh2oN!vjm$qaA`1LTZrRlYC^Kg=@`AR#ft-hifKL@oHO3PIIvrt=Fsryn}$#~*v
zr(xc@zrsb)uTl<Uya%1$XT>|V*K>Fj_i9V%5dqk^--a}}f~u(%&?}mAG32O-A-#2*
zUc0{)9c*6^4>fz2_88CKz-hWtgW$NkTG58;3ps8e+?k5wD#2?8Hi`CRI!kGb<_PwN
zG5!~Ihm!BFAc;l*vaUKWjQ)^G3|O4Jg+l!};w#L$=%RN8&P4=vv1+GN%;(NtBpJu1
zoaPSdQUYg4C-8b7t2)ik1peGv%DE=)RrYbF8Y1RtGz2HSM{2Ks^Cai^Ser94qCRqZ
zo3`@XTFi@#`z}6R*Lhu5(=WJ#o|Dk=N&W!?$BDEN?19qCSy>Y(*d`(~5qlukvvRhX
zh&^y=nw`!!p`NR}n3PuoxpiK`)BfO#wGD!bC)*3V?wLCj^?@0B@@*y?QW@oB@jp?y
zatfb92RQM4PZ1cnvmEL!iMHaQM1u*2lb+N-gb}S-U(%R1+)o~r|E(QUGica39#wDI
zA)ROkf)2KIvC&D_6yMn%2FlOX6Zg!wBq_h_v>cRu<P#>>j)<ur8*QD!1o}I$ro7->
z<5Vatph;$kMj^_<l+xc8>ir4lXmeSCkf4@Pd3p*5nes>s<<WQwm$g3PHiA;ptS`kC
zYF3r!|D62s&1Ta54@{Z+U-H{uyYK!b`9ogM)6Iu|m;81$`GNLz-Tv)we@*`jzk3cF
z<E+Bd-}&tw-@Qu5tij-ob&^(6$8Uc_|Ksm|)A=3x)!0w%_~3tTF%du5l}oO4#)Ybk
z;32JoZV1esWY!BI0rat1Grw10!PftU4Im|X2K|L{g44ISyB*({laEmVuOY970(L>W
zYCK&`SfRyrh%&^DfV`Nd;*sZ~A2rc1J2@8&24<L6zAM=0!_6LQs>zsc>6M!orn0Yf
zOxs*<JUw`)<BY>~-ZoDp-otw{Uqw>QrwRF@fJ6fy4LM<!8%qDO#0X?`)Is;06k+{n
zei;lw!tqhZ=T=qB$Vkwd0Lm4Tlu^sr;7cUoFtk_j$%wFf`oX~_c#zY%AQx`fRsZdp
zT#Kp-XVOL2DX$z}1!vj(8?2V#jBr-oN_rgE6@87=3Ma4i3+M;e*$AW~gS0@)S~ojy
z`KTQNjBp^s_Inw>tz)#9{2PBfTE23pr)i@gwr&KIGcS=3OsZ_M7-xrXagvTiYd&P3
z4V);q`pkLo)CwFw)%W}TWMlNtqhuGgVT{g^UNcArR!rVhgrPPR7>+A)awKThET<iD
zCBBh=6L#+{cS{{z&^L*haq{XOqJKF)8AnbDxw?p}yWk>YhrxP3o0}B4%4Csn(yBva
zb1gIHTegbO$(E@J`jKNT=xA<TVINWV5%l==Rq=)`#@GGaV+X0rV5mElmZ?Dw+c_=z
z%$yFXMi4ZIm_m>wLQOa<FVrv^br+^)6-P5}xEoTvx&z(*n@l`buduubZQ!?@#{r>h
zNHGhQh5m&mD)|yKOx_?4F=<hunGgnv=rVTk!TYNn9~T?)0tL>2p8*d*EN;TgD(&8C
zaN^HhSj)36OjRG^B55$Fpr=CZ=?tGq`d-%w$!oX*<5=0G(LAMpZ#oc)5qoS1f;0k<
z_1LFwr9Q~#Q%P><Djf0CgwROao|;xhMEWU454A{Ks}n$>V*kAtOP{tr-AoQ~uGr~!
zg%DYT?-`@@Y2(QzBLmZRpM2zB9>b(<-X&Wi&bJriap41nm(|HQL6A$tx|w%I9mETM
z^p0yq@F?>ALN__i*RHO2N_-r!2l=6iVYPCZ&{I8STp?SC3krSpb{}J8bx@@a?oxrc
zgQ^-@I6F~6$}PU+;_=;Mr?%+I^kYBm--{_yNlB;#^LCLCk4RBEv-x=WUa--R`><ID
zE&+AR-Aizwu35x#3CYYaCTp+<Zg~7MMh1#vXC?Bb?`Y|@dVr|o5DEaOg#v~T<d<CY
zsGjhI6M3eId8o6{UC`Uw5gYx~N!@g<J$bt$%MU{)lI{WP7~z7sZE{c%<ATXYn5#2^
z10IlU_w}n0s)XQ(0V{-sb8!KCw!iNJx399^#OaGDfSEpqA_--Ht<SS;K1$wEL+@ly
z(6JSqsLZQtsHZjYbFYDE);k_GQ`Aj|BTgo|s4%)ckFZ3)M{V^eT3JGLRdIto3ag=s
z!hERiYw9+C-Rlk1Ns<)?Kh|ILf1Ioy&OT<B|9G^@j*_Zv^wEROt{rY1Me$_oU*K`A
zlp1D}__UH=FB>a$uQWWff;SG*|EJqs8-hHnNJ&f!MhSto)K2%t+kAGH@3sI$*SkLs
zCYima#=1qxf2nyO15h!kYUJNG=Iv2fD9B?HzS(Z6&+?jKlQkm(nA&hF9M`WX`?UZx
zgry^Qgm*-Z-;tF8M2i{|_DwLVh<u(sl!u~axueHYpr#VWC_$MhiD^oavCJpz;ovba
z-TLOmY%y<+h`NIrG9&@6>pKyf)`^o>+bxxNV6<r7q&7J~coseKWn9S4m`!9BlGQNp
zWAG9)NlNNf{R_|Oirsd(W2GD}=oAlWzr*M>V1<F_z(`|&0NRoSVOHg3h3kP}*d9E-
zb?5rVA9ZC$qm30BCt5x?`Exp_!ZVoGscPL~6_Z~P<*Jel;~w$NqrK2Tket#v*{=}!
zfqF^5x9rP~^my(=7g~8K@XT71{CwJ;UC$O7c$gij3#t1-R$GL88yp%T!r+S-5e7YJ
z)$_ggZ_eSJCXLu*I_xKyeu9UO=A}2&G%vWLc7)_tOPR-|TYY^;(WRW6q45ek*YS#T
z6W|UR_`V<y#foS*74(8;PgcTv%T(nRJ{!^;3{gjt8fys&C-TiD1FA+J_`C}AtvgOK
zv$`}ea?;4KU@lMlzJ9IF)y|cPknW0w(~h}Kn<MgdVBn)xWS9GxKJ40u?G<Rtf~ceE
z*YZ<q9g_q{=+f>1SJ{p!yeG27A_z0@P9&ap_S^DGa}-6^OxL+b)|#n)OFl;*bo?!}
zEtck3>jKAHl1Mnze&xsNhMY!Ty$D9?S&~OB*(em4UpWw37iWq#x}%uD`|Mv*_B+(E
z4G22$TMA$-lXN2K1PEmUCz5@Evk$CZMjq7#|9KK75$YQ3P8A>o@mb;3(p9Abs!oL?
zWhXneoMTDf)r0F76R{HYRm-;}1oYKz7JmlQdi!@WtKpQvLGM4JKH%j`)efThtu0tR
z(aE;S+-fiX`|tM>gyIgcA{aw9X!OBt!q>Mp8GZrJ;Da5M**W?z?2DU$PwNYQ^svt0
z7cIScV7m`%v)!LyXYw8+#l5CbjwVSXeEFg)3(^)=qiiPE<pS76Bt5_qp1?=f$yG}5
z=2YXPB)$@njm0?}PYrt}8>qHNe>+7rkC6r4{roS4Cf4*$_yUK=&NguEF{zxCl*`0S
ziSs!iw7FACO0_03Zte4ucsf?MP_Z5O$QzFYI$0NA5<5v!kGdhL%azCI#O(gSZ>YxF
zj%=&pft5(om~o)fyd_WB*d>%g34cVQt5|Bb6Z5iGBZ-wjNoz%B7CRELyf~Uv2eAD;
z%ArvQNdLW_n;pDO=^f%P$7AJI8!1WZI3o%7d#$FufSF0O#8I2B=~+p!X%1b9!Aw4g
zDks#xa{-AU;|rN!Df-B#Yi=8M;5tp%8A4}q@Od>?uPCPS4`DBz4hv&s7wR|dLV)?p
z2pj#u$4%NikPW+sm4x~!?wip|r8#`$cy`(7A>y{`&YT-W$W2oXhg|bf=!ZpIVEBG>
z*?_CvW3`LUg%#id`X-<2HjvFB5rM(v2Rq@;U0~Pp*==k1>AU7LufAFIgHqP)bFV&2
z3vbFgV1cCOq0|>{6Dlp?!%z8_M@bELfTm*>lt{$o4o*@1SDEs=T6@s>gSX9Tv{U|p
zCj5yLF}`zFX4v9;&wo1<jgA9rE6OVy|J_s|+i+2|dtz=vYiGs0eNO)ktk&cHShU8R
zqerv$4Mgk!p3-NvfbKE~OBheB)=>tyZ?2;HK2u1VIX#NS&T;3dxPVHy@b%}S!wRTS
zzoFl6Tx<z?Wjjly9Auj0HKb;Y3#h@wZpzSuz*`LBjTB=b=`hLqK*P)?CLa31d#dAH
z%FygtHt1@Sg80_W(kH1mw>t%%9CF3p;X4hn;99pq+Ct2gL!u+ro0BgvUEjAEi~brs
zC=VRfv2_dcc@Lh?c_fDgtmbQe&DoO!1b))!jM!_`kxp{NA13eN|M9;U@c)@Jfsavr
z$2mI{MVHN2V^r5Ul7W%eNDUIzu-CJ^kho`<?By_1VF%9{JN<J;({Y%^l-f1>O079a
zKv*A+>7!ybxcA@CQrnF}QJ#%Py;_GuoT3Tariu3Bc>mRV8iz%pl20!16PVlWNsvM4
z;;Re#;v&c-B=*&mCt64sE8)q6teW^Uxu8hL<&)(QY_i(c6jl~J$IwaViUUbeoN>uA
zcy-IF9@spE)cE1WQCFTySr00qqyaVy>+3wLeL>zYa^!5@KKaXTEy0wo58og8_J<*J
z@5hMAs)>)M;8+qWX(rf=$cZB7rFA_)Q-=RO@SX!v59b6SEpW?2#~IfifxytAg@bc7
zbe|j!KaR6m5Hn2}K-2|x?Sc>9A^PGwvTn+%`3h>vkAh&4=t01)T#S7^D{Ch97`Bmr
zRLmaaG0|tkS3$F77wu7SRPj8#r+d`yRFk}&-1A_V&1J!ORorV1t&#6YNzy8QMTB@v
z12(<)6`YjwIc!69cF4uxO)ma*ewib15h8~vz|fM9Hnn>K*#K;*cU!lE-lOFiKZV}1
zDT*8eV5T`U7y>Rkh)dxI)+D-G`!AEb+|eoD6H8WX5$&7psLS}}P%E%gD4=o>cu~ss
zNo!XZ<_Nh$ct7l)nW|1274*o!X5Sv^bb!)GM-Fka#UMVw*j-KnIY?5EyIapojx41#
zHC4v<Z5eS~jI%Tr!Q3;8Y{kNpoN7LERwKENa60e6$%BF5>P4<PD;wEyJI2z3**IaX
z=q|<-=`;?TGhGO^#@z?jyzZ*PdV)%r<koJ|F<<eAe6sL-VJlGGv&P)6k$DihbX5j{
zW&)@uu`|kQ24bq@Yzmj5609F8_;7fe+fvcH>6Jf`MJz0Pl(XiFnU<Hzwa_2X$E^kv
z)xvddMFEp`uQQ<LL0ZA(>I@=&&ArpZ7s*SMi5#C392i=|HI|wvB_8^gqXEQap2kck
zKrzobaTMEY*+8q@l55nHZD5hUW_--GHLIM1wh>`ZKk%NV*v;q2o0;XqTW3z=^Bllf
z*>UKOq+ck)TzJIO%d{}a#%M0TB8<Uhxz>GwP5(%%2+*~H=s4HNAcWa5jUW0#9z>?W
zpP_nF%LP2zOV6a)2CV5zzf<f`8_Q?keNCA(`FqE`ePO&&MZmn$c(-eq^$P?$OiwT_
zLDL$tZ*o70SmUp@gVvNi`^jWSZgY-pW3wm~Aq6!OOc;=IKHshf=(cPcqtg_ns<f#;
zA2v^4wNBG_*%?sk51EEr4mp5<L}83Y5JE&6GG{E)zJ^n^`pdhn=J#el+44f}EW`zo
z4YNoNzI86nzGsHpZ`H2@$N$o^{PBV^wF!EbtQ-S9#}v0(h(d=*Z9>A)#Sv>yfRu=t
zGuSh(5#I{U-$gi0ZlVk`)l6eRo^8ko5caGd`ElfI?P;bVm~py#et);&0sETkWzc|2
zZ*hb-N?FmuN^W15;u?+Q=&g?KmLr$CO&xNl(`>3XEEH=<N?^<U35OD)iI{+BkZ+ev
zN+$IYLp+AjISev~4fEU2&XtfuLO68fJ|>fx_h2{u!{VSiN)F!IoWyAOwljtSVI<(B
z(-8?<;*eYnl~XWI2*kcQ6k<#bh8D3)-7Bq~K1_>)NqywCRR_C2`$JVbxe9ArbE$%;
z3)%x@nh$^}a7bIBN)>NQC{iy7g%k1l`%amU=1kU`B+y!gepPVALg~{qpSoFlP?!Q$
z7P2$=Xs^I<1q`ah@ft&;Ae<UdI`RzwQJgaudtX_;E=ZKce&dWd*Ma;k{0bQzlc(4@
z@`}q!3>4Sy1pXGIK{@F|HQuB-ekvJ;H{rh&%kN$H-;z?;!&_4G$Ema^a}c}rQz7x`
zXV=Ir=S<<}g@kcGR+vB#;_=9;jCFr*Z?7O>(A6vw1S!iTYl@n<19S}F-sHPUOR9+b
zSy5G~<;<iapJ|R(=SQ;R520wnEg#mMdsx(>xD^K86D^+va{}9DZ-RbDvLsAPIl5}n
zfluUH+?$|xxL_4Izo?cqLo#PJFXiRZRGh?Ko;n0hL@jm~D0Kw4+Rs0u18AGy52eIb
z$2(&S=GLRU&^hg5d-56qRam4Ys$eo9C@R6cH*~TNDC8*lT~=fjU54bI?tlZR8r3LB
za#lt!^SQWFb019flENznfu6~)LV#3V92Z<9zAHAG1!ojrDcsvoxOn=qpO56e;fF}a
z$I}u)G)KQw@ofqE&v>=`{QiF|vg#T$Y_MeOJB+yrTdtY=nlSV>pgWE3-cKRXxJA5j
z5<6*R%ZfIG1Qrp<0b6`U>Sm^aiGqs|@<9dtIe{gzWCz`O>|zJ;1qMjKe+Mo3GHSMu
zc)J<!JDFmvRz%zzzIt{PnF6bMPeYf9-j{-kD3Aur^Dm~Y+@m&!2hs_pmP=?_xvfc@
zY5Hf5C!{qG85JN<lXeR#_k{J0v{-cb78rm^F$<()d$`f&JE-cQWSSW}F*xOfOn$!@
z9q%3-!%|UMAgTtl_GuEn?X*4X)bDmpJ%y$@HJHg@-^b%^d=L2XXLc&VYvw>WGcj1x
zGVQJd|0a=gtgXw7_EkM_#eeC-GSl|y%i8Ik!na4XyvEG{FSdxEIpnE18l}ZEcepy-
z3iu)*WhUF5@i=<Jjpq1ZJID|<c+3>yx{KEcRpH=JKMN(N=_WqmqjJZ%$oZtD7;HW)
zX8lpxE#J;S#U?BK<qiGLIMh28{5HaD>J8$Z@WoAnlPZ?3PcU4!Sf_ZTLm3MDgWDT{
zychjH#^jo#<C$SVllEdhu#TH>fpy~U-TDb_CGOgh@X=c#-0d^WaZ=31lv(cvPhGEM
zz^;k0b;xfx)ib*<z1Z}VB)5>jp2&;|KPwM;Y*q$f6QXvY)r1(jMbdmeuPQhYkG6T<
zJ=mxlt_wa(95U<6^31L%@Z>9R5jBi_Hx~tJ+X@5dxw6XojlSrC#u_)Wz1`CdgK3<5
zUa5{U&q{A))fHWZUjwOUg}FO8BP**sH>)c{rOWgUZLEJ%O-tK=dA!~Tt%=+ktLn5c
zKd{MDPL(8;K;8}~heC+GQ#}=#i#@DzQzL94)}~hm$ejq>$VY52)C_OP$3}s^Vr`}+
z><7!N`x<!o;5qhe(6Xd1o=}4|TE!3mVnCh0Use08H1&Hy<7Q=jsOR2k+YI`=LSk5k
zNvIZ->lWu#F_?LYh6+COF&i)DOrHhBrkuGjZ)!mVd_=f+Od=cHWwo`#BUG5U!`XnJ
zZcM71I2@-E)hPDF<4{J8HLs_Axt<u>g6}7{mDn4^A?dq2YQi{r<MZr)$7|>d&V2I+
z8W9?tvxoBv`}ey)C<{*D%k$t1;T|`^G8=haBvKqa^m!<Gz`U#{Z#V}Isy=d352~S)
zgiHdMBriIiviiE1r=g>)`qjAwCqU)nDq~S^J6ZqnaP-B~ACDfdZ~2!m3VPH3aX^pF
zMx9OJOp0p+v<P+Q<)m)slr))<6biEoItRUZmF&CpNHx~qnqknk+_qKl_3M-O-wCFE
zpDK>oND}$rg@%3ifBbRu^WlH|I64}vuAfop-C?hH6u48?aoRzb>1O@MA0<2dsMjsf
zy%h&JgU{e|wzzdf9?fbgf|Nx%y{u2LQ``~>T<}ffkZ5aHTN|JFGgSApw`5;RrpJSb
zMynp6-ILaTzpMPFPpS5Bo-qp7lP=lZE6vDDEfg4wzggtdi4Dm+4f<9y@W)k^&Tw#-
zk`<F(Z}3786BB82J&dIK;Yypgq-t?4l_t9}=K^Vuko9Q~#Re3|So)SGVI*Y`&goDO
z%0n!0gxk6t9dFqbqw{tP^1Q2JH75&KEQ!<t9zfS%y9rhR0vLg+6bYq%R|3K+x`M&P
zlXVxMm(9mA^{wNU?7yy$w2BnFNf<7yCGrSwoZ8lKc(;r}qcF`-EE}T(df0MkfGk(a
zShS78YGS)zpG??tUtajw<&jU;#Rg2iWg6uUZMo*_zIz>>sy&l9BTYt*`{M3ts=E$e
zIVZE+66b_5gi2g3r=fd?O6%n6I?X<ik<htd7TL$S)Wz>G<<Ka3T}XMX>q_#UV=X3t
z8Fvg?omgFRd6`XexMru<QXQ{Yh&F^tVyn#2Rn|ye=5?)Jf{{QdZii5tOCEUY5r;w)
zLD&UcOOl~%VvqyyD4)W4IBx_$+g(&wV|(`L%G8^X>68COkcbp!y<d$3mylY*j#pMf
zCk=HiZ@*?Gpx-*)hK8E-HhZ(N`L9bnFZAUqBTV5*mQw5@!}uUSO!{DMT0RTLiiR(=
z^zilW*c@kXw=>Z!`=T(uu53>aDsOlWpvIcmsHjg%lww@!S8l=e2J?cOhS(>nn6RUe
zY_>YTM1Q=)qZZA#=^i$tD`xO-#Z!Gk$}uW*)bKc13X`#GPgGG>Wth=o!a*^7*z9TL
zQ|N{}LcR@28?O24hH-GvjfS%^dSB*6UzjD+=0TORs}>zwvI~c~(9f8cW^VzXSI&vm
z!K6f>-yZNg+MwQHDRd7Hos}%Au+LBIP9(QM{x5tI-FOFP68xm!1OwkY^(jZyii9Iq
z<ZC|zE>%>{a0DfL5~g!gn~@4|qM0aD<w&hy4$sls$E8~L-e#nsK!WFIk|qc%*$&SD
zLWtIj6Rx(uF>Jn7zd1j8*^Pay4=%5j6;#RN?%O0sZ`u_2uXtA|)-1DPsHt{z5Iy+R
znmL!<Ga)*<I6Dvbuc=Y7Zuv5DyGOBhvX6>@MSkUQd)(&tY%b`4s<aUam&F)Iau<zw
zQ7D1vJj{LnHUP*BHW>R)2TBXL<!v>whA{5A@GXtZy*dNkWG3{vZsWV|;G%@ZdpL6!
zolFOIqVhqL$ugXcm_Omhoq~iWq)s!d-NKOm!amakN)L~M4t|m-S^pOjCF@@zO74F~
zQS$p@nqOpi6Ad{Yh`=Y2z|>>(R_LEi%M%p*1OiWqF^=|BIXYDe$$Th|Fng(zhpLM#
zLI&Hr$z7dadofn(@(tmhQv6bB@*Szn-(l#H1jQh+T*u_8*}yqGaNLFDX?`bAJ@1m>
z8%=iNIMUmYbwq?Xb_&${iibcx&qW0^DH)NbOVQqO4hJHhe@=PMfdVNT5Q%U-SkGPq
zJLvC0hQlO(G{dx^4bWVyhYHy~FO$?Qa7<>>Vu9pV=>hiRmM{8}le(vespBP%w(cp~
zGzFX61QK@cZ;B))$LwtaiQ}Ifb0#ds@`DAF`^zQWVu@bc_mVx_{q1>yKooe8B!EPk
zStz`Ts%*Td>P#cCi1DvUI&cl2bjk}xTsUbH7w#i1)c2DXVqt;RbPXn`O<;hcw+1%^
ze&3}{9Ly#H=1)pGD<nI3sbMP+;&gS?WwYCJTv?fz_5300eZW*Ylx68c7z6~}VgqGq
zQk3zf5C{|$(@B%6#ZNN&d@@SD$q2g0^B-`HWuZ8Nk_b8wQ-jXFHCkS3-G3h>_hlRs
z*%Snn_&i(;Xh;FbsbMv>aS%btYEkQcCb0mo<7LYgcLh4M$pS{h(IyGpQxIsA1FXh4
zh{W7$JF1g1V<5FfRl&IdCI-d^%d_TLkyM9?`qk=Mtuldma!p;%b+b50BM>a^FLC_T
zPLJYj+nwTuiS4Az19+TEB?*Lkih-V^j6?6z@f^JhYtddXJ;l!gf*S`ywJ%-RBdVlj
z0i$*DIlH3<P#X{l`^-er1x*J@puR|~pT*X3XX@khsZuNXB@iT@If2+#uDE*Kgqq#Y
z9NDkY_24SwM$_V&@>`g7YK+(4FyVQ=xrfllMiZ2uh>;?-s}r4I6}zP;M^7!!_E#47
zKB2dPkY{G+4pC2e4B|KlTVO%JvuF#Rd=AG?mAtr_Ftml;+)aebr&#l_j8xRb-cVs;
zHeHM_`mqrn_7a=ldu@i*?-s(tT94+xMbh_Y(=4s1L~}rOYdna+{g}5=B*9(9It%Pk
zwrL`jGCfJ?&T3G2B;v2ucpQ2$APT`5et=JxAXO=v^p)hRt0&I)MRxsY&>j($?D?9>
z;hd^#^Je96Ik{3oH`M#D#BMgt=9##W!gi5bhY9nSK?pOy;{FLN=kmi17T$@DukCF&
z5)(cbwUxIaozUlBw|$Lo*4834KaLl%^*$n@4{?imtj(*Hs`I*e`}Hu{a58!$C3tng
zZbcJ^YMXNu55{zzGtY-8lWVLWF#cAYr)&%i2FdVl$Jpv9n(E`+^W&pr2Z`rmMo~ge
z0c&M{gDPOXNSdxrySJb6U<*2L9QXqrh#j_D?qZgLkJMx35QNqv{8}!V;0x;irZqM8
zFeVQjZZVKcL+J3<;fSu*eyN*M19r|gM0dDfZ_4O)UOL!28XK?2NoGFdGj`h%;{x+?
zQWDA#B{wf8i)mV!OwJ!RMjIQFCkxw9^}$It##Ae*!<u097wQso-4!z}>~<`Px@uyy
z(XKGA@)Mp>LV!sHXdU-TUOBXcIJ30LL?SK(L$Aa_-I<TUQE}lUy~xy2J|ZeUWUbBV
z3>IHK&!Q-n7AG>@U`HYNll2w;0abD#sx>?O84NcPf>;wsI4-9ZFoRXf10}HyapRD#
zAUrH{id5|+NAP1dYa>TrCN2jN+rWK<6&-4{Z$k_C@f;;a`2D+QJ=n$Sa!CfN!2Vxh
za2RF_miVH}1Zmur3QU^+3&+ICFfjnYMeRA9D16PA&@(I~9}sW@JqYsx&`Y0AY5RW8
z=0oeM8KQjeR3!drycmHBc{Lb@jFnaFR{C_=*v(0!N1>XC>fC=s4-rdM-w_ocUtEj=
z3O*T_bw*Hc<NIK;wTK^~5Ake<CoL~oXJ>IPQ7=i^v*9)I)cn1f`08yc)QOKe<onC^
zmE3r+mu6yyO3O{pb-N?Cg3U;*hQ$<<$SCVNC4GL>4u<89k9@0C)1S{+;tKJ>JUAMD
zeS1Fimewf8Tm*U04BbZ>dQw8YY8Rr26GxEM<vF+_Em(P4NP>8#m|`kM;Ti>d%IU$&
zwl6uiO@J%EctIbAuUdn1$?y<6AM*v&hvgvi^dJ#bCk_84)xok$OTy7HgeY;2S|85k
zJn^o%-57g!uK1YJVo8bCa9*>>P5iq%R(Q-%2aRe?_LlE?TU#bWoKoKH9vpx1&gUKq
z;^-w@7EbDpdmoXgE@n(T7+aVjQP39zPR1u)sTT)YlM_-c>={+Y2h34=(U9OK`D~08
zMWgD+CV-GS%U3ex)J$ckqi+}Lpaj`L?sq#v^AYo#P2x!7YVuKziFz%73IWJcP@Y3+
zwcm%6Be6aP+$S<z@3_u)-d)4t;7Q+o(2JyqAkBbJbx-+QnJZI+E#K7!`gdMRj4;E&
znZS8iGvb;Zco$S7x3%?}uKfzWHkr^uD5}lm-Gq#Uu4SCxp^F}LHbs}78v6c@Ci@+$
zl~l0ARj)C}R(5TS(TM!OJb^+nBg{ud?iSYl4S7eRbg;8v+fG!Kn_6eT%OUeMJU-7+
zUh+0Tc0&TIAEuq?i0%z;&PkL+bxtz(A!lElPvl1Pyb3)>C7f^_XqG}cq-Szya0yze
zAr;^SB!0k@2@`)rfzxr^OXNF7m;jhSZ(c3PjEpr;+8lu=?C)#3!2ZEM-H0Qw+KM#u
zPRPJQ18}KLk|5|zGw)#G0Q$$+33Fsn$U)yG;t8A-bGaQXprYvoe(N2Su(UBRiQ$rS
z=Cm2GDP~~Hvr(A126dwo%$w|pcb^*@gudDVKl#>CII*MBt<RW#CDC5RoAAqJgn~C!
ziP$Mku^>iuZgO-O0_LCR_IhiAyDqtF0x?Qpc$fW<wGQVV>rk{;mj@|Wg<EIWh4QI`
zKsd{;FW%lqDf`TK$P^7_BDUI#u)oi(MVONc3pIH}SjF9JmT~rM$p9_{vkW0fJ?dDd
zL0N^X<AkLOJd2ViI!qBH`ni!YrI=&q*-ryKsd=A_b0XTRT|O^)?fqsvXy)<#7AOES
zi$88IR%{7#1|7C+Y1vjznRYYdi{F?i*7?K;MepX-JI6{OPG{f_t0JcVgorQV+D=Az
zHDPMH(Y*YAHp{AKY0ZXczpJ_McCvD?yFy7N-S2N#LSaLWB{wCbfy+Rwv;LtPr08zI
zPGleF`}qmF4p_BbC`~;#e2{LCV4QsIG=-<wLX8;7lRFTSqtP&G*;Ye%ank7CZXk=I
z4nR<3y#50P`^H@e5+;s^Wy|8AGE1zV*d%0fnd0+^<o5E3%Rb@Ib4)~Xla>bnJeceY
zd7DXNm>OrcEJm8mgfDPnbT)BvWNY3SXmiEfLhK^L=JqMBVBV_{M1r&(6^cwOQ#t<j
za{@x(|2os+df2hO;=d&D*aK`ff>o5XgB2lKSO63ztX|cM@^y&c9cg5zNY-9?;<t}y
z6A2KBfV4`Nfm=aUc_PD;foG+~RgRu=hsn0ym9@NbT$8IS;nT-Y6e?qzg(sgFlQGa|
z5_amNM+=Vvf}4lfP03&COs0-PU@`G5lr1LV#4It8Pb6yCDEGo*W}FM5k0DmewxUHz
z|Mo@THu-8r;$Zpe<ho%zU@n-1t<s6S(q2<6H@l<qxL(+_GGzvLKSGaH15$Sa`&%#<
zZ%GgBxHUd;x&fX__Nq<I{>OLU0TNLu`m}3{NH%8N1p;Kf$p^qS20v&iu!ydO+=Ud*
zOlQY|Uqe6P5#N6Ny}M`he#DNsn-|lbh|OT^LCi>(krPZH2`dD#<s$^$fzE52WL20`
zu7=gG?t}zcL)~xMj3`CqsFCGCB>hLRFR(8>2)_jemcCx?ja=#!R+&0}0jKXa4RwPG
z<qh?;@oZsuG)i{w06+;KRX|XgZ{#KQnR}N^Uwo$DRS>?C-l{3xaHFBTC+rHoMmGfo
zYO;yAHrAM+Wt(8;k!;bZ8`TI%1+0bW_;p8w{I^XPZtHBVaWVo*02`V(hQNRjRvz_L
zFN6t!+XQts-wQZ|!N%JYED72FOGMc3USV`~b)W(AjBAJ_NuOiRWKy#!nNkFc)GkV?
zo~Bqkq{}91h)&{BkOLU`J6h9{y}wQ_a=3FBXUWE|H-5YEuOzNMI|rhkFD~i%umAZs
z{|wJbu}dz6a08Un51DAFvHT>PP0MR~A~(;d4*9sMoMvbah1aca9Rw)r^{9lng_QUt
zH55G3yPDg8Vz`}WOw)dxe6o(S@u4Yicy`OjNRVhbp%m~BW?F977<=O*X+AuIZL`&Q
zuEYvgRfFlS8*r5q0}t9@xKTrcpXHNAwseZ7<10K&`|bBzT3j>vLJ&|w7KCftesYq*
zEM|fGcw8;HH2|xVsD~tt6xCy69X9`v$oAt!k^gy-_06jhaLwZs?m`X{lo0n+uPB5L
z6c0tEEDZH*YG4=Tq~{!mP2$_;MBFx4J9ED(-1La`7L78u)xyGiP|L(Q#|34!y3<lT
zi!S7IkOH&HZS23byA|0$zJ)$?q*K#`N^CY)%`Gq_E;Z9RD^WcGFAlIi_x`jj=h6EY
z@W`3zX+FN?SwKk1-uxVug1sSEJ#gMx+v1-^U&#iy^=e+&2Vm$L-bQ*5U{pe9zM5C-
zU-t%bwH}mx8L%PspOy>?8Qf+*sEiVdK2|Vz#6eF6X4}i-+VA=0rCWx<wtU}rXACoT
zH*z*1%0YTlF^#%vZ%I}iw9)8dkmR?a>ck>GS+hwNYgIzR0LWSGL0QsV_bg0d4%?eK
z=s{E*QGM1>JqDLz9eh*Mk=QdFGbuTsH$VhH0C|bPzC{*d@A?%nmg$?AT<GWz@;Qx*
z4i1LydUiFKH%tQ*e-*3{-c-b3N8RZ$;ecD7JritC)y0JpM9EQERz~RN_MK0Tf0(F;
zABRcq_}MTz0}Ax~c5f#^2E^Xd%tR+hF8MU0D`LO*H44$ZPyx^45wmwQ;6S`%E>MiD
z5`I|^Ka4@SWoFfzjeL#7g#J6}1?NapNb`sezU9F{1=!L<DtJLXlM0q2WwCUd1vP_i
zta;DoE=Lh541A6=RPk|T1QJ%5+C~9J2%$NXr4QkqE3s3NEQ7A)H3MZ}#0VmrrDCic
zaz-O{EK?_UI*ff7Jv7uGi2s=Mn=Gx8O$ymjhEfo#w^st-(#J_yBs&}W0L)ScFU%Li
zqX_@dy0X}v$I}c4DbUM4#L1+K<}SH|eX1H8^i;q<+K5&i@?A@swgSJuol@VPt_rae
zX%U1W=u>Pf4tn4;ivgD|<N4sFNz7;^>8PkmUcYi$o?R!pU(9NQEQ~+_qBg><7oGi~
zW3D;MR{TvF>ks}vD;IUM8$(r@k|ETA&~s~?E9<NR{#K0oKD3CCY1ov9F0k|bGGl>*
z$jC>xo9OG)v_2>Io^%R>#E2x+963)6>?Gm}qxx!06}wI8bfR*qsJb=p(g+<IU+A7y
z`+B;=S+B&N#IUX0MpzL$>EhXTp1O2EdHRbUb7<-)nQCX5EX>N9fJ#1BE)5AgkPvfB
z&m~^9FYj9VumdM0km$6yNe<zv9ZwgN>|09hyiIrZ5fP+nk+Hi*&Lwy+2N|GUg1U4%
z9zNV19S%sus1DtThDq47d*;`||9@FRf4pdymh?bFHu;&ZzI~WKyN$n$a#f(30Eyp_
zKEuBZ1Nz7>OcXR7-PiFTJG|24Qp{QfxeZ=18uz%IU8|4zC5Mq%s=)rQcwum^jx5gL
zj4PT;<Z?3|j>Jpf;qNaKE^&JD5&4RlxK>|C^zF8wvwY#mtQ0Jr<fDyVSw1*VcBWM^
zzu(p+rP$^7oS5u=n3#+gtWA&n{wP$^H8-S5{pE+F0R-<|)Ii8pl5RYkv7+A+A&k45
zOIi<%q*P}xMfCD|c-_9DDn2~wl3sY(sB3qvnjRZk3cEIbC3ZCPC{6uYDe;bEv!}Q=
z28UtLI^AHt*K9u4X3P>uX0bl*Y<+KxqET?6D-r51+ormaYt0YrmVjj07jnR%Pa9mb
z9&~x4s%DOQr?}57^!5(#gg(r~y0A<GzQf2@0`3%z`(Y!H+;o%!G~f+g8d+(eurLrK
z`P^u@b(_F=HHBClO&ZT>pm6rng=Zmj5{atzGeY_NKF%~LBYj2u1K!yw@V9u7i2+Dm
zqE^jKroIWT;Z<FQqsZ^dnIYt#macAZx7FiE65#;20R?6K>iZob>D_Gz@jZs@GLYRp
zYG`;>H`^~9cu-aA!13-t>#=b{52=#F7vx-Gkrz)htsG^LbEl^xi=3J6i*UGR!quBb
zU$##CZfOIRGhBw6p}(B_h4%4rzd2i>jsZnhY^gVN7kpGe4sg%k`*%wMdwifdPFTd-
zgSX-b>U`T+ae~t*cCEjm(hym(7JVU`aX;h}wsL1{Eje-NDvmIf#%S%CvS}HmAk2h8
z${>TC<`ZV6a2=AcL}tI+tT<B8m~eVCeguCWy0S+mX_QHZL0uU7<{T7^&C(=hYp6zI
zNrOI!N^7f)p$j-ur%g@KEK!GiCaSmzM9Szt(;8u&XW6qBJ!tgK)x%G*Y*ZrVRbK;9
zmu^@_M<2&&*j}b^sRW8xe6mQ-TsE_OugK>zLHlrfh5F#eTm9^0A3Y$d{hVB%aNohk
zRFELE`v@n#u4g?rI~v&=jzFJEPB-`B1lKpGL3mrgyQ;~rl<(@RjLmbDB8Z~oc*CmP
z#-bF7;Rws&BHh`*)0l*qRCg4yTh4d-IFBaO&K8?xn$>M~JpbCx6Dl0XWi_dFOApk{
z^F+-!ZA%t*uWiXGEZA=U&MgrRZYwJPya){rurb_=zSkh~e5|4C7W&%AITaFv+Az#^
zZx+aI2#mXXS#rcj%jAazjDTfl0C$z#K@Xu6A-2^cyR0oeF|9-&2EDE4RY`y&D4Ae3
zt@r6i4!8+V((UqRBVr!6=M(>tkeQbK2&FcY#-j2Eyqsb2j?|B)68NgcMN?WwKAq}q
z@aepdH18GCLah+4c!Pwc$t7FzA^ET61IZ3c{cL!aIWDF%r=PDc@~EKnkemwB*KR}!
z5p@agZ#rSz5>m9P^_Mx!g542C4~J@E%k{f!!LMb2O)OVM^VT>tH`71*Y80i?PRel&
zC8eH6+pfxpwS3&i!45)ma7ztV%j&99Ca|TvYp@kR6AkAu#SK=aMn6dkwNqRe;LGzF
zC6>3bXQW$q6M<9yp5$H1N$AuK9zk$K;jpBBM>VGyxu6mb>UpXzw|BXxM1Cnew8Mhj
zQBs?)bm+TBDlos_j=cSg`406Zd+W@EOYU2tWH;?-FT^e)zsA!1TIj#3h;IDy638Gh
z2Ud5)JMDi0_lZXi*@qGRl8b1o#TuD24+#7}(zLs{gB0jp&(eXYF(Ku)y$Di53O>gn
z@MxjgmP_-XoTt<NfX&snwCF3c);?Z`L-_KD?Z9Gy9wt8}Jv!IDO@G#&HqPXeBg|&o
zOK#+FiG<!~Q}!g`s(7>XFh2FHfC`h|yqxu9524Jmk21?9PU;`>8oDStu3%nWap_gk
zVu~N(F{F|5nS-;-22Y+0xNq2^;}w%)j3g8TF`mgz7vb@aqru->mS60o!12Q*#9j)6
zkvfvIUoUiLC>M5st`m+tyvc_4P8u5K)19w7`pmX1+h-nnOP^nmb@Fe~XJWw1$u(_5
z+l6o7p_IY*zB7Z-Btz>tt8D3=-+jEX2R0=#20Et(f1-^BtNs9LK|OWK+}nLNLM-`B
z+QmLGHjCIfE-z;YdNZ^U;wCs;9p_U7uv55H!)T!k0htLLLug)dsCegVFNEmZ25Qwr
zZG;+BAc=t#Wmq)%n9m4JbEo33VHDt5fnQEOSEz(H44nf9@<zm<qvYQ+(OAn3n9R~M
z?5HzvCEr|Y+B1zm;B5705`&NK?{jr<C*>}_%pUILm$9<KyZ70iMga+K!i>wF^Ln8(
zMi48U|LQdGhM~8DyAr<TWjE%Y+BnaM+lhs`ig<3R)0gM^p2<$NBlCTJQ)M4;3+!iU
z1uH*jMVR=m^gCN&+LhO#a9}kQYuawM5ZO#zBP(fl;%^y4ju}|64#<3x32_jn`f7@~
zPXZs?ml>hwF^CQ<9N|1`YI#v7VMAU-XX(68x~G$CuB9GV<#Z}3wkZGG^m<^Cz>cw^
zZ?T^3px=(Xhnq|(OY8R?r+Y_ubj90|t&f|Y9R>fhJOrU*9OGYq3s-m2;U{<>hdicQ
z@qL012U-Ltmx&-UER*~LIp48~;~Vl@?MpR-Ekp?XR?1uJS3S!dCWblDEskt9!rM9=
zBc;T|RWk|?#9Jr-pgIUv&f5M7LzPb?;at<tY_)gH)m6-7IiAUR5&giglhveg-DBoX
z%-4xw1+M&e!ZZwQhEnt8w{9L~MupFcCtlm#mVtE?dz;xMh`c!|Z+sYq$+zmuAm0%A
zBq34Pqo~&_*#h~NSJ#Zl>Om6uZh09rT*CwPQ|`G9Bnyra3&Uj08y7^R@3Jd-^c{2*
zs2zIyf;hAlqtubX6WcNdP;2)z^;;MdX$hrd_?BIZyicIM1VQAhKng){c96-@Nioe4
zgco*{O6S_=@GN)_s5WCFP;dptAkK?4mH6+;Iz>rxSPRAA3VrcSOS3dVZXBx{R>vXl
zwlQ}s#lq|F-bydj9MJqGm^(*=?)UKH%dN<Q#ZA0FB0ov0D^dw?HLKgcsLJ{8Tdg~9
z*|40v{~rs4^7?*{9g)Zpj#1Yp*{s6ohPkn*@vY1~hAw}*(%y}2e_Vh6{T>S%T}Z{g
zwioxRjZbsSh|pci1#GC{#Q6hOmnm_5EB}y75Yoz!eym_n(F#9dc(ZAFmXF04_(eiV
zS89{Rh7C(_pUhcr#74cEQ9#^r)bAS;7h~(I(%KB04lyU1+?J2z^o~3Zvu=70fZ*aj
zEe_?xanBmbaNNf}9Lv?QadhiaffSQgJM;b%QWvcJLu1jxj!E}jr}%f=A=6YxWwxVK
zN4x`a-2Ct1s{0~&MQ$zAQo+}ip<%PDEQt%oB698IFGovMtK)AmeKlxPdRWT!bxgTX
zzuHQ<T<y{e4kGKD7U0U|<4A*2mPc)yd6iIx>*)fdf%<88m!_28!L!<LP<%l4E_nKq
zmgN~?Wko~aSK9B8wj-;}50LNSk^%E`*Myx$y?Y^?e9!}Vc#j@%$p`hIis#2$LBd|l
z-ntj}=!vi9LA{yB8;I3t_h?YyfbZW{(#xZv?-i$I)I2@9N9$PbK?9w2ZOgEId5mA(
zXVRsTJA2~z*b!W)BdM}!urd9BbGDWjo>!LMupQ)u=b&3_-ik7TT%h~Z1-nnVfDy+_
zU3_)H?o$_WLXdbC{nv*VN29U)h{<v|W8pUlHk!|y^A+VByJ>T|+wlMnU+(&uv9y+@
zbJKogWlGcHMVs_to(KNrkL(wRG80FU-(Xt_br$f{zpa={u4g*D)pl1jOWarmEe4Fu
z$qfyCW!T9Z7iLYp`q=ST<PW?RNc(>!VGpEWpb3;B3UdELj^tIYj=@%!I3pZ)Bs_m#
zJ3LGSOdvLh#Vi2o7XNyQ$)NlflPon3^6W&e_6zZcCFkzGfO<nMp-;LZ;>vXxK({U%
zqz3l&!l@8{Z@BUT_wjy}ou$=eickp93RJ%?K1PF~2Z&}La_1$MaFocH7=LoFL<8DH
z?SEwUquQNUexv~m{KRiC`2dZ1M}fu}R!d#C$pkjhiBUki5Ei94pa`J@7tgRR+I%ah
z$J&gCK$Ck{bxtvHO_^7vS)-RI4yu~@oP+ZgegBp(246qpm=E>Mxfmu>=Q~dSMklWQ
z^Zb+&8;ZBEckS|CV9tZ(dy0#7!f8PtGZuvbA4>_K;JuB3xsaqK@M#kLqvF#A;R=a0
z=e@DdDeBI9gZm^?WOD=QBSi~#a{CV%>(S2Pf8PI+{YVYArEGvTR2|OHMY+op9M|AZ
zFL3Ehn~O3V3wYo86KQDir!?qbTU;QJtf%N0<sv|Y*^F?ZeWV7%dX7d4tMZJaHjBUw
zdCQ__aghLhmmYN>Xc@q)W#_$l_Xpobsf95!xFj4wa5+jvAbyq>OVvV8k+V~ZzD-O~
zFTJei-I=*30fLlsbR57*R*y{M6W#WSI!^|l_*VLl+>f7sc4usRd;3ZBdjnIRZlG(3
z53Purhr09!ek*^wy8Lfnmp{o?7OygK3OLC$o=tt+#eF+xz)}vChLcg_iI3g3iGGjK
zUJSR|^g0%+J(WQ^;fRJIbh#rxCWe*H$=Fb7#nI#F{Du>*P$v}B+_aNH{VD6>H=VB9
z)o()&aZj!5jv8_-3CD-AVuIaj<>s^3sJ73?c1lXO=~u1~@S~Z)`hot!JWuQ{Y^HN{
zdgOt2;GY#-yOmAeo<skbCk$T56uG=$TWu{w5Kvz7H>{<n5`2u?LF*#6=67V>@T`lh
zBTzNfln%+C$Hjc`3V$x^o?PW>lD8ma$%JlTyR<?_D9~VH5zpF_nFx<T0lVuQ3u-Hh
zFZo7wQEDCTYbu$2rkHulPFS!0l<YdZ_y^~82y9kpc%%-(@Eh6#Wy+bgHwA<1E^;t4
zIz_%CG&I}fFL56#)87c#_S}$u9&z!lX<0&MpzGFbOW5a*!hOPIPCdIOZuPQ81}RGB
z5ZN1`&W|GdI$^6Fl(Q(#$9%LMwIHFqO$2%2ljKtsD`FhNB0+CS&W{&F;1ciJtBnO#
z?D0|RUt!oIR5kJ>c2TKFGHXVGMvsLn5CYg80Ztsp)pp~E-}_`oXOKW>b|v><jphO&
z)`UEVC`am<adPc4pBOXQ8gPf#<PNbolk~VJNEtq4Q$)7&o;yL~J_+$@kvwZe2p|~w
zqTnpGn$o5`AtmFa3%>-{Cpe*;NbJ<v_c18n&LzvF8>4?+8w%VWVqD^&8A%V5cYMfV
zx4*lcPPmRYI8a2K=+)uxL+sa)MG7d34;1TBD!>tMFg#`(qm3u4sM2wf$mHcIX*l7U
zzs!6%1y@JuVb}+~-S-)-qozyCHj(+Seq|DNP6(FG$RqR1na>(Xn4~8dC!HZBTJMj(
zcsls;@W-Ra>%uHN9^rkYY2&=8bCF$Zf;Xoqq11q!v~7f@DajS64TR7kTzFt`g!dP-
z8G2L@4k&iM_RgyURZAZk%b6-%U{Hr#=E&gv+NYk(>YZ-him-zH=1g0iaL4$O4o~va
z@h6rn$>)MC1)qf8^60`SP*d)Acz?iyEpMhK47Jeit;lK)AxBSNAdSAS(J{vPn{@7X
z#zX6UJg)-3sv%Wi;a1-N`H$beRS4YELR*MYi5tnnX@r#31^*f`W|q4_Wjc`B>swi0
zTKP<&Lj@Y$mk-lav%{^v)g5d7M>iAnG&n7YY8xkD&9R`U`KFq!r1c+yadY_89;RCL
zESFh@E>6oqno+khE)=RR5!r#fcGyLS9El}C?BrgfM#MjvA)WyJ#Q`3VQNv5xKokU&
zo@yBf+qrIC(5YdEX-Xb)m>pM9>?on8hPWb@9pz<5b)ZxwHd{_oj)l))D<pl+E(Nuq
z4hq5RtUsWgAL0fkl(R0_5#|UXaoyo#LwjfiivX8DQC!)TdND>?3D5k2z};%;RaR9c
z^85IF#6N&dp<nfL{An!a{MykLI8HCiv)~i~7bS&49j-Y(H8~dGe*~~ZPNY3ZOE*I|
zBE%ep5v<_b6@E+!a8^X1<41EYWgIH__IgFAAzX%f7EA`5cIohtasgijQ&Z7>@JU32
zU$hd9Wt&l2!}EA!VuS2!ZBrJQsYk^KFdjAHC*fEOoo`=^p5*OGe!u_vJKT4(vZxWC
zXrmR4otlEtjA&=?lXDq%=b!Fwh;}0N3TpqCX09XU?(ZLC7^X?scUoHp>|LB(VlI=3
z)4lGz*$dR{<&LMRo}9V_7&EpLv3~&42XvHE?t;N22`|Qj1TWv~0-06W9~;{t;FKcQ
z|A1F>7Xqdf@VqJVb|L>9#!cBe1cEdVa7WF#z-bYf5uuKk>8#1yP;y*ga3p!HL*Nx2
zk1ksH4Lw7QnTfb>EStR7@F8*tn~AbX3-}we8;joIM!oJ`0>H4V7URo?F0>5=X_mPp
zqO>8OHmP)GDceO#9J#+nl=5ou!J?XOa=Qrq+txo}iP~b~8r}Byn(g==nql1XtR+*`
zg;J&*f%;{`6r*S`IE7|fZw`xYm1wWXF7O!{BWq(LR%Tt324T($njPvCPLPw?9zLtW
zDg`$)TW#>LQ%X?6Q%Wn4NhiubjV7Lf+V!_(Y+Uo9{_J|m0*RH2@4$Y&cb;VLQ2x!d
z#N*=HoQQWkj;8zsCsq^h7-tn`FCeF5P$KxdY~JujzB{JV=mIK{2&Ax=RF{K9f=cG`
z)f=ZGu-)V$I-GzXSqjD$ySf|pfUlK7lqcNa0_ih}fNo8dwwQ@easUYII9hSplq7ep
z5-3$B$!RSh-dr+p!j4u2BPurMS2><BL?q8o$)1WV<29-tQoL+3$yUWkXCA{#yt_5T
z0J|BGv5hBEc7Yd{;A3$%K-A2W6gkwaltlHk1=Jhl;zGGD36^JRUezNa>{3j-ke@o#
zG)sCV#f>Xfh~C^LUUkh+v$J%3jbBq;{##h*(Pzt0PABgsIr;p@u6<7jaTj-{>*4~6
zf)FCC4(}Ja0bGVeLu_{jN@zhe7&OWfo&-NeONC~c5E6QL#D4-wm>KL%`md>+Vm~-P
z5d8H5<Vc|8jk7)pLmoPUA#Bl?n!&uq>&SzvJ`E_3uTH*Z*-w*qBR|jkD$ova>NU}K
z_{1)v3;8MOVS(PJl<QH!-llwT6Q_plVlH6o@lk?e)QLVYC(p;{nCsd76Ov`FS_><b
zmn(0#P*AdtOCAHGi^7%j?dXw<CNLL*NImQgqQ>m9U_HSCwie|nhqB=U4%%l1HGytE
z2!LEgSUjMc&B?G?@HRC~3S}C^!t%Su?&0rAysP+RZ6;yw_#@iP@JgjVVp84d8rh=+
zcgk7z(Y`%-i%%k1#hLHP>|ht_exS+bkilDfezl06Os^Obcuq<<vAw;b8+-+$Ej&B9
z8I()p_MD8A0?DSQv2uDN{>M=QmoRHH*oGt8QA0V7*i&5TO%IIho(YGKE5}6|;K{ZY
zZpB6K)6&@K30Fs#Cn(`p$f_lYF!B~&p}D}(9j~nBp6Z2Y)J?Zn>6SZo+}?2y>+mxZ
z_EVV`{fIl~ziI1w;~PJj{9$vFTVUT$+p(^Fr84_bl?rGbo7`@llW0nSC^U|fR2a@f
zP|yy(wM{z?RnK$EKSSMfBJFOtlM(GaN8B|R4eGBc`{pFC_!s<<_^sl}9a-$kDNmDp
z7OxONh41E-FNC$p6vo?+t3+UNM)k%aSQjQA8z}ly=ATG*GWlaA&9h+SU1bgP_81vg
zViF}oG)U`$o;&nrz))aC%FN9*yk$)<oLN|lMi9uth}UgG`%~sOHj_y()Ys^gag}4&
zpk}G}JgqsAh~%5jCT_4!ZH(Gh9xB^3{aC$3Ak_s;$Kb_eL~P^^W*H#q7mEvH!WytA
zQWVYnxttdCOOk!)Uy^;7C7!Tr5&z8Uj~mtH0=tnMpb?7FBTdsY5^c=IOx8iPM~OsJ
zw<MCIx^hB=5QK>2y9M&k<V7k^L;_$vU52Lna;^qsY8=6!HCFfbMufk3KwI}~M{LH_
zQcA!g<lQ+D^RdPVm*W0pg0-W`J>=OHuInffHzp!9*oQvfjmQdKVh{22c{UmR0-2xK
z!=_;DY{MT&A|zRG3~f)*sg9!PX_<%Oaf$LBmHBp2oZ-s?mnjv%W^0PXl=LnM1v0cD
z3k_#rDAH?m=CNOg@H&QZd}`io^56XZkzuDzVj3AeA)-{{c9j4X$B8ljY)gOJxNZK2
zaTI(Fl|em;Y6v#Huc>E0Y1U*=5~7;IolO}7!cTgEzL>_=n(7`_3K$mhUm_zD`U)+`
zU#P}&jAm02i+vUtsO*c4<g13vAs3~G%VMr6Dz+`S6^TJWL(TXU?rsTg2>}3%jP^F1
z;q8RX8GFUNZzpn?Y&_}s(nsjWU+To^$1T1=S+PAa_*<>e`Wz(A=F>XR;3KHBQ-gjg
zXn_4R(9Rhgjm{8!vGn^{Il-V1MNcpzu#ejh%+0M`5xv=+YC&(WX>s;zUZG@#iV`m3
z?M=X+qMS+j1|22eI~ChIc3`tfTi<EUhPffzCz;ec(OlX-E9I#}zYh|9kz&dhR@V}x
zZ=VahKDx<w%@l~baoytA`#U{QY`J^OB}UbeFY2u0&Jd~@`uy1&LkTSw+HSfngdQ2}
zzz{wg>DMjU;X6uhE;nsbDu)pgLWh6T$h#V~zfbn$?j_GFjGo}N73{DvMVRNOo;g&V
zs$(z56j?bT))Ov7{f5-QREu>pqB%pG4gTo0Tz|@3h)MlWJ~Aj#QrOPn$_h_jbJzP;
z2hOvF=2Fb*H{lU1vPx|o<i+Yd-~!GlnFC87D^S@3RU|t}JEVTPe?z#AM#N~+s&+Mi
z9rdkv9eY6nJ4Lk6B2z(n4XTOZUuPj2O}GAatBKlCw};J%lhcemVS8WkU#QyIUSUnh
z3J-95#ein;eC%P_)!xeb*FDcS)fADhqZyh0@EiEIxTUQh?|t{?`-9_kK}E$k62jK+
z$vcF5##UsjL6KGZ?b{PnpB5OACCtUW30Ibr+)vRT-vNp6m#CWZxPMJN5gw`t(91Cp
z+%!GOrt28c?H<>ZAkScb@ie|D4C~rg{>j+{(IvJ-*;5C^3(-hBjS*-nA$Y*Q!s@F}
zooC?(%D(Xk#R&1Mdx{5qGx1M|;$ag|bnp3Zq4kf+=33uH?R-~Wp%)QjN0|U?B12gJ
zqwQ!{dPR%Rdftt+BpS9A`Dlf7Afi-TVNJ}+X50clccu0((`w#Qik>H~7|J4u2wq^g
z|A(yQgQ$dh3bZ5xW|@2FGJ2qImdo~b7v@qIlNG3P{m$9VA_mVsc3GdE2F$W8vZ=|)
z460*oK^+D2S&SP0^hCjlpZK1<|MLrT&S-DKG2<P<rvjF(-?<Z(O)@z;;25$>uzWG0
zc;ny7XK-5hXkKL3i`i)RK&A!%qK@DnGh}t~k1_r3Sye92!c%AEJvaxEWzLcUpUhz}
z(=NrPz9xIG_9f|E!T__ytmoBz{mdi}eLgwEv-0r~|F!WiaDFn%83CMaes)HfjMtn%
zf=@gp9iv*=SGs1O?J@A}7rLdOV$D{CqE3>JQ2?eEC>8F%{N}g+^qY;}3`UGmf=12s
zlmZO7jT4M6LOV0?8t-&q@3d;-GirgnLptGsaB}8Pgf(F%C#(@lT#*YR`r(iC0376(
z8Jvv15!aomUE60D5ZzmcPma{W?qo1WbZO>c2fz-iYg*y9*{2LIA0#UFk{z|`+Ta4P
zKidc@dPafn+sVeSy?<G3%=e0WzkwUc5amMg_9o-y5fO1*)=W{H<_h$BDzYPG&8s6g
zFCMt;_{lsRIgaH6Y+fBf;D12}J4kE0_xxYk(~#2K^cDrirWWEjhimPUu%~0Bf0Be<
zt?Le>w;)#p1VlPTB``}d=x#n5N!H!#z<<yzFwv`yX1tr9esDWcX`&7+jY)?Hvx1fR
z5EUiiy1v?*rsybCF80ttH57-IPs<ay^yDf`3AcrmZW3+KuJQZjI@nSM%^Sf62Da!h
z5Azo#Q28S~1Y<%D&g8o=K@|&q{f&V*B_w?>LBW$J4_6e1_k1Y#mBcOrKS!Oj3^ehs
zj-@qTl<hoi+EqUCD=@L*K$zV9Wz~nF^$3yfQ}My}5(*JS4fQllk31JH^;l*%C@B^t
zUyvU(%Q44d%F%;nxrkA*Uqr7|t0^;~9kG*OlzHE@2Tb|wp(oGlaXQPm8g`&DQfD~|
z-p88PN74ID{J_nGcV&3Xj_wwh0R@s;{PQa~l|s5Ed{w2B2_ra_$TySIv78N$kF--K
z7)eELBWo0ZK-zW6drnUE6lqpSv=ZEQlWA5x740H*0-eF@7zAZm0C2kEgpjZIdkNjI
z&>QRII*1OdOE`XlVS)E7eMtU=45r~TE8GIk{Ycrkfk6}hT|lpR54&^Pay*?`TaM{a
z_e`JP4_rasn*L|JB{fFHpS`}6^}dyXc##(%z2y^3CM1g<^tuIG&>o2f#^6#z_`o`&
zl!v|oN+9RP?uQ+fQLOIxQ=N^*^Y&@+@Ho#F^}M_^TO?W|e&4^#8MbqtJ@CT;Bc=$H
ztIs1OnOH~x6?LN>a@pu-?{Y}5)eIklMaPh>v)L5RdOQ~nz4~vd^$DiEP2a=)Yr;6y
z!7U|1x@7;U+fwJSu?Eo%;9q-_kDYb{Y4KLmfz;(P9tlPF$e}Kkp-IC7th=CG5*8w5
zS)8;*C!_Jg4=9LE_QA<&!J)yRrN)18n7r3~7Mu{ij+24NS4TmViVPf1lGPa?X2@~M
z3&pxs{#f7eGX#P0oW0M<APu!8h+I$hC8-&4Mh<w0Bsi3C2<?iXS2?Fxy_n8D+Md*r
zeave{JjYs$YoVPwRRugAQK(wqPS%hYa?tKX-e6G?xe)KRHP4FX_2*(h)z(}yNfC(4
zxdL7%tqiCFYUt&yrJIoFH;M2@a|{tz_EuU+8U5*OF~wN1k0koZE$>}u!^)U}LP@%&
zzdS9u<)fHJ?_wggn$k1FGkQcC%U|HWYww^WL>k8t?<0gR%ocBAQf~18hSZbb0tsC0
z<zrUjL`HxxVsBysUM=i_p;fojshMMU{dg#@pP%>bQ0^E)3!x*THVJbg1@ukq@eR5m
z-=KZ;D4+_5GNDO;Agsd}&9izg@!FnFc-$mYZR~;8YJDw9C*6Hi*;q#B)ww(ojx(zW
zD30?UUOe@up5Ocd$Ct%MMF|0J`7_Cp!Ktgvv48kM=hF>DkM%tFKI`MZ)ls)+JZHi8
zlo{%K9q;>{IH~yV)8>pvcN&gHk+40nt^~Ju8ARoWUJfIB=2pNv`TXC@fmVG^xwL%>
zj&6n!!&asgzoIwGQVV2f9mocP*qJE&3dQs*GwU1xpQ)J^rBB)CbRAz2Sd$+WHtB!a
zMGE~lj3>JIQSw<t;d7c67cdmy!6{7y=Zv68Y~a<^ugs-ABtc6C^OYG(D?ysvk~kvD
zUXfkt#k-b}C%bn9uqWKnP&;hJRpa^8UwpXr*Q_C?eH{))3-Ut+!1kXFWbL$E9jA#w
z$IU{FFvFHi8#XL)*=F$#5Cy7i&FxPR-p3@9W*;%_OAhNnVv^{=$s{0`#>1xHGMhZ<
zw!1OQ*mWg)9{oOdXY18>$4x4RPfB3s`DmS=u3IwTr&}jRYiMU~IXbTWGGJeodXf8t
zy}WIW=S~Onx*zbBWZa+!P{*A-=_hlc55Jx6;6(FV?kDFw0bPIoadu-7N`Ij!+`{DD
z^A@Z1wqbhk)JMHIqomOXYUR9@9FI%0=QXqlBN@-ANw>ooM66un(^V!{Wp$ARaInh^
z90)Ha?6NaLsLphXse7=ZNx8r+_UA>3(>JG}Uvlxn)kme>gwy=Mw^9{5{-EXU5*=5u
zk~KouOwP*k3|-1dv}Ds<0O5-;xm3lO_{?m|Z~4!E^q+2zzIgiMNm*n+o(%NY{0i%<
zGW+bbTvYIL^u^<4kAg@lbMmgDSbMn>*##q6Upf4bm7~>_pAY{dIa*ymgNgq6=j5>0
zI|{5!G*JOD!6yOKzof26Ou|cyccXIJ*nh0_M_&w99<Mv&4OP4iC7&jjha2dUi%&xQ
z4pA;sP0l}L1-({#ab$zra6Or|-fGIBW=T(G3HrF&!zt=D{Giacf{%~i=kd;dN`UB;
z8L&l<#k(0}cA3&RoMF_o*j(L|3#Um`I>^@_fD8AuE2Bo@bFYQ@?L^Ao>&)X?g-0>a
zZ7t^cbd>p*G}rWvxX>IUHnnrWaj8|}BFA`+o|VNsqu5jXYGhvpW&>(0G^+Y@&kmlY
z(QTpQ9LG-gPp$)709h$1`&qR>gqtRzBWJk|7q45wYPW(i2K4wnDep*mrmhm=37Ac%
zPH*KnV~m+;)hnXyBT_D2rS)FGdm4CA3*nm;+jV>T-&P%ByJ{{>!Skr0eshQ3kI^b2
zr9)1S7{(lT=n$JBiti)Lv9{PVXF%2&X0H5q89^P!Zq>X*J#_=~=&z!C)CD<op@wJy
z3INV*L!IUOZoxflzDrAD_`sIXdUWI9b5BYG^1gr<8+4QS3cL<C750^G!dkCGtYgex
zeeCLiXz_Neei%^%RW!z4uQ>n<B;txbvKT18`jvYznwR@Lp!NnD<@$qGB-j8GuC<3g
z^$*EiK!2xYc~K|R{37$nyFijDB^=Nlv~x;C4|ja%zQ=XFoN0^~I*y>?ymYB8k-;F(
z8ldFam{JovKn7RIRVKLdsGUqvzyP)Yx>IB*W(JsDxVppSL{jhVzJBE@5mW@aLv#$6
zc*&fyoO3>(&o<ZB-`B`|j>hHXI%bJo<6bW}7hHv{V2xY`qF?n`^0J6fO99=^3*cF3
z2L0M?wH(5(Yv8HwfzI1tv$X`ZdjQ26X?}vyX(EMI$`F_8uOI$c{aF0C`0~k@zdc$%
z^9+Wm-_tk|f#S36xR#hoZksz`%NH?nmMtLx@=2myXpnr>Tr^Qw!=g<tMX@rSl&`rO
zTjH?@cgaO^(OoNeRa6yynU0%|D9++=^4`Go2!d10yJ+D(di&`D3lq|V@)>p*T^pcr
zxy3bzVL6KM<~)NZ?}K=5k}u4ADj+7_WgqPwz4uP35!1NI@0;GGH-2q8R>x1hU6A%Q
zBN@h%7!5h`YpVEJZpx5?D4k)+1f2_u*iiGIx|Z1eTb6RabuIl;@~XvaRlB9+Rg2$O
zZYkqc<Fy=jFXcTWAQawRRVbeieukqb_6&4<7&`Gu0T7hosS|Z(p0|cJ&;(+4y21}e
zITva7-d9)rx|s_dyE6=Y{JEK@33O$(cZ@Tuj{SjzC@d_O_I^(yU6{~Yk|@w36DqQT
zWY_^{#mZ^1LV4b~F5klyio!({N#nJ*63VTGq?l(9>8hM&gn0}neo^;a0(yQ+{-;ye
zby#FpPV;%zvv6ex>Q@Rw99Q`X<2Pa21leyN$nM<qG`01+Z%?k##nnvepeZ)DdQt{n
zu#LUwgQsuX{`FtMzr!z2%YH@=K+M%*d+c){&wZ9P3c9#;XFF^HD(1}o)&|jHrX|Rj
z6ewP67?8)B>Bcfz-Jnv4h8I+FTKF{eeRgBIOh3kDY>2Fsnp3!JTPcmn<Z?JmSR0pT
z#tw(Vr&ahk|KK?=)Ys-v@@L3xUQ(!^>if7Y^0`P)=ULTomBMycw=t=2vYPn%Uxa$*
z2qm0M8{?`(AxbLnpS~&U`HP&K64_EtL9M6dEBeBUkfrx#i%_7cHvUY>h1(IX*rQ0=
z;@0%F03_B8(CJ|ad&f4LAtLz>aq@;dm()9pV@dwyv>OK_lnVN;`*L*cG4bOK-4*7Q
ziT3{i!xZ4GAl_Q$bAJyB1q4$Zv5AiQM@srRNUup06r<Q}Wigc`;y!h_NhnX}k#fQZ
zTk!=wXKV&@JR}DH_A>%!(ueDJVR=!>575bG$&Q17E}yP2w!xsffeSjux-kh5(c^gk
zVCU_@F-je7sL=+Hg+_Bs^zHNScInIHwr|@BK}&6~cK-N~+Cq}iQs2SrgPoUmj0`8Z
z`Q@9P-#zE9bbpDn&54FyrStRAILq-hP1HKg{-C4c{X4qUS~2$1RNKbC?*?uhj@e_~
zBSMD`$zNG~gFRCyH^<-ZCfrk$#H>T>nQO|noN#k+PQ5xY$ItDd+Pa6XbQoz#Zv`84
zE(Pd@_p(eSZ=pB-?wS`A$H=iu1f85S+oS%j>ID0|s27z(%5>O_k{tuh?$;hYQWIOp
z$Ok8Tri8b_HzJ<;gP+2A4x9p#n_=?hlP97#h<O3!M67X`^emd<mwLu{5uBH@{+4KZ
z-SkcuqpEc=lGKd|P(;ZDgCv5kZu$^Y-^78662BO}8rlW733Ki)%}KjWmtS8<zC@k_
zbPZIfeq5-tk_@1zrnqvwy*GwzkOi;K|B`WdZIIL}g8bT9%*!A0$^1M_=fHLF=BC$m
zJX1Ffo&3u-9e9`{=r)wT<wyZu2i=m7fTsXOK)Sy_AJy~gX*Rl|*9??NYR!Z4SzR|i
zk2FaQ-|o5vYaBN=`gYfWYqxcEsYDQAoC8&tI+{mF(!H9~6mSMniqFsk#8r{=g#-yG
zPzU8=t4AKL3t5iPfiAT8dejAiS{D3^HCB8WI1m05b{=Yr15$uZ`foWd6G0rvYDD|A
zH)UGXOD>^NjOCw|updvR*8`r?w^=*13fTZ!!$+_K6pKUgR3?0+fy&fC)98%&-HK5p
zT;#~lKZnHD3&{CtpfgX+9O9rYPJN6}0TLyY?%8l~lWNHCt3zXQ4w0G3g1vihJSL|s
z|6OTtVAk-~MZLY~&%|A1so_YIMrJZ=mFfWKNp~$mPh@;}o2kDzEv6E4ra0wA4tqZR
zfCic52TJpysXY`uoh=X|_6#)@ZIzuOCOHKIb4rjCdP05%R~cDB8CC7V*Mhk~W-|;Q
z?wtZzJMU>YZr7cT2@T!d@22*aoxJoA*q){P;ssGeaNU)w`={jxH{022NC<EK2Atie
z$Al96+Y#d$#Xx~{Wh&j6_)ZUf8Z1KxH6<B^`HiP}R?HiesIUIOgHK{KO-yJzcw85*
zlrwY~k&_Pe6*^{3(A3X*fhO>G($~a7IM#tV7Lw%4F#(d;6|Y<12bi{V=rZ;Y$f6a(
z;i?j39gEt94xG#g>{AWxjKDqa)#>6aFV^ztZso~3atu{hExoj~(}z03+p21j{8{XM
zMt+XLY7v~Nmkvm>^+0HZ+mUQMX`rs{M!4GW-ImS;KYR^4_7ra5){7Abm<Tmy=SvRJ
zyw_w-6&u<N9-bYwqlVq8uqS7ICEm6_ozdR)r|Rx^!&ZcTP@jH@4qsNF8#`WbjM{*V
zSQ98HMxDC;%dA+$N|KbDeFd)=X8lX28}Ui<5P@ca@Bjk?noT`{;!oY%P5Nu7N>YJK
z@<leZh=ov@qP>a@4E)2}7!+aM{o}!bbmvg95b|MDi}6b}Q|LbqIfw_oPi<Nhf|dY3
z8St&nIox@ehQlPMe0u1v#-bksq=*lO&J6M+<d#>Ea!lb}mO7MY{oq4~fnpxA+EKa+
zza!lud;eQUFhxiDYMtG}MnJA<KlS5DGEC{Cc73|jkwR542P3jLHI~cw2Au?4f_ewe
z6c}@yT3vgAd(=4tB)#KT&%gT~5vbhEk3hT^cL(I?P4>wYqXW_E`i={~bD*c_7DBXx
zvt7fD`T=iNAToKCU<|u3bX<`SImGaQs=R<*AZiS(9hTR1fz-J@ZjR9JKNujMPWo%m
zRG6A}VW~tnfhDew`zSRHsHK5nsoEipk_Ivg5m(mLI7Ac&iNn3BgS4=`y0_q?aDf(l
z6kvFm<lh4!C7w;5Nz(OgbwP>nZVc6c$zSdNi2D0fFPA0fX68&Xgc>j{&+@U86Z67h
zN_%%g#1pRMrnvX*ry~4}Q(<(wdwjCN`i-mkvt4*DZ%4P`8a?8|`^@(Pz4the39)1i
zzf79QL-wj;;wVVOE;WLF7-ZHG50VL^*}8*gA-R6K{X{vtdSExV<h8|Q{)RWmD)$#%
zbUV|%gaCn_Fo!_PJh&0F_W|z(#fFMX9%2xH><pqTy>Lb_6{GytLd6~nRX#Zw;*5HW
zvh4N%2v0icbapcjgn>O8wfiW*-60KUy{$NG<t}UgEsG~Pc7qvPa{F%So`$NS7QVl!
zYKhHNidufRxoWA~WaZw^nA2jD$dg-aEx{MH`=n__(f-BXoh;__lB@^3zxr6wkU-FD
zUn(cI$vf;uKF@v++{#foT}Cm%q?Umgg$;f~ed#5GzLqvdSKkJ*MrbRMu5)Ll%lhGc
zyjb0Viqorwhsi@;#r`G!1R3{|$X5e4WDER;4^x&C<@Pf=da=|c=kBh+<lP4aCjU$U
z$Lv6u2#HEv`f`j1g>exrSQ)|qB~%qtv9iWu1rzeEpoqT$gpU8B&B{zKR`PyvIm7?<
z(X4z%aD}EHhZuQvq!YXormj$Zk5HcWfGZB&BKrchY|!#l>$HaOKK$&#_Zdt|)*_7a
zB>9~YTx*`R+)i0MRk?$xXvTv(%-`m=&@Z+naMMr~PnT<pirJo-lIH<GT;U~MX?`w+
zzVNCA;q&PI*RC%H7AR<0)qSRU*RJlqdv)4;<+f_`L!61PaaNw1uB_4H0C&?4;w$tT
za@|jo2lSs$i0g%^bd}ots(XG`Ra<jM6MXa<10{-oIxR~etqPRCwlQFuKXB{S05j4o
zzqL*ByYjtYe$6bE0P3)+N8vX~B#p``>^=nKfK#jSx*N5%_Udmoy-CGgsok4OJvhXz
zmNGpo6Pp6zR&-cP&7~i0UI_PaKQ+o-!)bpmC6-sle-8gsQ(Kdnm)YnBfNs?&RKS<C
zvV*Rv4ru5$=Gvs?^mw7?fkEEt8_aOHC<gde^KZz6V?JRaHyN~gSgM*3mh)Ux3Zdz6
z0{7UwtUeQxhyZV(q0@OLv^AIX@h<dOAan&j+-T4+=7fG|*n`%rv(9~FbYf>&vUT;_
zx58jFMzN_U>`zY`c$)MmjVA?s79dgg9;nOrTPaXMW93E%?btAsjtKKGfV{6G?~FA~
zL&aQ*bG!S@2lzWA8Vs(eHdBg3`t(E0o4MWBh=+#qY^>q&xzi_X$l7_kx09SzAkU$r
zbZpP%1RjwmHJ0vKYrD=F8_vkGjj3P@)f&_LKoQQLm`i}mjOsrs_|mU_<(~bi6_6=D
z*Wqo&-~JIB)ta}0SAR0E{<L-f<OAcB6Wxlw)T>2%@}@V4itgv6TaaHWLp{|8s0lr`
zMVU-$CG1=DY>FBvTu^QnKN{mR+*d*rJT?uxA$`g>EyJ4Q8$T!sPu9!9O=|v^EJQ-B
zqvd*p0R`lryV-D`se}Bhs(YXwxg2_mG$Y;AIZ|!NGKKe}(+g>o8Lh#2rx{EG1qNWB
zdGb?}KIio&*Fu{2HQ62nhr{xbeM}4E-n6_+D5}nsNIb<crSzovQVE{GbVBYlwvC{L
zlX7xxzS5fczkR`Jp<jcr3%2TnwgY2-sG-&r#Wt{L&{oh3T#c?dz;}1g0hMZ<1A4Q@
z|6Nx61%G}8J)idD5cB&sa!oLe`JqB<1to#B`6fh1eb?9MWv8FQ$8@i$hM^QgE8J$l
zF-$U1MxySataIk4dsQ|~=M-Kd?@lD!?Gt@KE@hjJU_GUy)R&(Fyel`JJo!g)F7aKl
z<GAlg_HZ@)aN+?0S9Vf<T;r_(HT1?DHM#~*UH_vF16}1>K`6ByHC=6Vc4^5FHTP_3
zRAmSryhFI~aKjADD`qGz(+aKm)9e(j3QrPSLKB7rL>I4(d5Osw9NpfO7=h-e{>f5<
z24aV8huoj?$G~Sbc-RK}2G3Z>2D@z=nazh8LVNLU!ad~n)SzSY$YC6)?a_H^iUX;b
zO69ygaAfF(`tYOkpLIO2x6R`b?+kOX{?+&GNjaaFm%n`L^7Vb!){SL-{@n3M=+W=&
zzab+<By!t*!orn#PdnVa--zDRKH1hi_tY2s^2oD7#$Abk)3Hv3bKuTROuAf$I)wht
ze8+ef?K)&P|7au`*H=vv!Q?HrfDT-Kaqa(0SXE@3FbR-<qS|ynN28#4vt-N3)6a2=
zZuvY+iS2@u?2vFD!Z!T4cAlZ(97Qtbf}N|tBPHl3&*0zbtj=2JhAL{UB!crS_U-QQ
z)3DW2NVbS?r>&6e6F(zvTM$?s>3k5!Fh5hM+<N(5<|h|x%I&x`_1+ZVgu;~;qqQE8
zhUK~uxygHQsEdrQ3bc{uEJq?62J$oAzA%z}l#OH{R1uAg5`ExLdh|m!9ha9*Xd?^u
zd0ACCIaKPV^)>`{3KuzA!!`un*cCr5*?${dCeoV4;!Uv-Y>bk(+1i*e%xu~f&S63x
zlTH?-&{+EFOK2CdD5nItmZcapBBHoDS~^)c`SnQf%V|WmFrl#E>U#e|@d8c$X_R2j
z(jr;R+~oXCqJI3AX^VedPkskOF8oXr%|d{Y6c(!>9$jl2BEDHk9tbYOFK1_{#hV3J
zxw@upbCG2;o}j$QFUg^v1hBM5G&dl5@P~NIXU34h<gmr`Df0Nxm-?eArHr0^&39$+
znjV=le`;3oCq@BCD~^+hUgzJ)i=ntCN!W`zxb@qJ%OEVgk6{{w7%2}>>ZRC?upIZ_
zlrvW*JnIcwiZ|+}ryUI(hzcewY%gYV$8qf-*?T^1tc;<Mwxplh$9?y4P#1SL;U4h&
zu$vMk)H%8Meh?Nmlg1CaCXL^kDKOu6Ou@NX>qd_b{7N&$=_*G8uP^u97~)k2;@|2N
zxwpX-otpWH*5rWhqNicgG+$Q7Eh)X)j@vi<ii+jgKmSXR>RP@Vo$xxKKQA6`p4&NZ
zCPd&OkIv)SbTPi@w?+r{ii7iBVyE|@I(t5?^#+n({`Gz}Hm~KEfBmeSUF%Ew+rQ#)
zt!;`rq4)lQ{hq{0Q_4J{sX)N?F<fAoki<GI^7*x=34Z~q{CZ*2miN&?JgWk>OpYnP
z;T7EyI~>Mv%{Z*!pqxRWl_x7L@4g}4yZM@>6ZrB6i34kW&tG>GVcy9b8)G<QriCY%
zZ!)hnW00|e`#Tfugoz|hjC}D^a-feK@iPL|^0zj}vNgbX>7HfOXs%54<*sKTd!JT+
z$m@{I2yv!?er;ZGFa*B{P)VKP$W}?_MEd|$!kr}>+0@&MhE;CeJK#V=N)tc3L5Ks-
zBQi^oQjs#bH-Mt=+qqD?`C#@-{SrBH3Z+ykRZb^{b6`~<InI*KEd~`K9bRM+h*TrP
zM8r&yh5Oyw1W!Jk(8pTo{$Mn#G8AVIN~f9F@}DrZ@*lxsPoVj#H=sqKaaB3`>`Y}K
zISnC)k)WlUYs6t*;_97nu<FD&!1T^FfL*kW1jrYpH>KmX0BVJaruh28>Serc8pS2K
zNEkgWpSu(%(bRe>3!OL@uH@FKu~glE6U~g973pKkv@C}=fUBxy4w^5{Vf80&=~)c|
zwG!@Kk2iwZ!}k*gK>nGOWbsU$Hx)jHUT4$ON3A;>ceNZwobuF35iT;x<rgH<R||_S
z@q~*a|MSApOVJnT87Q(VOsPaCZ<6$BRVD+SaD)nTkjdI?6csfQ5<C~+V*b?l=^I_$
zPca|o;*MF_wH0uhjsa~cCAxqS0x<Ojz4Ln-=)rk_y<+y>AOI`Qhp>}fN=(W`1l9Z@
zC)wgan2kML>i`W@j&3%My4K`V4x!Q`iJabAj?tw;;(??Z=NH;l0%SM=Wde$*&6O4L
z^bHuBBs|i{EEt+fIOSL8C7lh!hByNmMGnxTz7Mx>R!7eL?jwG`E0d4bwrn|2-%nh&
z6^}i&_xxY@TEVbW>Km67Cv~~Sk+R^2nsKUeS7TLcP%cMQ)LP(8i{5<X^l1`_Y<Le7
z^E&6o86lPNWE_Jq@>vX!i-ili&$A<>0o5Bo8JOqk4+3VOJUxZYAY6jvB9OPNWl|;a
z8dO1!QQW<iflU|CGL5luvAJF_9V&yySp?o@VH_hbJx@Gc-1pcDp=VbhFh7bn#xy%i
z$JcIi$c=#f9;J{wBmKb|g{$QA<$Dd-HfWH{KGVqfw0uiid%aNvF_*YVWYH5|a6)zG
zTOpZgEH5d&kV|H5l%Nu5P&W_B<@DjaVD9Rwo$~?_S!A~8q!XFO8+n%2^>RCz5Ya&?
zouL7Gi69dMHS*nnHKMQIZB@3*Ac3qSdPWgNJiaS$J1aX$$$0ZV*2?)zQ0IDzmV+d%
zV>o_>{CG}@3%J*S4oYkl=(yjhuM4b@s+B6$kHxFgCfS@2dv#-sNlaa{<YQJzR&I``
z{^)L6_8p<%efHT&C;50@R@W-KK+`$%Yjmz2!*oi#qw8)c9yj22rCfA9*i~Ru5OEIF
z$rb)eCiijQPPrp)PdpsTKBjRdzTc;Mm3s_&t|=mMzZ!59x#x`6X7?6uTw{0Nje(RL
z2;aAF(IqR+f6^Xpy?5{KaJ&OM7SDFiEncYLa1B20+kS*Ar;2;Wr*`V0L*8=*C}Fl@
zQGkpHpspv2+Bk|bi%LABUa_do6&){0?2Oec*F2sfB%}^yiH9!7K@Xv6T--IFHcGTj
z=^_}H)_B2?kE20DnO=unESk|y^N$=^smL+dE@l9co?NT+gM^{V?nfp4iZ*tfconf}
zc6-IE>5qBNR=)172GkW6e6=U>uv?}|l1|afsrJ0F)4QlX=9aR`d0=U_PY0jeNj^Hr
z^1Tmw=ahZgoCU|dF=r2&v`?9}_G!EI;I?z<%&-vTevCPm6DkoV_$o*+;mtZirCPzb
zHHE?`GTIe6f{B9bGOwL+4KFK3j+cu{5?f!3Fbd<N&n>u7eGbI%0vI+NJj&IVdExjf
zj=yNKpkG<#rpYqBPBuDM16-*n_t(i{h8}AE`bZPR-bC|UtTLQxY>hyAdW9-Xd%u4V
zJ>93X<^vZO?+3T)>^+-}cUIW>=k<SKoXcdIUV%8yl<g7({tsC_8nwt8T|==QZVo5;
zt4JAsme<^PW8q>4s55f(8i9_fgs#%6;2lMG1!5M}^Kv$`I5W6a=e%o6Ht_k_lThMB
zaFuR(qa_w(W0>^bh^0_<AND--hRHvN0TV%RNwBwKwS!|r<&MIO4VWUM8(Z#Bb97HG
z_a!v<-S@K&_of!R*PUo@VRvHQAuvZTg|LTW8ugI8Amx9R%oeC9Y&+7q>J9rO>AM`$
zlt4KfB$EZxpvB3YQU|bh0Xh*H6NHjG9h*`LmtnF>Q4xUKuu$A3XsawNqarn{uqJh)
z>_z#y=A6TWU15^l61%7j1%c90q9#lPNll5Js~(y3TK;_NmJRlYyN_CB{OG8!HqW7t
zoqmxQ?C);{&z@r2wefN+;W#hU{I#Rzo#Jw63~uV_;!)T-!wS6p`Q9HZ;LjO4K_fP?
zL!Cn+>vskvVWW!=3J{;kcO|WP+BF+uXi@-<G&#u;LIG=@;cj)w<5rZwt{CG)pPXA}
zso1DoX9hC4CqAS==eAXcWDQF9rtB_*t8DXaj3}Eh)Zl8;kIb*oEAqK|n)L9$6uk15
z+@Cs^=+IS-z%phmPo3Inb!GN(1*%$k0{`tKO`#?I6ZTJJy8nzd9Lf;yJwgi`PSlh1
z`9wGrf)cKuv#MOoU@M|qQ!OBTd=H8%d?V;WzUd93sILweUV~b?<Bg>1X&W7XAXk(y
z@(OVoOU?q4T(9}FL)1Vw9n9m|SyuJMb+8w}cPd(EX(889%~y^|h?)!~v^p^25u}5L
z<dh;KBDA+~f^d?N$ex$eiE^bn6x~t%MtWBZz;>d*?gM0~Ol;pV8kWCBlZxMq0k6g8
z^Cw~AQ4@W|`X^CfI(veQMFZn$c?9|&`FEGmK(k=auV?ImMwK4yde2lSe(;uZ35VWZ
z+SE;QS|qPH!IL-3aP#c!6@JJKQnXfm13lSDUgiu4;|zI<V>&;F9d~xlP%d^PRaV?u
z=a;|%^4&MZy8A#m3%T!oxJv0^5K&RBK!Fc-O>0V(=wnuF45=d)m>P{Y1oq$%b)lHV
z-6*jvP}qZS>Azp{&c1@GF#;_IVTJ&ARj{YB7)oAjfM_?Ou~0v@-0LstHDZmyzr#X-
z*RN|tDh<+R^0N`nFC~XVCU_$P4WYq0$Me&o9}Q*5<B!lFLM#dURim`Dg^yQP!>m<q
zBDAB~$N4_6U5K#l3;3zvpSG9@2Gd$|Zp9ut&J9^*#~34fEE@OiWc{nr7f-)lKii5@
zA_ZmuXHrtY<{&)s7vmD$f4{Z@Kx3|={SLGt@h)@k#r<pO(VpwzwfBrN&XBf1(+l!X
z4d2C<xWcAeWUEsocj*~rV|OUja>_I<0<z@KT-PPpBL6lM0V3Op7+^#9E>?RJj1l29
z+Np^==xBP;R__=rkTLOhegYhTQ{oQMfq;Ytyscg6xm5DZ33OV?3~!`4ZewZ+W!$}j
zgd54K$$nmnT(AG#L&q;_a+r7~I`E<k7OLSt*XcE9unUoG3Hf!y3waZ+FNXd`?w8Nw
z_m7P{evKLRp9O$TnlJ@rAQJyMcRkxT$gVoeKW0;TK+HvmrW|gOR#@c*&Uq4kL<z~e
zk<a5KDof#O+LSVk1IBQVYIqG?&@hR%hr=@tHbhI#J(P!;1rx{_Lzu)BgEr!y7qFRZ
zIaRfjZj7W8AV2Eq9^?Y`u_Bm4SaQ21EI5i&JPJta>v1BXk3=i8lQp-|(562I1`^H&
zua{&bMv2mi#7s<c;vLQ@SZB!96=h}kJTwr5ngZI@z^Oe-%#<;UCKSm0_!IoV&j~Qo
zk{R{Y@XH_2)9%j<JsCN?K<B|_x1{|r#DkLb6??b)j2Nnx`+cH26F+Wj$tAb7rNmLN
zJp+Np4kY_?KOgXM_ehI3U8*fKc{)6Nm;c@88ij2z#9XE52?#>M(0Nsg#Shxa>bcZJ
zm?4^^i;@+mb&atMjufc(BHLDFld?#oE@M)c9s+W5atYd%PO`2g)v%|unsCN;JV<iG
zijD}Y@{XXjW;dT-&JG-W07nq37aCp$lTyJsT`W0pse8|V%dRTIe29%#O!${*3iS~2
z5*6qDTM<-1;s7;0n{g&fdIoNQz3*7JW)!4i^IFo*TL+W`UDvE*qKvZ=z`uFLcz-kJ
zVAoQKmmEX?KW@IMAXyUvBXiY~B}A%n8aehUQ($q}WMgt5@k9b$bjBD2I<#<}QjPJF
zu-za^CS;iMq)+lw!bF{``64~5+a|8ltJ4=<4&oOd_Z!@X+ctySijv>FFKQiDXe;3f
z;ltuiho3YVW}hCosT#D6h$GF<Wl-$0XzbORpH@}%BrkgUE;b{xP|krbV!j$qc80>W
z%`zo;cjJEWegB{f-*y#+u231&xW_%|#e~MKZ+i|2`PP&uRNlcL_Y@qGG?b-B>o9I-
zFcISbN?rsNN0QmalI`3=``8Ct!WStC3NaIKaQNd~!lP8rZK@FCwr@@Vo*X5f8&CP7
zOfon|<N5MZD;GthbpR%R^cUCT;6fs3Xmct&_Gl0+EfLU7E=%5Xbg>DU7S)`2(uk^N
zZR%#S;o_#_`%uooi=4fe<vL?;1WH_tDLrMbkl-LAYh9Zixu@x|QkcyM;yqFxy6u;o
z<N!OjvE#Qo^4@!S!=DLU6+W~-&=?6G#hzOK&A<g;3&GMv7|U@qw=9+z-QS2lI4Vb%
zP1P~;2l<4ZPcU10S*6vr!_JUPwje(vmDy@h-dCy?lzJwM*%Yy)nEn$30wk@E?p0+7
zij;j!(HUgGzB0W-tpBLzsaELXO=$0pOsURu@nn%t=R@osZWPt~mE#4e_v%s^aAHn~
zY0BB16p63XXsS9;(i#q(dJ}CEbJdGFR~Z#Jmi17h{|g2>(B<fS5@DZWKix4-*t8zn
zDEaW}{mK?~n<5GA9b|V9y|1~c)lvu7^@6NSdF|H&2^_nz5xfr!G^--$VLJXwJe*1Q
zPfBT9@FCKZ8g|^=<3qr#nB$Jf18t{YA5{GN$*>cjLFt50@Sj*s7G3O)bqt=nn1!Z1
zs4@M<GW18B>OT#vuTtn78hAg$DoQ=jR#ncb95(tW`L?`59P}Zt1iC`_7JzyDkTt@f
zprTw?C@0rc*m6Mr7gG*|si!za2xF=Y6uVUI;r&uvs7V<1KDscLi>hIv_xAxSiJWhN
z@&qiHM1`X4JZ<0wz6R#29X~_BAWB_aA$x{J%VTb1n`sQrhfI#r7+f2UkmOs@iy!I?
zqxI-5>~F|uoag})?h3KyIo(U7RdIwrp0HbLiDkUTB>t&$8Sbn#s;{HBt<{=hk%!3d
z;;nA4*<3^4MHW?QfrSlYqlbzR-P42^aeaNJeWIvvOto4?*a09AE69O&pdn1Go0G~s
z2@n0sG3{e;RIRKj2MZao^fVJG$2brx*9Bs>#^YFqW7%ykQXZbLRhv^DIG<zaQ9Xly
zUBcPTXU?sKI5}bk*?mSxF^>Mkr@0(C@lX;qKiT>;ww$yd8EKf+V_2C!*_CAIW;M|^
z6^&yQ=-HKXC(xtyeN7HQ-;|32@5s?;gk-LA`SG%(j}#9?^0fgBZJcuO08I><<FuZ7
zak9qx#uROk>G*mmQ6g8F=*WZsSJ)H?+>cDZxpAv_)eh-3WgyBUvBUKK8J(-QKsx)P
zn(<;nV@}K@P=Z|CN9gr(!OK{AfzgjGtE#eck*~fstthxo_(I3oBMqbQ7uXWpF=?9n
zd(R(n3S7zNy}Iq@!}O48Ma(KA^1e{T+vK%wg_fK7HQhV`4QVL0+ni;n*X9leCO@yw
zNxT*zNa@NXpJUVz-Hgnt1iFBmwgi=_xiyCN9v5B^t-Rz}iAK<js1xowiCm78M|#;i
z4dBEj2=_`Mfv!MMLHEmAQ@>Dj=ZH>=@tQ`WYh9h5?eD9y#VKrvcIGC@B^2U;DGZn7
zTY<Gz#tY^Ob#fH}|J9nSd-ib@xPUh9hkGqo%aw8CT}JxRd+!1$HhnL99mA~r<@txX
zwoWG*=Iw3PfN%6^TzFy$6{*LwI@&#0>#h1~YnMtL`+jg<mGk*D>$lX_6>DvD(sE<_
z=z-Wpl!g2%t<S{?0!Kh=LxbS01xq_YF~2MrMjq2@s&sKc1fRDt$wV8YjSZoE6W}3h
zX{cVzK<=8iyQSF-#eNDgWt&Sv9OqQ@#rnaKZCM|08)@cE)cMuW)+r<7xY-^hJJs33
zhaOWn!ACY~pdwaufu{mx%+57j<;3KQ?ewX5VSG7GxCbcC*z%Ny;P4bK^X)I6JUQa9
zc>KA@iZP~yPA>Ojm|Wk+6(Ke@`f|G^nM~k*^9AW;7V~^M(lN%ya5c%%Azu`v=aD!E
zx<KlrpN-B&$(PyXpe^UZjl)rpuTF?V!%E|6VI*KSk?Mcg4_zpf+!y@-T-?zd)_u14
zgt$4Rc^6ezA>Dtt9X_z`!M+!}taRAIL_bQdY`SCt#Cj59$rYh+yX*}BDyYN+Pb;-}
ziYP=%575s~^avx;?+?6@_XF{4gsICGJ!gb1B4`5XEPT+Gyl`%HUY`Tc-JT4wS_wx0
zYl68nDl!(eK}Sn3_&WTgEKZSXtG1dgQfnD!Ahp)PH?Pu<FEd%1wy&Jc96zF*3c)@I
z5qdS9au@?nseb8uQrRg~FqIq?2Z#p<6#JE9%Sio7`X#l`5(7Yamhr$;lzm1FTx8st
zkVb{U<Hex@*vdHPuprM&$q~T;m*XC!Oo`+Ghh0hwW@4S?v3v7erXTam#U;9SVPXi!
z2+|}NT(`gVrc$zXi3w}zZ<iV~<W)aqo87f#{6>R^(1Y!@4f-#uao09Fb2`@T`s4Q8
zj^1~sZK+!qdbP*VPz1u_(-y{FRYQUyZ!5X}tKy`dZLOa{k)#)9q;MkQ*EH+OL*U=r
z?&X#~<GIM&lT`5gmZU>OCG9oVS3gm`O$N*-@S3+@Wz5!MmZG{|%TKSn_Ku_*qy)!x
zP3=7#IxhkMx9JDSlh4}xW%Ru#vyZ)q|CQV}bz-w~Mo95QomecTDn!DpS9?Ky$m&yc
znJ9=;p2_ifilG&#WZ-P#2K;eE;g$XMA19C3CHRSJ<tAzi2^owYILjAsv4a5Aolq}l
zcg$gO0ssG!eMgp3{1i5bU}mK`S)2Ut(mRmV?XGVrXR@#6P(3^c`G=D8C3Q8%pQP^q
z-eD4EvD;@4<`?+JmwA2iUUJXAnF3?^n#fZ>;qTestN<dEO`={;CLvmU8hUoR15Of*
zNo|{wvD7OAVaYaj+0m9C_|_y^ISsUcfnz6p{AKX*<I!bSVR}wq%P^|I19pA0Kxb8Q
z*v7F@HA6lWvnpG|=vgw1mGzu{FxOU#WO?oHGJ!zgG!$eS&;WNGwM?fD8)nZvi%x@E
z6qq>r8<B&W-|<ubExl<jwhfzVsTuJ`TdJnVzV1+WX4WUvo4I^Pv<oRCua-Q_j|5iO
z?_G47br3SLb(5o!dmq@-FYp?<AkSuf?_0n43g6%#(hV`N<lGJS#o>jR6>D}jw(aNK
zI=?|Ebf%QOz@I4?(CC<0tv2K`yNP|t0PrA~nvJ8O=?iuR=ApJrXnc}Wb2JoWxEgE1
zWkUi;L8Z@g|8$a9`n1sv;|smnEI|X2GDx+hn%boXrRBOrq6kfd=|Qpli1b~D{K4wV
z8tmbf<Vf`e?f0ebg&;M|GoOQxRcKZT_}6rKhPU%_QmS={6j`W*hN@;$xM@hm+Po=o
zyLUT6bNWWTD&E8YH|~s@x<W)AMC8_cqkR5xF6XLi=H-6bWiCE8={IhlF3)Ro{je)s
za0!+4X4&oqtc*>QNN9B@3h(xcQ(XkjX~r>r=Wk5|_EMKqQ5CCV7Fsv%p9{&4CgGK6
zzvloUblL^>C!a{(UaXE6^;s$jMaZ1Mx+UVcdN|BA;v9NTGv)A@Sb;)v4A+*hhybr#
zsQQUuNQec9_UThennc~lxvOJ6+OlUBLXM-QV3hMSB9U!OHZKK|K{?*W6##YeqMfr&
zwx<~I$Cu^wtgPUsy!1RW*Ee#jZhb>!A4q(KH<!IE(~0w`6wA5?+Mq4wg_?}*J~9<7
z78oxN?EvhDD9`S9r3>G3ni=%W%c>7qwMN*B<R0Kkaomr0=EW3rwC5MqI14>+9|6-^
z*E7m@6ioUfO7&=Q0iH4LV=CPDT5^$HOH=CqAYg=5dF31>1aMmYqs?;U>L#I|xhS~F
zqSA0Op2Yl=8?6;h#K!#2vI>_7^ZJp(o+n{BN+gSyZ*XLT-Sx7OO_u4?VG?{pwh=2F
zNeuOF>G`lVw$iBGfvkXQiq$C#<N&5LK#lfKP3x2Nx$r=uosoyr?>xgw4u?dm1{Bo{
z+p9v&D)d)E!$-;9yhl{NE(@5MYlnE`0;w5loxD%5D9{_WX)09sl}%mL7x$cGepM#n
zcm|tNVS@4fKv4AVH#oWJ@MQ3l7E4&TK7iYK%Ri&vL`m^L3k$QB*5lq$pJ>>|2D%l{
zUtcmBq)XX@`<%b0jXSXKl0+`!I~oMxEvxeJ+9dN$e(9S0GHmj;20NOQ$5CrMzC`w0
zio6v6d2*Ea25;n#Zxj;W0CCK*7mm*8UQr{pI2JKY7c6)+=+|s#9BRmZCh@3*JSIM5
zXj@C!uaPcRIe{9)fQLCvWH5XJ6gaKCl6pNYkPE~?f>N)Th7jb5Msu69EaCZ5)psS?
zy7t6K2IM@;E@2oSDK#I(UPuham8XZ76oy&r=FT)9IRf0HIaBK1_{~4k6@iXBwVdc|
zToz<eBW*@#zo78gs}z&1;?aT&S>TdM1~YUB>Xt63nWyyH#FV5pnmD;>>`8Bc6IiZf
zdpo4rO1sd7jX;|a41xFxYN@6AS}+bQUBu7&fou#D=Vb$*^!(#6xh6gj_YGfQ-r*~}
z!}U3?_YR3Jq<Kw&Cr|Y@v}L~WWln4v=QHW#DiWZkUVd_JtF;JeUUbrKBUm){<B<0k
zUbyP8xpXZrzlmO|TN@LMk6&FUPcZ;%Gx_-SwWLIUqIIxZ$dLw{pj_29ST#^;&a{IR
z0P3JGHj}lvQjH+N__FJ}qZCr;+CMwdXVT7X{k-Wg6T;@%&0tH8bJA}+Z%;K;_W6_&
zpFwHe*YGkX-NHaC_>QrPZrg$GOtK%3#7!xJH82PE01-+Oe=zziJ9ZjuS`1D8FTQb4
z(F~?CmK2$@7`w9Sw&M}%4t%K<xq@wpt?(pZXfn>Ki%7o5?*C8N;EtC*$Rsj}^7VLJ
z02{tnGfsiKHHrFq@lJ6JoRR#dUA?+f<!MKL)M<K>xeS{WZq3r6#;kSfPqj>!Tor=G
zW66@bvE7!qm|l6rPE5pVyt&t$d)l-tXO;yRk{1!@6~f1Tq7Z~GF`bATjjsnCok=hn
zv{+V<D<3!9*aCiBB@me!<4iAZ_B0>0XF1`uS3kKD^+C>dd3?=3jPXPw)rSOD<wLY2
zDrHn0oQJT;==gPBF%}#86QPqAn*wWv$~w<#%5^kDOr@-5rr`bmSY*|;b8n=?w(Q<$
z++qig)-mYV{M<OrN_;e?=pm-TyTE^u>=nF<#H)BdC*%m#{qi!c&~FV>_Q?A+lp$GO
zVLp!2z8U5N=YqCBdszn>bIXW)4d-43N=o~R>$Z&nmd=Uxd{hSk-+n+t{~b`A?d=t~
zA6MXL<9{>qJtJHf<kI!05+6NENHBB<9Qx`QBw>TeoG&1%-4+FXYkj6T{g)0io-p2F
ztE6ew?-2Kg`_DDfnHy1EJKBHsH#F~d-Qd{Iz4fLJ8xFkiT4$Ha!}QXB2kqWH*1M)!
zAgVEkhth^151M-ZnasxQUBFIx2PKE7dM`bW9%Wq>3aob+oOKV=5;s$wXK8Vh9I`9N
zHpR>wsmYQto@rp&L^u{^{<DvHJ$JUsgx{e!1!P|!q#Dxwpv!aVa4f0c*d2+Gbspql
z6kjhd)qAmN=N=|J(xGq4Ts}-hTY&JbQvuUVM^l@o8Fv%iMtSY^#%5#pC^Ekd69?aE
zoCDeLkdoql%R9n#8ZH`!ij<8LkugF}iHhkHqzPa7QZ7Zd)(Nlqh`K(?Y36j&{Pz=+
zL7Gse*s%-tlG^xi@3`ojz;^5?3kw9175TPhKn1#6r=!>>mbZb`r3Fx=ZMrG#8h;w(
zyeTF7yRbm7@M{Alzr$KDu~CDJi|y8!AMgS_BxRhe9YDP^HT%@v&%8y#<<spfS*E0m
z!=(4b#6vsvtp@8G#BJ!-pD>1!-0QF1EG%2%&aL9FzFP^Y4)zWm_CaJvGas4=)jHfh
z5gJg~+!IQT!v4M@VEJoWA(4Y?rn_mMty4OH#vEj8WE4Z}M%NV=j~EV2czfC=mHUoA
zQWIfx)*F#8KY0PMZ8Id-883|vgw2G9o~)Tm7!%p5hAiliUxKv_*Rv-L2+_pt8?$D9
z6`=(_kIr|<ZS;KxV30nqxgGB?)`CH`Zob?0o{7eecT}>mWgcS}?_MomxMP*V%up@k
zla&IVG8|cJ51-gZZ(TsQdd(g_2?*KSMd9h!$u(VStbU+aAI`nX)~L4`=E98RAeRY;
zuR@20p4QjJSb=cn8Nru&;5wnr?lUCJdSf}#tZ!q<tI1gHNbmuVLOGlM7*6Vict(9j
zKhM7vZ}nH?Z+OC5xf~sr=XXAt&*5$J4Ge9E?G&c+pKjVxFMEg}uSKT_PZf*S1fvA!
zyST>i%(HG83W>PHa0_*mL~o&?5n2>5AwlBE(4+(VnAPud4h8V2r*ofY*Q2c{Rv;U6
z>vOa(uUSL`iq6AB0itbDE^5Ak!W4Oi33%gsWB{K1Q?Y{El?!iE8^quYMK)H$^0{qn
zZZ@jV^V9jiXV-QMIIR~>ToKqw{hSQF7RY^R5o8pbK~QFOpfZOB;4d<+*4DPF##OHa
zyK91EF9cwKH<YuzRRsJcb0pUx{T&gjeeof7ED0y8C;HFvnS^*VBy-Fr;Vwu-rB~sa
zB!pBaX-8<|bCwAF>zUMx%qWfgZ;1CN7m;+KT~Aj|)o;*~k(X&5sOxGSN1$YrYFV0R
z!ec+Um+J0RPFhg09zQLl-Z#A57RonZ*2!xwc%pOf`5K$YE?oH7n4T5eGBvmQXe>GS
zEh$ZyFV)yYDN36S8H7<Wn#pBJ-=6fu55DI;yA|6)RAn@}zFC}Akl4RMkjosUx#ZV_
zCOZCPf_e5@`VtMjzW=!E=Ab`yT<K);kU`17n)_CIWe&X$`zCd_!l<V{&Y9wO$>m@S
zcVjlhV5<5&>CeiU0D3XKBsL2Q42A?Wj2{TY<II-LL)a1vVKSIM69}Z(17c0B#R!q-
z*+U)yux^1ey@L<Pt+Io$mReoV#P3f*RkYLOY#Dv;Z9RP1`%0B#bj46%;$DxCYT9eo
z$25jfB1-lRh}}Uc&~`1eD7r((OJg`HTxh&*8LyTMfB@yj60zWDkaLIHzQrR_XC`or
z{4B8)73Fh@BX;rtLGlrH-PqbZD-}LQU&8>&w(Vm|2Z{RO=F%<c<OD0Hx*)%>=q0q7
z*r?<ya^@fVt?c&kkT^KnwF)X$Wsd*p4k4j{p&seWJ;M`?g!eb)y3s{^8o9al-GYZ<
z@45w)k~HwO_Z7qhb}8a=VDg*4HDWLJVV|0B-rl^nt*R^hg1R37k?&^pyeh91CCP+u
z1ipCtb47&L_$K_~1M1hq{0uxV+Y)9CTrPPVui^y*1Izjxn*gP%Ill40=juGVkFTf@
zpO4M9LNC3MS|GNP<S`yk#=`+_dx#FUt*-Ulfh?`YSU1im{e4hAOE0s47QLx5#FVMI
zfP5)dxJ_v9GM%+&fHxZ6G5Xl%k(A>s^i01tSvV4ECT4Z*;Vm6Zv4{K;nr2)x=A3yC
z)2|yR?L8AN_(fg?By%M#-R5|M`?p@fGZsFAtNGA>LNA@Z#?Kg*pX|#Pph8>rJw_i%
zt=gG;T>!kPS{QZ^mb1&*oUOH(ND{d54-TJ&KKsQ7GyZZ9W0MSaN{+wztpR62m3f7t
zmsZ-PKyb2&&Ik@B`<RUp-N3;t@C-PVFC453bG|?2K)>CXatwJy?Yac!vL9lh=bnXD
z4##Y3G9E_Qtw%^7{4Jw8C6NMK6#_dX=F5#jVLsxCbD0)7Gi9aEd%z+3E|WFy4fZ+B
zNE}m7T-<Q1T!U%EA&|G~wYV-41IA*S7=M_Wk{k4Pa?8=`$<e}+?i}&a3Le>`rRu>r
z+a}|92W>YpZQg4R-)6K|QQpD1&_PWWRVo>!-16qs)~>wq-Ew8c;w?-0l_m7Rs`j<q
z7l_X=cvv^TYamgRm&%xeNG7Czp2BIEvlv~To(|EDk5^Mkzs<>W@t|6h!_};<-?w`o
zI~Lxnzy6Bkea1(Yp`RGw2Em`kr~_dXJ&c0DX$!Jpl`rW4DGiM;HPp@3AzCYs7oF0b
z;JlVlWW*Y&d&zr^^b#EM!fLPyBIy#ywqO#~<0?OajxmI=nKQbpX?~i9$Bye8ul#NO
zbSo^GBee+%hb3>C;k);3o4EpM+eG*JHF{kMcC0kO&h&TG9~d3Q6r`!$rHVLpI|Va1
zQ&XcNu@68gv<G}0rzKE!b?Gp9LUp0J<4E~b<UshZLBruow<7Tbb`6<>X&<QHV_mGz
z&~hQ)E-1!a>uf3%<VN6MEr+iGJ}TnTsLdm)p<}Q*?or?p<@A<+a0u5%Ux_T1W?yTc
z2M-OEA31JJ%=_|XoPH#jYtzuJ^W8e*O<t~L(oNNaSXpY;;GP#!HVG~x`q_37h1BoH
zi209_+a-<ITEz9m;)N9(Vpb75_8?YK_z#<Rkn3(;3ohL^3?@w^;*+U)U<gudK6lYg
zQvcX6YbTlVYm)|p`c_;&&$F1jWK$f1tITtR@vGY8NVaDwWH`ZQvJ1n4wDKfgI|epJ
z4N#7CKWcc5!luxKm~)!eQw|1rs2D2Mz5w~1;OGT1D?ppjrmYr5A8rNMCx+7zEcRGk
z2%D8t&GZuI1>t>JlofhvuT#|p5a|?PlxT%smd2Iw5-#WT?6acIOyNSE!nQdJo2W@u
z=uA`R*`>N)p<%WiCgQR_yRDzp+`LE*vhjIA>8%Qk8p$V$c0_ps^MbV?xQgjXDUl&m
z?dTH(iU4ke#yZ4)4zVM$5wP3aNzaH(l6-YD>8;|zxLj$N?N1U5Pqurj?xffB-QHxi
z2b-5t0rm!~P^~%SbC(7Sn_GqUMg(!*Ic78_;-H5hLS&e2uFf*)Pw#v_pKY$M<2rNx
z$x)Hb*XPB0Z*^Wok^hfmg^fYsn~wMx4E_gh?1^&R><$*F7rhTI$GW4&v3_1vuke6@
z)P%n?{u#IddFz`qkab-Fcnshu(cqEdTQg-ri|0HPtiq5xgkc-gjI?hWFo-|<^jSMV
ztA0n0!~Q$^Nrs2#*pog~(D^;aS!y*6Uj&M2@3)L%(Bb>S$a*8hb1h-3kt{%ej_{Pa
zd_L}x8Qe{a$&hMI)#VvMr(IGJ3|uZW@7+)meM$zBd>#V8-llV?&`yz7c!qB)R##&U
zrfe&wWQ6d`wY%*_4lfA{?mI*x=km~3ct)9!JrLTE-*JpI-z5~+`CvNo3N>jkN&-XS
zS`nW}`w(b14L%38?!-#v$@y!~kOM#dA)N+Z+oleLE;GO;&CWmpa=XI+ZX9)cl(l{t
zVwgC=EoOnJQ)axaZl3l%4Kn&3+GOnbc3ubC43>4<f6%_QpA(O&SsP*5KV;Q)Qs<XB
zaVw>G^$Rb{QHGN&o569KUF&B<R<mIG;&b-Vpts~0N_gLygzDNP6qAw&^pN8XI7DS)
z^BPlyzAbSxMMa#%OZO@I8u=rYxds9^O7_0&LvrP_Ia6(#Ro*G?@J{AIQR_aXa@cG=
z>d+IyhYZWZ3O$^o_LBS#NPrY4g9ryqia(2wr683DW!20Dc3OjPp}h|O?-Q8di?`Wn
zO@<j#BQT0Mb>CH5qw^%AQl}S)(ctSw4=8kt#b|XJxdW`l0MwaH;rb3Q&3DM#yh{mj
z;$1@h$uM+t*~Tps7!UHYk_p*hRF}zhxga&_Eag06WR#s|>Z9)~GF%0!138`!w+s;_
z*Z@#d6~vii-*IthTAT^j$1oGj{5Y$-*lGOst(L;{u@Z$$=#xc`Pmx3}I0}N@?6Hc`
z193_wWmc0v6|Kg2OsT%m;Ka+87q#qCw<B>&$gvx>5ZUJ<b3)gKZqp6T_Arb)<1+?!
zOx%aK6mGj(rLI04ou~EdEA;iD+XaIrX9EMyJ!PJT${ym&qrk<u0caIbXW_US#b8KW
zn=QQLpKd2V-GqroW5t>)+a%kDb?|cqTmwxAIXmI@>V=PZ^V36r+0ZrQ`e(ZbZ$@+g
z`<?eoRJ@r+&5J`&v?=I(LwLP~LF&a|YUer!Ck%Zu6M{aaT2Q5kuQB<RqRgw@I}%J>
zKCowHDXyiY-c){<32y2D09X!&YEMeakLD8l=n1UxZj;;~Y&ym+xmbS9N`hvP({j9s
zNw2&I4kvjoMNvH0R61!$JsJd?%)#`p($Q_AKbl&H6OP;uuJ>8&3`+Ck>^Zy$grhE%
zKA2~+&YQsTiYv{j6T2SwIWQR!q>~=a<Y@Px=SwzRJoy`+Q2S)MsConP*cX2#nswY>
zQ{XIUM3*HR@=<23mo;f`<`t8^1F-B!=<Cit*dv~e`2M3<f?t~>ogso6&fRWynl7gE
zzKg##?W#)5HeY9Wdytx$d(eWCjd8L_Y&oyr0@2zjy@_PfF;*f%cIGO5sGvK3WT~;b
z*@jZ+EGP7&wCOWEN}i{6jzH^-$lg*!bWZ7H;#q)HuJgoMKN_D2D>dc>T!olV6bETu
zf^-3L$mny~OI4Jp*)BqCtMCZEr-%`*nl<e(-S@7&hazGVI7LTKs1JLT{QHzV9!P$O
z+m{fxRN@6cC809a1FIYY9nnNk(7klUN;Q0L+5f_QbjaTv1-Nl5r^U*q3*BF#s^9_r
z*Gm~~F^+kawQUQ^G9t;8*!nYKyb;<jtn|cWPaoKfN_Dwv?5-oG1<gvT|9AvzRFQOB
zxcZQ@6C4oB%%A3L#M7QIW(pb=fj2}Ll@G%9j#KV+-=xmsj2{F|%y0~NA~3TM>`^#H
zqtB$z(~YEqhfDo|``WPU?HgR1pmm_SZ38TDsrj4l5WJjt$`G=~H$V#B!o9@B!8wj(
z5bE*`^c;q~qnK8y1G0~9z$PhL_YF!zpL||oJ(Zc|p`VW-_tmhfs2mZ)oO3@k3*@C=
zQZffVJBOy=k@8<7ykM#tU6srw@d33RdE~}}T-#}ZQ0dd_cEbdBb}KxW+D*U6ajsp`
z4pM)gV;NI)wKtj=-?zt3cPeSv{q>#L=4A?mkRSvArr5GQk|Du=+MylTxcXWnK|8^7
zYqja#;@O32g}~M$C7uI6K2YDU);eCQRo5l0cIXwebW8#~26&*1QKjhO2!sL`n6f?3
zd;-&q5MuKJts!(9PSE?;V8`(=zTT#i9wb!;hY!~fzdLX;{dbhZ#9N2L#>ZtfQMT8i
zy^-EtYFgV)`ux{FVr|xHMKi!A4RqL}LSI>EI_--I8tXF0ZzpPBZ&}#4B#ebY6r^np
z&KQ@mYogE8jB{SrO&4M<bci+DBiaz*ToaT&CH&3?Au?R=*q8UYzR@$6!hb)c`IPiI
zoPud+f_)?lkmPfoFc&#8VbM5@!?1bsi^b=o<E@4^S@hF>hA8@lVQ5XipOu%FW#Nmh
ziBQAWCf=I9*TIN%44M$pj>L|kYY5HGdynYwbMrNojo63XY)(Rv`pb(t<s{Qg>h8vq
zlw;r5tWK(PxT7@^bgaRCz+dH*GNhlrPd`eoGgLBPaMrBylEejHPEyFyW&TSq^air}
zt{>5ZFEAel)#Z@eY9*)etbNqsL}2R}I@R1~-ctakEAZj1ci@S1AgT(>y1Mk?q`d6O
z^2SM7E@ulugP=Tji^?$`M$5MIW^d>W91?<{5ZlNrc$ws#Cj~HZKnhsu=?~sXP!s}r
zYmh!v>sR)GXsGr9p<OYnX@GuN&rnyaEFbM2Qs~r17pYn`)nI!Cuq(>WW2|xj7IR8Q
zx;5BWHRYr;{Sh5=?L{qUMQe8YP==Ny1OV;-P}0QViKf~R1yic1GEsik+F?{7%}YA?
zSZ>qrcKGMeb6dF19_W!I8NqcHZB+En+L~safWH&f&(U{5MZnT1%yb|j-wb_4CKv^K
z%&0v{A5OnFI>4SK%_zFUnv*C0@F&kd&Nq|81T*O!4IAC%8KUkw&J>#y<qS2HJ1<Yx
z=5YoP?hms#L9?hnqec^LHu-$bh88vY=Vo}11?!<%v}+B13aV(GxXuv<FXHxFH%+5N
z_iktuy{l*K^B)yy)JsrM=865_#{GTdPRYN~$@z&^j^F=VepZxKX7g1Yr?Y&Yj;9wK
zJQaLLACKHQeCKTfqo^ITvs;_Nir!#7&`wlq)acGhJ(oayx<=ng`Y>ZXaTXTXjqiLm
z(z5b8+}w%NWHhKzkU_Lj&7DgTF_Lr|i4fEX7q=hPbJTQ6GkJlj#eM4xXQ;*^muibc
z_;;HZuA#h9o=h`~e1YpV{4=^c{meq{&w8m}QoaS(K$5fmCP#Vq8AEyj_as}PJhcQ9
z){-lJ2Zvc?XI9#k@bOM@ZTj6~fLFba7@k-QyNyP4{v>0MDY|qPdQotDI09_#-NDW`
zFQ30-1OnD&Qf3o@%pfOzTnvv^?k`JU8}}LO+tL2ZjKU(>CTjB$m%xv9?_h(1JGvgx
zzFNbZ7>!FL!15|-&<gG6pHWV|NnYt}bvIIvU_PKQS_7rQckY6Cmk<;`R;<ngeg({G
z*F4vwu0uBWn#myMfVWMUVQZMY|MS*EJk!|ur>Qpx6xT*CAQP2MMHt^&Hb#H3T}j7+
z4-Su-{2rB)dQc+b-^hX*sp7U3_O(l!-HpHwA~l3-MxTu4<;(IatDdE(4`JD6t}b{#
z1sUiW#iIp_ifSC{Tv`{<z-`YsB5^Dt1{0cGW^u16RW-|A+-JX{t!_e^$SEk>AHWE?
zpMy@(j+^U{>mss(Pv8HUQt#1cgRb7|34{6{H>;CV-cP4>8O9p%R|D4$)fVZM;6*s-
z_kZU7>%b=RPUJB5y9gGmb+y8^@+*b=y)maZ(QOxs6C7<1lxHCVBi?;gIVJi^;fANF
z*zFVcr((ChxT>r;$GMT{uR3JkeLFx>&a?Cb+E^SOJx}{kT@e^%XMCRK1ydpIgrx2i
zHMRrwFCCDMNCMmezE5?{oK)g^0ylz)!Ygv!ub^H4tq)F&7OM^A$AqgFSxgE%EyP`7
z053q$zl?4yWDY{{=1jbR#e<d*DYzB_-KU(a<aUgSnrn`JuV4@Qx!RG88-%s4-6fYc
zpS7Hs4V(ewfZ1GiRaO^X3=-6JpXro3F+_r2<=F>@51p8xEkt)Ao3Cbi@ZKOUQUwv!
z{rZGcnHsrlnqQbDV;>`$Ulg-6H#$x`m1fVDWHA#xT`E=)kBtaIE+NdToMQ|R%rK&w
z5hw{=#3bD^o(d<zG14Lxpk&{$r}QhFD*cG6Yxz*cOk6tl{@`A-Ruei-PA)EmJlbc<
z;xs>#=&QlV9RVRMoMo+W5msj66tTVk4t2%vm?3{RD`)S9&}UYSze}?Dcz~0Bg@zZb
z%xxPuTvOPjrXHL;{FvOiwL(raFBQ$%E3%&RKyWYN(8BEm^-kCoXr2aK<SSG>y5`_N
zwX$4(D)HKM#FJ!xce*wE`el|DwcD|3%4IAES$cwaA)3t0+*HrBw(fO!YCGc!%b9oy
zyZN86d$R1Kq2T6HjtR;wOlk=@3Lt^Oz75p?f;3JeP=gNqlcJKPyc$tXu%AG3V%EdF
zMcAJ{KeLrRyGKQhZ~u)CUZCT#OucZ6Jm8;&!Dl*q<B}t{v-NWFr9XNrFyknT)lK$U
zbBcRCCYVy67aIOsTzH7M5Sa`Q@lYPI;*>5xIREK17p<~AZ!`@?=(Dtw_TMh$Zt+#5
zHXDxVm6Lg$>kT=k!FJ_b$NwNT_XZ>PRj_3nE$@X*N>q()GnmIa8lCt?NAUhZO|!d`
z7wQ{Lp{M*~v^EAOt}pz!Z@VXl9t5Q09r`jrBcOA~8Ni~P(tS>U<M~qjd=MuWhF%;~
zyHQn9IG2~M4n0!L{A0VUR$8+sqKp`+j^6sf<Fpx`iPuzYg7w)WZ=#Sj<N2*b$c?cD
zvqj3>0ej>J=4vG{hGqZ)#}>4dPeQyJ@wb{R*yDkqsBnEoS{x>cuh3S|N7-B&-_0@G
z1|r5K++=n?UP6or_5uyHtG^Z61GyLG`V|$!{w!y6`DqX+&<Nn1E?LZ=e_MSVc}r3G
zV4LG`;Xhk~+q6r*;1h-}2{5a@`dmD7MM0a-M=+-*y}O+2FOgq@8Ute_&?@g9O5HZK
z;^@=jdebUIL*SG|7HUz<`y8RqCfXqjK^R&BON!VdMngE_r=|=p^CqE~AY#7DH^#^o
zk*39c1#RBhvr~ay8<-er*EwX?Yz={9Qp*9M8pG2O9uA;b9JlG0oPt|({<{^L8efFH
z`g71H1$pub66Pqz+5-{<THt$+(T`t06)0p!&E_9TlGP5PP^-v5P6?sCInAe(Dzjsj
zl!_e&XidRla}7R*3io&OeK2w8HWp4;3@-dE2sWccO?XPtmr8x!pTByxv-ah0zFhlF
z(*ON_vN8JSfeFRFYhmL^Y;jz>V||VHW-9(CQs|Zt=Eikn*Va*YzaqS)Tep6&9Cz0&
z2T^a7l!xI}8X9@++J0Z=1sO?#6~w1nf&gS+pKgXF<SCkReXrp>57}9x_0Wm42z>Hn
zaNlKORhG;+YO$aVzb2~NiE*ptIi-e|u`cDP<A6IL-1$89>@&jKG@V|7jQU+>G40(x
zM}meSQrtH|am4JYk~4M5-*CaoDAE^31<kWd`Oi>z0e3kCmz9Uf*b$eugg`+B-_R=g
zWEib#z9l~(%>1*p>@o|9B}ak~@hw*)MYK-i5qx9wBR`DI5MB_S%Y+{cI59m?X3;rj
zvZ1q8Z#Z{!rPiUTia@Izr~*}oA9W!b=*h-1EvLE}4+@<Uw1pmSXa5wJxECZECo+QK
z5QPWG6s5J}oYqK|gT<|`eL6r1roZoCJ=yx(j5-=LKV0Ln$I}s)&8E|Ef)rST^68+<
zTYa87D4I*-N-=Vu^l-qv*quR<oslwSwaMYiGbOWvr%z6r1>R^K=UTL!bb|4=(<6Ee
z500h5ey}7?^hRdVPOnWU_8w0VkdAHYl|Mi4zj{yS=Y5c33=3fzQ!IP<-lPeO`yNj5
zJ<ki&IwCMh`pe~^g#P&~VK*AbU;=yYUp?10<VCi1+F{(bVOw{sNk$gk!Yp#>tYY$@
zn6fX00%{~0Dgk`jxK{BNAnZjasA*06o|dB?%8+vGzJEWGomAW3%~B|s*i!hrS&FvU
zcDUsN+ebRfx8l38!KF^qdcN0s*PAzY-uDO~fDUlyS$1(Psjw{jE_{Q|q~%Vm>#}#^
z4%rols`x~oT&A;M!pmY<cqbzZFaLMvV)aOLGO`|P=NE9Or2G!1nPLT71+>6chkoMI
z7(X(b9`g4`fonOlX|r<1PCLO$z*E;37;lqf#iv?=WbBLq{*4kn@C<;yOcvuT+Ufi-
z+~l<C6rCLpm)wu>1G_(Rf+Kt)jJM>Y)LbrZLb;*02&~rH1$y%t`e8b;wlPfje~rG-
zv1{~$o|-w80B=$YGb?MaZX`O(o|$#(6n5=KzI8KRGkWTZVEn>nGqCNBo$8OH8xP{^
zHa7_8425Al<-n;m_QrgwAI-S^=p%Zn6$_oZO+^uYjUSt18TE5sKEAE0#~mO2o^(GC
z|B@AMw|&<&$EvHtr-MeVvbMp<<>|8XA6d2vv<P2wT%zbjcL}Ky9g6sC%w8j(*wf1!
z4pFc2u>~0LCTg!2HgXBUcB1$Qe~`);|88iEfAuRaH99_?%#W`s#GI&-NRu4si<iA9
z$dL`muhO4vSlh?o_8_miA2o&3;Ri8|Yzgr6;X)>AhpP#%OUEa_V#A;F7Z#`wtI8z2
z4+j0fZj78Gq+_sx&>9cVYXj`vg>{z{SgYS6^Mzi*{R0ADknZ*5{h_e@BRZ!9^})YA
zi|hSkSQQpbw3`+AjDnw}Wz~u`YGhTU*0=Q2jRF?>N~E{V9)?@RWtf$rIdA1)8G=Rd
zM<A-%jX``*lZH>qx_~aMC403*WDpJs#k0e`w>Trkflk;{`h*(SSHZT-iE}R`z7vZ6
zME}PBy}(Fx1nCj0T&~!@>gn#nlh`dAKO^J?U=M4-d?A85@ApQM02RvwGr{eXj%SNr
zn}LcCx%`z#*FKLAxvA){=tFK=`CIysn`Zw;KIE=NyeIBlF!3R8UxS~5Dmpy1J4P71
zh}-Y*A&*Mj=0hG8y{l(kKIB1>M!h6MnJ4yx8~68-yJ9s^1!WnK`;N_TbIuuMim*cN
z15V{-6Q{DE<9w^eBIpj+c=$d*D7m@cjY^5-8w6w+Tqwp2M=vfga}uw}mNV?0<_+dU
z0lRLoqC%N_=%^8nDnDYnO-UY2rS1~tLLJ&_XQ^quT5%F??S>rs?F36=S47nA_xgjL
zVr_59+@S9zm*)#lztQB{_{|W33gsG<_j0R|ksNM<ZJN=(+yO(vTruYEM^wm}yy*kY
ztLYCOu9Px3;i>mG`*SfS@-usg^cmjddXnWXH{6Qe;w&puuNn}6IV~GZt3f2krDxb5
zhgpM<L|rb*cPh}vl`NSjn+n|13K67`$&L-#bPw=O@3pEM+};mXk~-+QxK001rY*=2
zvelp)Z>EciMjTKN_tdHY=oyE#qw5L6z<%fH3iUFg0rnFm1I<!lWerZ)^T8OwZWKvv
ze6Uk0GMrUj+bpwhod-XvR`c4sjH>ew<F}<QI501Us#3`3mS0zOS_}Y*O-C|@?Exwy
zg9bIIU?}(!&>;ea^V}7uhsPdkCBlihcm%${HJ(*xQ`mvga>&$2sNLoYK*&8zYwC8V
zmk;qfCmy<Tls;!iLIbfab_DFHk6UlqDU9(0*_w`HiV^h7VhyK8ZFz!KhDaOvT!2zy
z>Ey<^U|5t(QOe?!e0%WfrE_uK!Ohd+1E-J?X9V0KOi=8x-3S<oBZD+B2)%jFvg!u$
zsk#26*h5cQ(~`5ADiVbYF%q{m$B*684FQy4BfR)UhCwjhp=C5L$HpLOuS$7J+QC+)
zK}*DLS1$fUD=_Gmu#F?hH||BBZ3k%!4h8uN(QM)2RaeUy0f8;%>T8QG(2@l;OyKQ?
z*^<87MW3XHzTi=mtouz?p<g336fdW^W6xc1Nv&Db@oyiKlYUY#j??o{ZHyDe>+NS*
z;G-gKY#z`a0ZgpYqNc=RjE<s&#&=$igUw0N0e($nm<JigU!*2;n*+D9p%!{-ZA5or
zpsLEsku)F+J#RtnH)9U6W*iuWLE_;s$CP+93&V)sTK~Yc-1i{w8<IggPp~h2SJd%9
zoFeOU3VN`y5PJrFHi&!3L-Y+Daav`@y;x%@*fW?3898Len=$|$de_@LoA;j#dhZ4v
zl9G#Ziuu{pO(>;ZMnP64fI`^0s0MBrw{`<i5KQci+_&VsAK!a~LhO2qsC+mM1%eEC
z5%n6aiAQarP;!RxGNOijBQ?j|vvh8=ym>mz2pvc_9n-GwLc1g;j<IhD0q5y*a8EX9
znIVFKL*zg;Q^H3Wy=mLf?-+Ry{l_LYo-k9;__bmoz7PZVGYpQa7HIc$1b}%DavoQg
z_2o7<wP+g9KkbQgN#nM<2g$sqS!In)L5W0$Pmkb9(&P^VYoi=Jtt^~19C}D@aR`Rq
zs@>+^9mV{*VL#=`U!|YlK;56#&+{yuAeM#gseATU>Fc*p`=|Bwv@GXwU){66N?%_<
z?Vr|HJU<wXQboJfJ^yQN*&kQ|-O+Ok;7AFy&4t;1&2$l8j-?6vHA~NYM)CU(Cr17!
z_Dt#`t_)-TdNwb>E;b&eU2aImmdmrX#h!6X`Z6eW3WR*^yqr#)9KXZ~zEvm}{l0Nt
zAq#BSwV~7rRoe96CVO|w(r8Lw3%A9*tKnLdmv`LAvqtHp|Cg*PIYN{G1=r&w;kE@|
zw+BvyDZ~)T)TbyUWHO1uWFBXtMt1UFA6lWr#RKANPL`l)N*I+KHU%OpVnif&h-a%Q
zL&+$AR;(j|nK*Etcw}6{jR?6R6DLLSLQ)$B3`q?-V~7a9xSTm&D2S)pDWX<3HA)JK
z(WQu`e$U^_E$L=fiWLNi;Y*RF1n>Tt%Y{PaW|F+hmepr*S@g__>%?cK@fK#RW^PO&
zeOit<ejXojnE*aJ>|4c8wmb0p9Sxw)U=|agg!ngM^5Vw8E%9-NMzIeJ&uE3Kj1mSC
zI$j!2KLrFkHu)Ek95}jfpij>zF<%gaBjep_Ik9@0-tZ2z8Cq0E;Y}d<V7lomRkO#3
zO`?Z&U&pnk1?Sq3@MuL)dncF7JJADDjpU?(fzr8#T!?R2lZ+@-iFNM?!Jv$Z9j3=0
zCR|J0eYeve8x-zO2J+(Xp1d0bmC>F*C=t5YNB7bTb0*V@<NYN05Vsf3x?mR~#VXnn
z45hZLm~_`g2kG8bG3RS*6JEIQhr*TB1B+05mK6wdGrg9v>FHk8?+LH*9aGJ@M3vLw
zA#X+jfVYyJ6K%Yh2t9`ezSIslaxMdclM7Rh!x`$%k;b9Z8&5`Vkn%k(5f1eQ$~-P5
zDSs0emg&$KO;Zw@7eq6iQC4E$o*P$qjD4siX%Z!K#OM~PC3NO4(q)A&6<UyvJ&EX7
zpqvcsQ;v=#k*`0dTk!~&iDZ+!JyWzA_qJQX_K3=$6!x?eQ#9E`->zlO%KTPVIRGhr
z8?1%^l_CvwO?%AFK+8nav4V5EvT5v+_~}!auT2EgIUk))OA>Es(CbteH$h+4_EY|H
zL%$qnIq=Y?+rigVq5Zmc^R@!#BIwesn5-+j%I1Tqm={;<u3p&;>v?P5X-(nAhA({Q
zrPB@_QJM>I7K1y8`O<pU6T@Hgj%noyc`)~83Z*!cop);+?~v4SXeLvklrSG?2y)=a
z2cI;_MEgc}a*@qGg&f=s-j*%`f;32Tg4yH_IS$kJ<QFn9c&=kgKs!sdL!Jn8+Uwq&
zF%pQ%x{rF?W0c%ZvT=&nt`d8$2E!1N-=`l^OhOC1vdg7~fjJJRTv%qJCUt@%y~Gr{
z&SJIfU|n6y$Q!X;Aq3UEmD!4j8U=8Q91~HgCJk9`*kdAY%rNVjBlo|I`Qo;l>=&)n
zR;#qcwu&m7at7;``hjl*`Rz?vlb?#s4z6qO0Ax`Vj<Lv1-hvpEI|%lUA_wA7W^~dY
zfdnElb8FfLmtB<N1rYIc^u8{O{-6_g`!-s_q{Pf_Q!2F+lY{_IjvuZ{N`z9J>1|=b
zm4V-|DV(2CUI}L9C5l<VXLOoAo(IUw@BjSAZ{K<+0et(bU*Ug71Q)UI@}2&Zlhg5K
zdQw)JFvA-O4`jihgmnHJ#AQWHS=(t0*l_Ss2~Kd3YjB#S6+<61*O0S|BjZB3(y?Zm
z{%UL+;3~Je9QpD4I~@73?#TqJw)NtNCf4*;eM56)?_SOSe|zuR*v4_BjeeGX#Te@i
zfCvO7Io^FkUHr<T6e~xTbwoN&j;tkzz<?YJz#uaNQjE?2e!8w*Jr@ulC0W{C@5Ux(
zdiq*jU0s)_0@Xy+hIl1M&|mj{cmY@Tg=1*OB8`GFOpL5NF;$}un8j*DqEtC}K!%AL
z6j876ZB>lkO}8ll3<_^lwc8DM-3c3z-CXPCj<lR2W;-@)-c_O7#4~K%_U*df4tOxs
zUSqUTgY?-h7?AwEJes8?S~lj*i?V8rcv2T1Zj_m9n=20W74dpjSL*8F@C=-Hji7We
zs*j47Wd?WZ5nj3SWGmE#`W#1jGK0DZyeTdS#fI`H*F_x7R`(heS`UCpzJcuaZi#w~
zQQikL8tl=k<b?6OD03}%_YR{+5ojTye-O7ov60CZ2j07ZEy(ihmYX~5p0OK{LJv_&
z83Bk&K?FJXsy5Oqkp7K5U$~=uUAl(!g)~Lyb5#J7^KL**zr2#(SooKmb1Vy3#%5|4
z4XhOdRw;F=0yk3GkFTDuWLNHeg<E+jyG!*y%B@7n`PeqiQ1z~bMj5=ddx#(<5*zjp
zlt@+MGV#yWo>eltEb}Q=#p3%lNyODwr4MLeO~wO78^vMAT8@)aB@Dx$f-8RG9iMCo
z)GjfvIu-|F*po<I^XJp|>NX`$V6<XF&{8`B!DDgoD^ND&^-U_ZZiaaL{W>m@_V@wJ
zbF=?pP)DU4UavGIDnLV}fPHV#{!vFosP;xw0K32AZ+V*KDY%l;wJ3`Yp_N0*<8)}M
zIUGiNnT$tDLDd6JR{@R-QV+S(0iKwxA%d8@`8b}Vb6gu+cn&8J9tS?qAvv3#;}&b(
zgvyjr1xH7a!t5dMKJ;7R(7G`}wK3IcVJ!!?UaSvJCykc(`3Hg7>69opK14ktoFI92
znvN+_L}Vz<0E!)xIVEom?8tM#Sgcma=$?(oYvpuRh2MIo>-8ARaMSY#612b^qDKgg
zkJPS^)}z2wUI|-c3QT}l3K;o0=Z=ix31-Hl%3%A9@M3#a8?Qgv+`}s!YI<MxkOj+m
zcxfi+6YrQpe?6TK%yCL620^MM%n{3gD5Up_F~YwJi6Ry62Ts!=$O+veyCwN}j!qKr
zLqk6x@_3~EOg=~m1ga2N>f1BJh*?O7jQk(Hpv0Du<`yG#nq_Z&fS`KBU{Vs>RckSB
zeCfTr&1-wq)J`VjS!vx0J;Sd!{Z}h(ygN#yB!)(SN*`0!B<xZO(8Q3AW}3VMg%V_?
zA$=5M;a8l*(6=u(XaaEiG_Fn%BtQ*eprn0_Zb7~6*FV4hxwrFXTMoe5m%Z*l;|g8}
z?Z{bMLC1(!$C>1bM?ZKvSHpk&`j<E1B7Wn}LHFmZ2d@yl0g8mEGf)|3aMHkgoAK7Q
z<NnQP5LCF|n99~*(3x~CEY&aq9tc`GdcyBON|2Pql@4qeYRTQDK+9fbD`Ups5aG|W
zD23*eGNKL$`3R#<SR_QlBzSkxBkB=<K)H-{n!c5Ei%6v*cEX+EpSSq>LZ>1eBuPF?
z=h-wnK4)_g`x1x(HHMQb&PONG3usp`%iPl9Pb$&8NrM9R>sq=wkF&?S8@}0zy7O%A
zcskYvG3M?G3)u7!w5RTw<J(>G)lrO?=9wntM=eg%L`qZme?#~}RtXs(FxQ)nN-Fqj
zB}q}3j4K6OxqjtGhsy$hwoRjnPi0)`315l~Bm>q!`8>t#&=kNo7Rv{FavS1<xli}(
zW97rq9sj)fp~vic9oYw#B`MUHdw;LC*8$L&U~;z%;skikoZA70T|ivLu-fMJHy}f8
z>h6Z~S&rgzws1%11CEp$lMe7HM+aENY%JygTk!jsg9q!y=+(W@C~9{N{Tf8%?lFfG
zoD8@Fl>biA$(FWAB;Vk#0fEeFY2G~paV~IIgJU#VZ&jEE9{7%H^kthxS}{4EaK+Q<
z!0Qh;SFB^)0qYL8Fp>R2m8{V$8@rLt0M=VFi-9dIb*)X4QwZw8I}g``I6z>|Cl7-$
zVuPY4op!>BcvR3dv8IM+h92I$VL(^MWR5~NW;a12NR+dM%oOinZpG%Ka}u*Egv!;R
zpkyw*hEsNV)x<CEwZ!lo<Yc{Zj3gi%J;CaEBye#Mt%^CL%{CbLlR)}CF;n7rABeUB
zCTNnDQ};+oh3=DSiE1#cZ4#$B-qPl<p`47aNeF=qkKNHjPbcoAktPUWf<_*X$|c-p
zbbb<h8n+qtS$u1>N4Ff<0_9WLqAggwbhKe-gK2c4sDH}S(hWGct|%W=7XBz)KF%rI
z6xU`dsWxIOl0mFll@gdaQhw;oZ_WBqkxiG#_KwauaUNbx-R1Gb-Om=@R1-G*eY_Bv
zqt!T5>FR1bO}+lt^#y}NNpp&*)h70FKfyeQF+kOr;V&A7G<3uM;cPA-2Kd!C3eKjE
zs-_ETkPz~j3IPeH?Y2mv{#3|zFST(sQePd)Dh*_6);O8-Ao|T7A2)8e11=0gN(a>`
ztH2`m@DoY~gLj)60ruTA@FZg4hoCo%Duspc`xMQ@U^-1Bsi4z^Qe+&2EJp9~|HyXY
zP8e0G{CZ)a9w2L#-cm4u4XTH|ek$irjSmNWhTgom-V#>_MIa*MLTcWB#VM8GjVO=t
zO*JS9@&Qm3CP|3yOO_eAX%2l1zOE)EfxsO&D9!^wNbZD=Uc($gplS<p)P(n{52?sj
zkwEp~-&JKwkpyY5-Op!;vEl@{@^26<fCcW!dlJ(0C(o*twlX%GNe1B)um_En032$=
zr8FN3oLp{QHL0nn`NRz64@To@Gl2BbbEB_C4NN*Q@<%ELgFNx4EY~yxapDLBjd5~H
zUf$uy;3=+xO@C;PBAgx#pCa%jb7%B%m|XNtEpGn{29%T!Rzh@ECFWXf4LvfPh29E;
zrR0+`ht;0nP8!F%Y82r)NcIeDmo!S13#xh8?Y1;K$9#e&GFpHoz0-s#EtFdY6xL>H
znaC<Zy#xej0!+v6LcppFV26o{Z3L)|uIo{HJ4o7c5JN%wd%h3xY~SEVJ5l3VcC%sl
zoXCx5)Tf8Dn4hltXBfH)B@TA?4;+(3gv)z)KTvR>cs!;QO1t|gLr=h{4*J8T7dQZJ
zHLUD0Ji*!m%@VcQ0&WUuU6}Q9nfvrRID4?USp<!W60~-ze>OqJ!JNu;bCamRt3Jc&
zg(Zfi7TLjkA~MA5H}@Jbfo0fLaYfqU_W*1fb|83RdjVbuZdflM;MjL4tY<~94AF5i
z_b(wLy+0gHvmz<VUiXif^<`^Z0<Q0yZUx{BGlz#@2(Ed2idn9@^qo8HTe{)t@!76P
zz4KE{>JRqUhGb`$Vo5`2k(oe@`q*AbBxCwSIBA)yGDR&W63v=HV0npLoctJbNCpkb
zwZhDNXmZ<f|3Q6<J4T8!o8c7;D~`$e00U?=xChm`veD9i{R^^m(MIsm?gXpwC**qg
z=hxU}HxC?#6VJ~}$TuX3;L({~XTV+8Bzeu_y*;BjogYKeq#mm6sqH9}`|dwsM6~n!
zXoJGAYB|B=zpm}17{v>QL@TlxCeMOwcS(+}mDNm?l<z&2Tuks4(4H#D`S6nzdh}dY
z3-s_Ya<Ax7^l!$?7J{cCiPE`F1?_T*vMA(Y@5*d(UCTLleAvpIMX^o#`5}z!5yW)U
z+kXp=h~uOrc0w@@V8TqtmLdLd^h+RkJR28yUMVI}wEbWIwmqPeM|5q>*x=h1#->Lf
z6&so(K<-7L9^&PikpFF-EsxPhSgkyy$)LCfH&?qqd=GO4Qz%tXRC1vQD^DYMa}XW@
zvrD?%s0|l0*&VXbi25Tuf6-E0*o%fmZ#bamPe5<dBNYfj<Q`z<y{h;&;A67uxLubn
z3&w-eoL<eSAcKm$Ys_Ed-nK1y0wm*;+o1vo(Wiumm0VDQ5~8p+tV@^u3F!<WQyhOw
zdHayRc-ImDE#z<!TC^k)u`>W8^&k}iN(En<st6TT!a;*+a72p`K%a-%I)liCz~<Q_
zm^mxhyQhODiSVK&^qz7aHb>qMtk{ZbqI${(kx4x2$SMP2w_DemHTZF8;D2ak36RH|
zYQ3pNLz7O=&x7P1rj!j=@I6sP7klAab;$~1muVvL_^iz)on(|^wNn2#qG&H#u-5O@
z3h+cQZhBoS&)sRJ2ZK(qW?VPXVdJe6ICMC96;^_Ll;tLO9SEKEt5M%A9j2t6YxkET
z%qX=*d$((gz7|6ydB0m(`NsZhv^|ev6gzfLVfOAx@Sx({5WR=hz(cZrG3Vv5xp_RM
zEUAjX?wq@e4e6rre!qhc_S{WgePTBndOCN<Q|gv67=Ptyh;sNo=HOs5f9Bf=%M3iK
z-o+*Zp?i5S3is%P?I!o+3e!CfdsuTSLM62KT8zWQfsGk~l)oLyP&o7M7=ZEpxj=FV
zxgn+O=!>GzS)vGWvzu4W{?`EP$*BWY`&<zC6ZlA~sdR`}M{vL}&t#WyrQmPzhA;V|
z8x>_~4`&f!`XI#Q8x&x7P~5x)ZMAqSG$ihb*I!za<Lv61Crz&KD6~HixIf7+xHdTs
zumW>$Hqj+@ouA6)tQ8zrIF8pKipP~co@UwN6|@I`fI@=1djmsJ2-m(xJ-TDVd461s
z#qf^&bS(LF8kGN+N40P-r0Zg$*FHhiDHR#UbK6TaXrlI6ZW&Sz4nEb+sjz6?2ErmZ
z2h=Vb*icwA^`>5L#S=-3UY4sz3p$DqbwWeZh^4K`<KQ~#1e4MP*swK&#c*cDR0!+r
zwOZ$y2i{xnn^mQOZeJ_)zF}&X_@M|dU@4;9xCtG_Q%^TMC`cIHVlrok^eu>DDKQZ}
zg(E=om=wxS1ty6!3O=>IhVjjTUrKAKt*we8@v(Xyy8C(;e2phlNMYq#J}0&d?|3;R
zeX{D`G@9`T{;(mO%x6bs{hqt3J=-O8x`cty^p?x2TxGU85M{N@8$y;!emdip8#zsD
z^`h^Jzo`J!G%&X{Wd0@q<xPx)RRIftjK_W-Uo_w#UW%Cp%pUWBSI%uCw&LwRIeSG{
zg)59(SoOf#bnu}#%7!LrogM7lYMV2$3@BJjS%!*oQE`LgqWSIa#y<ig)Z-YEDv?aO
z|H`HY17}7$eJT8KKd*^T2;3Ght1$gnwTfy4BgtSjJE%1!xGHFE!<*kLpSp)qy1N6L
z;pXvJBDX43N`yDDC@Dvxcm%&eUfx+Yw#$p(Xf_;v35kYCm7qz6`OQGdBP2e4U30qD
zz=0M&b(A*N&?VG#8R$aSvty`z*S~BxG+zR3lI2UIZ%Alq3BUOZh2PYH0Ud?fq*mWZ
z_zO7f1+wC8BPgzlOW(tmyrrqFF7&li0}~4*KI1g0*g>m!!bq3nfjVHB2t%85umLrn
zCs6j`es2C8rekxFa{VS94s-{FX6iU{_NY%)4T5ijaX$(IE&SE*X6>3r6%S-829h3Q
za~|qp7dHzNU5^Y}sen}-D3~EBuqkk5Ut8F{fd&Q5rUyyo<Q7$}=$5GT8Rb+Aa%dL>
zq2#8hOCh=2@rnDO?)xg4Qjk=IYg<(CFNI7(k8frB6oqCo)aO?|rmlTx_?%;{=S3~o
z;EIzWz%|~0=_^bX#bD8bcsq^7Zxv2S=e?X~bwG)6;-uGUap39-eL5)i299>xly9ew
zK8*MEV~Cu}$;fAXPrMt8T{Ev3aP83D$dah5-SAN-t}gR}fzMDEPr@nQ1E85usUO7q
z35t6JzD!Xb(wpWtuS;wBWf=#t+pc2FFZece*7C_btT}W7+KOY0XY=y{9Ld#AIdaB;
z!S4j?+zrDm=T@{-JiBpn>Z1UmAYB7;C~9EBBp01K`#qh9RBmbfd3F}kc$s$t9}-D5
z+Met22k|3iGb|bY1VD?^L3uX;Hr0Yzx_iIOAKov=+Yj$=yT7`9;8u@;s(OAxU9ocP
zHZy<7E@oj#es)sMrr1^b4Q$j+$KE2I6KKWX(!w!@$23D6V5WZUeyrS*m-sHcNkvvY
z*a1cyz_XQikl|nYYzY4yo%GBp7JLHJ0$u4>&*afbIvwW_%!L~NDT0KMw=^kJFcDlL
zu-Zq6C;(Wi<EF0dofws%?Vj5mZVNw}-~poEClx%5kWY}NDBQp9AR3^<it!htV-et8
zR)Qy3MRSuVlh&L^#5KlMEi#T}@xs}w%MuP;^j(G?!r6LI36QR?TRnWbb;d-GQJ=EH
zugeBg23{qu%$gI}GEJ-Jho=Dg7kKlS4zEv2P5vsao5Y~K=ma8AQQ-l#FQ0PyqS?vO
z66s1TBf1?s##t=l5m0=0I4*~~`_f8R%0Rg9lT*qnN0>*q^fRvypPr_Lmf}p??hyxZ
zG<@Q2b!DEN`<m%@Q^^(XlZeJNne<FAZ*`;Yt)NHrBxumGIkIXA8|>-?ME!<<C=AS`
z9OTd>gs&7RCtv_HVttNPN&tUBKJc;;8aq9Ll<9IH+(GoO4;BtpV#q7(TYENpmvj-b
zqF*s8P2&ihcr;A@*}Luj4HVhp;l~L$a)`yjsXxx+qpI`YIB@-|=q{QV^ClZgGztNR
zk!bTMA-pFoj>bmu!mGKnsUxAeooz!94f8!9cg0haOXvzSU(vNwClq^BSP}}2y?Itb
zdPum5xR%g2gN{LWS=G2XsiPliqj2=o<Z?maYOqy#MZ4d!ylqP>r#r|xuXzA(KprZ~
zyw~LiT|bH@e|o#*=)@)47qMsO%eUx$MuG&pw404(cKUnXTUVP<Rjz>MvtjzG@`uPA
z?Nj3q2hf*rP`D5p<5M6b1p)gcnJ%JPI!`CyxQ3p=c%UR0WP#oz_#0>QAVZ%qczH{V
z@bJ7+YKGyC{*zmfT~0cLY=e|_JCx3_%;~@6{6v4tJty}!ELc;{_!}R&iKwXoeCstO
zmrAhjLDzNso^)NZ)Xmy1;{>F=At*lW2#6#%73LAfK7>cT{)#Htexr2|P2FsyGm}#~
zsH}a+rf)P!!6n<PrrIWDP`hq~w%^N?R<A)DX2_1`1Ea7#b@=CzxNs6M3zh(clQV`>
z0k|!=-61Ga0uH264<2MoH@Y{W-i6OI3OG$m1&h*ju&iDTFk%Qy-(C9o!dDZWCBu@U
zFkX2oPEyk3Ri}cVzrU%VNuYl|#8emv!>i7PxA|9RL*IOu`FKw=Qs1F#&O|T^DGFiN
z$2x3f0#??;6jiizLDppSfvI`{OHOnsUI!O!=cOoA{`MPvD2&TiR!hV2-lOkW*75;(
zCX&tv;?X5Y!rLD{xJ`C$GJ8*xi4#rk2hVaqyCLxWj#jzjq@-u#cO9rv1g5ZN0^-+v
zZ-~t0-}j^IwG9n+T-)(9jY-0&cI^rcaPZ&`NGP3fx+rzGE!DA;+K`ivKcrMgwctP$
zH8fzsOBznZC@_uN%(0tMHk$#6J#2K)=S?y731?fEFR;)}I{0kC!on9HP;YD`;`V>_
zUjNt5n_K;z9t`d`nzi3}Zu?(u`)ug>9YTe?i|7K1VCKe+u41KQ9PzyHp+tr;p{Kk^
zfH%p0K{f;rCY8!$d52NyIX!1HTBD;Al^D1_y8qoBRPF5EKhBHDu1K>%-2GxP+5P1O
z<=7jY|B{s8UDIG*C|*OLkMu{(&=<|2w{~z>j}Apk7OSEIJp?lXbg(CB`+;f`_=7>z
zEkHfpW$=5AHmDVw@1Jz7i*`K>^^zdes5$<CQn2u4ry6G{#vBHF;NAon56v-ol6<o{
z!m=&W^PvYWzrl|%!R+IZc`%@2*qK{WNmw2kOVqoiK<;Tt$q0|#Rp*p5?b7}EP1|rD
zw8u=gMNAs&&-!7h4Y8KG{(hm|BUDG!5{>uxx_AS074o;;yS7o(XWYjBr>&}AAPKVa
zhM%n$lIbsOoY__eE<{O8=s{)j6sn7Sff!S)nOzEoShs66x>T=v6FC_SD!`|&@4oRD
zY4qmm5`*pTRGtC1m4_zLspFwV;>b$syW@Dvo!ffzhH?Lm&s{ojIiu&u8wl-r%U`j(
z*1PDw@mUiMmZM#mJ@tP>5|$FsGuPY4%5PQ^N@^-s87i9&kEGLXVS{BgD;w-k-=_WB
zZ$2a!4fGYaq2>YkJ?!fzO%-%$pZR9RWsz+xMxjVc2aHwMO=7|zwh~?pqeEo8h_V^T
zMTC!6YCws?>eRL%R$%9KjycNh%!*$!SRH|;g;W}5_rl;(aCrVsWiFZnOyRr>!ha*k
zGwE4uVD~IS2h;|JTk%lkxp~vPrK>rP_rLQxY|$!>MCv6P{pFvpFdsNt`6N4VB_M3g
zaIn@~!@%kf@y90X+ZaZs^C<lm%63<YFYM%2W>Sh*=FQuQW6GvXh;{^6N%_s9!*RJq
zT|Ok`3@AWTC&?u!TOJ8qRLp8j;HygjCz{LT->k(xH%2~FBNF`F8v0xfe5TJ#>@yMO
z>UcZ;Xp@jT62e>o+V+kMTqa|BHN2O;R)}8iZG>S9Q^&i6&<EleUpE~M*it;eK=i^R
zoR%KC^e^7A2YRzAMT=#(4SsBdnyi?ybhEY`8tOKN2d{QE2|~<!w9lZ;iH3SJ%=|r0
zM&OB^qJIV(&=Cb@u}J3Q$3kgjfB80<WV!c8HqR<4z%g8mWmcGHC$CEXyM0->TR!Sw
z<EVl%_a+Ch1rduJaX^8*s00*{q?QMW3&9{plx2`GV(kpLFYh|O5$DIKg;|n}4BZ&o
z3J4OxQk6Uint7wXYz@ev#xm?3#r@KK=?##zfVwV^w`;FE4PF;`2+wAjq*MeZ9g-Lj
z(26Kny%zp&AnfLWuoW5h1H{6v4uw_b_&!5nHK@vK3~YjFdKx}l)9bl9)q0|=I1<|9
zXGLb^GtjY)lMR9a{orgyY8{+;_=yZ|a;3qkU$`IIhVjDU(!l}4_R@Kk&OoN6dVl2U
zMqPSeb35BGY}XIS1TE`ut{Ar*&hknbDaG)>D+X!Pk=qc|+_f>y7^>-Gn)MVCtc%U3
z%7@kasoFTy{$ov2<MDf?VYBw3GI0CUjN%k-K%;m%irOMnN%@pCom-piiPggGiY=qk
zP$2fY+2H(7WEHjof2)vRbrt_ho`ILJUN`HGK7|#D8>8W_66i&E+mhIVZ3&e4!8fbP
z>c30E#6)I}zN1fls<unYKgA=4%2#}dtpCtF(>%XyDji0T)%gVl1rJG21~<+now`f?
z*<7lgB3dvQ4B)E3$S)iaA$UE;kBZQ)IpGlie1llxMei>f;!SH1`(J8mCwG2*n~l%i
zx$3U)mw5-(JexE@l##JzlK0$=8<Pw+CHuph*eG*T1QEPGUkT%u11#2@f<Vc!lJjcD
z<yAKpB_L$0%hNOua24R1Flcg-97L}hHwiHVpDwVH+yFU64N}nX4;hT8)8jF?=l6n}
zO5F{^{bvIP7hpapgKL6)So;v%=v?<lnJ9W$=K%}hm5uuu^Q*=RId2pGTnl=oI-~0!
zVe6$)eT4N=|M${=xwlmx-Zi_}z7nEzU71At3!7o9*=xY()KcpSTTb$9CW-<eO#i0L
z7$&9`gw(7j7B9`H5pX(ek!r3qr`@Qx*i0i0EnZwU)z^>zlwEaM2&h^&orrP`<lA<j
ziYuA86h5;CsaBD>#!Z5jm~+vhJe>-j#FxG3^&8I6GDKwI-fL0Cm@gOzh8@yd&9zL{
z+D?$+C>x-bbX_wn1bynvx7ZBr#wbEG*gE4j71|UW0L_Mzf%y2+nIOT>jrfB^q$^qm
z;$q0WR<SWM0AyEdNp`k_j>__YzS@a?5gUotPP5W5=#{9p@DJ<6L--Umkm6kTU^Oew
z1Qq0#U;4D(qFHoTAo~-rZFa<@Z7pr$s*o8|+C{}Q7KGF{8|7Q7x>yldAK$B@A+}oO
z>k2h93b1QJJTcN0+f-2BR4S^Xy1o#d8TfE>JrK)MD2k(r3Rb1|*di|vaScM?W%dqu
zT__^!>o@Ig2yDNa2qyeUU|=dHDq$w;8K@jTsAKjcT>X+PKFJyT^bHio5>QA%j^yhC
zP9On2-88$x{Zj=L9-5sZ8>Lo8F5Z!BpO0?mqG;y;oE(#)a6r9+n^2Ns!i=QIX|75l
zrzNSIw|h;D$%_qX5V23#yx4$RtGKSvoQ5-eiH*#l1FtZUc}}>~gc3Zs8LU#XIgQt5
zBcqyI=Z#Eijq(T3cSCsmp4Lh|+-p(lKWbCz*Vu@u)H4(`ODU?91dHq$yv7zigWb@A
zaF5ufa63~EH%fm-ifmJ_MlYIUSgr95@x6~dvlGzN)oq1ycF$Z9+FHD5owv$&RjWor
zQ>`s|yHA1%fz=O3%!|QiM&xLC)n?bciXO!qMXXd>apCh6*leAt<*uip?wfShN6U1I
zAPhn=qP)<&6T&*Y+X9(;D6;JbZxV4w{;xiRo930WsoqQ$E1MI}B*a2B){f?+A*8eD
zmRv5)0)^6PDDhV}XwcjKy#}BNit`KRwE3eNq?{GiUt~NV8!WlKIffpfH=Cu;*RK4V
z)govGnT_YA@?j%5n+Q?ARt{Tj7=R5bhpesM33@j}-ze*yV@0ou`EFm1J`S>U#D~f>
zI0;oF=kp!HxjC|1))(Rk`H~LTgIWBG+ZK`(9+Tyb^Y|D^d&!`Y6gZe-8V=Y1m@JEx
zdYBRfbMKjcU<$EGI^tv?>_$Ax*xAJ1-EeF8)QSYaK?fxfEgm<Pe)K@WgU`I6$?}O6
z@zv0ucE5^?$4+$zu%kw?6Og#@Oxl4B;9(<n5@?B$@CqzCG6S=Od$bA@r%h)?CwMzV
zWT>`kzj%jt8Ey@Wy0t(z3caZi@|$_&74wY&XH{KMs|c~Vad5NId%a7$o45aFoxayr
z)Y{}|MK80+l|Gg6Mn<t3;?ngerkNxpovdHwE6ofgP!FcYJlafA`{9;-z|CK2h@m!`
z#<(#A@zn;WU=v0G5}r5q8EYDMq7Bs4H{}9&g=q;9rgdhn3^Bdo99@bvUD@<Cg=Z7L
zy6TN*wGNgJw{_~eoTFX?m`_h+ex+*m>%sLwjp5a|x+yh^*F9kfJO86%F<AxTN2quk
z)jQysxz`SR7ko|7clF+_hQd=QM@%Ln*+)^v2luO9;rP4zqfe%HP0l0f3K`Y|<>R3S
z0{&l#`IH2AcXwHd221L0f&wqgwL4iIg*&7O@v}xc#OflkyplRjIw{tf=n0^ZQ~>EH
z-x9Z)C!AKQ;QC_OU`GkYZ@6x_!9Y$Sjw778%T>B1-6KG@vrI26l#d7eo4LZfuHAVe
z=w<yOUefHNXcnK7L-bv6JN-)i%BiT>U}d}~mFPwdb(1cE9XG}KqNM;s_JEaBXyc`%
zJ6s=uk3nfh6@Y4@-k}rsMu*U!!`S`Nhl}EXuabbhNEJGo$t(4-=3o+ZshWI-ZEpPf
z(0$}O>}a^4b;fx?n%Nc-bX&xyvB5|RriChfp^C!9n^Mz{gBi<ckg%x3;44Yl=qF{j
zae4?ZQ7FBKQ-pJcv(~Rrx=*t-e6&a}aHm~saJ+SBXm@sv7P?{61brPg)$@8d9KMNu
z;I##?xs?B`kyP<fhj#Z0L%Y0d^&^PvZI#1^Q*t{}SQjrt^2crnm_fGV5GMnLXBh6P
z^TQx(vR%#hpi2;eHox>9COi}7v2BQ4fj@m>a!3mQ+Rgz7HZ^3?HK*nm7J?C9B3_s2
zgs4ypgEra&mm64PA!SONBpt!(hKoEaGZ-f2R31XeZcn{}4MGPX7MRczr6GVUFay1o
z=YhX|=t4c<$uJq8tJ0b5iAN=Prvthw@DlMiLe-pC@+06SMbfEHVP&tt4g5DU@BAj5
z3nOiwja?0p%q`dL#?|(UKDI+W@Lbz;f)n9ETtEq_8S%h%TMms70tgF`!ED@M0~1%|
zx;pg?Q}cGkwJ<8u_n;eAO5HstU{g>l6#Zc{H)rBChaet*?$CDA{+4315HkYeji7Fv
z;%pw&CJXC0p9Frt@gd;4><D>*-@6*~<@}obWhir8Wi&L8BH3v_-h+1x&?XVvb7|YU
zS+%s=M7qr*nxyZNaowGxwB9mbm<KDQcybkh`Ut_W89qpM+fyu9=Z!amh&f?IRIQ{6
z{}mF6?(oA4t^|KI0_|LzGd$%%dF3933jKO9ps8tO72DAd$o`Jbjae}fU40KYWCOg5
z@i)^m%|A9ztGGSkDObz(viW=<G?$6Rhizn(-(NDm9;VkwgTDNNG^vry?n72wqgF=_
zqblxQBS(gh*SjW@CaX%y>3p#)F*|AU&Mnp~&dULsvLU)`zOGn+wY(RxAbXi7r)jn<
z_OQD{{_h$>!qo}7>cyHpO=4G<<9bJ=@v9iNtaaS6AS&~iBT+4V`2D~;f$I;)$g1xf
z9sb?fq4~Vk>5!VJbMy+9$33TY@}|6R7-(mQ7m$nZ!7@T|Tu)mZ(WP8*T4*l*SeCm;
z0W86N=n0_ut$D}PDGI3743+gz;Rg038SLQT@usx;KKx0M;2jHP+6&b4FXgejZ-pU<
zD>i}M2HHbyz_`*g3Df{38D(t)Qf&k-^aR<^xX@ucA#O^Eo08)7Xwf=FuiTdH8}Uxf
z=u9<k^Gy%&s2{z2#@Jnj!VA@yZCTf()}@__hpjQIsXy&71F!ZmwY*-A1Z;aanz}K)
zXK!S<VPRDJoMQsWdm=cToJa=kLpgDN=ZlP=_GdoBi!REq7wd^-G`eXPk85(-6({&P
z*0uQz7x8KG{@uOXf*2Z3c)4u7%(GL7_Kp#q%2mwBa&R$POqa)7=^P_H$lQxAX$j>X
zaQ7FJARE<zSR>@t87Q6teCswO<gW+3g}CHk1+UtuX_usdzwv(=Dn>goAs+?3c{yRM
z^Y`IDhW}q@$hWNMMTX%gtofrtg)7xThYl#+L4YjEW;_}t3$Jg9%q8Y1%iLCQHzDL1
zn1st+cA96vy*Ngwe9U~F{Bs#kU7w{#0lG6+fFKUU`dX{zn&+7)bfaRKa&9r~E6`Iq
z;veHOTa>_Lw)XTfze?W4z|Eu<S8-l~htXt?wgnu-kekPZXO8Ob4F5d5EiTo_t#%uW
zx>L@-n9Tncz7m@4>F6xNINql1_go0G5thB~u<QM~_et<>FOlve`bP={iJe#BcAqEn
z2Ut(wNAkStNRo25Jhl&Z6lHP1_5nwz+xNI6b}A^zQoAk5Jn*GEunMF-ytg1u%-bYc
z(C#2;TRN(_3+~*)Cgf}e?vu`!NyW|5*E>!pm^BWi9g5PP&608ID06ylgdD2>p-xui
zZkJ;d7Zu$Mt!WCXj>G#%h7S)(oq#?kx{7Rf5JYN>KPwydJn3lu8R%%}Q>un8;bAr&
z&2uia9C@`#pgu(#OH!0W!w+27XBp0ZJU4$~PCcoOZ6>M@!<`B)IX>nKl_y6DaU@78
zv5If_4w1epoGQZwR55qGz0HCi?rp!X(n9}sTl?Smo35xIW$<72{JXwq4LxE3P~xJ-
z3ry7&R`4u%V|@egkzoYndW(<yLnrR`Zu?!0a4(F^sVZGIY-#!$-|VABS{3MtnwiAq
zcJ06LqD0`rotY~-M0A1{b2#4{<=J!!5t&YygnTS~HV3aTL!QBPLj6sam9`3q+-#`=
zUWHZYWz&`6`2?_MU@z1)`9-bZFNG;b&%E3-jheqxfbC)Jnt-`l+0}(uG@UeuCQUU@
zA+)+Tf<@=q5)`Fa8EsM6l92KTx082x6I@cNzkyHahI-9KA0R!viJnf$qb;3}0h%07
zQfL;lAVcSS?C{wa^3C!}bJ&^M(a)BaM`B<(#KMQHvjy;dGcQ7hMV}S7ajv`3iwM`-
z)k3wEBb&z1gVpWV#7V!Yd1HAN&~FOo<PF|*-t%0A+k0OghSBF~Wp7g&k?Ibvc{l5q
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

diff --git a/DataTables/Buttons-1.6.2/css/buttons.bootstrap.css b/DataTables/Buttons-1.6.2/css/buttons.bootstrap.css
deleted file mode 100644
index b9e7307..0000000
--- a/DataTables/Buttons-1.6.2/css/buttons.bootstrap.css
+++ /dev/null
@@ -1,187 +0,0 @@
-@keyframes dtb-spinner {
-  100% {
-    transform: rotate(360deg);
-  }
-}
-@-o-keyframes dtb-spinner {
-  100% {
-    -o-transform: rotate(360deg);
-    transform: rotate(360deg);
-  }
-}
-@-ms-keyframes dtb-spinner {
-  100% {
-    -ms-transform: rotate(360deg);
-    transform: rotate(360deg);
-  }
-}
-@-webkit-keyframes dtb-spinner {
-  100% {
-    -webkit-transform: rotate(360deg);
-    transform: rotate(360deg);
-  }
-}
-@-moz-keyframes dtb-spinner {
-  100% {
-    -moz-transform: rotate(360deg);
-    transform: rotate(360deg);
-  }
-}
-div.dt-button-info {
-  position: fixed;
-  top: 50%;
-  left: 50%;
-  width: 400px;
-  margin-top: -100px;
-  margin-left: -200px;
-  background-color: white;
-  border: 2px solid #111;
-  box-shadow: 3px 3px 8px rgba(0, 0, 0, 0.3);
-  border-radius: 3px;
-  text-align: center;
-  z-index: 21;
-}
-div.dt-button-info h2 {
-  padding: 0.5em;
-  margin: 0;
-  font-weight: normal;
-  border-bottom: 1px solid #ddd;
-  background-color: #f3f3f3;
-}
-div.dt-button-info > div {
-  padding: 1em;
-}
-
-div.dt-button-collection-title {
-  text-align: center;
-  padding: 0.3em 0 0.5em;
-  font-size: 0.9em;
-}
-
-div.dt-button-collection-title:empty {
-  display: none;
-}
-
-div.dt-button-collection {
-  position: absolute;
-}
-div.dt-button-collection ul.dropdown-menu {
-  display: block;
-  z-index: 2002;
-  min-width: 100%;
-}
-div.dt-button-collection div.dt-button-collection-title {
-  background-color: white;
-}
-div.dt-button-collection.fixed {
-  position: fixed;
-  top: 50%;
-  left: 50%;
-  margin-left: -75px;
-  border-radius: 0;
-}
-div.dt-button-collection.fixed.two-column {
-  margin-left: -200px;
-}
-div.dt-button-collection.fixed.three-column {
-  margin-left: -225px;
-}
-div.dt-button-collection.fixed.four-column {
-  margin-left: -300px;
-}
-div.dt-button-collection > :last-child {
-  display: block !important;
-  -webkit-column-gap: 8px;
-  -moz-column-gap: 8px;
-  -ms-column-gap: 8px;
-  -o-column-gap: 8px;
-  column-gap: 8px;
-}
-div.dt-button-collection > :last-child > * {
-  -webkit-column-break-inside: avoid;
-  break-inside: avoid;
-}
-div.dt-button-collection.two-column {
-  width: 400px;
-}
-div.dt-button-collection.two-column > :last-child {
-  padding-bottom: 1px;
-  -webkit-column-count: 2;
-  -moz-column-count: 2;
-  -ms-column-count: 2;
-  -o-column-count: 2;
-  column-count: 2;
-}
-div.dt-button-collection.three-column {
-  width: 450px;
-}
-div.dt-button-collection.three-column > :last-child {
-  padding-bottom: 1px;
-  -webkit-column-count: 3;
-  -moz-column-count: 3;
-  -ms-column-count: 3;
-  -o-column-count: 3;
-  column-count: 3;
-}
-div.dt-button-collection.four-column {
-  width: 600px;
-}
-div.dt-button-collection.four-column > :last-child {
-  padding-bottom: 1px;
-  -webkit-column-count: 4;
-  -moz-column-count: 4;
-  -ms-column-count: 4;
-  -o-column-count: 4;
-  column-count: 4;
-}
-div.dt-button-collection .dt-button {
-  border-radius: 0;
-}
-
-div.dt-button-background {
-  position: fixed;
-  top: 0;
-  left: 0;
-  width: 100%;
-  height: 100%;
-  z-index: 2001;
-}
-
-@media screen and (max-width: 767px) {
-  div.dt-buttons {
-    float: none;
-    width: 100%;
-    text-align: center;
-    margin-bottom: 0.5em;
-  }
-  div.dt-buttons a.btn {
-    float: none;
-  }
-}
-div.dt-buttons button.btn.processing,
-div.dt-buttons div.btn.processing,
-div.dt-buttons a.btn.processing {
-  color: rgba(0, 0, 0, 0.2);
-}
-div.dt-buttons button.btn.processing:after,
-div.dt-buttons div.btn.processing:after,
-div.dt-buttons a.btn.processing:after {
-  position: absolute;
-  top: 50%;
-  left: 50%;
-  width: 16px;
-  height: 16px;
-  margin: -8px 0 0 -8px;
-  box-sizing: border-box;
-  display: block;
-  content: ' ';
-  border: 2px solid #282828;
-  border-radius: 50%;
-  border-left-color: transparent;
-  border-right-color: transparent;
-  animation: dtb-spinner 1500ms infinite linear;
-  -o-animation: dtb-spinner 1500ms infinite linear;
-  -ms-animation: dtb-spinner 1500ms infinite linear;
-  -webkit-animation: dtb-spinner 1500ms infinite linear;
-  -moz-animation: dtb-spinner 1500ms infinite linear;
-}
diff --git a/DataTables/Buttons-1.6.2/css/buttons.bootstrap.min.css b/DataTables/Buttons-1.6.2/css/buttons.bootstrap.min.css
deleted file mode 100644
index a027a3e..0000000
--- a/DataTables/Buttons-1.6.2/css/buttons.bootstrap.min.css
+++ /dev/null
@@ -1 +0,0 @@
-@keyframes dtb-spinner{100%{transform:rotate(360deg)}}@-o-keyframes dtb-spinner{100%{-o-transform:rotate(360deg);transform:rotate(360deg)}}@-ms-keyframes dtb-spinner{100%{-ms-transform:rotate(360deg);transform:rotate(360deg)}}@-webkit-keyframes dtb-spinner{100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@-moz-keyframes dtb-spinner{100%{-moz-transform:rotate(360deg);transform:rotate(360deg)}}div.dt-button-info{position:fixed;top:50%;left:50%;width:400px;margin-top:-100px;margin-left:-200px;background-color:white;border:2px solid #111;box-shadow:3px 3px 8px rgba(0,0,0,0.3);border-radius:3px;text-align:center;z-index:21}div.dt-button-info h2{padding:0.5em;margin:0;font-weight:normal;border-bottom:1px solid #ddd;background-color:#f3f3f3}div.dt-button-info>div{padding:1em}div.dt-button-collection-title{text-align:center;padding:0.3em 0 0.5em;font-size:0.9em}div.dt-button-collection-title:empty{display:none}div.dt-button-collection{position:absolute}div.dt-button-collection ul.dropdown-menu{display:block;z-index:2002;min-width:100%}div.dt-button-collection div.dt-button-collection-title{background-color:white}div.dt-button-collection.fixed{position:fixed;top:50%;left:50%;margin-left:-75px;border-radius:0}div.dt-button-collection.fixed.two-column{margin-left:-200px}div.dt-button-collection.fixed.three-column{margin-left:-225px}div.dt-button-collection.fixed.four-column{margin-left:-300px}div.dt-button-collection>:last-child{display:block !important;-webkit-column-gap:8px;-moz-column-gap:8px;-ms-column-gap:8px;-o-column-gap:8px;column-gap:8px}div.dt-button-collection>:last-child>*{-webkit-column-break-inside:avoid;break-inside:avoid}div.dt-button-collection.two-column{width:400px}div.dt-button-collection.two-column>:last-child{padding-bottom:1px;-webkit-column-count:2;-moz-column-count:2;-ms-column-count:2;-o-column-count:2;column-count:2}div.dt-button-collection.three-column{width:450px}div.dt-button-collection.three-column>:last-child{padding-bottom:1px;-webkit-column-count:3;-moz-column-count:3;-ms-column-count:3;-o-column-count:3;column-count:3}div.dt-button-collection.four-column{width:600px}div.dt-button-collection.four-column>:last-child{padding-bottom:1px;-webkit-column-count:4;-moz-column-count:4;-ms-column-count:4;-o-column-count:4;column-count:4}div.dt-button-collection .dt-button{border-radius:0}div.dt-button-background{position:fixed;top:0;left:0;width:100%;height:100%;z-index:2001}@media screen and (max-width: 767px){div.dt-buttons{float:none;width:100%;text-align:center;margin-bottom:0.5em}div.dt-buttons a.btn{float:none}}div.dt-buttons button.btn.processing,div.dt-buttons div.btn.processing,div.dt-buttons a.btn.processing{color:rgba(0,0,0,0.2)}div.dt-buttons button.btn.processing:after,div.dt-buttons div.btn.processing:after,div.dt-buttons a.btn.processing:after{position:absolute;top:50%;left:50%;width:16px;height:16px;margin:-8px 0 0 -8px;box-sizing:border-box;display:block;content:' ';border:2px solid #282828;border-radius:50%;border-left-color:transparent;border-right-color:transparent;animation:dtb-spinner 1500ms infinite linear;-o-animation:dtb-spinner 1500ms infinite linear;-ms-animation:dtb-spinner 1500ms infinite linear;-webkit-animation:dtb-spinner 1500ms infinite linear;-moz-animation:dtb-spinner 1500ms infinite linear}
diff --git a/DataTables/Buttons-1.6.2/css/buttons.bootstrap4.css b/DataTables/Buttons-1.6.2/css/buttons.bootstrap4.css
deleted file mode 100644
index 2851f5f..0000000
--- a/DataTables/Buttons-1.6.2/css/buttons.bootstrap4.css
+++ /dev/null
@@ -1,195 +0,0 @@
-@keyframes dtb-spinner {
-  100% {
-    transform: rotate(360deg);
-  }
-}
-@-o-keyframes dtb-spinner {
-  100% {
-    -o-transform: rotate(360deg);
-    transform: rotate(360deg);
-  }
-}
-@-ms-keyframes dtb-spinner {
-  100% {
-    -ms-transform: rotate(360deg);
-    transform: rotate(360deg);
-  }
-}
-@-webkit-keyframes dtb-spinner {
-  100% {
-    -webkit-transform: rotate(360deg);
-    transform: rotate(360deg);
-  }
-}
-@-moz-keyframes dtb-spinner {
-  100% {
-    -moz-transform: rotate(360deg);
-    transform: rotate(360deg);
-  }
-}
-div.dt-button-info {
-  position: fixed;
-  top: 50%;
-  left: 50%;
-  width: 400px;
-  margin-top: -100px;
-  margin-left: -200px;
-  background-color: white;
-  border: 2px solid #111;
-  box-shadow: 3px 3px 8px rgba(0, 0, 0, 0.3);
-  border-radius: 3px;
-  text-align: center;
-  z-index: 21;
-}
-div.dt-button-info h2 {
-  padding: 0.5em;
-  margin: 0;
-  font-weight: normal;
-  border-bottom: 1px solid #ddd;
-  background-color: #f3f3f3;
-}
-div.dt-button-info > div {
-  padding: 1em;
-}
-
-div.dt-button-collection-title {
-  text-align: center;
-  padding: 0.3em 0 0.5em;
-  font-size: 0.9em;
-}
-
-div.dt-button-collection-title:empty {
-  display: none;
-}
-
-div.dt-button-collection {
-  position: absolute;
-  z-index: 2001;
-}
-div.dt-button-collection div.dropdown-menu {
-  display: block;
-  z-index: 2002;
-  min-width: 100%;
-}
-div.dt-button-collection div.dt-button-collection-title {
-  background-color: white;
-  border: 1px solid rgba(0, 0, 0, 0.15);
-}
-div.dt-button-collection.fixed {
-  position: fixed;
-  top: 50%;
-  left: 50%;
-  margin-left: -75px;
-  border-radius: 0;
-}
-div.dt-button-collection.fixed.two-column {
-  margin-left: -200px;
-}
-div.dt-button-collection.fixed.three-column {
-  margin-left: -225px;
-}
-div.dt-button-collection.fixed.four-column {
-  margin-left: -300px;
-}
-div.dt-button-collection > :last-child {
-  display: block !important;
-  -webkit-column-gap: 8px;
-  -moz-column-gap: 8px;
-  -ms-column-gap: 8px;
-  -o-column-gap: 8px;
-  column-gap: 8px;
-}
-div.dt-button-collection > :last-child > * {
-  -webkit-column-break-inside: avoid;
-  break-inside: avoid;
-}
-div.dt-button-collection.two-column {
-  width: 400px;
-}
-div.dt-button-collection.two-column > :last-child {
-  padding-bottom: 1px;
-  -webkit-column-count: 2;
-  -moz-column-count: 2;
-  -ms-column-count: 2;
-  -o-column-count: 2;
-  column-count: 2;
-}
-div.dt-button-collection.three-column {
-  width: 450px;
-}
-div.dt-button-collection.three-column > :last-child {
-  padding-bottom: 1px;
-  -webkit-column-count: 3;
-  -moz-column-count: 3;
-  -ms-column-count: 3;
-  -o-column-count: 3;
-  column-count: 3;
-}
-div.dt-button-collection.four-column {
-  width: 600px;
-}
-div.dt-button-collection.four-column > :last-child {
-  padding-bottom: 1px;
-  -webkit-column-count: 4;
-  -moz-column-count: 4;
-  -ms-column-count: 4;
-  -o-column-count: 4;
-  column-count: 4;
-}
-div.dt-button-collection .dt-button {
-  border-radius: 0;
-}
-div.dt-button-collection.fixed {
-  max-width: none;
-}
-div.dt-button-collection.fixed:before, div.dt-button-collection.fixed:after {
-  display: none;
-}
-
-div.dt-button-background {
-  position: fixed;
-  top: 0;
-  left: 0;
-  width: 100%;
-  height: 100%;
-  z-index: 999;
-}
-
-@media screen and (max-width: 767px) {
-  div.dt-buttons {
-    float: none;
-    width: 100%;
-    text-align: center;
-    margin-bottom: 0.5em;
-  }
-  div.dt-buttons a.btn {
-    float: none;
-  }
-}
-div.dt-buttons button.btn.processing,
-div.dt-buttons div.btn.processing,
-div.dt-buttons a.btn.processing {
-  color: rgba(0, 0, 0, 0.2);
-}
-div.dt-buttons button.btn.processing:after,
-div.dt-buttons div.btn.processing:after,
-div.dt-buttons a.btn.processing:after {
-  position: absolute;
-  top: 50%;
-  left: 50%;
-  width: 16px;
-  height: 16px;
-  margin: -8px 0 0 -8px;
-  box-sizing: border-box;
-  display: block;
-  content: ' ';
-  border: 2px solid #282828;
-  border-radius: 50%;
-  border-left-color: transparent;
-  border-right-color: transparent;
-  animation: dtb-spinner 1500ms infinite linear;
-  -o-animation: dtb-spinner 1500ms infinite linear;
-  -ms-animation: dtb-spinner 1500ms infinite linear;
-  -webkit-animation: dtb-spinner 1500ms infinite linear;
-  -moz-animation: dtb-spinner 1500ms infinite linear;
-}
diff --git a/DataTables/Buttons-1.6.2/css/buttons.bootstrap4.min.css b/DataTables/Buttons-1.6.2/css/buttons.bootstrap4.min.css
deleted file mode 100644
index fd0f71b..0000000
--- a/DataTables/Buttons-1.6.2/css/buttons.bootstrap4.min.css
+++ /dev/null
@@ -1 +0,0 @@
-@keyframes dtb-spinner{100%{transform:rotate(360deg)}}@-o-keyframes dtb-spinner{100%{-o-transform:rotate(360deg);transform:rotate(360deg)}}@-ms-keyframes dtb-spinner{100%{-ms-transform:rotate(360deg);transform:rotate(360deg)}}@-webkit-keyframes dtb-spinner{100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@-moz-keyframes dtb-spinner{100%{-moz-transform:rotate(360deg);transform:rotate(360deg)}}div.dt-button-info{position:fixed;top:50%;left:50%;width:400px;margin-top:-100px;margin-left:-200px;background-color:white;border:2px solid #111;box-shadow:3px 3px 8px rgba(0,0,0,0.3);border-radius:3px;text-align:center;z-index:21}div.dt-button-info h2{padding:0.5em;margin:0;font-weight:normal;border-bottom:1px solid #ddd;background-color:#f3f3f3}div.dt-button-info>div{padding:1em}div.dt-button-collection-title{text-align:center;padding:0.3em 0 0.5em;font-size:0.9em}div.dt-button-collection-title:empty{display:none}div.dt-button-collection{position:absolute;z-index:2001}div.dt-button-collection div.dropdown-menu{display:block;z-index:2002;min-width:100%}div.dt-button-collection div.dt-button-collection-title{background-color:white;border:1px solid rgba(0,0,0,0.15)}div.dt-button-collection.fixed{position:fixed;top:50%;left:50%;margin-left:-75px;border-radius:0}div.dt-button-collection.fixed.two-column{margin-left:-200px}div.dt-button-collection.fixed.three-column{margin-left:-225px}div.dt-button-collection.fixed.four-column{margin-left:-300px}div.dt-button-collection>:last-child{display:block !important;-webkit-column-gap:8px;-moz-column-gap:8px;-ms-column-gap:8px;-o-column-gap:8px;column-gap:8px}div.dt-button-collection>:last-child>*{-webkit-column-break-inside:avoid;break-inside:avoid}div.dt-button-collection.two-column{width:400px}div.dt-button-collection.two-column>:last-child{padding-bottom:1px;-webkit-column-count:2;-moz-column-count:2;-ms-column-count:2;-o-column-count:2;column-count:2}div.dt-button-collection.three-column{width:450px}div.dt-button-collection.three-column>:last-child{padding-bottom:1px;-webkit-column-count:3;-moz-column-count:3;-ms-column-count:3;-o-column-count:3;column-count:3}div.dt-button-collection.four-column{width:600px}div.dt-button-collection.four-column>:last-child{padding-bottom:1px;-webkit-column-count:4;-moz-column-count:4;-ms-column-count:4;-o-column-count:4;column-count:4}div.dt-button-collection .dt-button{border-radius:0}div.dt-button-collection.fixed{max-width:none}div.dt-button-collection.fixed:before,div.dt-button-collection.fixed:after{display:none}div.dt-button-background{position:fixed;top:0;left:0;width:100%;height:100%;z-index:999}@media screen and (max-width: 767px){div.dt-buttons{float:none;width:100%;text-align:center;margin-bottom:0.5em}div.dt-buttons a.btn{float:none}}div.dt-buttons button.btn.processing,div.dt-buttons div.btn.processing,div.dt-buttons a.btn.processing{color:rgba(0,0,0,0.2)}div.dt-buttons button.btn.processing:after,div.dt-buttons div.btn.processing:after,div.dt-buttons a.btn.processing:after{position:absolute;top:50%;left:50%;width:16px;height:16px;margin:-8px 0 0 -8px;box-sizing:border-box;display:block;content:' ';border:2px solid #282828;border-radius:50%;border-left-color:transparent;border-right-color:transparent;animation:dtb-spinner 1500ms infinite linear;-o-animation:dtb-spinner 1500ms infinite linear;-ms-animation:dtb-spinner 1500ms infinite linear;-webkit-animation:dtb-spinner 1500ms infinite linear;-moz-animation:dtb-spinner 1500ms infinite linear}
diff --git a/DataTables/Buttons-1.6.2/css/buttons.dataTables.css b/DataTables/Buttons-1.6.2/css/buttons.dataTables.css
deleted file mode 100644
index d7a5ef8..0000000
--- a/DataTables/Buttons-1.6.2/css/buttons.dataTables.css
+++ /dev/null
@@ -1,387 +0,0 @@
-@keyframes dtb-spinner {
-  100% {
-    transform: rotate(360deg);
-  }
-}
-@-o-keyframes dtb-spinner {
-  100% {
-    -o-transform: rotate(360deg);
-    transform: rotate(360deg);
-  }
-}
-@-ms-keyframes dtb-spinner {
-  100% {
-    -ms-transform: rotate(360deg);
-    transform: rotate(360deg);
-  }
-}
-@-webkit-keyframes dtb-spinner {
-  100% {
-    -webkit-transform: rotate(360deg);
-    transform: rotate(360deg);
-  }
-}
-@-moz-keyframes dtb-spinner {
-  100% {
-    -moz-transform: rotate(360deg);
-    transform: rotate(360deg);
-  }
-}
-div.dt-button-info {
-  position: fixed;
-  top: 50%;
-  left: 50%;
-  width: 400px;
-  margin-top: -100px;
-  margin-left: -200px;
-  background-color: white;
-  border: 2px solid #111;
-  box-shadow: 3px 3px 8px rgba(0, 0, 0, 0.3);
-  border-radius: 3px;
-  text-align: center;
-  z-index: 21;
-}
-div.dt-button-info h2 {
-  padding: 0.5em;
-  margin: 0;
-  font-weight: normal;
-  border-bottom: 1px solid #ddd;
-  background-color: #f3f3f3;
-}
-div.dt-button-info > div {
-  padding: 1em;
-}
-
-div.dt-button-collection-title {
-  text-align: center;
-  padding: 0.3em 0 0.5em;
-  font-size: 0.9em;
-}
-
-div.dt-button-collection-title:empty {
-  display: none;
-}
-
-button.dt-button,
-div.dt-button,
-a.dt-button {
-  position: relative;
-  display: inline-block;
-  box-sizing: border-box;
-  margin-right: 0.333em;
-  margin-bottom: 0.333em;
-  padding: 0.5em 1em;
-  border: 1px solid #999;
-  border-radius: 2px;
-  cursor: pointer;
-  font-size: 0.88em;
-  line-height: 1.6em;
-  color: black;
-  white-space: nowrap;
-  overflow: hidden;
-  background-color: #e9e9e9;
-  /* Fallback */
-  background-image: -webkit-linear-gradient(top, white 0%, #e9e9e9 100%);
-  /* Chrome 10+, Saf5.1+, iOS 5+ */
-  background-image: -moz-linear-gradient(top, white 0%, #e9e9e9 100%);
-  /* FF3.6 */
-  background-image: -ms-linear-gradient(top, white 0%, #e9e9e9 100%);
-  /* IE10 */
-  background-image: -o-linear-gradient(top, white 0%, #e9e9e9 100%);
-  /* Opera 11.10+ */
-  background-image: linear-gradient(to bottom, white 0%, #e9e9e9 100%);
-  filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0,StartColorStr='white', EndColorStr='#e9e9e9');
-  -webkit-user-select: none;
-  -moz-user-select: none;
-  -ms-user-select: none;
-  user-select: none;
-  text-decoration: none;
-  outline: none;
-  text-overflow: ellipsis;
-}
-button.dt-button.disabled,
-div.dt-button.disabled,
-a.dt-button.disabled {
-  color: #999;
-  border: 1px solid #d0d0d0;
-  cursor: default;
-  background-color: #f9f9f9;
-  /* Fallback */
-  background-image: -webkit-linear-gradient(top, #ffffff 0%, #f9f9f9 100%);
-  /* Chrome 10+, Saf5.1+, iOS 5+ */
-  background-image: -moz-linear-gradient(top, #ffffff 0%, #f9f9f9 100%);
-  /* FF3.6 */
-  background-image: -ms-linear-gradient(top, #ffffff 0%, #f9f9f9 100%);
-  /* IE10 */
-  background-image: -o-linear-gradient(top, #ffffff 0%, #f9f9f9 100%);
-  /* Opera 11.10+ */
-  background-image: linear-gradient(to bottom, #ffffff 0%, #f9f9f9 100%);
-  filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0,StartColorStr='#ffffff', EndColorStr='#f9f9f9');
-}
-button.dt-button:active:not(.disabled), button.dt-button.active:not(.disabled),
-div.dt-button:active:not(.disabled),
-div.dt-button.active:not(.disabled),
-a.dt-button:active:not(.disabled),
-a.dt-button.active:not(.disabled) {
-  background-color: #e2e2e2;
-  /* Fallback */
-  background-image: -webkit-linear-gradient(top, #f3f3f3 0%, #e2e2e2 100%);
-  /* Chrome 10+, Saf5.1+, iOS 5+ */
-  background-image: -moz-linear-gradient(top, #f3f3f3 0%, #e2e2e2 100%);
-  /* FF3.6 */
-  background-image: -ms-linear-gradient(top, #f3f3f3 0%, #e2e2e2 100%);
-  /* IE10 */
-  background-image: -o-linear-gradient(top, #f3f3f3 0%, #e2e2e2 100%);
-  /* Opera 11.10+ */
-  background-image: linear-gradient(to bottom, #f3f3f3 0%, #e2e2e2 100%);
-  filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0,StartColorStr='#f3f3f3', EndColorStr='#e2e2e2');
-  box-shadow: inset 1px 1px 3px #999999;
-}
-button.dt-button:active:not(.disabled):hover:not(.disabled), button.dt-button.active:not(.disabled):hover:not(.disabled),
-div.dt-button:active:not(.disabled):hover:not(.disabled),
-div.dt-button.active:not(.disabled):hover:not(.disabled),
-a.dt-button:active:not(.disabled):hover:not(.disabled),
-a.dt-button.active:not(.disabled):hover:not(.disabled) {
-  box-shadow: inset 1px 1px 3px #999999;
-  background-color: #cccccc;
-  /* Fallback */
-  background-image: -webkit-linear-gradient(top, #eaeaea 0%, #cccccc 100%);
-  /* Chrome 10+, Saf5.1+, iOS 5+ */
-  background-image: -moz-linear-gradient(top, #eaeaea 0%, #cccccc 100%);
-  /* FF3.6 */
-  background-image: -ms-linear-gradient(top, #eaeaea 0%, #cccccc 100%);
-  /* IE10 */
-  background-image: -o-linear-gradient(top, #eaeaea 0%, #cccccc 100%);
-  /* Opera 11.10+ */
-  background-image: linear-gradient(to bottom, #eaeaea 0%, #cccccc 100%);
-  filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0,StartColorStr='#eaeaea', EndColorStr='#cccccc');
-}
-button.dt-button:hover,
-div.dt-button:hover,
-a.dt-button:hover {
-  text-decoration: none;
-}
-button.dt-button:hover:not(.disabled),
-div.dt-button:hover:not(.disabled),
-a.dt-button:hover:not(.disabled) {
-  border: 1px solid #666;
-  background-color: #e0e0e0;
-  /* Fallback */
-  background-image: -webkit-linear-gradient(top, #f9f9f9 0%, #e0e0e0 100%);
-  /* Chrome 10+, Saf5.1+, iOS 5+ */
-  background-image: -moz-linear-gradient(top, #f9f9f9 0%, #e0e0e0 100%);
-  /* FF3.6 */
-  background-image: -ms-linear-gradient(top, #f9f9f9 0%, #e0e0e0 100%);
-  /* IE10 */
-  background-image: -o-linear-gradient(top, #f9f9f9 0%, #e0e0e0 100%);
-  /* Opera 11.10+ */
-  background-image: linear-gradient(to bottom, #f9f9f9 0%, #e0e0e0 100%);
-  filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0,StartColorStr='#f9f9f9', EndColorStr='#e0e0e0');
-}
-button.dt-button:focus:not(.disabled),
-div.dt-button:focus:not(.disabled),
-a.dt-button:focus:not(.disabled) {
-  border: 1px solid #426c9e;
-  text-shadow: 0 1px 0 #c4def1;
-  outline: none;
-  background-color: #79ace9;
-  /* Fallback */
-  background-image: -webkit-linear-gradient(top, #bddef4 0%, #79ace9 100%);
-  /* Chrome 10+, Saf5.1+, iOS 5+ */
-  background-image: -moz-linear-gradient(top, #bddef4 0%, #79ace9 100%);
-  /* FF3.6 */
-  background-image: -ms-linear-gradient(top, #bddef4 0%, #79ace9 100%);
-  /* IE10 */
-  background-image: -o-linear-gradient(top, #bddef4 0%, #79ace9 100%);
-  /* Opera 11.10+ */
-  background-image: linear-gradient(to bottom, #bddef4 0%, #79ace9 100%);
-  filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0,StartColorStr='#bddef4', EndColorStr='#79ace9');
-}
-
-.dt-button embed {
-  outline: none;
-}
-
-div.dt-buttons {
-  position: relative;
-  float: left;
-}
-div.dt-buttons.buttons-right {
-  float: right;
-}
-
-div.dataTables_layout_cell div.dt-buttons {
-  float: none;
-}
-div.dataTables_layout_cell div.dt-buttons.buttons-right {
-  float: none;
-}
-
-div.dt-button-collection {
-  position: absolute;
-  top: 0;
-  left: 0;
-  width: 150px;
-  margin-top: 3px;
-  padding: 8px 8px 4px 8px;
-  border: 1px solid #ccc;
-  border: 1px solid rgba(0, 0, 0, 0.4);
-  background-color: white;
-  overflow: hidden;
-  z-index: 2002;
-  border-radius: 5px;
-  box-shadow: 3px 3px 5px rgba(0, 0, 0, 0.3);
-  box-sizing: border-box;
-}
-div.dt-button-collection button.dt-button,
-div.dt-button-collection div.dt-button,
-div.dt-button-collection a.dt-button {
-  position: relative;
-  left: 0;
-  right: 0;
-  width: 100%;
-  display: block;
-  float: none;
-  margin-bottom: 4px;
-  margin-right: 0;
-}
-div.dt-button-collection button.dt-button:active:not(.disabled), div.dt-button-collection button.dt-button.active:not(.disabled),
-div.dt-button-collection div.dt-button:active:not(.disabled),
-div.dt-button-collection div.dt-button.active:not(.disabled),
-div.dt-button-collection a.dt-button:active:not(.disabled),
-div.dt-button-collection a.dt-button.active:not(.disabled) {
-  background-color: #dadada;
-  /* Fallback */
-  background-image: -webkit-linear-gradient(top, #f0f0f0 0%, #dadada 100%);
-  /* Chrome 10+, Saf5.1+, iOS 5+ */
-  background-image: -moz-linear-gradient(top, #f0f0f0 0%, #dadada 100%);
-  /* FF3.6 */
-  background-image: -ms-linear-gradient(top, #f0f0f0 0%, #dadada 100%);
-  /* IE10 */
-  background-image: -o-linear-gradient(top, #f0f0f0 0%, #dadada 100%);
-  /* Opera 11.10+ */
-  background-image: linear-gradient(to bottom, #f0f0f0 0%, #dadada 100%);
-  filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0,StartColorStr='#f0f0f0', EndColorStr='#dadada');
-  box-shadow: inset 1px 1px 3px #666;
-}
-div.dt-button-collection.fixed {
-  position: fixed;
-  top: 50%;
-  left: 50%;
-  margin-left: -75px;
-  border-radius: 0;
-}
-div.dt-button-collection.fixed.two-column {
-  margin-left: -200px;
-}
-div.dt-button-collection.fixed.three-column {
-  margin-left: -225px;
-}
-div.dt-button-collection.fixed.four-column {
-  margin-left: -300px;
-}
-div.dt-button-collection > :last-child {
-  display: block !important;
-  -webkit-column-gap: 8px;
-  -moz-column-gap: 8px;
-  -ms-column-gap: 8px;
-  -o-column-gap: 8px;
-  column-gap: 8px;
-}
-div.dt-button-collection > :last-child > * {
-  -webkit-column-break-inside: avoid;
-  break-inside: avoid;
-}
-div.dt-button-collection.two-column {
-  width: 400px;
-}
-div.dt-button-collection.two-column > :last-child {
-  padding-bottom: 1px;
-  -webkit-column-count: 2;
-  -moz-column-count: 2;
-  -ms-column-count: 2;
-  -o-column-count: 2;
-  column-count: 2;
-}
-div.dt-button-collection.three-column {
-  width: 450px;
-}
-div.dt-button-collection.three-column > :last-child {
-  padding-bottom: 1px;
-  -webkit-column-count: 3;
-  -moz-column-count: 3;
-  -ms-column-count: 3;
-  -o-column-count: 3;
-  column-count: 3;
-}
-div.dt-button-collection.four-column {
-  width: 600px;
-}
-div.dt-button-collection.four-column > :last-child {
-  padding-bottom: 1px;
-  -webkit-column-count: 4;
-  -moz-column-count: 4;
-  -ms-column-count: 4;
-  -o-column-count: 4;
-  column-count: 4;
-}
-div.dt-button-collection .dt-button {
-  border-radius: 0;
-}
-
-div.dt-button-background {
-  position: fixed;
-  top: 0;
-  left: 0;
-  width: 100%;
-  height: 100%;
-  background: rgba(0, 0, 0, 0.7);
-  /* Fallback */
-  background: -ms-radial-gradient(center, ellipse farthest-corner, rgba(0, 0, 0, 0.3) 0%, rgba(0, 0, 0, 0.7) 100%);
-  /* IE10 Consumer Preview */
-  background: -moz-radial-gradient(center, ellipse farthest-corner, rgba(0, 0, 0, 0.3) 0%, rgba(0, 0, 0, 0.7) 100%);
-  /* Firefox */
-  background: -o-radial-gradient(center, ellipse farthest-corner, rgba(0, 0, 0, 0.3) 0%, rgba(0, 0, 0, 0.7) 100%);
-  /* Opera */
-  background: -webkit-gradient(radial, center center, 0, center center, 497, color-stop(0, rgba(0, 0, 0, 0.3)), color-stop(1, rgba(0, 0, 0, 0.7)));
-  /* Webkit (Safari/Chrome 10) */
-  background: -webkit-radial-gradient(center, ellipse farthest-corner, rgba(0, 0, 0, 0.3) 0%, rgba(0, 0, 0, 0.7) 100%);
-  /* Webkit (Chrome 11+) */
-  background: radial-gradient(ellipse farthest-corner at center, rgba(0, 0, 0, 0.3) 0%, rgba(0, 0, 0, 0.7) 100%);
-  /* W3C Markup, IE10 Release Preview */
-  z-index: 2001;
-}
-
-@media screen and (max-width: 640px) {
-  div.dt-buttons {
-    float: none !important;
-    text-align: center;
-  }
-}
-button.dt-button.processing,
-div.dt-button.processing,
-a.dt-button.processing {
-  color: rgba(0, 0, 0, 0.2);
-}
-button.dt-button.processing:after,
-div.dt-button.processing:after,
-a.dt-button.processing:after {
-  position: absolute;
-  top: 50%;
-  left: 50%;
-  width: 16px;
-  height: 16px;
-  margin: -8px 0 0 -8px;
-  box-sizing: border-box;
-  display: block;
-  content: ' ';
-  border: 2px solid #282828;
-  border-radius: 50%;
-  border-left-color: transparent;
-  border-right-color: transparent;
-  animation: dtb-spinner 1500ms infinite linear;
-  -o-animation: dtb-spinner 1500ms infinite linear;
-  -ms-animation: dtb-spinner 1500ms infinite linear;
-  -webkit-animation: dtb-spinner 1500ms infinite linear;
-  -moz-animation: dtb-spinner 1500ms infinite linear;
-}
diff --git a/DataTables/Buttons-1.6.2/css/buttons.dataTables.min.css b/DataTables/Buttons-1.6.2/css/buttons.dataTables.min.css
deleted file mode 100644
index 9b90ce6..0000000
--- a/DataTables/Buttons-1.6.2/css/buttons.dataTables.min.css
+++ /dev/null
@@ -1 +0,0 @@
-@keyframes dtb-spinner{100%{transform:rotate(360deg)}}@-o-keyframes dtb-spinner{100%{-o-transform:rotate(360deg);transform:rotate(360deg)}}@-ms-keyframes dtb-spinner{100%{-ms-transform:rotate(360deg);transform:rotate(360deg)}}@-webkit-keyframes dtb-spinner{100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@-moz-keyframes dtb-spinner{100%{-moz-transform:rotate(360deg);transform:rotate(360deg)}}div.dt-button-info{position:fixed;top:50%;left:50%;width:400px;margin-top:-100px;margin-left:-200px;background-color:white;border:2px solid #111;box-shadow:3px 3px 8px rgba(0,0,0,0.3);border-radius:3px;text-align:center;z-index:21}div.dt-button-info h2{padding:0.5em;margin:0;font-weight:normal;border-bottom:1px solid #ddd;background-color:#f3f3f3}div.dt-button-info>div{padding:1em}div.dt-button-collection-title{text-align:center;padding:0.3em 0 0.5em;font-size:0.9em}div.dt-button-collection-title:empty{display:none}button.dt-button,div.dt-button,a.dt-button{position:relative;display:inline-block;box-sizing:border-box;margin-right:0.333em;margin-bottom:0.333em;padding:0.5em 1em;border:1px solid #999;border-radius:2px;cursor:pointer;font-size:0.88em;line-height:1.6em;color:black;white-space:nowrap;overflow:hidden;background-color:#e9e9e9;background-image:-webkit-linear-gradient(top, #fff 0%, #e9e9e9 100%);background-image:-moz-linear-gradient(top, #fff 0%, #e9e9e9 100%);background-image:-ms-linear-gradient(top, #fff 0%, #e9e9e9 100%);background-image:-o-linear-gradient(top, #fff 0%, #e9e9e9 100%);background-image:linear-gradient(to bottom, #fff 0%, #e9e9e9 100%);filter:progid:DXImageTransform.Microsoft.gradient(GradientType=0,StartColorStr='white', EndColorStr='#e9e9e9');-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;text-decoration:none;outline:none;text-overflow:ellipsis}button.dt-button.disabled,div.dt-button.disabled,a.dt-button.disabled{color:#999;border:1px solid #d0d0d0;cursor:default;background-color:#f9f9f9;background-image:-webkit-linear-gradient(top, #fff 0%, #f9f9f9 100%);background-image:-moz-linear-gradient(top, #fff 0%, #f9f9f9 100%);background-image:-ms-linear-gradient(top, #fff 0%, #f9f9f9 100%);background-image:-o-linear-gradient(top, #fff 0%, #f9f9f9 100%);background-image:linear-gradient(to bottom, #fff 0%, #f9f9f9 100%);filter:progid:DXImageTransform.Microsoft.gradient(GradientType=0,StartColorStr='#ffffff', EndColorStr='#f9f9f9')}button.dt-button:active:not(.disabled),button.dt-button.active:not(.disabled),div.dt-button:active:not(.disabled),div.dt-button.active:not(.disabled),a.dt-button:active:not(.disabled),a.dt-button.active:not(.disabled){background-color:#e2e2e2;background-image:-webkit-linear-gradient(top, #f3f3f3 0%, #e2e2e2 100%);background-image:-moz-linear-gradient(top, #f3f3f3 0%, #e2e2e2 100%);background-image:-ms-linear-gradient(top, #f3f3f3 0%, #e2e2e2 100%);background-image:-o-linear-gradient(top, #f3f3f3 0%, #e2e2e2 100%);background-image:linear-gradient(to bottom, #f3f3f3 0%, #e2e2e2 100%);filter:progid:DXImageTransform.Microsoft.gradient(GradientType=0,StartColorStr='#f3f3f3', EndColorStr='#e2e2e2');box-shadow:inset 1px 1px 3px #999999}button.dt-button:active:not(.disabled):hover:not(.disabled),button.dt-button.active:not(.disabled):hover:not(.disabled),div.dt-button:active:not(.disabled):hover:not(.disabled),div.dt-button.active:not(.disabled):hover:not(.disabled),a.dt-button:active:not(.disabled):hover:not(.disabled),a.dt-button.active:not(.disabled):hover:not(.disabled){box-shadow:inset 1px 1px 3px #999999;background-color:#cccccc;background-image:-webkit-linear-gradient(top, #eaeaea 0%, #ccc 100%);background-image:-moz-linear-gradient(top, #eaeaea 0%, #ccc 100%);background-image:-ms-linear-gradient(top, #eaeaea 0%, #ccc 100%);background-image:-o-linear-gradient(top, #eaeaea 0%, #ccc 100%);background-image:linear-gradient(to bottom, #eaeaea 0%, #ccc 100%);filter:progid:DXImageTransform.Microsoft.gradient(GradientType=0,StartColorStr='#eaeaea', EndColorStr='#cccccc')}button.dt-button:hover,div.dt-button:hover,a.dt-button:hover{text-decoration:none}button.dt-button:hover:not(.disabled),div.dt-button:hover:not(.disabled),a.dt-button:hover:not(.disabled){border:1px solid #666;background-color:#e0e0e0;background-image:-webkit-linear-gradient(top, #f9f9f9 0%, #e0e0e0 100%);background-image:-moz-linear-gradient(top, #f9f9f9 0%, #e0e0e0 100%);background-image:-ms-linear-gradient(top, #f9f9f9 0%, #e0e0e0 100%);background-image:-o-linear-gradient(top, #f9f9f9 0%, #e0e0e0 100%);background-image:linear-gradient(to bottom, #f9f9f9 0%, #e0e0e0 100%);filter:progid:DXImageTransform.Microsoft.gradient(GradientType=0,StartColorStr='#f9f9f9', EndColorStr='#e0e0e0')}button.dt-button:focus:not(.disabled),div.dt-button:focus:not(.disabled),a.dt-button:focus:not(.disabled){border:1px solid #426c9e;text-shadow:0 1px 0 #c4def1;outline:none;background-color:#79ace9;background-image:-webkit-linear-gradient(top, #bddef4 0%, #79ace9 100%);background-image:-moz-linear-gradient(top, #bddef4 0%, #79ace9 100%);background-image:-ms-linear-gradient(top, #bddef4 0%, #79ace9 100%);background-image:-o-linear-gradient(top, #bddef4 0%, #79ace9 100%);background-image:linear-gradient(to bottom, #bddef4 0%, #79ace9 100%);filter:progid:DXImageTransform.Microsoft.gradient(GradientType=0,StartColorStr='#bddef4', EndColorStr='#79ace9')}.dt-button embed{outline:none}div.dt-buttons{position:relative;float:left}div.dt-buttons.buttons-right{float:right}div.dataTables_layout_cell div.dt-buttons{float:none}div.dataTables_layout_cell div.dt-buttons.buttons-right{float:none}div.dt-button-collection{position:absolute;top:0;left:0;width:150px;margin-top:3px;padding:8px 8px 4px 8px;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.4);background-color:white;overflow:hidden;z-index:2002;border-radius:5px;box-shadow:3px 3px 5px rgba(0,0,0,0.3);box-sizing:border-box}div.dt-button-collection button.dt-button,div.dt-button-collection div.dt-button,div.dt-button-collection a.dt-button{position:relative;left:0;right:0;width:100%;display:block;float:none;margin-bottom:4px;margin-right:0}div.dt-button-collection button.dt-button:active:not(.disabled),div.dt-button-collection button.dt-button.active:not(.disabled),div.dt-button-collection div.dt-button:active:not(.disabled),div.dt-button-collection div.dt-button.active:not(.disabled),div.dt-button-collection a.dt-button:active:not(.disabled),div.dt-button-collection a.dt-button.active:not(.disabled){background-color:#dadada;background-image:-webkit-linear-gradient(top, #f0f0f0 0%, #dadada 100%);background-image:-moz-linear-gradient(top, #f0f0f0 0%, #dadada 100%);background-image:-ms-linear-gradient(top, #f0f0f0 0%, #dadada 100%);background-image:-o-linear-gradient(top, #f0f0f0 0%, #dadada 100%);background-image:linear-gradient(to bottom, #f0f0f0 0%, #dadada 100%);filter:progid:DXImageTransform.Microsoft.gradient(GradientType=0,StartColorStr='#f0f0f0', EndColorStr='#dadada');box-shadow:inset 1px 1px 3px #666}div.dt-button-collection.fixed{position:fixed;top:50%;left:50%;margin-left:-75px;border-radius:0}div.dt-button-collection.fixed.two-column{margin-left:-200px}div.dt-button-collection.fixed.three-column{margin-left:-225px}div.dt-button-collection.fixed.four-column{margin-left:-300px}div.dt-button-collection>:last-child{display:block !important;-webkit-column-gap:8px;-moz-column-gap:8px;-ms-column-gap:8px;-o-column-gap:8px;column-gap:8px}div.dt-button-collection>:last-child>*{-webkit-column-break-inside:avoid;break-inside:avoid}div.dt-button-collection.two-column{width:400px}div.dt-button-collection.two-column>:last-child{padding-bottom:1px;-webkit-column-count:2;-moz-column-count:2;-ms-column-count:2;-o-column-count:2;column-count:2}div.dt-button-collection.three-column{width:450px}div.dt-button-collection.three-column>:last-child{padding-bottom:1px;-webkit-column-count:3;-moz-column-count:3;-ms-column-count:3;-o-column-count:3;column-count:3}div.dt-button-collection.four-column{width:600px}div.dt-button-collection.four-column>:last-child{padding-bottom:1px;-webkit-column-count:4;-moz-column-count:4;-ms-column-count:4;-o-column-count:4;column-count:4}div.dt-button-collection .dt-button{border-radius:0}div.dt-button-background{position:fixed;top:0;left:0;width:100%;height:100%;background:rgba(0,0,0,0.7);background:-ms-radial-gradient(center, ellipse farthest-corner, rgba(0,0,0,0.3) 0%, rgba(0,0,0,0.7) 100%);background:-moz-radial-gradient(center, ellipse farthest-corner, rgba(0,0,0,0.3) 0%, rgba(0,0,0,0.7) 100%);background:-o-radial-gradient(center, ellipse farthest-corner, rgba(0,0,0,0.3) 0%, rgba(0,0,0,0.7) 100%);background:-webkit-gradient(radial, center center, 0, center center, 497, color-stop(0, rgba(0,0,0,0.3)), color-stop(1, rgba(0,0,0,0.7)));background:-webkit-radial-gradient(center, ellipse farthest-corner, rgba(0,0,0,0.3) 0%, rgba(0,0,0,0.7) 100%);background:radial-gradient(ellipse farthest-corner at center, rgba(0,0,0,0.3) 0%, rgba(0,0,0,0.7) 100%);z-index:2001}@media screen and (max-width: 640px){div.dt-buttons{float:none !important;text-align:center}}button.dt-button.processing,div.dt-button.processing,a.dt-button.processing{color:rgba(0,0,0,0.2)}button.dt-button.processing:after,div.dt-button.processing:after,a.dt-button.processing:after{position:absolute;top:50%;left:50%;width:16px;height:16px;margin:-8px 0 0 -8px;box-sizing:border-box;display:block;content:' ';border:2px solid #282828;border-radius:50%;border-left-color:transparent;border-right-color:transparent;animation:dtb-spinner 1500ms infinite linear;-o-animation:dtb-spinner 1500ms infinite linear;-ms-animation:dtb-spinner 1500ms infinite linear;-webkit-animation:dtb-spinner 1500ms infinite linear;-moz-animation:dtb-spinner 1500ms infinite linear}
diff --git a/DataTables/Buttons-1.6.2/css/buttons.foundation.css b/DataTables/Buttons-1.6.2/css/buttons.foundation.css
deleted file mode 100644
index ebdc04e..0000000
--- a/DataTables/Buttons-1.6.2/css/buttons.foundation.css
+++ /dev/null
@@ -1,214 +0,0 @@
-@keyframes dtb-spinner {
-  100% {
-    transform: rotate(360deg);
-  }
-}
-@-o-keyframes dtb-spinner {
-  100% {
-    -o-transform: rotate(360deg);
-    transform: rotate(360deg);
-  }
-}
-@-ms-keyframes dtb-spinner {
-  100% {
-    -ms-transform: rotate(360deg);
-    transform: rotate(360deg);
-  }
-}
-@-webkit-keyframes dtb-spinner {
-  100% {
-    -webkit-transform: rotate(360deg);
-    transform: rotate(360deg);
-  }
-}
-@-moz-keyframes dtb-spinner {
-  100% {
-    -moz-transform: rotate(360deg);
-    transform: rotate(360deg);
-  }
-}
-div.dt-button-info {
-  position: fixed;
-  top: 50%;
-  left: 50%;
-  width: 400px;
-  margin-top: -100px;
-  margin-left: -200px;
-  background-color: white;
-  border: 2px solid #111;
-  box-shadow: 3px 3px 8px rgba(0, 0, 0, 0.3);
-  border-radius: 3px;
-  text-align: center;
-  z-index: 21;
-}
-div.dt-button-info h2 {
-  padding: 0.5em;
-  margin: 0;
-  font-weight: normal;
-  border-bottom: 1px solid #ddd;
-  background-color: #f3f3f3;
-}
-div.dt-button-info > div {
-  padding: 1em;
-}
-
-div.dt-button-collection-title {
-  text-align: center;
-  padding: 0.3em 0 0.5em;
-  font-size: 0.9em;
-}
-
-div.dt-button-collection-title:empty {
-  display: none;
-}
-
-ul.dt-buttons li {
-  margin: 0;
-}
-ul.dt-buttons li.active a {
-  box-shadow: inset 0 0 10px rgba(0, 0, 0, 0.6);
-}
-
-ul.dt-buttons.button-group a {
-  margin-bottom: 0;
-}
-
-div.dt-button-collection {
-  position: absolute;
-}
-div.dt-button-collection.fixed {
-  position: fixed;
-  top: 50%;
-  left: 50%;
-  margin-left: -75px;
-  border-radius: 0;
-}
-div.dt-button-collection.fixed.two-column {
-  margin-left: -200px;
-}
-div.dt-button-collection.fixed.three-column {
-  margin-left: -225px;
-}
-div.dt-button-collection.fixed.four-column {
-  margin-left: -300px;
-}
-div.dt-button-collection > :last-child {
-  display: block !important;
-  -webkit-column-gap: 8px;
-  -moz-column-gap: 8px;
-  -ms-column-gap: 8px;
-  -o-column-gap: 8px;
-  column-gap: 8px;
-}
-div.dt-button-collection > :last-child > * {
-  -webkit-column-break-inside: avoid;
-  break-inside: avoid;
-}
-div.dt-button-collection.two-column {
-  width: 400px;
-}
-div.dt-button-collection.two-column > :last-child {
-  padding-bottom: 1px;
-  -webkit-column-count: 2;
-  -moz-column-count: 2;
-  -ms-column-count: 2;
-  -o-column-count: 2;
-  column-count: 2;
-}
-div.dt-button-collection.three-column {
-  width: 450px;
-}
-div.dt-button-collection.three-column > :last-child {
-  padding-bottom: 1px;
-  -webkit-column-count: 3;
-  -moz-column-count: 3;
-  -ms-column-count: 3;
-  -o-column-count: 3;
-  column-count: 3;
-}
-div.dt-button-collection.four-column {
-  width: 600px;
-}
-div.dt-button-collection.four-column > :last-child {
-  padding-bottom: 1px;
-  -webkit-column-count: 4;
-  -moz-column-count: 4;
-  -ms-column-count: 4;
-  -o-column-count: 4;
-  column-count: 4;
-}
-div.dt-button-collection .dt-button {
-  border-radius: 0;
-}
-div.dt-button-collection.fixed {
-  max-width: none;
-}
-div.dt-button-collection.fixed:before, div.dt-button-collection.fixed:after {
-  display: none;
-}
-
-div.dt-button-background {
-  position: fixed;
-  top: 0;
-  left: 0;
-  width: 100%;
-  height: 100%;
-  z-index: 88;
-}
-
-@media screen and (max-width: 767px) {
-  ul.dt-buttons {
-    float: none;
-    width: 100%;
-    text-align: center;
-    margin-bottom: 0.5rem;
-  }
-  ul.dt-buttons li {
-    float: none;
-  }
-}
-div.button-group.stacked.dropdown-pane {
-  margin-top: 2px;
-  padding: 1px;
-  z-index: 89;
-}
-div.button-group.stacked.dropdown-pane a.button {
-  display: block;
-  margin-bottom: 1px;
-  border-right: none;
-}
-div.button-group.stacked.dropdown-pane a.button:last-child {
-  margin-bottom: 0;
-  margin-right: 1px;
-}
-
-div.dt-buttons button.button.processing,
-div.dt-buttons div.button.processing,
-div.dt-buttons a.button.processing {
-  color: rgba(0, 0, 0, 0.2);
-  color: rgba(255, 255, 255, 0.2);
-  border-top-color: white;
-  border-bottom-color: white;
-}
-div.dt-buttons button.button.processing:after,
-div.dt-buttons div.button.processing:after,
-div.dt-buttons a.button.processing:after {
-  position: absolute;
-  top: 50%;
-  left: 50%;
-  width: 16px;
-  height: 16px;
-  margin: -8px 0 0 -8px;
-  box-sizing: border-box;
-  display: block;
-  content: ' ';
-  border: 2px solid #282828;
-  border-radius: 50%;
-  border-left-color: transparent;
-  border-right-color: transparent;
-  animation: dtb-spinner 1500ms infinite linear;
-  -o-animation: dtb-spinner 1500ms infinite linear;
-  -ms-animation: dtb-spinner 1500ms infinite linear;
-  -webkit-animation: dtb-spinner 1500ms infinite linear;
-  -moz-animation: dtb-spinner 1500ms infinite linear;
-}
diff --git a/DataTables/Buttons-1.6.2/css/buttons.foundation.min.css b/DataTables/Buttons-1.6.2/css/buttons.foundation.min.css
deleted file mode 100644
index b39ae43..0000000
--- a/DataTables/Buttons-1.6.2/css/buttons.foundation.min.css
+++ /dev/null
@@ -1 +0,0 @@
-@keyframes dtb-spinner{100%{transform:rotate(360deg)}}@-o-keyframes dtb-spinner{100%{-o-transform:rotate(360deg);transform:rotate(360deg)}}@-ms-keyframes dtb-spinner{100%{-ms-transform:rotate(360deg);transform:rotate(360deg)}}@-webkit-keyframes dtb-spinner{100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@-moz-keyframes dtb-spinner{100%{-moz-transform:rotate(360deg);transform:rotate(360deg)}}div.dt-button-info{position:fixed;top:50%;left:50%;width:400px;margin-top:-100px;margin-left:-200px;background-color:white;border:2px solid #111;box-shadow:3px 3px 8px rgba(0,0,0,0.3);border-radius:3px;text-align:center;z-index:21}div.dt-button-info h2{padding:0.5em;margin:0;font-weight:normal;border-bottom:1px solid #ddd;background-color:#f3f3f3}div.dt-button-info>div{padding:1em}div.dt-button-collection-title{text-align:center;padding:0.3em 0 0.5em;font-size:0.9em}div.dt-button-collection-title:empty{display:none}ul.dt-buttons li{margin:0}ul.dt-buttons li.active a{box-shadow:inset 0 0 10px rgba(0,0,0,0.6)}ul.dt-buttons.button-group a{margin-bottom:0}div.dt-button-collection{position:absolute}div.dt-button-collection.fixed{position:fixed;top:50%;left:50%;margin-left:-75px;border-radius:0}div.dt-button-collection.fixed.two-column{margin-left:-200px}div.dt-button-collection.fixed.three-column{margin-left:-225px}div.dt-button-collection.fixed.four-column{margin-left:-300px}div.dt-button-collection>:last-child{display:block !important;-webkit-column-gap:8px;-moz-column-gap:8px;-ms-column-gap:8px;-o-column-gap:8px;column-gap:8px}div.dt-button-collection>:last-child>*{-webkit-column-break-inside:avoid;break-inside:avoid}div.dt-button-collection.two-column{width:400px}div.dt-button-collection.two-column>:last-child{padding-bottom:1px;-webkit-column-count:2;-moz-column-count:2;-ms-column-count:2;-o-column-count:2;column-count:2}div.dt-button-collection.three-column{width:450px}div.dt-button-collection.three-column>:last-child{padding-bottom:1px;-webkit-column-count:3;-moz-column-count:3;-ms-column-count:3;-o-column-count:3;column-count:3}div.dt-button-collection.four-column{width:600px}div.dt-button-collection.four-column>:last-child{padding-bottom:1px;-webkit-column-count:4;-moz-column-count:4;-ms-column-count:4;-o-column-count:4;column-count:4}div.dt-button-collection .dt-button{border-radius:0}div.dt-button-collection.fixed{max-width:none}div.dt-button-collection.fixed:before,div.dt-button-collection.fixed:after{display:none}div.dt-button-background{position:fixed;top:0;left:0;width:100%;height:100%;z-index:88}@media screen and (max-width: 767px){ul.dt-buttons{float:none;width:100%;text-align:center;margin-bottom:0.5rem}ul.dt-buttons li{float:none}}div.button-group.stacked.dropdown-pane{margin-top:2px;padding:1px;z-index:89}div.button-group.stacked.dropdown-pane a.button{display:block;margin-bottom:1px;border-right:none}div.button-group.stacked.dropdown-pane a.button:last-child{margin-bottom:0;margin-right:1px}div.dt-buttons button.button.processing,div.dt-buttons div.button.processing,div.dt-buttons a.button.processing{color:rgba(0,0,0,0.2);color:rgba(255,255,255,0.2);border-top-color:white;border-bottom-color:white}div.dt-buttons button.button.processing:after,div.dt-buttons div.button.processing:after,div.dt-buttons a.button.processing:after{position:absolute;top:50%;left:50%;width:16px;height:16px;margin:-8px 0 0 -8px;box-sizing:border-box;display:block;content:' ';border:2px solid #282828;border-radius:50%;border-left-color:transparent;border-right-color:transparent;animation:dtb-spinner 1500ms infinite linear;-o-animation:dtb-spinner 1500ms infinite linear;-ms-animation:dtb-spinner 1500ms infinite linear;-webkit-animation:dtb-spinner 1500ms infinite linear;-moz-animation:dtb-spinner 1500ms infinite linear}
diff --git a/DataTables/Buttons-1.6.2/css/buttons.jqueryui.css b/DataTables/Buttons-1.6.2/css/buttons.jqueryui.css
deleted file mode 100644
index f7bbb37..0000000
--- a/DataTables/Buttons-1.6.2/css/buttons.jqueryui.css
+++ /dev/null
@@ -1,240 +0,0 @@
-@keyframes dtb-spinner {
-  100% {
-    transform: rotate(360deg);
-  }
-}
-@-o-keyframes dtb-spinner {
-  100% {
-    -o-transform: rotate(360deg);
-    transform: rotate(360deg);
-  }
-}
-@-ms-keyframes dtb-spinner {
-  100% {
-    -ms-transform: rotate(360deg);
-    transform: rotate(360deg);
-  }
-}
-@-webkit-keyframes dtb-spinner {
-  100% {
-    -webkit-transform: rotate(360deg);
-    transform: rotate(360deg);
-  }
-}
-@-moz-keyframes dtb-spinner {
-  100% {
-    -moz-transform: rotate(360deg);
-    transform: rotate(360deg);
-  }
-}
-div.dt-button-info {
-  position: fixed;
-  top: 50%;
-  left: 50%;
-  width: 400px;
-  margin-top: -100px;
-  margin-left: -200px;
-  background-color: white;
-  border: 2px solid #111;
-  box-shadow: 3px 3px 8px rgba(0, 0, 0, 0.3);
-  border-radius: 3px;
-  text-align: center;
-  z-index: 21;
-}
-div.dt-button-info h2 {
-  padding: 0.5em;
-  margin: 0;
-  font-weight: normal;
-  border-bottom: 1px solid #ddd;
-  background-color: #f3f3f3;
-}
-div.dt-button-info > div {
-  padding: 1em;
-}
-
-div.dt-button-collection-title {
-  text-align: center;
-  padding: 0.3em 0 0.5em;
-  font-size: 0.9em;
-}
-
-div.dt-button-collection-title:empty {
-  display: none;
-}
-
-div.dt-buttons {
-  position: relative;
-  float: left;
-}
-div.dt-buttons .dt-button {
-  margin-right: 0;
-}
-div.dt-buttons .dt-button span.ui-icon {
-  display: inline-block;
-  vertical-align: middle;
-  margin-top: -2px;
-}
-div.dt-buttons .dt-button:active {
-  outline: none;
-}
-div.dt-buttons .dt-button:hover > span {
-  background-color: rgba(0, 0, 0, 0.05);
-}
-
-div.dt-button-collection {
-  position: absolute;
-  top: 0;
-  left: 0;
-  width: 150px;
-  margin-top: 3px;
-  padding: 8px 8px 4px 8px;
-  border: 1px solid #ccc;
-  border: 1px solid rgba(0, 0, 0, 0.4);
-  background-color: #f3f3f3;
-  background-color: rgba(255, 255, 255, 0.3);
-  overflow: hidden;
-  z-index: 2002;
-  border-radius: 5px;
-  box-shadow: 3px 3px 5px rgba(0, 0, 0, 0.3);
-  z-index: 2002;
-  -webkit-column-gap: 0;
-  -moz-column-gap: 0;
-  -ms-column-gap: 0;
-  -o-column-gap: 0;
-  column-gap: 0;
-}
-div.dt-button-collection .dt-button {
-  position: relative;
-  left: 0;
-  right: 0;
-  width: 100%;
-  box-sizing: border-box;
-  display: block;
-  float: none;
-  margin-right: 0;
-  margin-bottom: 4px;
-}
-div.dt-button-collection .dt-button:hover > span {
-  background-color: rgba(0, 0, 0, 0.05);
-}
-div.dt-button-collection.fixed {
-  position: fixed;
-  top: 50%;
-  left: 50%;
-  margin-left: -75px;
-  border-radius: 0;
-}
-div.dt-button-collection.fixed.two-column {
-  margin-left: -200px;
-}
-div.dt-button-collection.fixed.three-column {
-  margin-left: -225px;
-}
-div.dt-button-collection.fixed.four-column {
-  margin-left: -300px;
-}
-div.dt-button-collection > :last-child {
-  display: block !important;
-  -webkit-column-gap: 8px;
-  -moz-column-gap: 8px;
-  -ms-column-gap: 8px;
-  -o-column-gap: 8px;
-  column-gap: 8px;
-}
-div.dt-button-collection > :last-child > * {
-  -webkit-column-break-inside: avoid;
-  break-inside: avoid;
-}
-div.dt-button-collection.two-column {
-  width: 400px;
-}
-div.dt-button-collection.two-column > :last-child {
-  padding-bottom: 1px;
-  -webkit-column-count: 2;
-  -moz-column-count: 2;
-  -ms-column-count: 2;
-  -o-column-count: 2;
-  column-count: 2;
-}
-div.dt-button-collection.three-column {
-  width: 450px;
-}
-div.dt-button-collection.three-column > :last-child {
-  padding-bottom: 1px;
-  -webkit-column-count: 3;
-  -moz-column-count: 3;
-  -ms-column-count: 3;
-  -o-column-count: 3;
-  column-count: 3;
-}
-div.dt-button-collection.four-column {
-  width: 600px;
-}
-div.dt-button-collection.four-column > :last-child {
-  padding-bottom: 1px;
-  -webkit-column-count: 4;
-  -moz-column-count: 4;
-  -ms-column-count: 4;
-  -o-column-count: 4;
-  column-count: 4;
-}
-div.dt-button-collection .dt-button {
-  border-radius: 0;
-}
-
-div.dt-button-background {
-  position: fixed;
-  top: 0;
-  left: 0;
-  width: 100%;
-  height: 100%;
-  background: rgba(0, 0, 0, 0.7);
-  /* Fallback */
-  background: -ms-radial-gradient(center, ellipse farthest-corner, rgba(0, 0, 0, 0.3) 0%, rgba(0, 0, 0, 0.7) 100%);
-  /* IE10 Consumer Preview */
-  background: -moz-radial-gradient(center, ellipse farthest-corner, rgba(0, 0, 0, 0.3) 0%, rgba(0, 0, 0, 0.7) 100%);
-  /* Firefox */
-  background: -o-radial-gradient(center, ellipse farthest-corner, rgba(0, 0, 0, 0.3) 0%, rgba(0, 0, 0, 0.7) 100%);
-  /* Opera */
-  background: -webkit-gradient(radial, center center, 0, center center, 497, color-stop(0, rgba(0, 0, 0, 0.3)), color-stop(1, rgba(0, 0, 0, 0.7)));
-  /* Webkit (Safari/Chrome 10) */
-  background: -webkit-radial-gradient(center, ellipse farthest-corner, rgba(0, 0, 0, 0.3) 0%, rgba(0, 0, 0, 0.7) 100%);
-  /* Webkit (Chrome 11+) */
-  background: radial-gradient(ellipse farthest-corner at center, rgba(0, 0, 0, 0.3) 0%, rgba(0, 0, 0, 0.7) 100%);
-  /* W3C Markup, IE10 Release Preview */
-  z-index: 2001;
-}
-
-@media screen and (max-width: 640px) {
-  div.dt-buttons {
-    float: none !important;
-    text-align: center;
-  }
-}
-button.dt-button.processing,
-div.dt-button.processing,
-a.dt-button.processing {
-  color: rgba(0, 0, 0, 0.2);
-}
-button.dt-button.processing:after,
-div.dt-button.processing:after,
-a.dt-button.processing:after {
-  position: absolute;
-  top: 50%;
-  left: 50%;
-  width: 16px;
-  height: 16px;
-  margin: -8px 0 0 -8px;
-  box-sizing: border-box;
-  display: block;
-  content: ' ';
-  border: 2px solid #282828;
-  border-radius: 50%;
-  border-left-color: transparent;
-  border-right-color: transparent;
-  animation: dtb-spinner 1500ms infinite linear;
-  -o-animation: dtb-spinner 1500ms infinite linear;
-  -ms-animation: dtb-spinner 1500ms infinite linear;
-  -webkit-animation: dtb-spinner 1500ms infinite linear;
-  -moz-animation: dtb-spinner 1500ms infinite linear;
-}
diff --git a/DataTables/Buttons-1.6.2/css/buttons.jqueryui.min.css b/DataTables/Buttons-1.6.2/css/buttons.jqueryui.min.css
deleted file mode 100644
index 78ff8a5..0000000
--- a/DataTables/Buttons-1.6.2/css/buttons.jqueryui.min.css
+++ /dev/null
@@ -1 +0,0 @@
-@keyframes dtb-spinner{100%{transform:rotate(360deg)}}@-o-keyframes dtb-spinner{100%{-o-transform:rotate(360deg);transform:rotate(360deg)}}@-ms-keyframes dtb-spinner{100%{-ms-transform:rotate(360deg);transform:rotate(360deg)}}@-webkit-keyframes dtb-spinner{100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@-moz-keyframes dtb-spinner{100%{-moz-transform:rotate(360deg);transform:rotate(360deg)}}div.dt-button-info{position:fixed;top:50%;left:50%;width:400px;margin-top:-100px;margin-left:-200px;background-color:white;border:2px solid #111;box-shadow:3px 3px 8px rgba(0,0,0,0.3);border-radius:3px;text-align:center;z-index:21}div.dt-button-info h2{padding:0.5em;margin:0;font-weight:normal;border-bottom:1px solid #ddd;background-color:#f3f3f3}div.dt-button-info>div{padding:1em}div.dt-button-collection-title{text-align:center;padding:0.3em 0 0.5em;font-size:0.9em}div.dt-button-collection-title:empty{display:none}div.dt-buttons{position:relative;float:left}div.dt-buttons .dt-button{margin-right:0}div.dt-buttons .dt-button span.ui-icon{display:inline-block;vertical-align:middle;margin-top:-2px}div.dt-buttons .dt-button:active{outline:none}div.dt-buttons .dt-button:hover>span{background-color:rgba(0,0,0,0.05)}div.dt-button-collection{position:absolute;top:0;left:0;width:150px;margin-top:3px;padding:8px 8px 4px 8px;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.4);background-color:#f3f3f3;background-color:rgba(255,255,255,0.3);overflow:hidden;z-index:2002;border-radius:5px;box-shadow:3px 3px 5px rgba(0,0,0,0.3);z-index:2002;-webkit-column-gap:0;-moz-column-gap:0;-ms-column-gap:0;-o-column-gap:0;column-gap:0}div.dt-button-collection .dt-button{position:relative;left:0;right:0;width:100%;box-sizing:border-box;display:block;float:none;margin-right:0;margin-bottom:4px}div.dt-button-collection .dt-button:hover>span{background-color:rgba(0,0,0,0.05)}div.dt-button-collection.fixed{position:fixed;top:50%;left:50%;margin-left:-75px;border-radius:0}div.dt-button-collection.fixed.two-column{margin-left:-200px}div.dt-button-collection.fixed.three-column{margin-left:-225px}div.dt-button-collection.fixed.four-column{margin-left:-300px}div.dt-button-collection>:last-child{display:block !important;-webkit-column-gap:8px;-moz-column-gap:8px;-ms-column-gap:8px;-o-column-gap:8px;column-gap:8px}div.dt-button-collection>:last-child>*{-webkit-column-break-inside:avoid;break-inside:avoid}div.dt-button-collection.two-column{width:400px}div.dt-button-collection.two-column>:last-child{padding-bottom:1px;-webkit-column-count:2;-moz-column-count:2;-ms-column-count:2;-o-column-count:2;column-count:2}div.dt-button-collection.three-column{width:450px}div.dt-button-collection.three-column>:last-child{padding-bottom:1px;-webkit-column-count:3;-moz-column-count:3;-ms-column-count:3;-o-column-count:3;column-count:3}div.dt-button-collection.four-column{width:600px}div.dt-button-collection.four-column>:last-child{padding-bottom:1px;-webkit-column-count:4;-moz-column-count:4;-ms-column-count:4;-o-column-count:4;column-count:4}div.dt-button-collection .dt-button{border-radius:0}div.dt-button-background{position:fixed;top:0;left:0;width:100%;height:100%;background:rgba(0,0,0,0.7);background:-ms-radial-gradient(center, ellipse farthest-corner, rgba(0,0,0,0.3) 0%, rgba(0,0,0,0.7) 100%);background:-moz-radial-gradient(center, ellipse farthest-corner, rgba(0,0,0,0.3) 0%, rgba(0,0,0,0.7) 100%);background:-o-radial-gradient(center, ellipse farthest-corner, rgba(0,0,0,0.3) 0%, rgba(0,0,0,0.7) 100%);background:-webkit-gradient(radial, center center, 0, center center, 497, color-stop(0, rgba(0,0,0,0.3)), color-stop(1, rgba(0,0,0,0.7)));background:-webkit-radial-gradient(center, ellipse farthest-corner, rgba(0,0,0,0.3) 0%, rgba(0,0,0,0.7) 100%);background:radial-gradient(ellipse farthest-corner at center, rgba(0,0,0,0.3) 0%, rgba(0,0,0,0.7) 100%);z-index:2001}@media screen and (max-width: 640px){div.dt-buttons{float:none !important;text-align:center}}button.dt-button.processing,div.dt-button.processing,a.dt-button.processing{color:rgba(0,0,0,0.2)}button.dt-button.processing:after,div.dt-button.processing:after,a.dt-button.processing:after{position:absolute;top:50%;left:50%;width:16px;height:16px;margin:-8px 0 0 -8px;box-sizing:border-box;display:block;content:' ';border:2px solid #282828;border-radius:50%;border-left-color:transparent;border-right-color:transparent;animation:dtb-spinner 1500ms infinite linear;-o-animation:dtb-spinner 1500ms infinite linear;-ms-animation:dtb-spinner 1500ms infinite linear;-webkit-animation:dtb-spinner 1500ms infinite linear;-moz-animation:dtb-spinner 1500ms infinite linear}
diff --git a/DataTables/Buttons-1.6.2/css/buttons.semanticui.css b/DataTables/Buttons-1.6.2/css/buttons.semanticui.css
deleted file mode 100644
index 4b9e2d8..0000000
--- a/DataTables/Buttons-1.6.2/css/buttons.semanticui.css
+++ /dev/null
@@ -1,193 +0,0 @@
-@charset "UTF-8";
-@keyframes dtb-spinner {
-  100% {
-    transform: rotate(360deg);
-  }
-}
-@-o-keyframes dtb-spinner {
-  100% {
-    -o-transform: rotate(360deg);
-    transform: rotate(360deg);
-  }
-}
-@-ms-keyframes dtb-spinner {
-  100% {
-    -ms-transform: rotate(360deg);
-    transform: rotate(360deg);
-  }
-}
-@-webkit-keyframes dtb-spinner {
-  100% {
-    -webkit-transform: rotate(360deg);
-    transform: rotate(360deg);
-  }
-}
-@-moz-keyframes dtb-spinner {
-  100% {
-    -moz-transform: rotate(360deg);
-    transform: rotate(360deg);
-  }
-}
-div.dt-button-info {
-  position: fixed;
-  top: 50%;
-  left: 50%;
-  width: 400px;
-  margin-top: -100px;
-  margin-left: -200px;
-  background-color: white;
-  border: 2px solid #111;
-  box-shadow: 3px 3px 8px rgba(0, 0, 0, 0.3);
-  border-radius: 3px;
-  text-align: center;
-  z-index: 21;
-}
-div.dt-button-info h2 {
-  padding: 0.5em;
-  margin: 0;
-  font-weight: normal;
-  border-bottom: 1px solid #ddd;
-  background-color: #f3f3f3;
-}
-div.dt-button-info > div {
-  padding: 1em;
-}
-
-div.dt-button-collection-title {
-  text-align: center;
-  padding: 0.3em 0 0.5em;
-  font-size: 0.9em;
-}
-
-div.dt-button-collection-title:empty {
-  display: none;
-}
-
-div.dt-button-collection {
-  position: absolute;
-  top: 0;
-  left: 0;
-  min-width: 200px;
-  margin-top: 3px !important;
-  z-index: 2002;
-  background: white;
-}
-div.dt-button-collection.fixed {
-  position: fixed;
-  top: 50%;
-  left: 50%;
-  margin-left: -75px;
-  border-radius: 0;
-}
-div.dt-button-collection.fixed.two-column {
-  margin-left: -200px;
-}
-div.dt-button-collection.fixed.three-column {
-  margin-left: -225px;
-}
-div.dt-button-collection.fixed.four-column {
-  margin-left: -300px;
-}
-div.dt-button-collection > :last-child {
-  display: block !important;
-  -webkit-column-gap: 8px;
-  -moz-column-gap: 8px;
-  -ms-column-gap: 8px;
-  -o-column-gap: 8px;
-  column-gap: 8px;
-}
-div.dt-button-collection > :last-child > * {
-  -webkit-column-break-inside: avoid;
-  break-inside: avoid;
-}
-div.dt-button-collection.two-column {
-  width: 400px;
-}
-div.dt-button-collection.two-column > :last-child {
-  padding-bottom: 1px;
-  -webkit-column-count: 2;
-  -moz-column-count: 2;
-  -ms-column-count: 2;
-  -o-column-count: 2;
-  column-count: 2;
-}
-div.dt-button-collection.three-column {
-  width: 450px;
-}
-div.dt-button-collection.three-column > :last-child {
-  padding-bottom: 1px;
-  -webkit-column-count: 3;
-  -moz-column-count: 3;
-  -ms-column-count: 3;
-  -o-column-count: 3;
-  column-count: 3;
-}
-div.dt-button-collection.four-column {
-  width: 600px;
-}
-div.dt-button-collection.four-column > :last-child {
-  padding-bottom: 1px;
-  -webkit-column-count: 4;
-  -moz-column-count: 4;
-  -ms-column-count: 4;
-  -o-column-count: 4;
-  column-count: 4;
-}
-div.dt-button-collection .dt-button {
-  border-radius: 0;
-}
-
-button.buttons-collection.ui.button span:after {
-  display: inline-block;
-  content: "â–¾";
-  padding-left: 0.5em;
-}
-
-div.dt-button-background {
-  position: fixed;
-  top: 0;
-  left: 0;
-  width: 100%;
-  height: 100%;
-  z-index: 2001;
-}
-
-@media screen and (max-width: 767px) {
-  div.dt-buttons {
-    float: none;
-    width: 100%;
-    text-align: center;
-    margin-bottom: 0.5em;
-  }
-  div.dt-buttons a.btn {
-    float: none;
-  }
-}
-div.dt-buttons button.button.processing,
-div.dt-buttons div.button.processing,
-div.dt-buttons a.button.processing {
-  position: relative;
-  color: rgba(0, 0, 0, 0.2);
-}
-div.dt-buttons button.button.processing:after,
-div.dt-buttons div.button.processing:after,
-div.dt-buttons a.button.processing:after {
-  position: absolute;
-  top: 50%;
-  left: 50%;
-  width: 16px;
-  height: 16px;
-  margin: -8px 0 0 -8px;
-  box-sizing: border-box;
-  display: block;
-  content: ' ';
-  border: 2px solid #282828;
-  border-radius: 50%;
-  border-left-color: transparent;
-  border-right-color: transparent;
-  animation: dtb-spinner 1500ms infinite linear;
-  -o-animation: dtb-spinner 1500ms infinite linear;
-  -ms-animation: dtb-spinner 1500ms infinite linear;
-  -webkit-animation: dtb-spinner 1500ms infinite linear;
-  -moz-animation: dtb-spinner 1500ms infinite linear;
-}
diff --git a/DataTables/Buttons-1.6.2/css/buttons.semanticui.min.css b/DataTables/Buttons-1.6.2/css/buttons.semanticui.min.css
deleted file mode 100644
index ff3a16c..0000000
--- a/DataTables/Buttons-1.6.2/css/buttons.semanticui.min.css
+++ /dev/null
@@ -1 +0,0 @@
-@keyframes dtb-spinner{100%{transform:rotate(360deg)}}@-o-keyframes dtb-spinner{100%{-o-transform:rotate(360deg);transform:rotate(360deg)}}@-ms-keyframes dtb-spinner{100%{-ms-transform:rotate(360deg);transform:rotate(360deg)}}@-webkit-keyframes dtb-spinner{100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@-moz-keyframes dtb-spinner{100%{-moz-transform:rotate(360deg);transform:rotate(360deg)}}div.dt-button-info{position:fixed;top:50%;left:50%;width:400px;margin-top:-100px;margin-left:-200px;background-color:white;border:2px solid #111;box-shadow:3px 3px 8px rgba(0,0,0,0.3);border-radius:3px;text-align:center;z-index:21}div.dt-button-info h2{padding:0.5em;margin:0;font-weight:normal;border-bottom:1px solid #ddd;background-color:#f3f3f3}div.dt-button-info>div{padding:1em}div.dt-button-collection-title{text-align:center;padding:0.3em 0 0.5em;font-size:0.9em}div.dt-button-collection-title:empty{display:none}div.dt-button-collection{position:absolute;top:0;left:0;min-width:200px;margin-top:3px !important;z-index:2002;background:white}div.dt-button-collection.fixed{position:fixed;top:50%;left:50%;margin-left:-75px;border-radius:0}div.dt-button-collection.fixed.two-column{margin-left:-200px}div.dt-button-collection.fixed.three-column{margin-left:-225px}div.dt-button-collection.fixed.four-column{margin-left:-300px}div.dt-button-collection>:last-child{display:block !important;-webkit-column-gap:8px;-moz-column-gap:8px;-ms-column-gap:8px;-o-column-gap:8px;column-gap:8px}div.dt-button-collection>:last-child>*{-webkit-column-break-inside:avoid;break-inside:avoid}div.dt-button-collection.two-column{width:400px}div.dt-button-collection.two-column>:last-child{padding-bottom:1px;-webkit-column-count:2;-moz-column-count:2;-ms-column-count:2;-o-column-count:2;column-count:2}div.dt-button-collection.three-column{width:450px}div.dt-button-collection.three-column>:last-child{padding-bottom:1px;-webkit-column-count:3;-moz-column-count:3;-ms-column-count:3;-o-column-count:3;column-count:3}div.dt-button-collection.four-column{width:600px}div.dt-button-collection.four-column>:last-child{padding-bottom:1px;-webkit-column-count:4;-moz-column-count:4;-ms-column-count:4;-o-column-count:4;column-count:4}div.dt-button-collection .dt-button{border-radius:0}button.buttons-collection.ui.button span:after{display:inline-block;content:"▾";padding-left:0.5em}div.dt-button-background{position:fixed;top:0;left:0;width:100%;height:100%;z-index:2001}@media screen and (max-width: 767px){div.dt-buttons{float:none;width:100%;text-align:center;margin-bottom:0.5em}div.dt-buttons a.btn{float:none}}div.dt-buttons button.button.processing,div.dt-buttons div.button.processing,div.dt-buttons a.button.processing{position:relative;color:rgba(0,0,0,0.2)}div.dt-buttons button.button.processing:after,div.dt-buttons div.button.processing:after,div.dt-buttons a.button.processing:after{position:absolute;top:50%;left:50%;width:16px;height:16px;margin:-8px 0 0 -8px;box-sizing:border-box;display:block;content:' ';border:2px solid #282828;border-radius:50%;border-left-color:transparent;border-right-color:transparent;animation:dtb-spinner 1500ms infinite linear;-o-animation:dtb-spinner 1500ms infinite linear;-ms-animation:dtb-spinner 1500ms infinite linear;-webkit-animation:dtb-spinner 1500ms infinite linear;-moz-animation:dtb-spinner 1500ms infinite linear}
diff --git a/DataTables/Buttons-1.6.2/css/common.scss b/DataTables/Buttons-1.6.2/css/common.scss
deleted file mode 100644
index d5ec826..0000000
--- a/DataTables/Buttons-1.6.2/css/common.scss
+++ /dev/null
@@ -1,37 +0,0 @@
-
-div.dt-button-info {
-	position: fixed;
-	top: 50%;
-	left: 50%;
-	width: 400px;
-	margin-top: -100px;
-	margin-left: -200px;
-	background-color: white;
-	border: 2px solid #111;
-	box-shadow: 3px 3px 8px rgba( 0, 0, 0, 0.3);
-	border-radius: 3px;
-	text-align: center;
-	z-index: 21;
-
-	h2 {
-		padding: 0.5em;
-		margin: 0;
-		font-weight: normal;
-		border-bottom: 1px solid #ddd;
-		background-color: #f3f3f3;
-	}
-
-	> div {
-		padding: 1em;
-	}
-}
-
-div.dt-button-collection-title {
-	text-align: center;
-	padding: 0.3em 0 0.5em;
-	font-size: 0.9em;
-}
-
-div.dt-button-collection-title:empty {
-	display: none;
-}
diff --git a/DataTables/Buttons-1.6.2/css/mixins.scss b/DataTables/Buttons-1.6.2/css/mixins.scss
deleted file mode 100644
index 4e81543..0000000
--- a/DataTables/Buttons-1.6.2/css/mixins.scss
+++ /dev/null
@@ -1,153 +0,0 @@
-
-@mixin dtb-two-stop-gradient($fromColor, $toColor) {
-	background-color: $toColor; /* Fallback */
-	background-image: -webkit-linear-gradient(top, $fromColor 0%, $toColor 100%); /* Chrome 10+, Saf5.1+, iOS 5+ */
-	background-image:    -moz-linear-gradient(top, $fromColor 0%, $toColor 100%); /* FF3.6 */
-	background-image:     -ms-linear-gradient(top, $fromColor 0%, $toColor 100%); /* IE10 */
-	background-image:      -o-linear-gradient(top, $fromColor 0%, $toColor 100%); /* Opera 11.10+ */
-	background-image:         linear-gradient(to bottom, $fromColor 0%, $toColor 100%);
-	filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0,StartColorStr='#{nth( $fromColor, 1 )}', EndColorStr='#{nth( $toColor, 1 )}');
-}
-
-@mixin dtb-radial-gradient ($fromColor, $toColor ) {
-	background: $toColor; /* Fallback */
-	background:     -ms-radial-gradient(center, ellipse farthest-corner, $fromColor 0%, $toColor 100%); /* IE10 Consumer Preview */ 
-	background:    -moz-radial-gradient(center, ellipse farthest-corner, $fromColor 0%, $toColor 100%); /* Firefox */ 
-	background:      -o-radial-gradient(center, ellipse farthest-corner, $fromColor 0%, $toColor 100%); /* Opera */ 
-	background: -webkit-gradient(radial, center center, 0, center center, 497, color-stop(0, $fromColor), color-stop(1, $toColor)); /* Webkit (Safari/Chrome 10) */ 
-	background: -webkit-radial-gradient(center, ellipse farthest-corner, $fromColor 0%, $toColor 100%); /* Webkit (Chrome 11+) */ 
-	background: radial-gradient(ellipse farthest-corner at center, $fromColor 0%, $toColor 100%); /* W3C Markup, IE10 Release Preview */ 
-}
-
-
-@mixin dtb-fixed-collection {
-	// Fixed positioning feature
-	&.fixed {
-		position: fixed;
-		top: 50%;
-		left: 50%;
-		margin-left: -75px;
-		border-radius: 0;
-
-		&.two-column {
-			margin-left: -200px;
-		}
-
-		&.three-column {
-			margin-left: -225px;
-		}
-
-		&.four-column {
-			margin-left: -300px;
-		}
-	}
-
-	> :last-child {
-		> * {
-			-webkit-column-break-inside: avoid;
-			break-inside: avoid;
-		}
-
-		// Multi-column layout feature
-		display: block !important;
-		-webkit-column-gap: 8px;
-		-moz-column-gap: 8px;
-			-ms-column-gap: 8px;
-			-o-column-gap: 8px;
-		column-gap: 8px;
-	}
-
-	&.two-column {
-		width: 400px;
-
-		> :last-child {
-			padding-bottom: 1px;
-
-			-webkit-column-count: 2;
-				-moz-column-count: 2;
-				-ms-column-count: 2;
-					-o-column-count: 2;
-			column-count: 2;
-		}
-	}
-
-	&.three-column {
-		width: 450px;
-
-		> :last-child {
-			padding-bottom: 1px;
-
-			-webkit-column-count: 3;
-				-moz-column-count: 3;
-				-ms-column-count: 3;
-					-o-column-count: 3;
-			column-count: 3;
-		}
-	}
-
-	&.four-column {
-		width: 600px;
-
-		> :last-child {
-			padding-bottom: 1px;
-
-			-webkit-column-count: 4;
-				-moz-column-count: 4;
-				-ms-column-count: 4;
-					-o-column-count: 4;
-			column-count: 4;
-		}
-	}
-
-	// Chrome fix - 531528
-	.dt-button {
-		border-radius: 0;
-	}
-}
-
-
-@mixin dtb-processing {
-	color: rgba(0, 0, 0, 0.2);
-
-	&:after {
-		position: absolute;
-	    top: 50%;
-		left: 50%;
-		width: 16px;
-		height: 16px;
-		margin: -8px 0 0 -8px;
-		box-sizing: border-box;
-
-		display: block;
-		content: ' ';
-		border: 2px solid rgb(40,40,40);
-		border-radius: 50%;
-		border-left-color: transparent;
-		border-right-color: transparent;
-		animation: dtb-spinner 1500ms infinite linear;
-			-o-animation: dtb-spinner 1500ms infinite linear;
-			-ms-animation: dtb-spinner 1500ms infinite linear;
-			-webkit-animation: dtb-spinner 1500ms infinite linear;
-			-moz-animation: dtb-spinner 1500ms infinite linear;
-	}
-}
-
-@keyframes dtb-spinner {
-	100%{ transform: rotate(360deg); }
-}
-
-@-o-keyframes dtb-spinner {
-	100%{ -o-transform: rotate(360deg); transform: rotate(360deg); }
-}
-
-@-ms-keyframes dtb-spinner {
-	100%{ -ms-transform: rotate(360deg); transform: rotate(360deg); }
-}
-
-@-webkit-keyframes dtb-spinner {
-	100%{ -webkit-transform: rotate(360deg); transform: rotate(360deg); }
-}
-
-@-moz-keyframes dtb-spinner {
-	100%{ -moz-transform: rotate(360deg); transform: rotate(360deg); }
-}
diff --git a/DataTables/Buttons-1.6.2/js/buttons.bootstrap.js b/DataTables/Buttons-1.6.2/js/buttons.bootstrap.js
deleted file mode 100644
index 9be7785..0000000
--- a/DataTables/Buttons-1.6.2/js/buttons.bootstrap.js
+++ /dev/null
@@ -1,70 +0,0 @@
-/*! Bootstrap integration for DataTables' Buttons
- * ©2016 SpryMedia Ltd - datatables.net/license
- */
-
-(function( factory ){
-	if ( typeof define === 'function' && define.amd ) {
-		// AMD
-		define( ['jquery', 'datatables.net-bs', 'datatables.net-buttons'], function ( $ ) {
-			return factory( $, window, document );
-		} );
-	}
-	else if ( typeof exports === 'object' ) {
-		// CommonJS
-		module.exports = function (root, $) {
-			if ( ! root ) {
-				root = window;
-			}
-
-			if ( ! $ || ! $.fn.dataTable ) {
-				$ = require('datatables.net-bs')(root, $).$;
-			}
-
-			if ( ! $.fn.dataTable.Buttons ) {
-				require('datatables.net-buttons')(root, $);
-			}
-
-			return factory( $, root, root.document );
-		};
-	}
-	else {
-		// Browser
-		factory( jQuery, window, document );
-	}
-}(function( $, window, document, undefined ) {
-'use strict';
-var DataTable = $.fn.dataTable;
-
-
-$.extend( true, DataTable.Buttons.defaults, {
-	dom: {
-		container: {
-			className: 'dt-buttons btn-group'
-		},
-		button: {
-			className: 'btn btn-default'
-		},
-		collection: {
-			tag: 'ul',
-			className: 'dropdown-menu',
-			button: {
-				tag: 'li',
-				className: 'dt-button',
-				active: 'active',
-				disabled: 'disabled'
-			},
-			buttonLiner: {
-				tag: 'a',
-				className: ''
-			}
-		}
-	}
-} );
-
-DataTable.ext.buttons.collection.text = function ( dt ) {
-	return dt.i18n('buttons.collection', 'Collection <span class="caret"/>');
-};
-
-
-return DataTable.Buttons;
-}));
diff --git a/DataTables/Buttons-1.6.2/js/buttons.bootstrap.min.js b/DataTables/Buttons-1.6.2/js/buttons.bootstrap.min.js
deleted file mode 100644
index 1b42374..0000000
--- a/DataTables/Buttons-1.6.2/js/buttons.bootstrap.min.js
+++ /dev/null
@@ -1,6 +0,0 @@
-/*!
- Bootstrap integration for DataTables' Buttons
- ©2016 SpryMedia Ltd - datatables.net/license
-*/
-(function(c){"function"===typeof define&&define.amd?define(["jquery","datatables.net-bs","datatables.net-buttons"],function(a){return c(a,window,document)}):"object"===typeof exports?module.exports=function(a,b){a||(a=window);b&&b.fn.dataTable||(b=require("datatables.net-bs")(a,b).$);b.fn.dataTable.Buttons||require("datatables.net-buttons")(a,b);return c(b,a,a.document)}:c(jQuery,window,document)})(function(c,a,b,d){a=c.fn.dataTable;c.extend(!0,a.Buttons.defaults,{dom:{container:{className:"dt-buttons btn-group"},
-button:{className:"btn btn-default"},collection:{tag:"ul",className:"dropdown-menu",button:{tag:"li",className:"dt-button",active:"active",disabled:"disabled"},buttonLiner:{tag:"a",className:""}}}});a.ext.buttons.collection.text=function(a){return a.i18n("buttons.collection",'Collection <span class="caret"/>')};return a.Buttons});
diff --git a/DataTables/Buttons-1.6.2/js/buttons.bootstrap4.js b/DataTables/Buttons-1.6.2/js/buttons.bootstrap4.js
deleted file mode 100644
index 4f8ccd5..0000000
--- a/DataTables/Buttons-1.6.2/js/buttons.bootstrap4.js
+++ /dev/null
@@ -1,68 +0,0 @@
-/*! Bootstrap integration for DataTables' Buttons
- * ©2016 SpryMedia Ltd - datatables.net/license
- */
-
-(function( factory ){
-	if ( typeof define === 'function' && define.amd ) {
-		// AMD
-		define( ['jquery', 'datatables.net-bs4', 'datatables.net-buttons'], function ( $ ) {
-			return factory( $, window, document );
-		} );
-	}
-	else if ( typeof exports === 'object' ) {
-		// CommonJS
-		module.exports = function (root, $) {
-			if ( ! root ) {
-				root = window;
-			}
-
-			if ( ! $ || ! $.fn.dataTable ) {
-				$ = require('datatables.net-bs4')(root, $).$;
-			}
-
-			if ( ! $.fn.dataTable.Buttons ) {
-				require('datatables.net-buttons')(root, $);
-			}
-
-			return factory( $, root, root.document );
-		};
-	}
-	else {
-		// Browser
-		factory( jQuery, window, document );
-	}
-}(function( $, window, document, undefined ) {
-'use strict';
-var DataTable = $.fn.dataTable;
-
-$.extend( true, DataTable.Buttons.defaults, {
-	dom: {
-		container: {
-			className: 'dt-buttons btn-group flex-wrap'
-		},
-		button: {
-			className: 'btn btn-secondary'
-		},
-		collection: {
-			tag: 'div',
-			className: 'dropdown-menu',
-			button: {
-				tag: 'a',
-				className: 'dt-button dropdown-item',
-				active: 'active',
-				disabled: 'disabled'
-			}
-		}
-	},
-	buttonCreated: function ( config, button ) {
-		return config.buttons ?
-			$('<div class="btn-group"/>').append(button) :
-			button;
-	}
-} );
-
-DataTable.ext.buttons.collection.className += ' dropdown-toggle';
-DataTable.ext.buttons.collection.rightAlignClassName = 'dropdown-menu-right';
-
-return DataTable.Buttons;
-}));
diff --git a/DataTables/Buttons-1.6.2/js/buttons.bootstrap4.min.js b/DataTables/Buttons-1.6.2/js/buttons.bootstrap4.min.js
deleted file mode 100644
index 2fd39b3..0000000
--- a/DataTables/Buttons-1.6.2/js/buttons.bootstrap4.min.js
+++ /dev/null
@@ -1,6 +0,0 @@
-/*!
- Bootstrap integration for DataTables' Buttons
- ©2016 SpryMedia Ltd - datatables.net/license
-*/
-(function(c){"function"===typeof define&&define.amd?define(["jquery","datatables.net-bs4","datatables.net-buttons"],function(a){return c(a,window,document)}):"object"===typeof exports?module.exports=function(a,b){a||(a=window);b&&b.fn.dataTable||(b=require("datatables.net-bs4")(a,b).$);b.fn.dataTable.Buttons||require("datatables.net-buttons")(a,b);return c(b,a,a.document)}:c(jQuery,window,document)})(function(c,a,b,d){a=c.fn.dataTable;c.extend(!0,a.Buttons.defaults,{dom:{container:{className:"dt-buttons btn-group flex-wrap"},
-button:{className:"btn btn-secondary"},collection:{tag:"div",className:"dropdown-menu",button:{tag:"a",className:"dt-button dropdown-item",active:"active",disabled:"disabled"}}},buttonCreated:function(a,b){return a.buttons?c('<div class="btn-group"/>').append(b):b}});a.ext.buttons.collection.className+=" dropdown-toggle";a.ext.buttons.collection.rightAlignClassName="dropdown-menu-right";return a.Buttons});
diff --git a/DataTables/Buttons-1.6.2/js/buttons.colVis.js b/DataTables/Buttons-1.6.2/js/buttons.colVis.js
deleted file mode 100644
index d90cc90..0000000
--- a/DataTables/Buttons-1.6.2/js/buttons.colVis.js
+++ /dev/null
@@ -1,206 +0,0 @@
-/*!
- * Column visibility buttons for Buttons and DataTables.
- * 2016 SpryMedia Ltd - datatables.net/license
- */
-
-(function( factory ){
-	if ( typeof define === 'function' && define.amd ) {
-		// AMD
-		define( ['jquery', 'datatables.net', 'datatables.net-buttons'], function ( $ ) {
-			return factory( $, window, document );
-		} );
-	}
-	else if ( typeof exports === 'object' ) {
-		// CommonJS
-		module.exports = function (root, $) {
-			if ( ! root ) {
-				root = window;
-			}
-
-			if ( ! $ || ! $.fn.dataTable ) {
-				$ = require('datatables.net')(root, $).$;
-			}
-
-			if ( ! $.fn.dataTable.Buttons ) {
-				require('datatables.net-buttons')(root, $);
-			}
-
-			return factory( $, root, root.document );
-		};
-	}
-	else {
-		// Browser
-		factory( jQuery, window, document );
-	}
-}(function( $, window, document, undefined ) {
-'use strict';
-var DataTable = $.fn.dataTable;
-
-
-$.extend( DataTable.ext.buttons, {
-	// A collection of column visibility buttons
-	colvis: function ( dt, conf ) {
-		return {
-			extend: 'collection',
-			text: function ( dt ) {
-				return dt.i18n( 'buttons.colvis', 'Column visibility' );
-			},
-			className: 'buttons-colvis',
-			buttons: [ {
-				extend: 'columnsToggle',
-				columns: conf.columns,
-				columnText: conf.columnText
-			} ]
-		};
-	},
-
-	// Selected columns with individual buttons - toggle column visibility
-	columnsToggle: function ( dt, conf ) {
-		var columns = dt.columns( conf.columns ).indexes().map( function ( idx ) {
-			return {
-				extend: 'columnToggle',
-				columns: idx,
-				columnText: conf.columnText
-			};
-		} ).toArray();
-
-		return columns;
-	},
-
-	// Single button to toggle column visibility
-	columnToggle: function ( dt, conf ) {
-		return {
-			extend: 'columnVisibility',
-			columns: conf.columns,
-			columnText: conf.columnText
-		};
-	},
-
-	// Selected columns with individual buttons - set column visibility
-	columnsVisibility: function ( dt, conf ) {
-		var columns = dt.columns( conf.columns ).indexes().map( function ( idx ) {
-			return {
-				extend: 'columnVisibility',
-				columns: idx,
-				visibility: conf.visibility,
-				columnText: conf.columnText
-			};
-		} ).toArray();
-
-		return columns;
-	},
-
-	// Single button to set column visibility
-	columnVisibility: {
-		columns: undefined, // column selector
-		text: function ( dt, button, conf ) {
-			return conf._columnText( dt, conf );
-		},
-		className: 'buttons-columnVisibility',
-		action: function ( e, dt, button, conf ) {
-			var col = dt.columns( conf.columns );
-			var curr = col.visible();
-
-			col.visible( conf.visibility !== undefined ?
-				conf.visibility :
-				! (curr.length ? curr[0] : false )
-			);
-		},
-		init: function ( dt, button, conf ) {
-			var that = this;
-			button.attr( 'data-cv-idx', conf.columns );
-
-			dt
-				.on( 'column-visibility.dt'+conf.namespace, function (e, settings) {
-					if ( ! settings.bDestroying && settings.nTable == dt.settings()[0].nTable ) {
-						that.active( dt.column( conf.columns ).visible() );
-					}
-				} )
-				.on( 'column-reorder.dt'+conf.namespace, function (e, settings, details) {
-					if ( dt.columns( conf.columns ).count() !== 1 ) {
-						return;
-					}
-
-					// This button controls the same column index but the text for the column has
-					// changed
-					that.text( conf._columnText( dt, conf ) );
-
-					// Since its a different column, we need to check its visibility
-					that.active( dt.column( conf.columns ).visible() );
-				} );
-
-			this.active( dt.column( conf.columns ).visible() );
-		},
-		destroy: function ( dt, button, conf ) {
-			dt
-				.off( 'column-visibility.dt'+conf.namespace )
-				.off( 'column-reorder.dt'+conf.namespace );
-		},
-
-		_columnText: function ( dt, conf ) {
-			// Use DataTables' internal data structure until this is presented
-			// is a public API. The other option is to use
-			// `$( column(col).node() ).text()` but the node might not have been
-			// populated when Buttons is constructed.
-			var idx = dt.column( conf.columns ).index();
-			var title = dt.settings()[0].aoColumns[ idx ].sTitle
-				.replace(/\n/g," ")        // remove new lines
-				.replace(/<br\s*\/?>/gi, " ")  // replace line breaks with spaces
-				.replace(/<select(.*?)<\/select>/g, "") // remove select tags, including options text
-				.replace(/<!\-\-.*?\-\->/g, "") // strip HTML comments
-				.replace(/<.*?>/g, "")   // strip HTML
-				.replace(/^\s+|\s+$/g,""); // trim
-
-			return conf.columnText ?
-				conf.columnText( dt, idx, title ) :
-				title;
-		}
-	},
-
-
-	colvisRestore: {
-		className: 'buttons-colvisRestore',
-
-		text: function ( dt ) {
-			return dt.i18n( 'buttons.colvisRestore', 'Restore visibility' );
-		},
-
-		init: function ( dt, button, conf ) {
-			conf._visOriginal = dt.columns().indexes().map( function ( idx ) {
-				return dt.column( idx ).visible();
-			} ).toArray();
-		},
-
-		action: function ( e, dt, button, conf ) {
-			dt.columns().every( function ( i ) {
-				// Take into account that ColReorder might have disrupted our
-				// indexes
-				var idx = dt.colReorder && dt.colReorder.transpose ?
-					dt.colReorder.transpose( i, 'toOriginal' ) :
-					i;
-
-				this.visible( conf._visOriginal[ idx ] );
-			} );
-		}
-	},
-
-
-	colvisGroup: {
-		className: 'buttons-colvisGroup',
-
-		action: function ( e, dt, button, conf ) {
-			dt.columns( conf.show ).visible( true, false );
-			dt.columns( conf.hide ).visible( false, false );
-
-			dt.columns.adjust();
-		},
-
-		show: [],
-
-		hide: []
-	}
-} );
-
-
-return DataTable.Buttons;
-}));
diff --git a/DataTables/Buttons-1.6.2/js/buttons.colVis.min.js b/DataTables/Buttons-1.6.2/js/buttons.colVis.min.js
deleted file mode 100644
index b7ce3d4..0000000
--- a/DataTables/Buttons-1.6.2/js/buttons.colVis.min.js
+++ /dev/null
@@ -1,10 +0,0 @@
-/*!
- Column visibility buttons for Buttons and DataTables.
- 2016 SpryMedia Ltd - datatables.net/license
-*/
-(function(g){"function"===typeof define&&define.amd?define(["jquery","datatables.net","datatables.net-buttons"],function(d){return g(d,window,document)}):"object"===typeof exports?module.exports=function(d,f){d||(d=window);f&&f.fn.dataTable||(f=require("datatables.net")(d,f).$);f.fn.dataTable.Buttons||require("datatables.net-buttons")(d,f);return g(f,d,d.document)}:g(jQuery,window,document)})(function(g,d,f,h){d=g.fn.dataTable;g.extend(d.ext.buttons,{colvis:function(a,b){return{extend:"collection",
-text:function(b){return b.i18n("buttons.colvis","Column visibility")},className:"buttons-colvis",buttons:[{extend:"columnsToggle",columns:b.columns,columnText:b.columnText}]}},columnsToggle:function(a,b){return a.columns(b.columns).indexes().map(function(a){return{extend:"columnToggle",columns:a,columnText:b.columnText}}).toArray()},columnToggle:function(a,b){return{extend:"columnVisibility",columns:b.columns,columnText:b.columnText}},columnsVisibility:function(a,b){return a.columns(b.columns).indexes().map(function(a){return{extend:"columnVisibility",
-columns:a,visibility:b.visibility,columnText:b.columnText}}).toArray()},columnVisibility:{columns:h,text:function(a,b,c){return c._columnText(a,c)},className:"buttons-columnVisibility",action:function(a,b,c,e){a=b.columns(e.columns);b=a.visible();a.visible(e.visibility!==h?e.visibility:!(b.length&&b[0]))},init:function(a,b,c){var e=this;b.attr("data-cv-idx",c.columns);a.on("column-visibility.dt"+c.namespace,function(b,d){d.bDestroying||d.nTable!=a.settings()[0].nTable||e.active(a.column(c.columns).visible())}).on("column-reorder.dt"+
-c.namespace,function(b,d,f){1===a.columns(c.columns).count()&&(e.text(c._columnText(a,c)),e.active(a.column(c.columns).visible()))});this.active(a.column(c.columns).visible())},destroy:function(a,b,c){a.off("column-visibility.dt"+c.namespace).off("column-reorder.dt"+c.namespace)},_columnText:function(a,b){var c=a.column(b.columns).index(),e=a.settings()[0].aoColumns[c].sTitle.replace(/\n/g," ").replace(/<br\s*\/?>/gi," ").replace(/<select(.*?)<\/select>/g,"").replace(/<!\-\-.*?\-\->/g,"").replace(/<.*?>/g,
-"").replace(/^\s+|\s+$/g,"");return b.columnText?b.columnText(a,c,e):e}},colvisRestore:{className:"buttons-colvisRestore",text:function(a){return a.i18n("buttons.colvisRestore","Restore visibility")},init:function(a,b,c){c._visOriginal=a.columns().indexes().map(function(b){return a.column(b).visible()}).toArray()},action:function(a,b,c,d){b.columns().every(function(a){a=b.colReorder&&b.colReorder.transpose?b.colReorder.transpose(a,"toOriginal"):a;this.visible(d._visOriginal[a])})}},colvisGroup:{className:"buttons-colvisGroup",
-action:function(a,b,c,d){b.columns(d.show).visible(!0,!1);b.columns(d.hide).visible(!1,!1);b.columns.adjust()},show:[],hide:[]}});return d.Buttons});
diff --git a/DataTables/Buttons-1.6.2/js/buttons.flash.js b/DataTables/Buttons-1.6.2/js/buttons.flash.js
deleted file mode 100644
index 5fe50c6..0000000
--- a/DataTables/Buttons-1.6.2/js/buttons.flash.js
+++ /dev/null
@@ -1,1456 +0,0 @@
-/*!
- * Flash export buttons for Buttons and DataTables.
- * 2015-2017 SpryMedia Ltd - datatables.net/license
- *
- * ZeroClipbaord - MIT license
- * Copyright (c) 2012 Joseph Huckaby
- */
-
-(function( factory ){
-	if ( typeof define === 'function' && define.amd ) {
-		// AMD
-		define( ['jquery', 'datatables.net', 'datatables.net-buttons'], function ( $ ) {
-			return factory( $, window, document );
-		} );
-	}
-	else if ( typeof exports === 'object' ) {
-		// CommonJS
-		module.exports = function (root, $) {
-			if ( ! root ) {
-				root = window;
-			}
-
-			if ( ! $ || ! $.fn.dataTable ) {
-				$ = require('datatables.net')(root, $).$;
-			}
-
-			if ( ! $.fn.dataTable.Buttons ) {
-				require('datatables.net-buttons')(root, $);
-			}
-
-			return factory( $, root, root.document );
-		};
-	}
-	else {
-		// Browser
-		factory( jQuery, window, document );
-	}
-}(function( $, window, document, undefined ) {
-'use strict';
-var DataTable = $.fn.dataTable;
-
-
-/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- * ZeroClipboard dependency
- */
-
-/*
- * ZeroClipboard 1.0.4 with modifications
- * Author: Joseph Huckaby
- * License: MIT
- *
- * Copyright (c) 2012 Joseph Huckaby
- */
-var ZeroClipboard_TableTools = {
-	version: "1.0.4-TableTools2",
-	clients: {}, // registered upload clients on page, indexed by id
-	moviePath: '', // URL to movie
-	nextId: 1, // ID of next movie
-
-	$: function(thingy) {
-		// simple DOM lookup utility function
-		if (typeof(thingy) == 'string') {
-			thingy = document.getElementById(thingy);
-		}
-		if (!thingy.addClass) {
-			// extend element with a few useful methods
-			thingy.hide = function() { this.style.display = 'none'; };
-			thingy.show = function() { this.style.display = ''; };
-			thingy.addClass = function(name) { this.removeClass(name); this.className += ' ' + name; };
-			thingy.removeClass = function(name) {
-				this.className = this.className.replace( new RegExp("\\s*" + name + "\\s*"), " ").replace(/^\s+/, '').replace(/\s+$/, '');
-			};
-			thingy.hasClass = function(name) {
-				return !!this.className.match( new RegExp("\\s*" + name + "\\s*") );
-			};
-		}
-		return thingy;
-	},
-
-	setMoviePath: function(path) {
-		// set path to ZeroClipboard.swf
-		this.moviePath = path;
-	},
-
-	dispatch: function(id, eventName, args) {
-		// receive event from flash movie, send to client
-		var client = this.clients[id];
-		if (client) {
-			client.receiveEvent(eventName, args);
-		}
-	},
-
-	log: function ( str ) {
-		console.log( 'Flash: '+str );
-	},
-
-	register: function(id, client) {
-		// register new client to receive events
-		this.clients[id] = client;
-	},
-
-	getDOMObjectPosition: function(obj) {
-		// get absolute coordinates for dom element
-		var info = {
-			left: 0,
-			top: 0,
-			width: obj.width ? obj.width : obj.offsetWidth,
-			height: obj.height ? obj.height : obj.offsetHeight
-		};
-
-		if ( obj.style.width !== "" ) {
-			info.width = obj.style.width.replace("px","");
-		}
-
-		if ( obj.style.height !== "" ) {
-			info.height = obj.style.height.replace("px","");
-		}
-
-		while (obj) {
-			info.left += obj.offsetLeft;
-			info.top += obj.offsetTop;
-			obj = obj.offsetParent;
-		}
-
-		return info;
-	},
-
-	Client: function(elem) {
-		// constructor for new simple upload client
-		this.handlers = {};
-
-		// unique ID
-		this.id = ZeroClipboard_TableTools.nextId++;
-		this.movieId = 'ZeroClipboard_TableToolsMovie_' + this.id;
-
-		// register client with singleton to receive flash events
-		ZeroClipboard_TableTools.register(this.id, this);
-
-		// create movie
-		if (elem) {
-			this.glue(elem);
-		}
-	}
-};
-
-ZeroClipboard_TableTools.Client.prototype = {
-
-	id: 0, // unique ID for us
-	ready: false, // whether movie is ready to receive events or not
-	movie: null, // reference to movie object
-	clipText: '', // text to copy to clipboard
-	fileName: '', // default file save name
-	action: 'copy', // action to perform
-	handCursorEnabled: true, // whether to show hand cursor, or default pointer cursor
-	cssEffects: true, // enable CSS mouse effects on dom container
-	handlers: null, // user event handlers
-	sized: false,
-	sheetName: '', // default sheet name for excel export
-
-	glue: function(elem, title) {
-		// glue to DOM element
-		// elem can be ID or actual DOM element object
-		this.domElement = ZeroClipboard_TableTools.$(elem);
-
-		// float just above object, or zIndex 99 if dom element isn't set
-		var zIndex = 99;
-		if (this.domElement.style.zIndex) {
-			zIndex = parseInt(this.domElement.style.zIndex, 10) + 1;
-		}
-
-		// find X/Y position of domElement
-		var box = ZeroClipboard_TableTools.getDOMObjectPosition(this.domElement);
-
-		// create floating DIV above element
-		this.div = document.createElement('div');
-		var style = this.div.style;
-		style.position = 'absolute';
-		style.left = '0px';
-		style.top = '0px';
-		style.width = (box.width) + 'px';
-		style.height = box.height + 'px';
-		style.zIndex = zIndex;
-
-		if ( typeof title != "undefined" && title !== "" ) {
-			this.div.title = title;
-		}
-		if ( box.width !== 0 && box.height !== 0 ) {
-			this.sized = true;
-		}
-
-		// style.backgroundColor = '#f00'; // debug
-		if ( this.domElement ) {
-			this.domElement.appendChild(this.div);
-			this.div.innerHTML = this.getHTML( box.width, box.height ).replace(/&/g, '&amp;');
-		}
-	},
-
-	positionElement: function() {
-		var box = ZeroClipboard_TableTools.getDOMObjectPosition(this.domElement);
-		var style = this.div.style;
-
-		style.position = 'absolute';
-		//style.left = (this.domElement.offsetLeft)+'px';
-		//style.top = this.domElement.offsetTop+'px';
-		style.width = box.width + 'px';
-		style.height = box.height + 'px';
-
-		if ( box.width !== 0 && box.height !== 0 ) {
-			this.sized = true;
-		} else {
-			return;
-		}
-
-		var flash = this.div.childNodes[0];
-		flash.width = box.width;
-		flash.height = box.height;
-	},
-
-	getHTML: function(width, height) {
-		// return HTML for movie
-		var html = '';
-		var flashvars = 'id=' + this.id +
-			'&width=' + width +
-			'&height=' + height;
-
-		if (navigator.userAgent.match(/MSIE/)) {
-			// IE gets an OBJECT tag
-			var protocol = location.href.match(/^https/i) ? 'https://' : 'http://';
-			html += '<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="'+protocol+'download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=10,0,0,0" width="'+width+'" height="'+height+'" id="'+this.movieId+'" align="middle"><param name="allowScriptAccess" value="always" /><param name="allowFullScreen" value="false" /><param name="movie" value="'+ZeroClipboard_TableTools.moviePath+'" /><param name="loop" value="false" /><param name="menu" value="false" /><param name="quality" value="best" /><param name="bgcolor" value="#ffffff" /><param name="flashvars" value="'+flashvars+'"/><param name="wmode" value="transparent"/></object>';
-		}
-		else {
-			// all other browsers get an EMBED tag
-			html += '<embed id="'+this.movieId+'" src="'+ZeroClipboard_TableTools.moviePath+'" loop="false" menu="false" quality="best" bgcolor="#ffffff" width="'+width+'" height="'+height+'" name="'+this.movieId+'" align="middle" allowScriptAccess="always" allowFullScreen="false" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" flashvars="'+flashvars+'" wmode="transparent" />';
-		}
-		return html;
-	},
-
-	hide: function() {
-		// temporarily hide floater offscreen
-		if (this.div) {
-			this.div.style.left = '-2000px';
-		}
-	},
-
-	show: function() {
-		// show ourselves after a call to hide()
-		this.reposition();
-	},
-
-	destroy: function() {
-		// destroy control and floater
-		var that = this;
-
-		if (this.domElement && this.div) {
-			$(this.div).remove();
-
-			this.domElement = null;
-			this.div = null;
-
-			$.each( ZeroClipboard_TableTools.clients, function ( id, client ) {
-				if ( client === that ) {
-					delete ZeroClipboard_TableTools.clients[ id ];
-				}
-			} );
-		}
-	},
-
-	reposition: function(elem) {
-		// reposition our floating div, optionally to new container
-		// warning: container CANNOT change size, only position
-		if (elem) {
-			this.domElement = ZeroClipboard_TableTools.$(elem);
-			if (!this.domElement) {
-				this.hide();
-			}
-		}
-
-		if (this.domElement && this.div) {
-			var box = ZeroClipboard_TableTools.getDOMObjectPosition(this.domElement);
-			var style = this.div.style;
-			style.left = '' + box.left + 'px';
-			style.top = '' + box.top + 'px';
-		}
-	},
-
-	clearText: function() {
-		// clear the text to be copy / saved
-		this.clipText = '';
-		if (this.ready) {
-			this.movie.clearText();
-		}
-	},
-
-	appendText: function(newText) {
-		// append text to that which is to be copied / saved
-		this.clipText += newText;
-		if (this.ready) { this.movie.appendText(newText) ;}
-	},
-
-	setText: function(newText) {
-		// set text to be copied to be copied / saved
-		this.clipText = newText;
-		if (this.ready) { this.movie.setText(newText) ;}
-	},
-
-	setFileName: function(newText) {
-		// set the file name
-		this.fileName = newText;
-		if (this.ready) {
-			this.movie.setFileName(newText);
-		}
-	},
-
-	setSheetData: function(data) {
-		// set the xlsx sheet data
-		if (this.ready) {
-			this.movie.setSheetData( JSON.stringify( data ) );
-		}
-	},
-
-	setAction: function(newText) {
-		// set action (save or copy)
-		this.action = newText;
-		if (this.ready) {
-			this.movie.setAction(newText);
-		}
-	},
-
-	addEventListener: function(eventName, func) {
-		// add user event listener for event
-		// event types: load, queueStart, fileStart, fileComplete, queueComplete, progress, error, cancel
-		eventName = eventName.toString().toLowerCase().replace(/^on/, '');
-		if (!this.handlers[eventName]) {
-			this.handlers[eventName] = [];
-		}
-		this.handlers[eventName].push(func);
-	},
-
-	setHandCursor: function(enabled) {
-		// enable hand cursor (true), or default arrow cursor (false)
-		this.handCursorEnabled = enabled;
-		if (this.ready) {
-			this.movie.setHandCursor(enabled);
-		}
-	},
-
-	setCSSEffects: function(enabled) {
-		// enable or disable CSS effects on DOM container
-		this.cssEffects = !!enabled;
-	},
-
-	receiveEvent: function(eventName, args) {
-		var self;
-
-		// receive event from flash
-		eventName = eventName.toString().toLowerCase().replace(/^on/, '');
-
-		// special behavior for certain events
-		switch (eventName) {
-			case 'load':
-				// movie claims it is ready, but in IE this isn't always the case...
-				// bug fix: Cannot extend EMBED DOM elements in Firefox, must use traditional function
-				this.movie = document.getElementById(this.movieId);
-				if (!this.movie) {
-					self = this;
-					setTimeout( function() { self.receiveEvent('load', null); }, 1 );
-					return;
-				}
-
-				// firefox on pc needs a "kick" in order to set these in certain cases
-				if (!this.ready && navigator.userAgent.match(/Firefox/) && navigator.userAgent.match(/Windows/)) {
-					self = this;
-					setTimeout( function() { self.receiveEvent('load', null); }, 100 );
-					this.ready = true;
-					return;
-				}
-
-				this.ready = true;
-				this.movie.clearText();
-				this.movie.appendText( this.clipText );
-				this.movie.setFileName( this.fileName );
-				this.movie.setAction( this.action );
-				this.movie.setHandCursor( this.handCursorEnabled );
-				break;
-
-			case 'mouseover':
-				if (this.domElement && this.cssEffects) {
-					//this.domElement.addClass('hover');
-					if (this.recoverActive) {
-						this.domElement.addClass('active');
-					}
-				}
-				break;
-
-			case 'mouseout':
-				if (this.domElement && this.cssEffects) {
-					this.recoverActive = false;
-					if (this.domElement.hasClass('active')) {
-						this.domElement.removeClass('active');
-						this.recoverActive = true;
-					}
-					//this.domElement.removeClass('hover');
-				}
-				break;
-
-			case 'mousedown':
-				if (this.domElement && this.cssEffects) {
-					this.domElement.addClass('active');
-				}
-				break;
-
-			case 'mouseup':
-				if (this.domElement && this.cssEffects) {
-					this.domElement.removeClass('active');
-					this.recoverActive = false;
-				}
-				break;
-		} // switch eventName
-
-		if (this.handlers[eventName]) {
-			for (var idx = 0, len = this.handlers[eventName].length; idx < len; idx++) {
-				var func = this.handlers[eventName][idx];
-
-				if (typeof(func) == 'function') {
-					// actual function reference
-					func(this, args);
-				}
-				else if ((typeof(func) == 'object') && (func.length == 2)) {
-					// PHP style object + method, i.e. [myObject, 'myMethod']
-					func[0][ func[1] ](this, args);
-				}
-				else if (typeof(func) == 'string') {
-					// name of function
-					window[func](this, args);
-				}
-			} // foreach event handler defined
-		} // user defined handler for event
-	}
-};
-
-ZeroClipboard_TableTools.hasFlash = function ()
-{
-	try {
-		var fo = new ActiveXObject('ShockwaveFlash.ShockwaveFlash');
-		if (fo) {
-			return true;
-		}
-	}
-	catch (e) {
-		if (
-			navigator.mimeTypes &&
-			navigator.mimeTypes['application/x-shockwave-flash'] !== undefined &&
-			navigator.mimeTypes['application/x-shockwave-flash'].enabledPlugin
-		) {
-			return true;
-		}
-	}
-
-	return false;
-};
-
-// For the Flash binding to work, ZeroClipboard_TableTools must be on the global
-// object list
-window.ZeroClipboard_TableTools = ZeroClipboard_TableTools;
-
-
-
-/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- * Local (private) functions
- */
-
-/**
- * If a Buttons instance is initlaised before it is placed into the DOM, Flash
- * won't be able to bind to it, so we need to wait until it is available, this
- * method abstracts that out.
- *
- * @param {ZeroClipboard} flash ZeroClipboard instance
- * @param {jQuery} node  Button
- */
-var _glue = function ( flash, node )
-{
-	var id = node.attr('id');
-
-	if ( node.parents('html').length ) {
-		flash.glue( node[0], '' );
-	}
-	else {
-		setTimeout( function () {
-			_glue( flash, node );
-		}, 500 );
-	}
-};
-
-/**
- * Get the sheet name for Excel exports.
- *
- * @param {object}  config       Button configuration
- */
-var _sheetname = function ( config )
-{
-	var sheetName = 'Sheet1';
-
-	if ( config.sheetName ) {
-		sheetName = config.sheetName.replace(/[\[\]\*\/\\\?\:]/g, '');
-	}
-
-	return sheetName;
-};
-
-/**
- * Set the flash text. This has to be broken up into chunks as the Javascript /
- * Flash bridge has a size limit. There is no indication in the Flash
- * documentation what this is, and it probably depends upon the browser.
- * Experimentation shows that the point is around 50k when data starts to get
- * lost, so an 8K limit used here is safe.
- *
- * @param {ZeroClipboard} flash ZeroClipboard instance
- * @param {string}        data  Data to send to Flash
- */
-var _setText = function ( flash, data )
-{
-	var parts = data.match(/[\s\S]{1,8192}/g) || [];
-
-	flash.clearText();
-	for ( var i=0, len=parts.length ; i<len ; i++ )
-	{
-		flash.appendText( parts[i] );
-	}
-};
-
-/**
- * Get the newline character(s)
- *
- * @param {object}  config Button configuration
- * @return {string}        Newline character
- */
-var _newLine = function ( config )
-{
-	return config.newline ?
-		config.newline :
-		navigator.userAgent.match(/Windows/) ?
-			'\r\n' :
-			'\n';
-};
-
-/**
- * Combine the data from the `buttons.exportData` method into a string that
- * will be used in the export file.
- *
- * @param  {DataTable.Api} dt     DataTables API instance
- * @param  {object}        config Button configuration
- * @return {object}               The data to export
- */
-var _exportData = function ( dt, config )
-{
-	var newLine = _newLine( config );
-	var data = dt.buttons.exportData( config.exportOptions );
-	var boundary = config.fieldBoundary;
-	var separator = config.fieldSeparator;
-	var reBoundary = new RegExp( boundary, 'g' );
-	var escapeChar = config.escapeChar !== undefined ?
-		config.escapeChar :
-		'\\';
-	var join = function ( a ) {
-		var s = '';
-
-		// If there is a field boundary, then we might need to escape it in
-		// the source data
-		for ( var i=0, ien=a.length ; i<ien ; i++ ) {
-			if ( i > 0 ) {
-				s += separator;
-			}
-
-			s += boundary ?
-				boundary + ('' + a[i]).replace( reBoundary, escapeChar+boundary ) + boundary :
-				a[i];
-		}
-
-		return s;
-	};
-
-	var header = config.header ? join( data.header )+newLine : '';
-	var footer = config.footer && data.footer ? newLine+join( data.footer ) : '';
-	var body = [];
-
-	for ( var i=0, ien=data.body.length ; i<ien ; i++ ) {
-		body.push( join( data.body[i] ) );
-	}
-
-	return {
-		str: header + body.join( newLine ) + footer,
-		rows: body.length
-	};
-};
-
-
-// Basic initialisation for the buttons is common between them
-var flashButton = {
-	available: function () {
-		return ZeroClipboard_TableTools.hasFlash();
-	},
-
-	init: function ( dt, button, config ) {
-		// Insert the Flash movie
-		ZeroClipboard_TableTools.moviePath = DataTable.Buttons.swfPath;
-		var flash = new ZeroClipboard_TableTools.Client();
-
-		flash.setHandCursor( true );
-		flash.addEventListener('mouseDown', function(client) {
-			config._fromFlash = true;
-			dt.button( button[0] ).trigger();
-			config._fromFlash = false;
-		} );
-
-		_glue( flash, button );
-
-		config._flash = flash;
-	},
-
-	destroy: function ( dt, button, config ) {
-		config._flash.destroy();
-	},
-
-	fieldSeparator: ',',
-
-	fieldBoundary: '"',
-
-	exportOptions: {},
-
-	title: '*',
-
-	messageTop: '*',
-
-	messageBottom: '*',
-
-	filename: '*',
-
-	extension: '.csv',
-
-	header: true,
-
-	footer: false
-};
-
-
-/**
- * Convert from numeric position to letter for column names in Excel
- * @param  {int} n Column number
- * @return {string} Column letter(s) name
- */
-function createCellPos( n ){
-	var ordA = 'A'.charCodeAt(0);
-	var ordZ = 'Z'.charCodeAt(0);
-	var len = ordZ - ordA + 1;
-	var s = "";
-
-	while( n >= 0 ) {
-		s = String.fromCharCode(n % len + ordA) + s;
-		n = Math.floor(n / len) - 1;
-	}
-
-	return s;
-}
-
-/**
- * Create an XML node and add any children, attributes, etc without needing to
- * be verbose in the DOM.
- *
- * @param  {object} doc      XML document
- * @param  {string} nodeName Node name
- * @param  {object} opts     Options - can be `attr` (attributes), `children`
- *   (child nodes) and `text` (text content)
- * @return {node}            Created node
- */
-function _createNode( doc, nodeName, opts ){
-	var tempNode = doc.createElement( nodeName );
-
-	if ( opts ) {
-		if ( opts.attr ) {
-			$(tempNode).attr( opts.attr );
-		}
-
-		if ( opts.children ) {
-			$.each( opts.children, function ( key, value ) {
-				tempNode.appendChild( value );
-			} );
-		}
-
-		if ( opts.text !== null && opts.text !== undefined ) {
-			tempNode.appendChild( doc.createTextNode( opts.text ) );
-		}
-	}
-
-	return tempNode;
-}
-
-/**
- * Get the width for an Excel column based on the contents of that column
- * @param  {object} data Data for export
- * @param  {int}    col  Column index
- * @return {int}         Column width
- */
-function _excelColWidth( data, col ) {
-	var max = data.header[col].length;
-	var len, lineSplit, str;
-
-	if ( data.footer && data.footer[col].length > max ) {
-		max = data.footer[col].length;
-	}
-
-	for ( var i=0, ien=data.body.length ; i<ien ; i++ ) {
-		var point = data.body[i][col];
-		str = point !== null && point !== undefined ?
-			point.toString() :
-			'';
-
-		// If there is a newline character, workout the width of the column
-		// based on the longest line in the string
-		if ( str.indexOf('\n') !== -1 ) {
-			lineSplit = str.split('\n');
-			lineSplit.sort( function (a, b) {
-				return b.length - a.length;
-			} );
-
-			len = lineSplit[0].length;
-		}
-		else {
-			len = str.length;
-		}
-
-		if ( len > max ) {
-			max = len;
-		}
-
-		// Max width rather than having potentially massive column widths
-		if ( max > 40 ) {
-			return 52; // 40 * 1.3
-		}
-	}
-
-	max *= 1.3;
-
-	// And a min width
-	return max > 6 ? max : 6;
-}
-
-  var _serialiser = "";
-    if (typeof window.XMLSerializer === 'undefined') {
-        _serialiser = new function () {
-            this.serializeToString = function (input) {
-                return input.xml
-            }
-        };
-    } else {
-        _serialiser =  new XMLSerializer();
-    }
-
-    var _ieExcel;
-
-
-/**
- * Convert XML documents in an object to strings
- * @param  {object} obj XLSX document object
- */
-function _xlsxToStrings( obj ) {
-	if ( _ieExcel === undefined ) {
-		// Detect if we are dealing with IE's _awful_ serialiser by seeing if it
-		// drop attributes
-		_ieExcel = _serialiser
-			.serializeToString(
-				$.parseXML( excelStrings['xl/worksheets/sheet1.xml'] )
-			)
-			.indexOf( 'xmlns:r' ) === -1;
-	}
-
-	$.each( obj, function ( name, val ) {
-		if ( $.isPlainObject( val ) ) {
-			_xlsxToStrings( val );
-		}
-		else {
-			if ( _ieExcel ) {
-				// IE's XML serialiser will drop some name space attributes from
-				// from the root node, so we need to save them. Do this by
-				// replacing the namespace nodes with a regular attribute that
-				// we convert back when serialised. Edge does not have this
-				// issue
-				var worksheet = val.childNodes[0];
-				var i, ien;
-				var attrs = [];
-
-				for ( i=worksheet.attributes.length-1 ; i>=0 ; i-- ) {
-					var attrName = worksheet.attributes[i].nodeName;
-					var attrValue = worksheet.attributes[i].nodeValue;
-
-					if ( attrName.indexOf( ':' ) !== -1 ) {
-						attrs.push( { name: attrName, value: attrValue } );
-
-						worksheet.removeAttribute( attrName );
-					}
-				}
-
-				for ( i=0, ien=attrs.length ; i<ien ; i++ ) {
-					var attr = val.createAttribute( attrs[i].name.replace( ':', '_dt_b_namespace_token_' ) );
-					attr.value = attrs[i].value;
-					worksheet.setAttributeNode( attr );
-				}
-			}
-
-			var str = _serialiser.serializeToString(val);
-
-			// Fix IE's XML
-			if ( _ieExcel ) {
-				// IE doesn't include the XML declaration
-				if ( str.indexOf( '<?xml' ) === -1 ) {
-					str = '<?xml version="1.0" encoding="UTF-8" standalone="yes"?>'+str;
-				}
-
-				// Return namespace attributes to being as such
-				str = str.replace( /_dt_b_namespace_token_/g, ':' );
-			}
-
-			// Safari, IE and Edge will put empty name space attributes onto
-			// various elements making them useless. This strips them out
-			str = str.replace( /<([^<>]*?) xmlns=""([^<>]*?)>/g, '<$1 $2>' );
-
-			obj[ name ] = str;
-		}
-	} );
-}
-
-// Excel - Pre-defined strings to build a basic XLSX file
-var excelStrings = {
-	"_rels/.rels":
-		'<?xml version="1.0" encoding="UTF-8" standalone="yes"?>'+
-		'<Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships">'+
-			'<Relationship Id="rId1" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument" Target="xl/workbook.xml"/>'+
-		'</Relationships>',
-
-	"xl/_rels/workbook.xml.rels":
-		'<?xml version="1.0" encoding="UTF-8" standalone="yes"?>'+
-		'<Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships">'+
-			'<Relationship Id="rId1" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/worksheet" Target="worksheets/sheet1.xml"/>'+
-			'<Relationship Id="rId2" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles" Target="styles.xml"/>'+
-		'</Relationships>',
-
-	"[Content_Types].xml":
-		'<?xml version="1.0" encoding="UTF-8" standalone="yes"?>'+
-		'<Types xmlns="http://schemas.openxmlformats.org/package/2006/content-types">'+
-			'<Default Extension="xml" ContentType="application/xml" />'+
-			'<Default Extension="rels" ContentType="application/vnd.openxmlformats-package.relationships+xml" />'+
-			'<Default Extension="jpeg" ContentType="image/jpeg" />'+
-			'<Override PartName="/xl/workbook.xml" ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml" />'+
-			'<Override PartName="/xl/worksheets/sheet1.xml" ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml" />'+
-			'<Override PartName="/xl/styles.xml" ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml" />'+
-		'</Types>',
-
-	"xl/workbook.xml":
-		'<?xml version="1.0" encoding="UTF-8" standalone="yes"?>'+
-		'<workbook xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships">'+
-			'<fileVersion appName="xl" lastEdited="5" lowestEdited="5" rupBuild="24816"/>'+
-			'<workbookPr showInkAnnotation="0" autoCompressPictures="0"/>'+
-			'<bookViews>'+
-				'<workbookView xWindow="0" yWindow="0" windowWidth="25600" windowHeight="19020" tabRatio="500"/>'+
-			'</bookViews>'+
-			'<sheets>'+
-				'<sheet name="" sheetId="1" r:id="rId1"/>'+
-			'</sheets>'+
-		'</workbook>',
-
-	"xl/worksheets/sheet1.xml":
-		'<?xml version="1.0" encoding="UTF-8" standalone="yes"?>'+
-		'<worksheet xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="x14ac" xmlns:x14ac="http://schemas.microsoft.com/office/spreadsheetml/2009/9/ac">'+
-			'<sheetData/>'+
-			'<mergeCells count="0"/>'+
-		'</worksheet>',
-
-	"xl/styles.xml":
-		'<?xml version="1.0" encoding="UTF-8"?>'+
-		'<styleSheet xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="x14ac" xmlns:x14ac="http://schemas.microsoft.com/office/spreadsheetml/2009/9/ac">'+
-			'<numFmts count="6">'+
-				'<numFmt numFmtId="164" formatCode="#,##0.00_-\ [$$-45C]"/>'+
-				'<numFmt numFmtId="165" formatCode="&quot;£&quot;#,##0.00"/>'+
-				'<numFmt numFmtId="166" formatCode="[$€-2]\ #,##0.00"/>'+
-				'<numFmt numFmtId="167" formatCode="0.0%"/>'+
-				'<numFmt numFmtId="168" formatCode="#,##0;(#,##0)"/>'+
-				'<numFmt numFmtId="169" formatCode="#,##0.00;(#,##0.00)"/>'+
-			'</numFmts>'+
-			'<fonts count="5" x14ac:knownFonts="1">'+
-				'<font>'+
-					'<sz val="11" />'+
-					'<name val="Calibri" />'+
-				'</font>'+
-				'<font>'+
-					'<sz val="11" />'+
-					'<name val="Calibri" />'+
-					'<color rgb="FFFFFFFF" />'+
-				'</font>'+
-				'<font>'+
-					'<sz val="11" />'+
-					'<name val="Calibri" />'+
-					'<b />'+
-				'</font>'+
-				'<font>'+
-					'<sz val="11" />'+
-					'<name val="Calibri" />'+
-					'<i />'+
-				'</font>'+
-				'<font>'+
-					'<sz val="11" />'+
-					'<name val="Calibri" />'+
-					'<u />'+
-				'</font>'+
-			'</fonts>'+
-			'<fills count="6">'+
-				'<fill>'+
-					'<patternFill patternType="none" />'+
-				'</fill>'+
-				'<fill>'+ // Excel appears to use this as a dotted background regardless of values but
-					'<patternFill patternType="none" />'+ // to be valid to the schema, use a patternFill
-				'</fill>'+
-				'<fill>'+
-					'<patternFill patternType="solid">'+
-						'<fgColor rgb="FFD9D9D9" />'+
-						'<bgColor indexed="64" />'+
-					'</patternFill>'+
-				'</fill>'+
-				'<fill>'+
-					'<patternFill patternType="solid">'+
-						'<fgColor rgb="FFD99795" />'+
-						'<bgColor indexed="64" />'+
-					'</patternFill>'+
-				'</fill>'+
-				'<fill>'+
-					'<patternFill patternType="solid">'+
-						'<fgColor rgb="ffc6efce" />'+
-						'<bgColor indexed="64" />'+
-					'</patternFill>'+
-				'</fill>'+
-				'<fill>'+
-					'<patternFill patternType="solid">'+
-						'<fgColor rgb="ffc6cfef" />'+
-						'<bgColor indexed="64" />'+
-					'</patternFill>'+
-				'</fill>'+
-			'</fills>'+
-			'<borders count="2">'+
-				'<border>'+
-					'<left />'+
-					'<right />'+
-					'<top />'+
-					'<bottom />'+
-					'<diagonal />'+
-				'</border>'+
-				'<border diagonalUp="false" diagonalDown="false">'+
-					'<left style="thin">'+
-						'<color auto="1" />'+
-					'</left>'+
-					'<right style="thin">'+
-						'<color auto="1" />'+
-					'</right>'+
-					'<top style="thin">'+
-						'<color auto="1" />'+
-					'</top>'+
-					'<bottom style="thin">'+
-						'<color auto="1" />'+
-					'</bottom>'+
-					'<diagonal />'+
-				'</border>'+
-			'</borders>'+
-			'<cellStyleXfs count="1">'+
-				'<xf numFmtId="0" fontId="0" fillId="0" borderId="0" />'+
-			'</cellStyleXfs>'+
-			'<cellXfs count="61">'+
-				'<xf numFmtId="0" fontId="0" fillId="0" borderId="0" applyFont="1" applyFill="1" applyBorder="1"/>'+
-				'<xf numFmtId="0" fontId="1" fillId="0" borderId="0" applyFont="1" applyFill="1" applyBorder="1"/>'+
-				'<xf numFmtId="0" fontId="2" fillId="0" borderId="0" applyFont="1" applyFill="1" applyBorder="1"/>'+
-				'<xf numFmtId="0" fontId="3" fillId="0" borderId="0" applyFont="1" applyFill="1" applyBorder="1"/>'+
-				'<xf numFmtId="0" fontId="4" fillId="0" borderId="0" applyFont="1" applyFill="1" applyBorder="1"/>'+
-				'<xf numFmtId="0" fontId="0" fillId="2" borderId="0" applyFont="1" applyFill="1" applyBorder="1"/>'+
-				'<xf numFmtId="0" fontId="1" fillId="2" borderId="0" applyFont="1" applyFill="1" applyBorder="1"/>'+
-				'<xf numFmtId="0" fontId="2" fillId="2" borderId="0" applyFont="1" applyFill="1" applyBorder="1"/>'+
-				'<xf numFmtId="0" fontId="3" fillId="2" borderId="0" applyFont="1" applyFill="1" applyBorder="1"/>'+
-				'<xf numFmtId="0" fontId="4" fillId="2" borderId="0" applyFont="1" applyFill="1" applyBorder="1"/>'+
-				'<xf numFmtId="0" fontId="0" fillId="3" borderId="0" applyFont="1" applyFill="1" applyBorder="1"/>'+
-				'<xf numFmtId="0" fontId="1" fillId="3" borderId="0" applyFont="1" applyFill="1" applyBorder="1"/>'+
-				'<xf numFmtId="0" fontId="2" fillId="3" borderId="0" applyFont="1" applyFill="1" applyBorder="1"/>'+
-				'<xf numFmtId="0" fontId="3" fillId="3" borderId="0" applyFont="1" applyFill="1" applyBorder="1"/>'+
-				'<xf numFmtId="0" fontId="4" fillId="3" borderId="0" applyFont="1" applyFill="1" applyBorder="1"/>'+
-				'<xf numFmtId="0" fontId="0" fillId="4" borderId="0" applyFont="1" applyFill="1" applyBorder="1"/>'+
-				'<xf numFmtId="0" fontId="1" fillId="4" borderId="0" applyFont="1" applyFill="1" applyBorder="1"/>'+
-				'<xf numFmtId="0" fontId="2" fillId="4" borderId="0" applyFont="1" applyFill="1" applyBorder="1"/>'+
-				'<xf numFmtId="0" fontId="3" fillId="4" borderId="0" applyFont="1" applyFill="1" applyBorder="1"/>'+
-				'<xf numFmtId="0" fontId="4" fillId="4" borderId="0" applyFont="1" applyFill="1" applyBorder="1"/>'+
-				'<xf numFmtId="0" fontId="0" fillId="5" borderId="0" applyFont="1" applyFill="1" applyBorder="1"/>'+
-				'<xf numFmtId="0" fontId="1" fillId="5" borderId="0" applyFont="1" applyFill="1" applyBorder="1"/>'+
-				'<xf numFmtId="0" fontId="2" fillId="5" borderId="0" applyFont="1" applyFill="1" applyBorder="1"/>'+
-				'<xf numFmtId="0" fontId="3" fillId="5" borderId="0" applyFont="1" applyFill="1" applyBorder="1"/>'+
-				'<xf numFmtId="0" fontId="4" fillId="5" borderId="0" applyFont="1" applyFill="1" applyBorder="1"/>'+
-				'<xf numFmtId="0" fontId="0" fillId="0" borderId="1" applyFont="1" applyFill="1" applyBorder="1"/>'+
-				'<xf numFmtId="0" fontId="1" fillId="0" borderId="1" applyFont="1" applyFill="1" applyBorder="1"/>'+
-				'<xf numFmtId="0" fontId="2" fillId="0" borderId="1" applyFont="1" applyFill="1" applyBorder="1"/>'+
-				'<xf numFmtId="0" fontId="3" fillId="0" borderId="1" applyFont="1" applyFill="1" applyBorder="1"/>'+
-				'<xf numFmtId="0" fontId="4" fillId="0" borderId="1" applyFont="1" applyFill="1" applyBorder="1"/>'+
-				'<xf numFmtId="0" fontId="0" fillId="2" borderId="1" applyFont="1" applyFill="1" applyBorder="1"/>'+
-				'<xf numFmtId="0" fontId="1" fillId="2" borderId="1" applyFont="1" applyFill="1" applyBorder="1"/>'+
-				'<xf numFmtId="0" fontId="2" fillId="2" borderId="1" applyFont="1" applyFill="1" applyBorder="1"/>'+
-				'<xf numFmtId="0" fontId="3" fillId="2" borderId="1" applyFont="1" applyFill="1" applyBorder="1"/>'+
-				'<xf numFmtId="0" fontId="4" fillId="2" borderId="1" applyFont="1" applyFill="1" applyBorder="1"/>'+
-				'<xf numFmtId="0" fontId="0" fillId="3" borderId="1" applyFont="1" applyFill="1" applyBorder="1"/>'+
-				'<xf numFmtId="0" fontId="1" fillId="3" borderId="1" applyFont="1" applyFill="1" applyBorder="1"/>'+
-				'<xf numFmtId="0" fontId="2" fillId="3" borderId="1" applyFont="1" applyFill="1" applyBorder="1"/>'+
-				'<xf numFmtId="0" fontId="3" fillId="3" borderId="1" applyFont="1" applyFill="1" applyBorder="1"/>'+
-				'<xf numFmtId="0" fontId="4" fillId="3" borderId="1" applyFont="1" applyFill="1" applyBorder="1"/>'+
-				'<xf numFmtId="0" fontId="0" fillId="4" borderId="1" applyFont="1" applyFill="1" applyBorder="1"/>'+
-				'<xf numFmtId="0" fontId="1" fillId="4" borderId="1" applyFont="1" applyFill="1" applyBorder="1"/>'+
-				'<xf numFmtId="0" fontId="2" fillId="4" borderId="1" applyFont="1" applyFill="1" applyBorder="1"/>'+
-				'<xf numFmtId="0" fontId="3" fillId="4" borderId="1" applyFont="1" applyFill="1" applyBorder="1"/>'+
-				'<xf numFmtId="0" fontId="4" fillId="4" borderId="1" applyFont="1" applyFill="1" applyBorder="1"/>'+
-				'<xf numFmtId="0" fontId="0" fillId="5" borderId="1" applyFont="1" applyFill="1" applyBorder="1"/>'+
-				'<xf numFmtId="0" fontId="1" fillId="5" borderId="1" applyFont="1" applyFill="1" applyBorder="1"/>'+
-				'<xf numFmtId="0" fontId="2" fillId="5" borderId="1" applyFont="1" applyFill="1" applyBorder="1"/>'+
-				'<xf numFmtId="0" fontId="3" fillId="5" borderId="1" applyFont="1" applyFill="1" applyBorder="1"/>'+
-				'<xf numFmtId="0" fontId="4" fillId="5" borderId="1" applyFont="1" applyFill="1" applyBorder="1"/>'+
-				'<xf numFmtId="0" fontId="0" fillId="0" borderId="0" applyFont="1" applyFill="1" applyBorder="1" xfId="0" applyAlignment="1">'+
-					'<alignment horizontal="left"/>'+
-				'</xf>'+
-				'<xf numFmtId="0" fontId="0" fillId="0" borderId="0" applyFont="1" applyFill="1" applyBorder="1" xfId="0" applyAlignment="1">'+
-					'<alignment horizontal="center"/>'+
-				'</xf>'+
-				'<xf numFmtId="0" fontId="0" fillId="0" borderId="0" applyFont="1" applyFill="1" applyBorder="1" xfId="0" applyAlignment="1">'+
-					'<alignment horizontal="right"/>'+
-				'</xf>'+
-				'<xf numFmtId="0" fontId="0" fillId="0" borderId="0" applyFont="1" applyFill="1" applyBorder="1" xfId="0" applyAlignment="1">'+
-					'<alignment horizontal="fill"/>'+
-				'</xf>'+
-				'<xf numFmtId="0" fontId="0" fillId="0" borderId="0" applyFont="1" applyFill="1" applyBorder="1" xfId="0" applyAlignment="1">'+
-					'<alignment textRotation="90"/>'+
-				'</xf>'+
-				'<xf numFmtId="0" fontId="0" fillId="0" borderId="0" applyFont="1" applyFill="1" applyBorder="1" xfId="0" applyAlignment="1">'+
-					'<alignment wrapText="1"/>'+
-				'</xf>'+
-				'<xf numFmtId="9"   fontId="0" fillId="0" borderId="0" applyFont="1" applyFill="1" applyBorder="1" xfId="0" applyNumberFormat="1"/>'+
-				'<xf numFmtId="164" fontId="0" fillId="0" borderId="0" applyFont="1" applyFill="1" applyBorder="1" xfId="0" applyNumberFormat="1"/>'+
-				'<xf numFmtId="165" fontId="0" fillId="0" borderId="0" applyFont="1" applyFill="1" applyBorder="1" xfId="0" applyNumberFormat="1"/>'+
-				'<xf numFmtId="166" fontId="0" fillId="0" borderId="0" applyFont="1" applyFill="1" applyBorder="1" xfId="0" applyNumberFormat="1"/>'+
-				'<xf numFmtId="167" fontId="0" fillId="0" borderId="0" applyFont="1" applyFill="1" applyBorder="1" xfId="0" applyNumberFormat="1"/>'+
-				'<xf numFmtId="168" fontId="0" fillId="0" borderId="0" applyFont="1" applyFill="1" applyBorder="1" xfId="0" applyNumberFormat="1"/>'+
-				'<xf numFmtId="169" fontId="0" fillId="0" borderId="0" applyFont="1" applyFill="1" applyBorder="1" xfId="0" applyNumberFormat="1"/>'+
-				'<xf numFmtId="3" fontId="0" fillId="0" borderId="0" applyFont="1" applyFill="1" applyBorder="1" xfId="0" applyNumberFormat="1"/>'+
-				'<xf numFmtId="4" fontId="0" fillId="0" borderId="0" applyFont="1" applyFill="1" applyBorder="1" xfId="0" applyNumberFormat="1"/>'+
-			'</cellXfs>'+
-			'<cellStyles count="1">'+
-				'<cellStyle name="Normal" xfId="0" builtinId="0" />'+
-			'</cellStyles>'+
-			'<dxfs count="0" />'+
-			'<tableStyles count="0" defaultTableStyle="TableStyleMedium9" defaultPivotStyle="PivotStyleMedium4" />'+
-		'</styleSheet>'
-};
-// Note we could use 3 `for` loops for the styles, but when gzipped there is
-// virtually no difference in size, since the above can be easily compressed
-
-// Pattern matching for special number formats. Perhaps this should be exposed
-// via an API in future?
-var _excelSpecials = [
-	{ match: /^\-?\d+\.\d%$/,       style: 60, fmt: function (d) { return d/100; } }, // Precent with d.p.
-	{ match: /^\-?\d+\.?\d*%$/,     style: 56, fmt: function (d) { return d/100; } }, // Percent
-	{ match: /^\-?\$[\d,]+.?\d*$/,  style: 57 }, // Dollars
-	{ match: /^\-?£[\d,]+.?\d*$/,   style: 58 }, // Pounds
-	{ match: /^\-?€[\d,]+.?\d*$/,   style: 59 }, // Euros
-	{ match: /^\([\d,]+\)$/,        style: 61, fmt: function (d) { return -1 * d.replace(/[\(\)]/g, ''); } },  // Negative numbers indicated by brackets
-	{ match: /^\([\d,]+\.\d{2}\)$/, style: 62, fmt: function (d) { return -1 * d.replace(/[\(\)]/g, ''); } },  // Negative numbers indicated by brackets - 2d.p.
-	{ match: /^[\d,]+$/,            style: 63 }, // Numbers with thousand separators
-	{ match: /^[\d,]+\.\d{2}$/,     style: 64 }  // Numbers with 2d.p. and thousands separators
-];
-
-
-
-/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- * DataTables options and methods
- */
-
-// Set the default SWF path
-DataTable.Buttons.swfPath = '//cdn.datatables.net/buttons/'+DataTable.Buttons.version+'/swf/flashExport.swf';
-
-// Method to allow Flash buttons to be resized when made visible - as they are
-// of zero height and width if initialised hidden
-DataTable.Api.register( 'buttons.resize()', function () {
-	$.each( ZeroClipboard_TableTools.clients, function ( i, client ) {
-		if ( client.domElement !== undefined && client.domElement.parentNode ) {
-			client.positionElement();
-		}
-	} );
-} );
-
-
-/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- * Button definitions
- */
-
-// Copy to clipboard
-DataTable.ext.buttons.copyFlash = $.extend( {}, flashButton, {
-	className: 'buttons-copy buttons-flash',
-
-	text: function ( dt ) {
-		return dt.i18n( 'buttons.copy', 'Copy' );
-	},
-
-	action: function ( e, dt, button, config ) {
-		// Check that the trigger did actually occur due to a Flash activation
-		if ( ! config._fromFlash ) {
-			return;
-		}
-
-		this.processing( true );
-
-		var flash = config._flash;
-		var exportData = _exportData( dt, config );
-		var info = dt.buttons.exportInfo( config );
-		var newline = _newLine(config);
-		var output = exportData.str;
-
-		if ( info.title ) {
-			output = info.title + newline + newline + output;
-		}
-
-		if ( info.messageTop ) {
-			output = info.messageTop + newline + newline + output;
-		}
-
-		if ( info.messageBottom ) {
-			output = output + newline + newline + info.messageBottom;
-		}
-
-		if ( config.customize ) {
-			output = config.customize( output, config, dt );
-		}
-
-		flash.setAction( 'copy' );
-		_setText( flash, output );
-
-		this.processing( false );
-
-		dt.buttons.info(
-			dt.i18n( 'buttons.copyTitle', 'Copy to clipboard' ),
-			dt.i18n( 'buttons.copySuccess', {
-				_: 'Copied %d rows to clipboard',
-				1: 'Copied 1 row to clipboard'
-			}, data.rows ),
-			3000
-		);
-	},
-
-	fieldSeparator: '\t',
-
-	fieldBoundary: ''
-} );
-
-// CSV save file
-DataTable.ext.buttons.csvFlash = $.extend( {}, flashButton, {
-	className: 'buttons-csv buttons-flash',
-
-	text: function ( dt ) {
-		return dt.i18n( 'buttons.csv', 'CSV' );
-	},
-
-	action: function ( e, dt, button, config ) {
-		// Set the text
-		var flash = config._flash;
-		var data = _exportData( dt, config );
-		var info = dt.buttons.exportInfo( config );
-		var output = config.customize ?
-			config.customize( data.str, config, dt ) :
-			data.str;
-
-		flash.setAction( 'csv' );
-		flash.setFileName( info.filename );
-		_setText( flash, output );
-	},
-
-	escapeChar: '"'
-} );
-
-// Excel save file - this is really a CSV file using UTF-8 that Excel can read
-DataTable.ext.buttons.excelFlash = $.extend( {}, flashButton, {
-	className: 'buttons-excel buttons-flash',
-
-	text: function ( dt ) {
-		return dt.i18n( 'buttons.excel', 'Excel' );
-	},
-
-	action: function ( e, dt, button, config ) {
-		this.processing( true );
-
-		var flash = config._flash;
-		var rowPos = 0;
-		var rels = $.parseXML( excelStrings['xl/worksheets/sheet1.xml'] ) ; //Parses xml
-		var relsGet = rels.getElementsByTagName( "sheetData" )[0];
-
-		var xlsx = {
-			_rels: {
-				".rels": $.parseXML( excelStrings['_rels/.rels'] )
-			},
-			xl: {
-				_rels: {
-					"workbook.xml.rels": $.parseXML( excelStrings['xl/_rels/workbook.xml.rels'] )
-				},
-				"workbook.xml": $.parseXML( excelStrings['xl/workbook.xml'] ),
-				"styles.xml": $.parseXML( excelStrings['xl/styles.xml'] ),
-				"worksheets": {
-					"sheet1.xml": rels
-				}
-
-			},
-			"[Content_Types].xml": $.parseXML( excelStrings['[Content_Types].xml'])
-		};
-
-		var data = dt.buttons.exportData( config.exportOptions );
-		var currentRow, rowNode;
-		var addRow = function ( row ) {
-			currentRow = rowPos+1;
-			rowNode = _createNode( rels, "row", { attr: {r:currentRow} } );
-
-			for ( var i=0, ien=row.length ; i<ien ; i++ ) {
-				// Concat both the Cell Columns as a letter and the Row of the cell.
-				var cellId = createCellPos(i) + '' + currentRow;
-				var cell = null;
-
-				// For null, undefined of blank cell, continue so it doesn't create the _createNode
-				if ( row[i] === null || row[i] === undefined || row[i] === '' ) {
-					if ( config.createEmptyCells === true ) {
-						row[i] = '';
-					}
-					else {
-						continue;
-					}
-				}
-
-				row[i] = $.trim( row[i] );
-
-				// Special number formatting options
-				for ( var j=0, jen=_excelSpecials.length ; j<jen ; j++ ) {
-					var special = _excelSpecials[j];
-
-					// TODO Need to provide the ability for the specials to say
-					// if they are returning a string, since at the moment it is
-					// assumed to be a number
-					if ( row[i].match && ! row[i].match(/^0\d+/) && row[i].match( special.match ) ) {
-						var val = row[i].replace(/[^\d\.\-]/g, '');
-
-						if ( special.fmt ) {
-							val = special.fmt( val );
-						}
-
-						cell = _createNode( rels, 'c', {
-							attr: {
-								r: cellId,
-								s: special.style
-							},
-							children: [
-								_createNode( rels, 'v', { text: val } )
-							]
-						} );
-
-						break;
-					}
-				}
-
-				if ( ! cell ) {
-					if ( typeof row[i] === 'number' || (
-						row[i].match &&
-						row[i].match(/^-?\d+(\.\d+)?$/) &&
-						! row[i].match(/^0\d+/) )
-					) {
-						// Detect numbers - don't match numbers with leading zeros
-						// or a negative anywhere but the start
-						cell = _createNode( rels, 'c', {
-							attr: {
-								t: 'n',
-								r: cellId
-							},
-							children: [
-								_createNode( rels, 'v', { text: row[i] } )
-							]
-						} );
-					}
-					else {
-						// String output - replace non standard characters for text output
-						var text = ! row[i].replace ?
-							row[i] :
-							row[i].replace(/[\x00-\x09\x0B\x0C\x0E-\x1F\x7F-\x9F]/g, '');
-
-						cell = _createNode( rels, 'c', {
-							attr: {
-								t: 'inlineStr',
-								r: cellId
-							},
-							children:{
-								row: _createNode( rels, 'is', {
-									children: {
-										row: _createNode( rels, 't', {
-											text: text
-										} )
-									}
-								} )
-							}
-						} );
-					}
-				}
-
-				rowNode.appendChild( cell );
-			}
-
-			relsGet.appendChild(rowNode);
-			rowPos++;
-		};
-
-		$( 'sheets sheet', xlsx.xl['workbook.xml'] ).attr( 'name', _sheetname( config ) );
-
-		if ( config.customizeData ) {
-			config.customizeData( data );
-		}
-
-		var mergeCells = function ( row, colspan ) {
-			var mergeCells = $('mergeCells', rels);
-
-			mergeCells[0].appendChild( _createNode( rels, 'mergeCell', {
-				attr: {
-					ref: 'A'+row+':'+createCellPos(colspan)+row
-				}
-			} ) );
-			mergeCells.attr( 'count', mergeCells.attr( 'count' )+1 );
-			$('row:eq('+(row-1)+') c', rels).attr( 's', '51' ); // centre
-		};
-
-		// Title and top messages
-		var exportInfo = dt.buttons.exportInfo( config );
-		if ( exportInfo.title ) {
-			addRow( [exportInfo.title], rowPos );
-			mergeCells( rowPos, data.header.length-1 );
-		}
-
-		if ( exportInfo.messageTop ) {
-			addRow( [exportInfo.messageTop], rowPos );
-			mergeCells( rowPos, data.header.length-1 );
-		}
-
-		// Table itself
-		if ( config.header ) {
-			addRow( data.header, rowPos );
-			$('row:last c', rels).attr( 's', '2' ); // bold
-		}
-
-		for ( var n=0, ie=data.body.length ; n<ie ; n++ ) {
-			addRow( data.body[n], rowPos );
-		}
-
-		if ( config.footer && data.footer ) {
-			addRow( data.footer, rowPos);
-			$('row:last c', rels).attr( 's', '2' ); // bold
-		}
-
-		// Below the table
-		if ( exportInfo.messageBottom ) {
-			addRow( [exportInfo.messageBottom], rowPos );
-			mergeCells( rowPos, data.header.length-1 );
-		}
-
-		// Set column widths
-		var cols = _createNode( rels, 'cols' );
-		$('worksheet', rels).prepend( cols );
-
-		for ( var i=0, ien=data.header.length ; i<ien ; i++ ) {
-			cols.appendChild( _createNode( rels, 'col', {
-				attr: {
-					min: i+1,
-					max: i+1,
-					width: _excelColWidth( data, i ),
-					customWidth: 1
-				}
-			} ) );
-		}
-
-		// Let the developer customise the document if they want to
-		if ( config.customize ) {
-			config.customize( xlsx, config, dt );
-		}
-
-		_xlsxToStrings( xlsx );
-
-		flash.setAction( 'excel' );
-		flash.setFileName( exportInfo.filename );
-		flash.setSheetData( xlsx );
-		_setText( flash, '' );
-
-		this.processing( false );
-	},
-
-	extension: '.xlsx',
-	
-	createEmptyCells: false
-} );
-
-
-
-// PDF export
-DataTable.ext.buttons.pdfFlash = $.extend( {}, flashButton, {
-	className: 'buttons-pdf buttons-flash',
-
-	text: function ( dt ) {
-		return dt.i18n( 'buttons.pdf', 'PDF' );
-	},
-
-	action: function ( e, dt, button, config ) {
-		this.processing( true );
-
-		// Set the text
-		var flash = config._flash;
-		var data = dt.buttons.exportData( config.exportOptions );
-		var info = dt.buttons.exportInfo( config );
-		var totalWidth = dt.table().node().offsetWidth;
-
-		// Calculate the column width ratios for layout of the table in the PDF
-		var ratios = dt.columns( config.columns ).indexes().map( function ( idx ) {
-			return dt.column( idx ).header().offsetWidth / totalWidth;
-		} );
-
-		flash.setAction( 'pdf' );
-		flash.setFileName( info.filename );
-
-		_setText( flash, JSON.stringify( {
-			title:         info.title || '',
-			messageTop:    info.messageTop || '',
-			messageBottom: info.messageBottom || '',
-			colWidth:      ratios.toArray(),
-			orientation:   config.orientation,
-			size:          config.pageSize,
-			header:        config.header ? data.header : null,
-			footer:        config.footer ? data.footer : null,
-			body:          data.body
-		} ) );
-
-		this.processing( false );
-	},
-
-	extension: '.pdf',
-
-	orientation: 'portrait',
-
-	pageSize: 'A4',
-
-	newline: '\n'
-} );
-
-
-return DataTable.Buttons;
-}));
diff --git a/DataTables/Buttons-1.6.2/js/buttons.flash.min.js b/DataTables/Buttons-1.6.2/js/buttons.flash.min.js
deleted file mode 100644
index e273635..0000000
--- a/DataTables/Buttons-1.6.2/js/buttons.flash.min.js
+++ /dev/null
@@ -1,39 +0,0 @@
-/*!
- Flash export buttons for Buttons and DataTables.
- 2015-2017 SpryMedia Ltd - datatables.net/license
-
- ZeroClipbaord - MIT license
- Copyright (c) 2012 Joseph Huckaby
-*/
-(function(g){"function"===typeof define&&define.amd?define(["jquery","datatables.net","datatables.net-buttons"],function(n){return g(n,window,document)}):"object"===typeof exports?module.exports=function(n,m){n||(n=window);m&&m.fn.dataTable||(m=require("datatables.net")(n,m).$);m.fn.dataTable.Buttons||require("datatables.net-buttons")(n,m);return g(m,n,n.document)}:g(jQuery,window,document)})(function(g,n,m,u){function A(a){for(var b="";0<=a;)b=String.fromCharCode(a%26+65)+b,a=Math.floor(a/26)-1;
-return b}function r(a,b,c){var d=a.createElement(b);c&&(c.attr&&g(d).attr(c.attr),c.children&&g.each(c.children,function(a,b){d.appendChild(b)}),null!==c.text&&c.text!==u&&d.appendChild(a.createTextNode(c.text)));return d}function G(a,b){var c=a.header[b].length;a.footer&&a.footer[b].length>c&&(c=a.footer[b].length);for(var d=0,f=a.body.length;d<f;d++){var e=a.body[d][b];e=null!==e&&e!==u?e.toString():"";-1!==e.indexOf("\n")?(e=e.split("\n"),e.sort(function(a,b){return b.length-a.length}),e=e[0].length):
-e=e.length;e>c&&(c=e);if(40<c)return 52}c*=1.3;return 6<c?c:6}function B(a){v===u&&(v=-1===z.serializeToString(g.parseXML(t["xl/worksheets/sheet1.xml"])).indexOf("xmlns:r"));g.each(a,function(b,c){if(g.isPlainObject(c))B(c);else{if(v){var d=c.childNodes[0],f,e=[];for(f=d.attributes.length-1;0<=f;f--){var h=d.attributes[f].nodeName;var k=d.attributes[f].nodeValue;-1!==h.indexOf(":")&&(e.push({name:h,value:k}),d.removeAttribute(h))}f=0;for(h=e.length;f<h;f++)k=c.createAttribute(e[f].name.replace(":",
-"_dt_b_namespace_token_")),k.value=e[f].value,d.setAttributeNode(k)}c=z.serializeToString(c);v&&(-1===c.indexOf("<?xml")&&(c='<?xml version="1.0" encoding="UTF-8" standalone="yes"?>'+c),c=c.replace(/_dt_b_namespace_token_/g,":"));c=c.replace(/<([^<>]*?) xmlns=""([^<>]*?)>/g,"<$1 $2>");a[b]=c}})}var l=g.fn.dataTable,h={version:"1.0.4-TableTools2",clients:{},moviePath:"",nextId:1,$:function(a){"string"==typeof a&&(a=m.getElementById(a));a.addClass||(a.hide=function(){this.style.display="none"},a.show=
-function(){this.style.display=""},a.addClass=function(a){this.removeClass(a);this.className+=" "+a},a.removeClass=function(a){this.className=this.className.replace(new RegExp("\\s*"+a+"\\s*")," ").replace(/^\s+/,"").replace(/\s+$/,"")},a.hasClass=function(a){return!!this.className.match(new RegExp("\\s*"+a+"\\s*"))});return a},setMoviePath:function(a){this.moviePath=a},dispatch:function(a,b,c){(a=this.clients[a])&&a.receiveEvent(b,c)},log:function(a){console.log("Flash: "+a)},register:function(a,
-b){this.clients[a]=b},getDOMObjectPosition:function(a){var b={left:0,top:0,width:a.width?a.width:a.offsetWidth,height:a.height?a.height:a.offsetHeight};""!==a.style.width&&(b.width=a.style.width.replace("px",""));""!==a.style.height&&(b.height=a.style.height.replace("px",""));for(;a;)b.left+=a.offsetLeft,b.top+=a.offsetTop,a=a.offsetParent;return b},Client:function(a){this.handlers={};this.id=h.nextId++;this.movieId="ZeroClipboard_TableToolsMovie_"+this.id;h.register(this.id,this);a&&this.glue(a)}};
-h.Client.prototype={id:0,ready:!1,movie:null,clipText:"",fileName:"",action:"copy",handCursorEnabled:!0,cssEffects:!0,handlers:null,sized:!1,sheetName:"",glue:function(a,b){this.domElement=h.$(a);a=99;this.domElement.style.zIndex&&(a=parseInt(this.domElement.style.zIndex,10)+1);var c=h.getDOMObjectPosition(this.domElement);this.div=m.createElement("div");var d=this.div.style;d.position="absolute";d.left="0px";d.top="0px";d.width=c.width+"px";d.height=c.height+"px";d.zIndex=a;"undefined"!=typeof b&&
-""!==b&&(this.div.title=b);0!==c.width&&0!==c.height&&(this.sized=!0);this.domElement&&(this.domElement.appendChild(this.div),this.div.innerHTML=this.getHTML(c.width,c.height).replace(/&/g,"&amp;"))},positionElement:function(){var a=h.getDOMObjectPosition(this.domElement),b=this.div.style;b.position="absolute";b.width=a.width+"px";b.height=a.height+"px";0!==a.width&&0!==a.height&&(this.sized=!0,b=this.div.childNodes[0],b.width=a.width,b.height=a.height)},getHTML:function(a,b){var c="",d="id="+this.id+
-"&width="+a+"&height="+b;if(navigator.userAgent.match(/MSIE/)){var f=location.href.match(/^https/i)?"https://":"http://";c+='<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="'+f+'download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=10,0,0,0" width="'+a+'" height="'+b+'" id="'+this.movieId+'" align="middle"><param name="allowScriptAccess" value="always" /><param name="allowFullScreen" value="false" /><param name="movie" value="'+h.moviePath+'" /><param name="loop" value="false" /><param name="menu" value="false" /><param name="quality" value="best" /><param name="bgcolor" value="#ffffff" /><param name="flashvars" value="'+
-d+'"/><param name="wmode" value="transparent"/></object>'}else c+='<embed id="'+this.movieId+'" src="'+h.moviePath+'" loop="false" menu="false" quality="best" bgcolor="#ffffff" width="'+a+'" height="'+b+'" name="'+this.movieId+'" align="middle" allowScriptAccess="always" allowFullScreen="false" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" flashvars="'+d+'" wmode="transparent" />';return c},hide:function(){this.div&&(this.div.style.left="-2000px")},
-show:function(){this.reposition()},destroy:function(){var a=this;this.domElement&&this.div&&(g(this.div).remove(),this.div=this.domElement=null,g.each(h.clients,function(b,c){c===a&&delete h.clients[b]}))},reposition:function(a){a&&((this.domElement=h.$(a))||this.hide());if(this.domElement&&this.div){a=h.getDOMObjectPosition(this.domElement);var b=this.div.style;b.left=""+a.left+"px";b.top=""+a.top+"px"}},clearText:function(){this.clipText="";this.ready&&this.movie.clearText()},appendText:function(a){this.clipText+=
-a;this.ready&&this.movie.appendText(a)},setText:function(a){this.clipText=a;this.ready&&this.movie.setText(a)},setFileName:function(a){this.fileName=a;this.ready&&this.movie.setFileName(a)},setSheetData:function(a){this.ready&&this.movie.setSheetData(JSON.stringify(a))},setAction:function(a){this.action=a;this.ready&&this.movie.setAction(a)},addEventListener:function(a,b){a=a.toString().toLowerCase().replace(/^on/,"");this.handlers[a]||(this.handlers[a]=[]);this.handlers[a].push(b)},setHandCursor:function(a){this.handCursorEnabled=
-a;this.ready&&this.movie.setHandCursor(a)},setCSSEffects:function(a){this.cssEffects=!!a},receiveEvent:function(a,b){a=a.toString().toLowerCase().replace(/^on/,"");switch(a){case "load":this.movie=m.getElementById(this.movieId);if(!this.movie){var c=this;setTimeout(function(){c.receiveEvent("load",null)},1);return}if(!this.ready&&navigator.userAgent.match(/Firefox/)&&navigator.userAgent.match(/Windows/)){c=this;setTimeout(function(){c.receiveEvent("load",null)},100);this.ready=!0;return}this.ready=
-!0;this.movie.clearText();this.movie.appendText(this.clipText);this.movie.setFileName(this.fileName);this.movie.setAction(this.action);this.movie.setHandCursor(this.handCursorEnabled);break;case "mouseover":this.domElement&&this.cssEffects&&this.recoverActive&&this.domElement.addClass("active");break;case "mouseout":this.domElement&&this.cssEffects&&(this.recoverActive=!1,this.domElement.hasClass("active")&&(this.domElement.removeClass("active"),this.recoverActive=!0));break;case "mousedown":this.domElement&&
-this.cssEffects&&this.domElement.addClass("active");break;case "mouseup":this.domElement&&this.cssEffects&&(this.domElement.removeClass("active"),this.recoverActive=!1)}if(this.handlers[a])for(var d=0,f=this.handlers[a].length;d<f;d++){var e=this.handlers[a][d];if("function"==typeof e)e(this,b);else if("object"==typeof e&&2==e.length)e[0][e[1]](this,b);else if("string"==typeof e)n[e](this,b)}}};h.hasFlash=function(){try{return new ActiveXObject("ShockwaveFlash.ShockwaveFlash"),!0}catch(a){if(navigator.mimeTypes&&
-navigator.mimeTypes["application/x-shockwave-flash"]!==u&&navigator.mimeTypes["application/x-shockwave-flash"].enabledPlugin)return!0}return!1};n.ZeroClipboard_TableTools=h;var C=function(a,b){b.attr("id");b.parents("html").length?a.glue(b[0],""):setTimeout(function(){C(a,b)},500)},H=function(a){var b="Sheet1";a.sheetName&&(b=a.sheetName.replace(/[\[\]\*\/\\\?:]/g,""));return b},x=function(a,b){b=b.match(/[\s\S]{1,8192}/g)||[];a.clearText();for(var c=0,d=b.length;c<d;c++)a.appendText(b[c])},D=function(a){return a.newline?
-a.newline:navigator.userAgent.match(/Windows/)?"\r\n":"\n"},E=function(a,b){var c=D(b);a=a.buttons.exportData(b.exportOptions);var d=b.fieldBoundary,f=b.fieldSeparator,e=new RegExp(d,"g"),g=b.escapeChar!==u?b.escapeChar:"\\",h=function(a){for(var b="",c=0,h=a.length;c<h;c++)0<c&&(b+=f),b+=d?d+(""+a[c]).replace(e,g+d)+d:a[c];return b},n=b.header?h(a.header)+c:"";b=b.footer&&a.footer?c+h(a.footer):"";for(var m=[],p=0,r=a.body.length;p<r;p++)m.push(h(a.body[p]));return{str:n+m.join(c)+b,rows:m.length}},
-y={available:function(){return h.hasFlash()},init:function(a,b,c){h.moviePath=l.Buttons.swfPath;var d=new h.Client;d.setHandCursor(!0);d.addEventListener("mouseDown",function(d){c._fromFlash=!0;a.button(b[0]).trigger();c._fromFlash=!1});C(d,b);c._flash=d},destroy:function(a,b,c){c._flash.destroy()},fieldSeparator:",",fieldBoundary:'"',exportOptions:{},title:"*",messageTop:"*",messageBottom:"*",filename:"*",extension:".csv",header:!0,footer:!1},z="";z="undefined"===typeof n.XMLSerializer?new function(){this.serializeToString=
-function(a){return a.xml}}:new XMLSerializer;var v,t={"_rels/.rels":'<?xml version="1.0" encoding="UTF-8" standalone="yes"?><Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships"><Relationship Id="rId1" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument" Target="xl/workbook.xml"/></Relationships>',"xl/_rels/workbook.xml.rels":'<?xml version="1.0" encoding="UTF-8" standalone="yes"?><Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships"><Relationship Id="rId1" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/worksheet" Target="worksheets/sheet1.xml"/><Relationship Id="rId2" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles" Target="styles.xml"/></Relationships>',
-"[Content_Types].xml":'<?xml version="1.0" encoding="UTF-8" standalone="yes"?><Types xmlns="http://schemas.openxmlformats.org/package/2006/content-types"><Default Extension="xml" ContentType="application/xml" /><Default Extension="rels" ContentType="application/vnd.openxmlformats-package.relationships+xml" /><Default Extension="jpeg" ContentType="image/jpeg" /><Override PartName="/xl/workbook.xml" ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml" /><Override PartName="/xl/worksheets/sheet1.xml" ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml" /><Override PartName="/xl/styles.xml" ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml" /></Types>',
-"xl/workbook.xml":'<?xml version="1.0" encoding="UTF-8" standalone="yes"?><workbook xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships"><fileVersion appName="xl" lastEdited="5" lowestEdited="5" rupBuild="24816"/><workbookPr showInkAnnotation="0" autoCompressPictures="0"/><bookViews><workbookView xWindow="0" yWindow="0" windowWidth="25600" windowHeight="19020" tabRatio="500"/></bookViews><sheets><sheet name="" sheetId="1" r:id="rId1"/></sheets></workbook>',
-"xl/worksheets/sheet1.xml":'<?xml version="1.0" encoding="UTF-8" standalone="yes"?><worksheet xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="x14ac" xmlns:x14ac="http://schemas.microsoft.com/office/spreadsheetml/2009/9/ac"><sheetData/><mergeCells count="0"/></worksheet>',"xl/styles.xml":'<?xml version="1.0" encoding="UTF-8"?><styleSheet xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="x14ac" xmlns:x14ac="http://schemas.microsoft.com/office/spreadsheetml/2009/9/ac"><numFmts count="6"><numFmt numFmtId="164" formatCode="#,##0.00_- [$$-45C]"/><numFmt numFmtId="165" formatCode="&quot;£&quot;#,##0.00"/><numFmt numFmtId="166" formatCode="[$€-2] #,##0.00"/><numFmt numFmtId="167" formatCode="0.0%"/><numFmt numFmtId="168" formatCode="#,##0;(#,##0)"/><numFmt numFmtId="169" formatCode="#,##0.00;(#,##0.00)"/></numFmts><fonts count="5" x14ac:knownFonts="1"><font><sz val="11" /><name val="Calibri" /></font><font><sz val="11" /><name val="Calibri" /><color rgb="FFFFFFFF" /></font><font><sz val="11" /><name val="Calibri" /><b /></font><font><sz val="11" /><name val="Calibri" /><i /></font><font><sz val="11" /><name val="Calibri" /><u /></font></fonts><fills count="6"><fill><patternFill patternType="none" /></fill><fill><patternFill patternType="none" /></fill><fill><patternFill patternType="solid"><fgColor rgb="FFD9D9D9" /><bgColor indexed="64" /></patternFill></fill><fill><patternFill patternType="solid"><fgColor rgb="FFD99795" /><bgColor indexed="64" /></patternFill></fill><fill><patternFill patternType="solid"><fgColor rgb="ffc6efce" /><bgColor indexed="64" /></patternFill></fill><fill><patternFill patternType="solid"><fgColor rgb="ffc6cfef" /><bgColor indexed="64" /></patternFill></fill></fills><borders count="2"><border><left /><right /><top /><bottom /><diagonal /></border><border diagonalUp="false" diagonalDown="false"><left style="thin"><color auto="1" /></left><right style="thin"><color auto="1" /></right><top style="thin"><color auto="1" /></top><bottom style="thin"><color auto="1" /></bottom><diagonal /></border></borders><cellStyleXfs count="1"><xf numFmtId="0" fontId="0" fillId="0" borderId="0" /></cellStyleXfs><cellXfs count="61"><xf numFmtId="0" fontId="0" fillId="0" borderId="0" applyFont="1" applyFill="1" applyBorder="1"/><xf numFmtId="0" fontId="1" fillId="0" borderId="0" applyFont="1" applyFill="1" applyBorder="1"/><xf numFmtId="0" fontId="2" fillId="0" borderId="0" applyFont="1" applyFill="1" applyBorder="1"/><xf numFmtId="0" fontId="3" fillId="0" borderId="0" applyFont="1" applyFill="1" applyBorder="1"/><xf numFmtId="0" fontId="4" fillId="0" borderId="0" applyFont="1" applyFill="1" applyBorder="1"/><xf numFmtId="0" fontId="0" fillId="2" borderId="0" applyFont="1" applyFill="1" applyBorder="1"/><xf numFmtId="0" fontId="1" fillId="2" borderId="0" applyFont="1" applyFill="1" applyBorder="1"/><xf numFmtId="0" fontId="2" fillId="2" borderId="0" applyFont="1" applyFill="1" applyBorder="1"/><xf numFmtId="0" fontId="3" fillId="2" borderId="0" applyFont="1" applyFill="1" applyBorder="1"/><xf numFmtId="0" fontId="4" fillId="2" borderId="0" applyFont="1" applyFill="1" applyBorder="1"/><xf numFmtId="0" fontId="0" fillId="3" borderId="0" applyFont="1" applyFill="1" applyBorder="1"/><xf numFmtId="0" fontId="1" fillId="3" borderId="0" applyFont="1" applyFill="1" applyBorder="1"/><xf numFmtId="0" fontId="2" fillId="3" borderId="0" applyFont="1" applyFill="1" applyBorder="1"/><xf numFmtId="0" fontId="3" fillId="3" borderId="0" applyFont="1" applyFill="1" applyBorder="1"/><xf numFmtId="0" fontId="4" fillId="3" borderId="0" applyFont="1" applyFill="1" applyBorder="1"/><xf numFmtId="0" fontId="0" fillId="4" borderId="0" applyFont="1" applyFill="1" applyBorder="1"/><xf numFmtId="0" fontId="1" fillId="4" borderId="0" applyFont="1" applyFill="1" applyBorder="1"/><xf numFmtId="0" fontId="2" fillId="4" borderId="0" applyFont="1" applyFill="1" applyBorder="1"/><xf numFmtId="0" fontId="3" fillId="4" borderId="0" applyFont="1" applyFill="1" applyBorder="1"/><xf numFmtId="0" fontId="4" fillId="4" borderId="0" applyFont="1" applyFill="1" applyBorder="1"/><xf numFmtId="0" fontId="0" fillId="5" borderId="0" applyFont="1" applyFill="1" applyBorder="1"/><xf numFmtId="0" fontId="1" fillId="5" borderId="0" applyFont="1" applyFill="1" applyBorder="1"/><xf numFmtId="0" fontId="2" fillId="5" borderId="0" applyFont="1" applyFill="1" applyBorder="1"/><xf numFmtId="0" fontId="3" fillId="5" borderId="0" applyFont="1" applyFill="1" applyBorder="1"/><xf numFmtId="0" fontId="4" fillId="5" borderId="0" applyFont="1" applyFill="1" applyBorder="1"/><xf numFmtId="0" fontId="0" fillId="0" borderId="1" applyFont="1" applyFill="1" applyBorder="1"/><xf numFmtId="0" fontId="1" fillId="0" borderId="1" applyFont="1" applyFill="1" applyBorder="1"/><xf numFmtId="0" fontId="2" fillId="0" borderId="1" applyFont="1" applyFill="1" applyBorder="1"/><xf numFmtId="0" fontId="3" fillId="0" borderId="1" applyFont="1" applyFill="1" applyBorder="1"/><xf numFmtId="0" fontId="4" fillId="0" borderId="1" applyFont="1" applyFill="1" applyBorder="1"/><xf numFmtId="0" fontId="0" fillId="2" borderId="1" applyFont="1" applyFill="1" applyBorder="1"/><xf numFmtId="0" fontId="1" fillId="2" borderId="1" applyFont="1" applyFill="1" applyBorder="1"/><xf numFmtId="0" fontId="2" fillId="2" borderId="1" applyFont="1" applyFill="1" applyBorder="1"/><xf numFmtId="0" fontId="3" fillId="2" borderId="1" applyFont="1" applyFill="1" applyBorder="1"/><xf numFmtId="0" fontId="4" fillId="2" borderId="1" applyFont="1" applyFill="1" applyBorder="1"/><xf numFmtId="0" fontId="0" fillId="3" borderId="1" applyFont="1" applyFill="1" applyBorder="1"/><xf numFmtId="0" fontId="1" fillId="3" borderId="1" applyFont="1" applyFill="1" applyBorder="1"/><xf numFmtId="0" fontId="2" fillId="3" borderId="1" applyFont="1" applyFill="1" applyBorder="1"/><xf numFmtId="0" fontId="3" fillId="3" borderId="1" applyFont="1" applyFill="1" applyBorder="1"/><xf numFmtId="0" fontId="4" fillId="3" borderId="1" applyFont="1" applyFill="1" applyBorder="1"/><xf numFmtId="0" fontId="0" fillId="4" borderId="1" applyFont="1" applyFill="1" applyBorder="1"/><xf numFmtId="0" fontId="1" fillId="4" borderId="1" applyFont="1" applyFill="1" applyBorder="1"/><xf numFmtId="0" fontId="2" fillId="4" borderId="1" applyFont="1" applyFill="1" applyBorder="1"/><xf numFmtId="0" fontId="3" fillId="4" borderId="1" applyFont="1" applyFill="1" applyBorder="1"/><xf numFmtId="0" fontId="4" fillId="4" borderId="1" applyFont="1" applyFill="1" applyBorder="1"/><xf numFmtId="0" fontId="0" fillId="5" borderId="1" applyFont="1" applyFill="1" applyBorder="1"/><xf numFmtId="0" fontId="1" fillId="5" borderId="1" applyFont="1" applyFill="1" applyBorder="1"/><xf numFmtId="0" fontId="2" fillId="5" borderId="1" applyFont="1" applyFill="1" applyBorder="1"/><xf numFmtId="0" fontId="3" fillId="5" borderId="1" applyFont="1" applyFill="1" applyBorder="1"/><xf numFmtId="0" fontId="4" fillId="5" borderId="1" applyFont="1" applyFill="1" applyBorder="1"/><xf numFmtId="0" fontId="0" fillId="0" borderId="0" applyFont="1" applyFill="1" applyBorder="1" xfId="0" applyAlignment="1"><alignment horizontal="left"/></xf><xf numFmtId="0" fontId="0" fillId="0" borderId="0" applyFont="1" applyFill="1" applyBorder="1" xfId="0" applyAlignment="1"><alignment horizontal="center"/></xf><xf numFmtId="0" fontId="0" fillId="0" borderId="0" applyFont="1" applyFill="1" applyBorder="1" xfId="0" applyAlignment="1"><alignment horizontal="right"/></xf><xf numFmtId="0" fontId="0" fillId="0" borderId="0" applyFont="1" applyFill="1" applyBorder="1" xfId="0" applyAlignment="1"><alignment horizontal="fill"/></xf><xf numFmtId="0" fontId="0" fillId="0" borderId="0" applyFont="1" applyFill="1" applyBorder="1" xfId="0" applyAlignment="1"><alignment textRotation="90"/></xf><xf numFmtId="0" fontId="0" fillId="0" borderId="0" applyFont="1" applyFill="1" applyBorder="1" xfId="0" applyAlignment="1"><alignment wrapText="1"/></xf><xf numFmtId="9"   fontId="0" fillId="0" borderId="0" applyFont="1" applyFill="1" applyBorder="1" xfId="0" applyNumberFormat="1"/><xf numFmtId="164" fontId="0" fillId="0" borderId="0" applyFont="1" applyFill="1" applyBorder="1" xfId="0" applyNumberFormat="1"/><xf numFmtId="165" fontId="0" fillId="0" borderId="0" applyFont="1" applyFill="1" applyBorder="1" xfId="0" applyNumberFormat="1"/><xf numFmtId="166" fontId="0" fillId="0" borderId="0" applyFont="1" applyFill="1" applyBorder="1" xfId="0" applyNumberFormat="1"/><xf numFmtId="167" fontId="0" fillId="0" borderId="0" applyFont="1" applyFill="1" applyBorder="1" xfId="0" applyNumberFormat="1"/><xf numFmtId="168" fontId="0" fillId="0" borderId="0" applyFont="1" applyFill="1" applyBorder="1" xfId="0" applyNumberFormat="1"/><xf numFmtId="169" fontId="0" fillId="0" borderId="0" applyFont="1" applyFill="1" applyBorder="1" xfId="0" applyNumberFormat="1"/><xf numFmtId="3" fontId="0" fillId="0" borderId="0" applyFont="1" applyFill="1" applyBorder="1" xfId="0" applyNumberFormat="1"/><xf numFmtId="4" fontId="0" fillId="0" borderId="0" applyFont="1" applyFill="1" applyBorder="1" xfId="0" applyNumberFormat="1"/></cellXfs><cellStyles count="1"><cellStyle name="Normal" xfId="0" builtinId="0" /></cellStyles><dxfs count="0" /><tableStyles count="0" defaultTableStyle="TableStyleMedium9" defaultPivotStyle="PivotStyleMedium4" /></styleSheet>'},
-F=[{match:/^\-?\d+\.\d%$/,style:60,fmt:function(a){return a/100}},{match:/^\-?\d+\.?\d*%$/,style:56,fmt:function(a){return a/100}},{match:/^\-?\$[\d,]+.?\d*$/,style:57},{match:/^\-?£[\d,]+.?\d*$/,style:58},{match:/^\-?€[\d,]+.?\d*$/,style:59},{match:/^\([\d,]+\)$/,style:61,fmt:function(a){return-1*a.replace(/[\(\)]/g,"")}},{match:/^\([\d,]+\.\d{2}\)$/,style:62,fmt:function(a){return-1*a.replace(/[\(\)]/g,"")}},{match:/^[\d,]+$/,style:63},{match:/^[\d,]+\.\d{2}$/,style:64}];l.Buttons.swfPath="//cdn.datatables.net/buttons/"+
-l.Buttons.version+"/swf/flashExport.swf";l.Api.register("buttons.resize()",function(){g.each(h.clients,function(a,b){b.domElement!==u&&b.domElement.parentNode&&b.positionElement()})});l.ext.buttons.copyFlash=g.extend({},y,{className:"buttons-copy buttons-flash",text:function(a){return a.i18n("buttons.copy","Copy")},action:function(a,b,c,d){if(d._fromFlash){this.processing(!0);a=d._flash;var f=E(b,d);c=b.buttons.exportInfo(d);var e=D(d);f=f.str;c.title&&(f=c.title+e+e+f);c.messageTop&&(f=c.messageTop+
-e+e+f);c.messageBottom&&(f=f+e+e+c.messageBottom);d.customize&&(f=d.customize(f,d,b));a.setAction("copy");x(a,f);this.processing(!1);b.buttons.info(b.i18n("buttons.copyTitle","Copy to clipboard"),b.i18n("buttons.copySuccess",{_:"Copied %d rows to clipboard",1:"Copied 1 row to clipboard"},data.rows),3E3)}},fieldSeparator:"\t",fieldBoundary:""});l.ext.buttons.csvFlash=g.extend({},y,{className:"buttons-csv buttons-flash",text:function(a){return a.i18n("buttons.csv","CSV")},action:function(a,b,c,d){a=
-d._flash;var f=E(b,d);c=b.buttons.exportInfo(d);b=d.customize?d.customize(f.str,d,b):f.str;a.setAction("csv");a.setFileName(c.filename);x(a,b)},escapeChar:'"'});l.ext.buttons.excelFlash=g.extend({},y,{className:"buttons-excel buttons-flash",text:function(a){return a.i18n("buttons.excel","Excel")},action:function(a,b,c,d){this.processing(!0);a=d._flash;var f=0,e=g.parseXML(t["xl/worksheets/sheet1.xml"]),h=e.getElementsByTagName("sheetData")[0];c={_rels:{".rels":g.parseXML(t["_rels/.rels"])},xl:{_rels:{"workbook.xml.rels":g.parseXML(t["xl/_rels/workbook.xml.rels"])},
-"workbook.xml":g.parseXML(t["xl/workbook.xml"]),"styles.xml":g.parseXML(t["xl/styles.xml"]),worksheets:{"sheet1.xml":e}},"[Content_Types].xml":g.parseXML(t["[Content_Types].xml"])};var k=b.buttons.exportData(d.exportOptions),m,n,p=function(a){m=f+1;n=r(e,"row",{attr:{r:m}});for(var b=0,c=a.length;b<c;b++){var l=A(b)+""+m,k=null;if(null===a[b]||a[b]===u||""===a[b])if(!0===d.createEmptyCells)a[b]="";else continue;a[b]=g.trim(a[b]);for(var p=0,t=F.length;p<t;p++){var q=F[p];if(a[b].match&&!a[b].match(/^0\d+/)&&
-a[b].match(q.match)){k=a[b].replace(/[^\d\.\-]/g,"");q.fmt&&(k=q.fmt(k));k=r(e,"c",{attr:{r:l,s:q.style},children:[r(e,"v",{text:k})]});break}}k||("number"===typeof a[b]||a[b].match&&a[b].match(/^-?\d+(\.\d+)?$/)&&!a[b].match(/^0\d+/)?k=r(e,"c",{attr:{t:"n",r:l},children:[r(e,"v",{text:a[b]})]}):(q=a[b].replace?a[b].replace(/[\x00-\x09\x0B\x0C\x0E-\x1F\x7F-\x9F]/g,""):a[b],k=r(e,"c",{attr:{t:"inlineStr",r:l},children:{row:r(e,"is",{children:{row:r(e,"t",{text:q})}})}})));n.appendChild(k)}h.appendChild(n);
-f++};g("sheets sheet",c.xl["workbook.xml"]).attr("name",H(d));d.customizeData&&d.customizeData(k);var l=function(a,b){var c=g("mergeCells",e);c[0].appendChild(r(e,"mergeCell",{attr:{ref:"A"+a+":"+A(b)+a}}));c.attr("count",c.attr("count")+1);g("row:eq("+(a-1)+") c",e).attr("s","51")},q=b.buttons.exportInfo(d);q.title&&(p([q.title],f),l(f,k.header.length-1));q.messageTop&&(p([q.messageTop],f),l(f,k.header.length-1));d.header&&(p(k.header,f),g("row:last c",e).attr("s","2"));for(var w=0,v=k.body.length;w<
-v;w++)p(k.body[w],f);d.footer&&k.footer&&(p(k.footer,f),g("row:last c",e).attr("s","2"));q.messageBottom&&(p([q.messageBottom],f),l(f,k.header.length-1));p=r(e,"cols");g("worksheet",e).prepend(p);l=0;for(w=k.header.length;l<w;l++)p.appendChild(r(e,"col",{attr:{min:l+1,max:l+1,width:G(k,l),customWidth:1}}));d.customize&&d.customize(c,d,b);B(c);a.setAction("excel");a.setFileName(q.filename);a.setSheetData(c);x(a,"");this.processing(!1)},extension:".xlsx",createEmptyCells:!1});l.ext.buttons.pdfFlash=
-g.extend({},y,{className:"buttons-pdf buttons-flash",text:function(a){return a.i18n("buttons.pdf","PDF")},action:function(a,b,c,d){this.processing(!0);a=d._flash;c=b.buttons.exportData(d.exportOptions);var f=b.buttons.exportInfo(d),e=b.table().node().offsetWidth,g=b.columns(d.columns).indexes().map(function(a){return b.column(a).header().offsetWidth/e});a.setAction("pdf");a.setFileName(f.filename);x(a,JSON.stringify({title:f.title||"",messageTop:f.messageTop||"",messageBottom:f.messageBottom||"",
-colWidth:g.toArray(),orientation:d.orientation,size:d.pageSize,header:d.header?c.header:null,footer:d.footer?c.footer:null,body:c.body}));this.processing(!1)},extension:".pdf",orientation:"portrait",pageSize:"A4",newline:"\n"});return l.Buttons});
diff --git a/DataTables/Buttons-1.6.2/js/buttons.foundation.js b/DataTables/Buttons-1.6.2/js/buttons.foundation.js
deleted file mode 100644
index 26dc4f9..0000000
--- a/DataTables/Buttons-1.6.2/js/buttons.foundation.js
+++ /dev/null
@@ -1,99 +0,0 @@
-/*! Foundation integration for DataTables' Buttons
- * ©2016 SpryMedia Ltd - datatables.net/license
- */
-
-(function( factory ){
-	if ( typeof define === 'function' && define.amd ) {
-		// AMD
-		define( ['jquery', 'datatables.net-zf', 'datatables.net-buttons'], function ( $ ) {
-			return factory( $, window, document );
-		} );
-	}
-	else if ( typeof exports === 'object' ) {
-		// CommonJS
-		module.exports = function (root, $) {
-			if ( ! root ) {
-				root = window;
-			}
-
-			if ( ! $ || ! $.fn.dataTable ) {
-				$ = require('datatables.net-zf')(root, $).$;
-			}
-
-			if ( ! $.fn.dataTable.Buttons ) {
-				require('datatables.net-buttons')(root, $);
-			}
-
-			return factory( $, root, root.document );
-		};
-	}
-	else {
-		// Browser
-		factory( jQuery, window, document );
-	}
-}(function( $, window, document, undefined ) {
-'use strict';
-var DataTable = $.fn.dataTable;
-
-
-// F6 has different requirements for the dropdown button set. We can use the
-// Foundation version found by DataTables in order to support both F5 and F6 in
-// the same file, but not that this requires DataTables 1.10.11+ for F6 support.
-var collection = DataTable.ext.foundationVersion === 6 ?
-	{
-		tag: 'div',
-		className: 'dropdown-pane is-open button-group stacked'
-	} :
-	{
-		tag: 'ul',
-		className: 'f-dropdown open dropdown-pane is-open',
-		button: {
-			tag: 'li',
-			className: 'small',
-			active: 'active',
-			disabled: 'disabled'
-		},
-		buttonLiner: {
-			tag: 'a'
-		}
-	};
-
-$.extend( true, DataTable.Buttons.defaults, {
-	dom: {
-		container: {
-			tag: 'div',
-			className: 'dt-buttons button-group'
-		},
-		buttonContainer: {
-			tag: null,
-			className: ''
-		},
-		button: {
-			tag: 'a',
-			className: 'button small',
-			active: 'secondary'
-		},
-		buttonLiner: {
-			tag: null
-		},
-		collection: collection
-	}
-} );
-
-
-DataTable.ext.buttons.collection.className = 'dropdown';
-
-$(document).on('buttons-popover.dt', function () {
-	var notButton = false;
-	$('.dtsp-panesContainer').each(function() {
-		if(!$(this).is('button')){
-			notButton = true;
-		}
-	});
-	if(notButton){
-		$('.dtsp-panesContainer').removeClass('button-group stacked')
-	}
-});
-
-return DataTable.Buttons;
-}));
diff --git a/DataTables/Buttons-1.6.2/js/buttons.foundation.min.js b/DataTables/Buttons-1.6.2/js/buttons.foundation.min.js
deleted file mode 100644
index 7e92ec4..0000000
--- a/DataTables/Buttons-1.6.2/js/buttons.foundation.min.js
+++ /dev/null
@@ -1,7 +0,0 @@
-/*!
- Foundation integration for DataTables' Buttons
- ©2016 SpryMedia Ltd - datatables.net/license
-*/
-(function(b){"function"===typeof define&&define.amd?define(["jquery","datatables.net-zf","datatables.net-buttons"],function(a){return b(a,window,document)}):"object"===typeof exports?module.exports=function(a,c){a||(a=window);c&&c.fn.dataTable||(c=require("datatables.net-zf")(a,c).$);c.fn.dataTable.Buttons||require("datatables.net-buttons")(a,c);return b(c,a,a.document)}:b(jQuery,window,document)})(function(b,a,c,d){a=b.fn.dataTable;b.extend(!0,a.Buttons.defaults,{dom:{container:{tag:"div",className:"dt-buttons button-group"},
-buttonContainer:{tag:null,className:""},button:{tag:"a",className:"button small",active:"secondary"},buttonLiner:{tag:null},collection:6===a.ext.foundationVersion?{tag:"div",className:"dropdown-pane is-open button-group stacked"}:{tag:"ul",className:"f-dropdown open dropdown-pane is-open",button:{tag:"li",className:"small",active:"active",disabled:"disabled"},buttonLiner:{tag:"a"}}}});a.ext.buttons.collection.className="dropdown";b(c).on("buttons-popover.dt",function(){var a=!1;b(".dtsp-panesContainer").each(function(){b(this).is("button")||
-(a=!0)});a&&b(".dtsp-panesContainer").removeClass("button-group stacked")});return a.Buttons});
diff --git a/DataTables/Buttons-1.6.2/js/buttons.html5.js b/DataTables/Buttons-1.6.2/js/buttons.html5.js
deleted file mode 100644
index 42e3dad..0000000
--- a/DataTables/Buttons-1.6.2/js/buttons.html5.js
+++ /dev/null
@@ -1,1461 +0,0 @@
-/*!
- * HTML5 export buttons for Buttons and DataTables.
- * 2016 SpryMedia Ltd - datatables.net/license
- *
- * FileSaver.js (1.3.3) - MIT license
- * Copyright © 2016 Eli Grey - http://eligrey.com
- */
-
-(function( factory ){
-	if ( typeof define === 'function' && define.amd ) {
-		// AMD
-		define( ['jquery', 'datatables.net', 'datatables.net-buttons'], function ( $ ) {
-			return factory( $, window, document );
-		} );
-	}
-	else if ( typeof exports === 'object' ) {
-		// CommonJS
-		module.exports = function (root, $, jszip, pdfmake) {
-			if ( ! root ) {
-				root = window;
-			}
-
-			if ( ! $ || ! $.fn.dataTable ) {
-				$ = require('datatables.net')(root, $).$;
-			}
-
-			if ( ! $.fn.dataTable.Buttons ) {
-				require('datatables.net-buttons')(root, $);
-			}
-
-			return factory( $, root, root.document, jszip, pdfmake );
-		};
-	}
-	else {
-		// Browser
-		factory( jQuery, window, document );
-	}
-}(function( $, window, document, jszip, pdfmake, undefined ) {
-'use strict';
-var DataTable = $.fn.dataTable;
-
-// Allow the constructor to pass in JSZip and PDFMake from external requires.
-// Otherwise, use globally defined variables, if they are available.
-function _jsZip () {
-	return jszip || window.JSZip;
-}
-function _pdfMake () {
-	return pdfmake || window.pdfMake;
-}
-
-DataTable.Buttons.pdfMake = function (_) {
-	if ( ! _ ) {
-		return _pdfMake();
-	}
-	pdfmake = _;
-}
-
-DataTable.Buttons.jszip = function (_) {
-	if ( ! _ ) {
-		return _jsZip();
-	}
-	jszip = _;
-}
-
-
-/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- * FileSaver.js dependency
- */
-
-/*jslint bitwise: true, indent: 4, laxbreak: true, laxcomma: true, smarttabs: true, plusplus: true */
-
-var _saveAs = (function(view) {
-	"use strict";
-	// IE <10 is explicitly unsupported
-	if (typeof view === "undefined" || typeof navigator !== "undefined" && /MSIE [1-9]\./.test(navigator.userAgent)) {
-		return;
-	}
-	var
-		  doc = view.document
-		  // only get URL when necessary in case Blob.js hasn't overridden it yet
-		, get_URL = function() {
-			return view.URL || view.webkitURL || view;
-		}
-		, save_link = doc.createElementNS("http://www.w3.org/1999/xhtml", "a")
-		, can_use_save_link = "download" in save_link
-		, click = function(node) {
-			var event = new MouseEvent("click");
-			node.dispatchEvent(event);
-		}
-		, is_safari = /constructor/i.test(view.HTMLElement) || view.safari
-		, is_chrome_ios =/CriOS\/[\d]+/.test(navigator.userAgent)
-		, throw_outside = function(ex) {
-			(view.setImmediate || view.setTimeout)(function() {
-				throw ex;
-			}, 0);
-		}
-		, force_saveable_type = "application/octet-stream"
-		// the Blob API is fundamentally broken as there is no "downloadfinished" event to subscribe to
-		, arbitrary_revoke_timeout = 1000 * 40 // in ms
-		, revoke = function(file) {
-			var revoker = function() {
-				if (typeof file === "string") { // file is an object URL
-					get_URL().revokeObjectURL(file);
-				} else { // file is a File
-					file.remove();
-				}
-			};
-			setTimeout(revoker, arbitrary_revoke_timeout);
-		}
-		, dispatch = function(filesaver, event_types, event) {
-			event_types = [].concat(event_types);
-			var i = event_types.length;
-			while (i--) {
-				var listener = filesaver["on" + event_types[i]];
-				if (typeof listener === "function") {
-					try {
-						listener.call(filesaver, event || filesaver);
-					} catch (ex) {
-						throw_outside(ex);
-					}
-				}
-			}
-		}
-		, auto_bom = function(blob) {
-			// prepend BOM for UTF-8 XML and text/* types (including HTML)
-			// note: your browser will automatically convert UTF-16 U+FEFF to EF BB BF
-			if (/^\s*(?:text\/\S*|application\/xml|\S*\/\S*\+xml)\s*;.*charset\s*=\s*utf-8/i.test(blob.type)) {
-				return new Blob([String.fromCharCode(0xFEFF), blob], {type: blob.type});
-			}
-			return blob;
-		}
-		, FileSaver = function(blob, name, no_auto_bom) {
-			if (!no_auto_bom) {
-				blob = auto_bom(blob);
-			}
-			// First try a.download, then web filesystem, then object URLs
-			var
-				  filesaver = this
-				, type = blob.type
-				, force = type === force_saveable_type
-				, object_url
-				, dispatch_all = function() {
-					dispatch(filesaver, "writestart progress write writeend".split(" "));
-				}
-				// on any filesys errors revert to saving with object URLs
-				, fs_error = function() {
-					if ((is_chrome_ios || (force && is_safari)) && view.FileReader) {
-						// Safari doesn't allow downloading of blob urls
-						var reader = new FileReader();
-						reader.onloadend = function() {
-							var url = is_chrome_ios ? reader.result : reader.result.replace(/^data:[^;]*;/, 'data:attachment/file;');
-							var popup = view.open(url, '_blank');
-							if(!popup) view.location.href = url;
-							url=undefined; // release reference before dispatching
-							filesaver.readyState = filesaver.DONE;
-							dispatch_all();
-						};
-						reader.readAsDataURL(blob);
-						filesaver.readyState = filesaver.INIT;
-						return;
-					}
-					// don't create more object URLs than needed
-					if (!object_url) {
-						object_url = get_URL().createObjectURL(blob);
-					}
-					if (force) {
-						view.location.href = object_url;
-					} else {
-						var opened = view.open(object_url, "_blank");
-						if (!opened) {
-							// Apple does not allow window.open, see https://developer.apple.com/library/safari/documentation/Tools/Conceptual/SafariExtensionGuide/WorkingwithWindowsandTabs/WorkingwithWindowsandTabs.html
-							view.location.href = object_url;
-						}
-					}
-					filesaver.readyState = filesaver.DONE;
-					dispatch_all();
-					revoke(object_url);
-				}
-			;
-			filesaver.readyState = filesaver.INIT;
-
-			if (can_use_save_link) {
-				object_url = get_URL().createObjectURL(blob);
-				setTimeout(function() {
-					save_link.href = object_url;
-					save_link.download = name;
-					click(save_link);
-					dispatch_all();
-					revoke(object_url);
-					filesaver.readyState = filesaver.DONE;
-				});
-				return;
-			}
-
-			fs_error();
-		}
-		, FS_proto = FileSaver.prototype
-		, saveAs = function(blob, name, no_auto_bom) {
-			return new FileSaver(blob, name || blob.name || "download", no_auto_bom);
-		}
-	;
-	// IE 10+ (native saveAs)
-	if (typeof navigator !== "undefined" && navigator.msSaveOrOpenBlob) {
-		return function(blob, name, no_auto_bom) {
-			name = name || blob.name || "download";
-
-			if (!no_auto_bom) {
-				blob = auto_bom(blob);
-			}
-			return navigator.msSaveOrOpenBlob(blob, name);
-		};
-	}
-
-	FS_proto.abort = function(){};
-	FS_proto.readyState = FS_proto.INIT = 0;
-	FS_proto.WRITING = 1;
-	FS_proto.DONE = 2;
-
-	FS_proto.error =
-	FS_proto.onwritestart =
-	FS_proto.onprogress =
-	FS_proto.onwrite =
-	FS_proto.onabort =
-	FS_proto.onerror =
-	FS_proto.onwriteend =
-		null;
-
-	return saveAs;
-}(
-	   typeof self !== "undefined" && self
-	|| typeof window !== "undefined" && window
-	|| this.content
-));
-
-
-// Expose file saver on the DataTables API. Can't attach to `DataTables.Buttons`
-// since this file can be loaded before Button's core!
-DataTable.fileSave = _saveAs;
-
-
-/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- * Local (private) functions
- */
-
-/**
- * Get the sheet name for Excel exports.
- *
- * @param {object}	config Button configuration
- */
-var _sheetname = function ( config )
-{
-	var sheetName = 'Sheet1';
-
-	if ( config.sheetName ) {
-		sheetName = config.sheetName.replace(/[\[\]\*\/\\\?\:]/g, '');
-	}
-
-	return sheetName;
-};
-
-/**
- * Get the newline character(s)
- *
- * @param {object}	config Button configuration
- * @return {string}				Newline character
- */
-var _newLine = function ( config )
-{
-	return config.newline ?
-		config.newline :
-		navigator.userAgent.match(/Windows/) ?
-			'\r\n' :
-			'\n';
-};
-
-/**
- * Combine the data from the `buttons.exportData` method into a string that
- * will be used in the export file.
- *
- * @param	{DataTable.Api} dt		 DataTables API instance
- * @param	{object}				config Button configuration
- * @return {object}							 The data to export
- */
-var _exportData = function ( dt, config )
-{
-	var newLine = _newLine( config );
-	var data = dt.buttons.exportData( config.exportOptions );
-	var boundary = config.fieldBoundary;
-	var separator = config.fieldSeparator;
-	var reBoundary = new RegExp( boundary, 'g' );
-	var escapeChar = config.escapeChar !== undefined ?
-		config.escapeChar :
-		'\\';
-	var join = function ( a ) {
-		var s = '';
-
-		// If there is a field boundary, then we might need to escape it in
-		// the source data
-		for ( var i=0, ien=a.length ; i<ien ; i++ ) {
-			if ( i > 0 ) {
-				s += separator;
-			}
-
-			s += boundary ?
-				boundary + ('' + a[i]).replace( reBoundary, escapeChar+boundary ) + boundary :
-				a[i];
-		}
-
-		return s;
-	};
-
-	var header = config.header ? join( data.header )+newLine : '';
-	var footer = config.footer && data.footer ? newLine+join( data.footer ) : '';
-	var body = [];
-
-	for ( var i=0, ien=data.body.length ; i<ien ; i++ ) {
-		body.push( join( data.body[i] ) );
-	}
-
-	return {
-		str: header + body.join( newLine ) + footer,
-		rows: body.length
-	};
-};
-
-/**
- * Older versions of Safari (prior to tech preview 18) don't support the
- * download option required.
- *
- * @return {Boolean} `true` if old Safari
- */
-var _isDuffSafari = function ()
-{
-	var safari = navigator.userAgent.indexOf('Safari') !== -1 &&
-		navigator.userAgent.indexOf('Chrome') === -1 &&
-		navigator.userAgent.indexOf('Opera') === -1;
-
-	if ( ! safari ) {
-		return false;
-	}
-
-	var version = navigator.userAgent.match( /AppleWebKit\/(\d+\.\d+)/ );
-	if ( version && version.length > 1 && version[1]*1 < 603.1 ) {
-		return true;
-	}
-
-	return false;
-};
-
-/**
- * Convert from numeric position to letter for column names in Excel
- * @param  {int} n Column number
- * @return {string} Column letter(s) name
- */
-function createCellPos( n ){
-	var ordA = 'A'.charCodeAt(0);
-	var ordZ = 'Z'.charCodeAt(0);
-	var len = ordZ - ordA + 1;
-	var s = "";
-
-	while( n >= 0 ) {
-		s = String.fromCharCode(n % len + ordA) + s;
-		n = Math.floor(n / len) - 1;
-	}
-
-	return s;
-}
-
-try {
-	var _serialiser = new XMLSerializer();
-	var _ieExcel;
-}
-catch (t) {}
-
-/**
- * Recursively add XML files from an object's structure to a ZIP file. This
- * allows the XSLX file to be easily defined with an object's structure matching
- * the files structure.
- *
- * @param {JSZip} zip ZIP package
- * @param {object} obj Object to add (recursive)
- */
-function _addToZip( zip, obj ) {
-	if ( _ieExcel === undefined ) {
-		// Detect if we are dealing with IE's _awful_ serialiser by seeing if it
-		// drop attributes
-		_ieExcel = _serialiser
-			.serializeToString(
-				( new window.DOMParser() ).parseFromString( excelStrings['xl/worksheets/sheet1.xml'], 'text/xml' )
-			)
-			.indexOf( 'xmlns:r' ) === -1;
-	}
-
-	$.each( obj, function ( name, val ) {
-		if ( $.isPlainObject( val ) ) {
-			var newDir = zip.folder( name );
-			_addToZip( newDir, val );
-		}
-		else {
-			if ( _ieExcel ) {
-				// IE's XML serialiser will drop some name space attributes from
-				// from the root node, so we need to save them. Do this by
-				// replacing the namespace nodes with a regular attribute that
-				// we convert back when serialised. Edge does not have this
-				// issue
-				var worksheet = val.childNodes[0];
-				var i, ien;
-				var attrs = [];
-
-				for ( i=worksheet.attributes.length-1 ; i>=0 ; i-- ) {
-					var attrName = worksheet.attributes[i].nodeName;
-					var attrValue = worksheet.attributes[i].nodeValue;
-
-					if ( attrName.indexOf( ':' ) !== -1 ) {
-						attrs.push( { name: attrName, value: attrValue } );
-
-						worksheet.removeAttribute( attrName );
-					}
-				}
-
-				for ( i=0, ien=attrs.length ; i<ien ; i++ ) {
-					var attr = val.createAttribute( attrs[i].name.replace( ':', '_dt_b_namespace_token_' ) );
-					attr.value = attrs[i].value;
-					worksheet.setAttributeNode( attr );
-				}
-			}
-
-			var str = _serialiser.serializeToString(val);
-
-			// Fix IE's XML
-			if ( _ieExcel ) {
-				// IE doesn't include the XML declaration
-				if ( str.indexOf( '<?xml' ) === -1 ) {
-					str = '<?xml version="1.0" encoding="UTF-8" standalone="yes"?>'+str;
-				}
-
-				// Return namespace attributes to being as such
-				str = str.replace( /_dt_b_namespace_token_/g, ':' );
-
-				// Remove testing name space that IE puts into the space preserve attr
-				str = str.replace( /xmlns:NS[\d]+="" NS[\d]+:/g, '' );
-			}
-
-			// Safari, IE and Edge will put empty name space attributes onto
-			// various elements making them useless. This strips them out
-			str = str.replace( /<([^<>]*?) xmlns=""([^<>]*?)>/g, '<$1 $2>' );
-
-			zip.file( name, str );
-		}
-	} );
-}
-
-/**
- * Create an XML node and add any children, attributes, etc without needing to
- * be verbose in the DOM.
- *
- * @param  {object} doc      XML document
- * @param  {string} nodeName Node name
- * @param  {object} opts     Options - can be `attr` (attributes), `children`
- *   (child nodes) and `text` (text content)
- * @return {node}            Created node
- */
-function _createNode( doc, nodeName, opts ) {
-	var tempNode = doc.createElement( nodeName );
-
-	if ( opts ) {
-		if ( opts.attr ) {
-			$(tempNode).attr( opts.attr );
-		}
-
-		if ( opts.children ) {
-			$.each( opts.children, function ( key, value ) {
-				tempNode.appendChild( value );
-			} );
-		}
-
-		if ( opts.text !== null && opts.text !== undefined ) {
-			tempNode.appendChild( doc.createTextNode( opts.text ) );
-		}
-	}
-
-	return tempNode;
-}
-
-/**
- * Get the width for an Excel column based on the contents of that column
- * @param  {object} data Data for export
- * @param  {int}    col  Column index
- * @return {int}         Column width
- */
-function _excelColWidth( data, col ) {
-	var max = data.header[col].length;
-	var len, lineSplit, str;
-
-	if ( data.footer && data.footer[col].length > max ) {
-		max = data.footer[col].length;
-	}
-
-	for ( var i=0, ien=data.body.length ; i<ien ; i++ ) {
-		var point = data.body[i][col];
-		str = point !== null && point !== undefined ?
-			point.toString() :
-			'';
-
-		// If there is a newline character, workout the width of the column
-		// based on the longest line in the string
-		if ( str.indexOf('\n') !== -1 ) {
-			lineSplit = str.split('\n');
-			lineSplit.sort( function (a, b) {
-				return b.length - a.length;
-			} );
-
-			len = lineSplit[0].length;
-		}
-		else {
-			len = str.length;
-		}
-
-		if ( len > max ) {
-			max = len;
-		}
-
-		// Max width rather than having potentially massive column widths
-		if ( max > 40 ) {
-			return 54; // 40 * 1.35
-		}
-	}
-
-	max *= 1.35;
-
-	// And a min width
-	return max > 6 ? max : 6;
-}
-
-// Excel - Pre-defined strings to build a basic XLSX file
-var excelStrings = {
-	"_rels/.rels":
-		'<?xml version="1.0" encoding="UTF-8" standalone="yes"?>'+
-		'<Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships">'+
-			'<Relationship Id="rId1" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument" Target="xl/workbook.xml"/>'+
-		'</Relationships>',
-
-	"xl/_rels/workbook.xml.rels":
-		'<?xml version="1.0" encoding="UTF-8" standalone="yes"?>'+
-		'<Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships">'+
-			'<Relationship Id="rId1" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/worksheet" Target="worksheets/sheet1.xml"/>'+
-			'<Relationship Id="rId2" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles" Target="styles.xml"/>'+
-		'</Relationships>',
-
-	"[Content_Types].xml":
-		'<?xml version="1.0" encoding="UTF-8" standalone="yes"?>'+
-		'<Types xmlns="http://schemas.openxmlformats.org/package/2006/content-types">'+
-			'<Default Extension="xml" ContentType="application/xml" />'+
-			'<Default Extension="rels" ContentType="application/vnd.openxmlformats-package.relationships+xml" />'+
-			'<Default Extension="jpeg" ContentType="image/jpeg" />'+
-			'<Override PartName="/xl/workbook.xml" ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml" />'+
-			'<Override PartName="/xl/worksheets/sheet1.xml" ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml" />'+
-			'<Override PartName="/xl/styles.xml" ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml" />'+
-		'</Types>',
-
-	"xl/workbook.xml":
-		'<?xml version="1.0" encoding="UTF-8" standalone="yes"?>'+
-		'<workbook xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships">'+
-			'<fileVersion appName="xl" lastEdited="5" lowestEdited="5" rupBuild="24816"/>'+
-			'<workbookPr showInkAnnotation="0" autoCompressPictures="0"/>'+
-			'<bookViews>'+
-				'<workbookView xWindow="0" yWindow="0" windowWidth="25600" windowHeight="19020" tabRatio="500"/>'+
-			'</bookViews>'+
-			'<sheets>'+
-				'<sheet name="Sheet1" sheetId="1" r:id="rId1"/>'+
-			'</sheets>'+
-			'<definedNames/>'+
-		'</workbook>',
-
-	"xl/worksheets/sheet1.xml":
-		'<?xml version="1.0" encoding="UTF-8" standalone="yes"?>'+
-		'<worksheet xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="x14ac" xmlns:x14ac="http://schemas.microsoft.com/office/spreadsheetml/2009/9/ac">'+
-			'<sheetData/>'+
-			'<mergeCells count="0"/>'+
-		'</worksheet>',
-
-	"xl/styles.xml":
-		'<?xml version="1.0" encoding="UTF-8"?>'+
-		'<styleSheet xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="x14ac" xmlns:x14ac="http://schemas.microsoft.com/office/spreadsheetml/2009/9/ac">'+
-			'<numFmts count="6">'+
-				'<numFmt numFmtId="164" formatCode="#,##0.00_-\ [$$-45C]"/>'+
-				'<numFmt numFmtId="165" formatCode="&quot;£&quot;#,##0.00"/>'+
-				'<numFmt numFmtId="166" formatCode="[$€-2]\ #,##0.00"/>'+
-				'<numFmt numFmtId="167" formatCode="0.0%"/>'+
-				'<numFmt numFmtId="168" formatCode="#,##0;(#,##0)"/>'+
-				'<numFmt numFmtId="169" formatCode="#,##0.00;(#,##0.00)"/>'+
-			'</numFmts>'+
-			'<fonts count="5" x14ac:knownFonts="1">'+
-				'<font>'+
-					'<sz val="11" />'+
-					'<name val="Calibri" />'+
-				'</font>'+
-				'<font>'+
-					'<sz val="11" />'+
-					'<name val="Calibri" />'+
-					'<color rgb="FFFFFFFF" />'+
-				'</font>'+
-				'<font>'+
-					'<sz val="11" />'+
-					'<name val="Calibri" />'+
-					'<b />'+
-				'</font>'+
-				'<font>'+
-					'<sz val="11" />'+
-					'<name val="Calibri" />'+
-					'<i />'+
-				'</font>'+
-				'<font>'+
-					'<sz val="11" />'+
-					'<name val="Calibri" />'+
-					'<u />'+
-				'</font>'+
-			'</fonts>'+
-			'<fills count="6">'+
-				'<fill>'+
-					'<patternFill patternType="none" />'+
-				'</fill>'+
-				'<fill>'+ // Excel appears to use this as a dotted background regardless of values but
-					'<patternFill patternType="none" />'+ // to be valid to the schema, use a patternFill
-				'</fill>'+
-				'<fill>'+
-					'<patternFill patternType="solid">'+
-						'<fgColor rgb="FFD9D9D9" />'+
-						'<bgColor indexed="64" />'+
-					'</patternFill>'+
-				'</fill>'+
-				'<fill>'+
-					'<patternFill patternType="solid">'+
-						'<fgColor rgb="FFD99795" />'+
-						'<bgColor indexed="64" />'+
-					'</patternFill>'+
-				'</fill>'+
-				'<fill>'+
-					'<patternFill patternType="solid">'+
-						'<fgColor rgb="ffc6efce" />'+
-						'<bgColor indexed="64" />'+
-					'</patternFill>'+
-				'</fill>'+
-				'<fill>'+
-					'<patternFill patternType="solid">'+
-						'<fgColor rgb="ffc6cfef" />'+
-						'<bgColor indexed="64" />'+
-					'</patternFill>'+
-				'</fill>'+
-			'</fills>'+
-			'<borders count="2">'+
-				'<border>'+
-					'<left />'+
-					'<right />'+
-					'<top />'+
-					'<bottom />'+
-					'<diagonal />'+
-				'</border>'+
-				'<border diagonalUp="false" diagonalDown="false">'+
-					'<left style="thin">'+
-						'<color auto="1" />'+
-					'</left>'+
-					'<right style="thin">'+
-						'<color auto="1" />'+
-					'</right>'+
-					'<top style="thin">'+
-						'<color auto="1" />'+
-					'</top>'+
-					'<bottom style="thin">'+
-						'<color auto="1" />'+
-					'</bottom>'+
-					'<diagonal />'+
-				'</border>'+
-			'</borders>'+
-			'<cellStyleXfs count="1">'+
-				'<xf numFmtId="0" fontId="0" fillId="0" borderId="0" />'+
-			'</cellStyleXfs>'+
-			'<cellXfs count="68">'+
-				'<xf numFmtId="0" fontId="0" fillId="0" borderId="0" applyFont="1" applyFill="1" applyBorder="1"/>'+
-				'<xf numFmtId="0" fontId="1" fillId="0" borderId="0" applyFont="1" applyFill="1" applyBorder="1"/>'+
-				'<xf numFmtId="0" fontId="2" fillId="0" borderId="0" applyFont="1" applyFill="1" applyBorder="1"/>'+
-				'<xf numFmtId="0" fontId="3" fillId="0" borderId="0" applyFont="1" applyFill="1" applyBorder="1"/>'+
-				'<xf numFmtId="0" fontId="4" fillId="0" borderId="0" applyFont="1" applyFill="1" applyBorder="1"/>'+
-				'<xf numFmtId="0" fontId="0" fillId="2" borderId="0" applyFont="1" applyFill="1" applyBorder="1"/>'+
-				'<xf numFmtId="0" fontId="1" fillId="2" borderId="0" applyFont="1" applyFill="1" applyBorder="1"/>'+
-				'<xf numFmtId="0" fontId="2" fillId="2" borderId="0" applyFont="1" applyFill="1" applyBorder="1"/>'+
-				'<xf numFmtId="0" fontId="3" fillId="2" borderId="0" applyFont="1" applyFill="1" applyBorder="1"/>'+
-				'<xf numFmtId="0" fontId="4" fillId="2" borderId="0" applyFont="1" applyFill="1" applyBorder="1"/>'+
-				'<xf numFmtId="0" fontId="0" fillId="3" borderId="0" applyFont="1" applyFill="1" applyBorder="1"/>'+
-				'<xf numFmtId="0" fontId="1" fillId="3" borderId="0" applyFont="1" applyFill="1" applyBorder="1"/>'+
-				'<xf numFmtId="0" fontId="2" fillId="3" borderId="0" applyFont="1" applyFill="1" applyBorder="1"/>'+
-				'<xf numFmtId="0" fontId="3" fillId="3" borderId="0" applyFont="1" applyFill="1" applyBorder="1"/>'+
-				'<xf numFmtId="0" fontId="4" fillId="3" borderId="0" applyFont="1" applyFill="1" applyBorder="1"/>'+
-				'<xf numFmtId="0" fontId="0" fillId="4" borderId="0" applyFont="1" applyFill="1" applyBorder="1"/>'+
-				'<xf numFmtId="0" fontId="1" fillId="4" borderId="0" applyFont="1" applyFill="1" applyBorder="1"/>'+
-				'<xf numFmtId="0" fontId="2" fillId="4" borderId="0" applyFont="1" applyFill="1" applyBorder="1"/>'+
-				'<xf numFmtId="0" fontId="3" fillId="4" borderId="0" applyFont="1" applyFill="1" applyBorder="1"/>'+
-				'<xf numFmtId="0" fontId="4" fillId="4" borderId="0" applyFont="1" applyFill="1" applyBorder="1"/>'+
-				'<xf numFmtId="0" fontId="0" fillId="5" borderId="0" applyFont="1" applyFill="1" applyBorder="1"/>'+
-				'<xf numFmtId="0" fontId="1" fillId="5" borderId="0" applyFont="1" applyFill="1" applyBorder="1"/>'+
-				'<xf numFmtId="0" fontId="2" fillId="5" borderId="0" applyFont="1" applyFill="1" applyBorder="1"/>'+
-				'<xf numFmtId="0" fontId="3" fillId="5" borderId="0" applyFont="1" applyFill="1" applyBorder="1"/>'+
-				'<xf numFmtId="0" fontId="4" fillId="5" borderId="0" applyFont="1" applyFill="1" applyBorder="1"/>'+
-				'<xf numFmtId="0" fontId="0" fillId="0" borderId="1" applyFont="1" applyFill="1" applyBorder="1"/>'+
-				'<xf numFmtId="0" fontId="1" fillId="0" borderId="1" applyFont="1" applyFill="1" applyBorder="1"/>'+
-				'<xf numFmtId="0" fontId="2" fillId="0" borderId="1" applyFont="1" applyFill="1" applyBorder="1"/>'+
-				'<xf numFmtId="0" fontId="3" fillId="0" borderId="1" applyFont="1" applyFill="1" applyBorder="1"/>'+
-				'<xf numFmtId="0" fontId="4" fillId="0" borderId="1" applyFont="1" applyFill="1" applyBorder="1"/>'+
-				'<xf numFmtId="0" fontId="0" fillId="2" borderId="1" applyFont="1" applyFill="1" applyBorder="1"/>'+
-				'<xf numFmtId="0" fontId="1" fillId="2" borderId="1" applyFont="1" applyFill="1" applyBorder="1"/>'+
-				'<xf numFmtId="0" fontId="2" fillId="2" borderId="1" applyFont="1" applyFill="1" applyBorder="1"/>'+
-				'<xf numFmtId="0" fontId="3" fillId="2" borderId="1" applyFont="1" applyFill="1" applyBorder="1"/>'+
-				'<xf numFmtId="0" fontId="4" fillId="2" borderId="1" applyFont="1" applyFill="1" applyBorder="1"/>'+
-				'<xf numFmtId="0" fontId="0" fillId="3" borderId="1" applyFont="1" applyFill="1" applyBorder="1"/>'+
-				'<xf numFmtId="0" fontId="1" fillId="3" borderId="1" applyFont="1" applyFill="1" applyBorder="1"/>'+
-				'<xf numFmtId="0" fontId="2" fillId="3" borderId="1" applyFont="1" applyFill="1" applyBorder="1"/>'+
-				'<xf numFmtId="0" fontId="3" fillId="3" borderId="1" applyFont="1" applyFill="1" applyBorder="1"/>'+
-				'<xf numFmtId="0" fontId="4" fillId="3" borderId="1" applyFont="1" applyFill="1" applyBorder="1"/>'+
-				'<xf numFmtId="0" fontId="0" fillId="4" borderId="1" applyFont="1" applyFill="1" applyBorder="1"/>'+
-				'<xf numFmtId="0" fontId="1" fillId="4" borderId="1" applyFont="1" applyFill="1" applyBorder="1"/>'+
-				'<xf numFmtId="0" fontId="2" fillId="4" borderId="1" applyFont="1" applyFill="1" applyBorder="1"/>'+
-				'<xf numFmtId="0" fontId="3" fillId="4" borderId="1" applyFont="1" applyFill="1" applyBorder="1"/>'+
-				'<xf numFmtId="0" fontId="4" fillId="4" borderId="1" applyFont="1" applyFill="1" applyBorder="1"/>'+
-				'<xf numFmtId="0" fontId="0" fillId="5" borderId="1" applyFont="1" applyFill="1" applyBorder="1"/>'+
-				'<xf numFmtId="0" fontId="1" fillId="5" borderId="1" applyFont="1" applyFill="1" applyBorder="1"/>'+
-				'<xf numFmtId="0" fontId="2" fillId="5" borderId="1" applyFont="1" applyFill="1" applyBorder="1"/>'+
-				'<xf numFmtId="0" fontId="3" fillId="5" borderId="1" applyFont="1" applyFill="1" applyBorder="1"/>'+
-				'<xf numFmtId="0" fontId="4" fillId="5" borderId="1" applyFont="1" applyFill="1" applyBorder="1"/>'+
-				'<xf numFmtId="0" fontId="0" fillId="0" borderId="0" applyFont="1" applyFill="1" applyBorder="1" xfId="0" applyAlignment="1">'+
-					'<alignment horizontal="left"/>'+
-				'</xf>'+
-				'<xf numFmtId="0" fontId="0" fillId="0" borderId="0" applyFont="1" applyFill="1" applyBorder="1" xfId="0" applyAlignment="1">'+
-					'<alignment horizontal="center"/>'+
-				'</xf>'+
-				'<xf numFmtId="0" fontId="0" fillId="0" borderId="0" applyFont="1" applyFill="1" applyBorder="1" xfId="0" applyAlignment="1">'+
-					'<alignment horizontal="right"/>'+
-				'</xf>'+
-				'<xf numFmtId="0" fontId="0" fillId="0" borderId="0" applyFont="1" applyFill="1" applyBorder="1" xfId="0" applyAlignment="1">'+
-					'<alignment horizontal="fill"/>'+
-				'</xf>'+
-				'<xf numFmtId="0" fontId="0" fillId="0" borderId="0" applyFont="1" applyFill="1" applyBorder="1" xfId="0" applyAlignment="1">'+
-					'<alignment textRotation="90"/>'+
-				'</xf>'+
-				'<xf numFmtId="0" fontId="0" fillId="0" borderId="0" applyFont="1" applyFill="1" applyBorder="1" xfId="0" applyAlignment="1">'+
-					'<alignment wrapText="1"/>'+
-				'</xf>'+
-				'<xf numFmtId="9"   fontId="0" fillId="0" borderId="0" applyFont="1" applyFill="1" applyBorder="1" xfId="0" applyNumberFormat="1"/>'+
-				'<xf numFmtId="164" fontId="0" fillId="0" borderId="0" applyFont="1" applyFill="1" applyBorder="1" xfId="0" applyNumberFormat="1"/>'+
-				'<xf numFmtId="165" fontId="0" fillId="0" borderId="0" applyFont="1" applyFill="1" applyBorder="1" xfId="0" applyNumberFormat="1"/>'+
-				'<xf numFmtId="166" fontId="0" fillId="0" borderId="0" applyFont="1" applyFill="1" applyBorder="1" xfId="0" applyNumberFormat="1"/>'+
-				'<xf numFmtId="167" fontId="0" fillId="0" borderId="0" applyFont="1" applyFill="1" applyBorder="1" xfId="0" applyNumberFormat="1"/>'+
-				'<xf numFmtId="168" fontId="0" fillId="0" borderId="0" applyFont="1" applyFill="1" applyBorder="1" xfId="0" applyNumberFormat="1"/>'+
-				'<xf numFmtId="169" fontId="0" fillId="0" borderId="0" applyFont="1" applyFill="1" applyBorder="1" xfId="0" applyNumberFormat="1"/>'+
-				'<xf numFmtId="3" fontId="0" fillId="0" borderId="0" applyFont="1" applyFill="1" applyBorder="1" xfId="0" applyNumberFormat="1"/>'+
-				'<xf numFmtId="4" fontId="0" fillId="0" borderId="0" applyFont="1" applyFill="1" applyBorder="1" xfId="0" applyNumberFormat="1"/>'+
-				'<xf numFmtId="1" fontId="0" fillId="0" borderId="0" applyFont="1" applyFill="1" applyBorder="1" xfId="0" applyNumberFormat="1"/>'+
-				'<xf numFmtId="2" fontId="0" fillId="0" borderId="0" applyFont="1" applyFill="1" applyBorder="1" xfId="0" applyNumberFormat="1"/>'+
-				'<xf numFmtId="14" fontId="0" fillId="0" borderId="0" applyFont="1" applyFill="1" applyBorder="1" xfId="0" applyNumberFormat="1"/>'+
-			'</cellXfs>'+
-			'<cellStyles count="1">'+
-				'<cellStyle name="Normal" xfId="0" builtinId="0" />'+
-			'</cellStyles>'+
-			'<dxfs count="0" />'+
-			'<tableStyles count="0" defaultTableStyle="TableStyleMedium9" defaultPivotStyle="PivotStyleMedium4" />'+
-		'</styleSheet>'
-};
-// Note we could use 3 `for` loops for the styles, but when gzipped there is
-// virtually no difference in size, since the above can be easily compressed
-
-// Pattern matching for special number formats. Perhaps this should be exposed
-// via an API in future?
-// Ref: section 3.8.30 - built in formatters in open spreadsheet
-//   https://www.ecma-international.org/news/TC45_current_work/Office%20Open%20XML%20Part%204%20-%20Markup%20Language%20Reference.pdf
-var _excelSpecials = [
-	{ match: /^\-?\d+\.\d%$/,               style: 60, fmt: function (d) { return d/100; } }, // Precent with d.p.
-	{ match: /^\-?\d+\.?\d*%$/,             style: 56, fmt: function (d) { return d/100; } }, // Percent
-	{ match: /^\-?\$[\d,]+.?\d*$/,          style: 57 }, // Dollars
-	{ match: /^\-?£[\d,]+.?\d*$/,           style: 58 }, // Pounds
-	{ match: /^\-?€[\d,]+.?\d*$/,           style: 59 }, // Euros
-	{ match: /^\-?\d+$/,                    style: 65 }, // Numbers without thousand separators
-	{ match: /^\-?\d+\.\d{2}$/,             style: 66 }, // Numbers 2 d.p. without thousands separators
-	{ match: /^\([\d,]+\)$/,                style: 61, fmt: function (d) { return -1 * d.replace(/[\(\)]/g, ''); } },  // Negative numbers indicated by brackets
-	{ match: /^\([\d,]+\.\d{2}\)$/,         style: 62, fmt: function (d) { return -1 * d.replace(/[\(\)]/g, ''); } },  // Negative numbers indicated by brackets - 2d.p.
-	{ match: /^\-?[\d,]+$/,                 style: 63 }, // Numbers with thousand separators
-	{ match: /^\-?[\d,]+\.\d{2}$/,          style: 64 },
-	{ match: /^[\d]{4}\-[\d]{2}\-[\d]{2}$/, style: 67, fmt: function (d) {return Math.round(25569 + (Date.parse(d) / (86400 * 1000)));}} //Date yyyy-mm-dd
-];
-
-
-
-/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- * Buttons
- */
-
-//
-// Copy to clipboard
-//
-DataTable.ext.buttons.copyHtml5 = {
-	className: 'buttons-copy buttons-html5',
-
-	text: function ( dt ) {
-		return dt.i18n( 'buttons.copy', 'Copy' );
-	},
-
-	action: function ( e, dt, button, config ) {
-		this.processing( true );
-
-		var that = this;
-		var exportData = _exportData( dt, config );
-		var info = dt.buttons.exportInfo( config );
-		var newline = _newLine(config);
-		var output = exportData.str;
-		var hiddenDiv = $('<div/>')
-			.css( {
-				height: 1,
-				width: 1,
-				overflow: 'hidden',
-				position: 'fixed',
-				top: 0,
-				left: 0
-			} );
-
-		if ( info.title ) {
-			output = info.title + newline + newline + output;
-		}
-
-		if ( info.messageTop ) {
-			output = info.messageTop + newline + newline + output;
-		}
-
-		if ( info.messageBottom ) {
-			output = output + newline + newline + info.messageBottom;
-		}
-
-		if ( config.customize ) {
-			output = config.customize( output, config, dt );
-		}
-
-		var textarea = $('<textarea readonly/>')
-			.val( output )
-			.appendTo( hiddenDiv );
-
-		// For browsers that support the copy execCommand, try to use it
-		if ( document.queryCommandSupported('copy') ) {
-			hiddenDiv.appendTo( dt.table().container() );
-			textarea[0].focus();
-			textarea[0].select();
-
-			try {
-				var successful = document.execCommand( 'copy' );
-				hiddenDiv.remove();
-
-				if (successful) {
-					dt.buttons.info(
-						dt.i18n( 'buttons.copyTitle', 'Copy to clipboard' ),
-						dt.i18n( 'buttons.copySuccess', {
-							1: 'Copied one row to clipboard',
-							_: 'Copied %d rows to clipboard'
-						}, exportData.rows ),
-						2000
-					);
-
-					this.processing( false );
-					return;
-				}
-			}
-			catch (t) {}
-		}
-
-		// Otherwise we show the text box and instruct the user to use it
-		var message = $('<span>'+dt.i18n( 'buttons.copyKeys',
-				'Press <i>ctrl</i> or <i>\u2318</i> + <i>C</i> to copy the table data<br>to your system clipboard.<br><br>'+
-				'To cancel, click this message or press escape.' )+'</span>'
-			)
-			.append( hiddenDiv );
-
-		dt.buttons.info( dt.i18n( 'buttons.copyTitle', 'Copy to clipboard' ), message, 0 );
-
-		// Select the text so when the user activates their system clipboard
-		// it will copy that text
-		textarea[0].focus();
-		textarea[0].select();
-
-		// Event to hide the message when the user is done
-		var container = $(message).closest('.dt-button-info');
-		var close = function () {
-			container.off( 'click.buttons-copy' );
-			$(document).off( '.buttons-copy' );
-			dt.buttons.info( false );
-		};
-
-		container.on( 'click.buttons-copy', close );
-		$(document)
-			.on( 'keydown.buttons-copy', function (e) {
-				if ( e.keyCode === 27 ) { // esc
-					close();
-					that.processing( false );
-				}
-			} )
-			.on( 'copy.buttons-copy cut.buttons-copy', function () {
-				close();
-				that.processing( false );
-			} );
-	},
-
-	exportOptions: {},
-
-	fieldSeparator: '\t',
-
-	fieldBoundary: '',
-
-	header: true,
-
-	footer: false,
-
-	title: '*',
-
-	messageTop: '*',
-
-	messageBottom: '*'
-};
-
-//
-// CSV export
-//
-DataTable.ext.buttons.csvHtml5 = {
-	bom: false,
-
-	className: 'buttons-csv buttons-html5',
-
-	available: function () {
-		return window.FileReader !== undefined && window.Blob;
-	},
-
-	text: function ( dt ) {
-		return dt.i18n( 'buttons.csv', 'CSV' );
-	},
-
-	action: function ( e, dt, button, config ) {
-		this.processing( true );
-
-		// Set the text
-		var output = _exportData( dt, config ).str;
-		var info = dt.buttons.exportInfo(config);
-		var charset = config.charset;
-
-		if ( config.customize ) {
-			output = config.customize( output, config, dt );
-		}
-
-		if ( charset !== false ) {
-			if ( ! charset ) {
-				charset = document.characterSet || document.charset;
-			}
-
-			if ( charset ) {
-				charset = ';charset='+charset;
-			}
-		}
-		else {
-			charset = '';
-		}
-
-		if ( config.bom ) {
-			output = '\ufeff' + output;
-		}
-
-		_saveAs(
-			new Blob( [output], {type: 'text/csv'+charset} ),
-			info.filename,
-			true
-		);
-
-		this.processing( false );
-	},
-
-	filename: '*',
-
-	extension: '.csv',
-
-	exportOptions: {},
-
-	fieldSeparator: ',',
-
-	fieldBoundary: '"',
-
-	escapeChar: '"',
-
-	charset: null,
-
-	header: true,
-
-	footer: false
-};
-
-//
-// Excel (xlsx) export
-//
-DataTable.ext.buttons.excelHtml5 = {
-	className: 'buttons-excel buttons-html5',
-
-	available: function () {
-		return window.FileReader !== undefined && _jsZip() !== undefined && ! _isDuffSafari() && _serialiser;
-	},
-
-	text: function ( dt ) {
-		return dt.i18n( 'buttons.excel', 'Excel' );
-	},
-
-	action: function ( e, dt, button, config ) {
-		this.processing( true );
-
-		var that = this;
-		var rowPos = 0;
-		var dataStartRow, dataEndRow;
-		var getXml = function ( type ) {
-			var str = excelStrings[ type ];
-
-			//str = str.replace( /xmlns:/g, 'xmlns_' ).replace( /mc:/g, 'mc_' );
-
-			return $.parseXML( str );
-		};
-		var rels = getXml('xl/worksheets/sheet1.xml');
-		var relsGet = rels.getElementsByTagName( "sheetData" )[0];
-
-		var xlsx = {
-			_rels: {
-				".rels": getXml('_rels/.rels')
-			},
-			xl: {
-				_rels: {
-					"workbook.xml.rels": getXml('xl/_rels/workbook.xml.rels')
-				},
-				"workbook.xml": getXml('xl/workbook.xml'),
-				"styles.xml": getXml('xl/styles.xml'),
-				"worksheets": {
-					"sheet1.xml": rels
-				}
-
-			},
-			"[Content_Types].xml": getXml('[Content_Types].xml')
-		};
-
-		var data = dt.buttons.exportData( config.exportOptions );
-		var currentRow, rowNode;
-		var addRow = function ( row ) {
-			currentRow = rowPos+1;
-			rowNode = _createNode( rels, "row", { attr: {r:currentRow} } );
-
-			for ( var i=0, ien=row.length ; i<ien ; i++ ) {
-				// Concat both the Cell Columns as a letter and the Row of the cell.
-				var cellId = createCellPos(i) + '' + currentRow;
-				var cell = null;
-
-				// For null, undefined of blank cell, continue so it doesn't create the _createNode
-				if ( row[i] === null || row[i] === undefined || row[i] === '' ) {
-					if ( config.createEmptyCells === true ) {
-						row[i] = '';
-					}
-					else {
-						continue;
-					}
-				}
-
-				var originalContent = row[i];
-				row[i] = $.trim( row[i] );
-
-				// Special number formatting options
-				for ( var j=0, jen=_excelSpecials.length ; j<jen ; j++ ) {
-					var special = _excelSpecials[j];
-
-					// TODO Need to provide the ability for the specials to say
-					// if they are returning a string, since at the moment it is
-					// assumed to be a number
-					if ( row[i].match && ! row[i].match(/^0\d+/) && row[i].match( special.match ) ) {
-						var val = row[i].replace(/[^\d\.\-]/g, '');
-
-						if ( special.fmt ) {
-							val = special.fmt( val );
-						}
-
-						cell = _createNode( rels, 'c', {
-							attr: {
-								r: cellId,
-								s: special.style
-							},
-							children: [
-								_createNode( rels, 'v', { text: val } )
-							]
-						} );
-
-						break;
-					}
-				}
-
-				if ( ! cell ) {
-					if ( typeof row[i] === 'number' || (
-						row[i].match &&
-						row[i].match(/^-?\d+(\.\d+)?$/) &&
-						! row[i].match(/^0\d+/) )
-					) {
-						// Detect numbers - don't match numbers with leading zeros
-						// or a negative anywhere but the start
-						cell = _createNode( rels, 'c', {
-							attr: {
-								t: 'n',
-								r: cellId
-							},
-							children: [
-								_createNode( rels, 'v', { text: row[i] } )
-							]
-						} );
-					}
-					else {
-						// String output - replace non standard characters for text output
-						var text = ! originalContent.replace ?
-							originalContent :
-							originalContent.replace(/[\x00-\x09\x0B\x0C\x0E-\x1F\x7F-\x9F]/g, '');
-
-						cell = _createNode( rels, 'c', {
-							attr: {
-								t: 'inlineStr',
-								r: cellId
-							},
-							children:{
-								row: _createNode( rels, 'is', {
-									children: {
-										row: _createNode( rels, 't', {
-											text: text,
-											attr: {
-												'xml:space': 'preserve'
-											}
-										} )
-									}
-								} )
-							}
-						} );
-					}
-				}
-
-				rowNode.appendChild( cell );
-			}
-
-			relsGet.appendChild(rowNode);
-			rowPos++;
-		};
-
-		if ( config.customizeData ) {
-			config.customizeData( data );
-		}
-
-		var mergeCells = function ( row, colspan ) {
-			var mergeCells = $('mergeCells', rels);
-
-			mergeCells[0].appendChild( _createNode( rels, 'mergeCell', {
-				attr: {
-					ref: 'A'+row+':'+createCellPos(colspan)+row
-				}
-			} ) );
-			mergeCells.attr( 'count', parseFloat(mergeCells.attr( 'count' ))+1 );
-			$('row:eq('+(row-1)+') c', rels).attr( 's', '51' ); // centre
-		};
-
-		// Title and top messages
-		var exportInfo = dt.buttons.exportInfo( config );
-		if ( exportInfo.title ) {
-			addRow( [exportInfo.title], rowPos );
-			mergeCells( rowPos, data.header.length-1 );
-		}
-
-		if ( exportInfo.messageTop ) {
-			addRow( [exportInfo.messageTop], rowPos );
-			mergeCells( rowPos, data.header.length-1 );
-		}
-
-
-		// Table itself
-		if ( config.header ) {
-			addRow( data.header, rowPos );
-			$('row:last c', rels).attr( 's', '2' ); // bold
-		}
-	
-		dataStartRow = rowPos;
-
-		for ( var n=0, ie=data.body.length ; n<ie ; n++ ) {
-			addRow( data.body[n], rowPos );
-		}
-	
-		dataEndRow = rowPos;
-
-		if ( config.footer && data.footer ) {
-			addRow( data.footer, rowPos);
-			$('row:last c', rels).attr( 's', '2' ); // bold
-		}
-
-		// Below the table
-		if ( exportInfo.messageBottom ) {
-			addRow( [exportInfo.messageBottom], rowPos );
-			mergeCells( rowPos, data.header.length-1 );
-		}
-
-		// Set column widths
-		var cols = _createNode( rels, 'cols' );
-		$('worksheet', rels).prepend( cols );
-
-		for ( var i=0, ien=data.header.length ; i<ien ; i++ ) {
-			cols.appendChild( _createNode( rels, 'col', {
-				attr: {
-					min: i+1,
-					max: i+1,
-					width: _excelColWidth( data, i ),
-					customWidth: 1
-				}
-			} ) );
-		}
-
-		// Workbook modifications
-		var workbook = xlsx.xl['workbook.xml'];
-
-		$( 'sheets sheet', workbook ).attr( 'name', _sheetname( config ) );
-
-		// Auto filter for columns
-		if ( config.autoFilter ) {
-			$('mergeCells', rels).before( _createNode( rels, 'autoFilter', {
-				attr: {
-					ref: 'A'+dataStartRow+':'+createCellPos(data.header.length-1)+dataEndRow
-				}
-			} ) );
-
-			$('definedNames', workbook).append( _createNode( workbook, 'definedName', {
-				attr: {
-					name: '_xlnm._FilterDatabase',
-					localSheetId: '0',
-					hidden: 1
-				},
-				text: _sheetname(config)+'!$A$'+dataStartRow+':'+createCellPos(data.header.length-1)+dataEndRow
-			} ) );
-		}
-
-		// Let the developer customise the document if they want to
-		if ( config.customize ) {
-			config.customize( xlsx, config, dt );
-		}
-
-		// Excel doesn't like an empty mergeCells tag
-		if ( $('mergeCells', rels).children().length === 0 ) {
-			$('mergeCells', rels).remove();
-		}
-
-		var jszip = _jsZip();
-		var zip = new jszip();
-		var zipConfig = {
-			type: 'blob',
-			mimeType: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'
-		};
-
-		_addToZip( zip, xlsx );
-
-		if ( zip.generateAsync ) {
-			// JSZip 3+
-			zip
-				.generateAsync( zipConfig )
-				.then( function ( blob ) {
-					_saveAs( blob, exportInfo.filename );
-					that.processing( false );
-				} );
-		}
-		else {
-			// JSZip 2.5
-			_saveAs(
-				zip.generate( zipConfig ),
-				exportInfo.filename
-			);
-			this.processing( false );
-		}
-	},
-
-	filename: '*',
-
-	extension: '.xlsx',
-
-	exportOptions: {},
-
-	header: true,
-
-	footer: false,
-
-	title: '*',
-
-	messageTop: '*',
-
-	messageBottom: '*',
-
-	createEmptyCells: false,
-
-	autoFilter: false,
-
-	sheetName: ''
-};
-
-//
-// PDF export - using pdfMake - http://pdfmake.org
-//
-DataTable.ext.buttons.pdfHtml5 = {
-	className: 'buttons-pdf buttons-html5',
-
-	available: function () {
-		return window.FileReader !== undefined && _pdfMake();
-	},
-
-	text: function ( dt ) {
-		return dt.i18n( 'buttons.pdf', 'PDF' );
-	},
-
-	action: function ( e, dt, button, config ) {
-		this.processing( true );
-
-		var that = this;
-		var data = dt.buttons.exportData( config.exportOptions );
-		var info = dt.buttons.exportInfo( config );
-		var rows = [];
-
-		if ( config.header ) {
-			rows.push( $.map( data.header, function ( d ) {
-				return {
-					text: typeof d === 'string' ? d : d+'',
-					style: 'tableHeader'
-				};
-			} ) );
-		}
-
-		for ( var i=0, ien=data.body.length ; i<ien ; i++ ) {
-			rows.push( $.map( data.body[i], function ( d ) {
-				if ( d === null || d === undefined ) {
-					d = '';
-				}
-				return {
-					text: typeof d === 'string' ? d : d+'',
-					style: i % 2 ? 'tableBodyEven' : 'tableBodyOdd'
-				};
-			} ) );
-		}
-
-		if ( config.footer && data.footer) {
-			rows.push( $.map( data.footer, function ( d ) {
-				return {
-					text: typeof d === 'string' ? d : d+'',
-					style: 'tableFooter'
-				};
-			} ) );
-		}
-
-		var doc = {
-			pageSize: config.pageSize,
-			pageOrientation: config.orientation,
-			content: [
-				{
-					table: {
-						headerRows: 1,
-						body: rows
-					},
-					layout: 'noBorders'
-				}
-			],
-			styles: {
-				tableHeader: {
-					bold: true,
-					fontSize: 11,
-					color: 'white',
-					fillColor: '#2d4154',
-					alignment: 'center'
-				},
-				tableBodyEven: {},
-				tableBodyOdd: {
-					fillColor: '#f3f3f3'
-				},
-				tableFooter: {
-					bold: true,
-					fontSize: 11,
-					color: 'white',
-					fillColor: '#2d4154'
-				},
-				title: {
-					alignment: 'center',
-					fontSize: 15
-				},
-				message: {}
-			},
-			defaultStyle: {
-				fontSize: 10
-			}
-		};
-
-		if ( info.messageTop ) {
-			doc.content.unshift( {
-				text: info.messageTop,
-				style: 'message',
-				margin: [ 0, 0, 0, 12 ]
-			} );
-		}
-
-		if ( info.messageBottom ) {
-			doc.content.push( {
-				text: info.messageBottom,
-				style: 'message',
-				margin: [ 0, 0, 0, 12 ]
-			} );
-		}
-
-		if ( info.title ) {
-			doc.content.unshift( {
-				text: info.title,
-				style: 'title',
-				margin: [ 0, 0, 0, 12 ]
-			} );
-		}
-
-		if ( config.customize ) {
-			config.customize( doc, config, dt );
-		}
-
-		var pdf = _pdfMake().createPdf( doc );
-
-		if ( config.download === 'open' && ! _isDuffSafari() ) {
-			pdf.open();
-		}
-		else {
-			pdf.download( info.filename );
-		}
-
-		this.processing( false );
-	},
-
-	title: '*',
-
-	filename: '*',
-
-	extension: '.pdf',
-
-	exportOptions: {},
-
-	orientation: 'portrait',
-
-	pageSize: 'A4',
-
-	header: true,
-
-	footer: false,
-
-	messageTop: '*',
-
-	messageBottom: '*',
-
-	customize: null,
-
-	download: 'download'
-};
-
-
-return DataTable.Buttons;
-}));
diff --git a/DataTables/Buttons-1.6.2/js/buttons.html5.min.js b/DataTables/Buttons-1.6.2/js/buttons.html5.min.js
deleted file mode 100644
index 2091407..0000000
--- a/DataTables/Buttons-1.6.2/js/buttons.html5.min.js
+++ /dev/null
@@ -1,36 +0,0 @@
-/*!
- HTML5 export buttons for Buttons and DataTables.
- 2016 SpryMedia Ltd - datatables.net/license
-
- FileSaver.js (1.3.3) - MIT license
- Copyright © 2016 Eli Grey - http://eligrey.com
-*/
-(function(f){"function"===typeof define&&define.amd?define(["jquery","datatables.net","datatables.net-buttons"],function(g){return f(g,window,document)}):"object"===typeof exports?module.exports=function(g,l,z,t){g||(g=window);l&&l.fn.dataTable||(l=require("datatables.net")(g,l).$);l.fn.dataTable.Buttons||require("datatables.net-buttons")(g,l);return f(l,g,g.document,z,t)}:f(jQuery,window,document)})(function(f,g,l,z,t,w){function A(a){for(var b="";0<=a;)b=String.fromCharCode(a%26+65)+b,a=Math.floor(a/
-26)-1;return b}function E(a,b){y===w&&(y=-1===C.serializeToString((new g.DOMParser).parseFromString(F["xl/worksheets/sheet1.xml"],"text/xml")).indexOf("xmlns:r"));f.each(b,function(b,c){if(f.isPlainObject(c))b=a.folder(b),E(b,c);else{if(y){var d=c.childNodes[0],e,h=[];for(e=d.attributes.length-1;0<=e;e--){var n=d.attributes[e].nodeName;var k=d.attributes[e].nodeValue;-1!==n.indexOf(":")&&(h.push({name:n,value:k}),d.removeAttribute(n))}e=0;for(n=h.length;e<n;e++)k=c.createAttribute(h[e].name.replace(":",
-"_dt_b_namespace_token_")),k.value=h[e].value,d.setAttributeNode(k)}c=C.serializeToString(c);y&&(-1===c.indexOf("<?xml")&&(c='<?xml version="1.0" encoding="UTF-8" standalone="yes"?>'+c),c=c.replace(/_dt_b_namespace_token_/g,":"),c=c.replace(/xmlns:NS[\d]+="" NS[\d]+:/g,""));c=c.replace(/<([^<>]*?) xmlns=""([^<>]*?)>/g,"<$1 $2>");a.file(b,c)}})}function r(a,b,d){var c=a.createElement(b);d&&(d.attr&&f(c).attr(d.attr),d.children&&f.each(d.children,function(a,b){c.appendChild(b)}),null!==d.text&&d.text!==
-w&&c.appendChild(a.createTextNode(d.text)));return c}function L(a,b){var d=a.header[b].length;a.footer&&a.footer[b].length>d&&(d=a.footer[b].length);for(var c=0,f=a.body.length;c<f;c++){var e=a.body[c][b];e=null!==e&&e!==w?e.toString():"";-1!==e.indexOf("\n")?(e=e.split("\n"),e.sort(function(a,c){return c.length-a.length}),e=e[0].length):e=e.length;e>d&&(d=e);if(40<d)return 54}d*=1.35;return 6<d?d:6}var v=f.fn.dataTable;v.Buttons.pdfMake=function(a){if(!a)return t||g.pdfMake;t=a};v.Buttons.jszip=
-function(a){if(!a)return z||g.JSZip;z=a};var B=function(a){if(!("undefined"===typeof a||"undefined"!==typeof navigator&&/MSIE [1-9]\./.test(navigator.userAgent))){var b=a.document.createElementNS("http://www.w3.org/1999/xhtml","a"),d="download"in b,c=/constructor/i.test(a.HTMLElement)||a.safari,f=/CriOS\/[\d]+/.test(navigator.userAgent),e=function(c){(a.setImmediate||a.setTimeout)(function(){throw c;},0)},h=function(c){setTimeout(function(){"string"===typeof c?(a.URL||a.webkitURL||a).revokeObjectURL(c):
-c.remove()},4E4)},n=function(a){return/^\s*(?:text\/\S*|application\/xml|\S*\/\S*\+xml)\s*;.*charset\s*=\s*utf-8/i.test(a.type)?new Blob([String.fromCharCode(65279),a],{type:a.type}):a},k=function(k,q,p){p||(k=n(k));var m=this,g="application/octet-stream"===k.type,D=function(){var a=["writestart","progress","write","writeend"];a=[].concat(a);for(var c=a.length;c--;){var b=m["on"+a[c]];if("function"===typeof b)try{b.call(m,m)}catch(M){e(M)}}};m.readyState=m.INIT;if(d){var u=(a.URL||a.webkitURL||a).createObjectURL(k);
-setTimeout(function(){b.href=u;b.download=q;var a=new MouseEvent("click");b.dispatchEvent(a);D();h(u);m.readyState=m.DONE})}else(function(){if((f||g&&c)&&a.FileReader){var b=new FileReader;b.onloadend=function(){var c=f?b.result:b.result.replace(/^data:[^;]*;/,"data:attachment/file;");a.open(c,"_blank")||(a.location.href=c);m.readyState=m.DONE;D()};b.readAsDataURL(k);m.readyState=m.INIT}else u||(u=(a.URL||a.webkitURL||a).createObjectURL(k)),g?a.location.href=u:a.open(u,"_blank")||(a.location.href=
-u),m.readyState=m.DONE,D(),h(u)})()},p=k.prototype;if("undefined"!==typeof navigator&&navigator.msSaveOrOpenBlob)return function(a,c,b){c=c||a.name||"download";b||(a=n(a));return navigator.msSaveOrOpenBlob(a,c)};p.abort=function(){};p.readyState=p.INIT=0;p.WRITING=1;p.DONE=2;p.error=p.onwritestart=p.onprogress=p.onwrite=p.onabort=p.onerror=p.onwriteend=null;return function(a,c,b){return new k(a,c||a.name||"download",b)}}}("undefined"!==typeof self&&self||"undefined"!==typeof g&&g||this.content);v.fileSave=
-B;var G=function(a){var b="Sheet1";a.sheetName&&(b=a.sheetName.replace(/[\[\]\*\/\\\?:]/g,""));return b},H=function(a){return a.newline?a.newline:navigator.userAgent.match(/Windows/)?"\r\n":"\n"},I=function(a,b){var d=H(b);a=a.buttons.exportData(b.exportOptions);var c=b.fieldBoundary,f=b.fieldSeparator,e=new RegExp(c,"g"),h=b.escapeChar!==w?b.escapeChar:"\\",n=function(a){for(var b="",d=0,n=a.length;d<n;d++)0<d&&(b+=f),b+=c?c+(""+a[d]).replace(e,h+c)+c:a[d];return b},k=b.header?n(a.header)+d:"";b=
-b.footer&&a.footer?d+n(a.footer):"";for(var g=[],l=0,q=a.body.length;l<q;l++)g.push(n(a.body[l]));return{str:k+g.join(d)+b,rows:g.length}},J=function(){if(-1===navigator.userAgent.indexOf("Safari")||-1!==navigator.userAgent.indexOf("Chrome")||-1!==navigator.userAgent.indexOf("Opera"))return!1;var a=navigator.userAgent.match(/AppleWebKit\/(\d+\.\d+)/);return a&&1<a.length&&603.1>1*a[1]?!0:!1};try{var C=new XMLSerializer,y}catch(a){}var F={"_rels/.rels":'<?xml version="1.0" encoding="UTF-8" standalone="yes"?><Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships"><Relationship Id="rId1" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument" Target="xl/workbook.xml"/></Relationships>',
-"xl/_rels/workbook.xml.rels":'<?xml version="1.0" encoding="UTF-8" standalone="yes"?><Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships"><Relationship Id="rId1" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/worksheet" Target="worksheets/sheet1.xml"/><Relationship Id="rId2" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles" Target="styles.xml"/></Relationships>',"[Content_Types].xml":'<?xml version="1.0" encoding="UTF-8" standalone="yes"?><Types xmlns="http://schemas.openxmlformats.org/package/2006/content-types"><Default Extension="xml" ContentType="application/xml" /><Default Extension="rels" ContentType="application/vnd.openxmlformats-package.relationships+xml" /><Default Extension="jpeg" ContentType="image/jpeg" /><Override PartName="/xl/workbook.xml" ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml" /><Override PartName="/xl/worksheets/sheet1.xml" ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml" /><Override PartName="/xl/styles.xml" ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml" /></Types>',
-"xl/workbook.xml":'<?xml version="1.0" encoding="UTF-8" standalone="yes"?><workbook xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships"><fileVersion appName="xl" lastEdited="5" lowestEdited="5" rupBuild="24816"/><workbookPr showInkAnnotation="0" autoCompressPictures="0"/><bookViews><workbookView xWindow="0" yWindow="0" windowWidth="25600" windowHeight="19020" tabRatio="500"/></bookViews><sheets><sheet name="Sheet1" sheetId="1" r:id="rId1"/></sheets><definedNames/></workbook>',
-"xl/worksheets/sheet1.xml":'<?xml version="1.0" encoding="UTF-8" standalone="yes"?><worksheet xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="x14ac" xmlns:x14ac="http://schemas.microsoft.com/office/spreadsheetml/2009/9/ac"><sheetData/><mergeCells count="0"/></worksheet>',"xl/styles.xml":'<?xml version="1.0" encoding="UTF-8"?><styleSheet xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="x14ac" xmlns:x14ac="http://schemas.microsoft.com/office/spreadsheetml/2009/9/ac"><numFmts count="6"><numFmt numFmtId="164" formatCode="#,##0.00_- [$$-45C]"/><numFmt numFmtId="165" formatCode="&quot;£&quot;#,##0.00"/><numFmt numFmtId="166" formatCode="[$€-2] #,##0.00"/><numFmt numFmtId="167" formatCode="0.0%"/><numFmt numFmtId="168" formatCode="#,##0;(#,##0)"/><numFmt numFmtId="169" formatCode="#,##0.00;(#,##0.00)"/></numFmts><fonts count="5" x14ac:knownFonts="1"><font><sz val="11" /><name val="Calibri" /></font><font><sz val="11" /><name val="Calibri" /><color rgb="FFFFFFFF" /></font><font><sz val="11" /><name val="Calibri" /><b /></font><font><sz val="11" /><name val="Calibri" /><i /></font><font><sz val="11" /><name val="Calibri" /><u /></font></fonts><fills count="6"><fill><patternFill patternType="none" /></fill><fill><patternFill patternType="none" /></fill><fill><patternFill patternType="solid"><fgColor rgb="FFD9D9D9" /><bgColor indexed="64" /></patternFill></fill><fill><patternFill patternType="solid"><fgColor rgb="FFD99795" /><bgColor indexed="64" /></patternFill></fill><fill><patternFill patternType="solid"><fgColor rgb="ffc6efce" /><bgColor indexed="64" /></patternFill></fill><fill><patternFill patternType="solid"><fgColor rgb="ffc6cfef" /><bgColor indexed="64" /></patternFill></fill></fills><borders count="2"><border><left /><right /><top /><bottom /><diagonal /></border><border diagonalUp="false" diagonalDown="false"><left style="thin"><color auto="1" /></left><right style="thin"><color auto="1" /></right><top style="thin"><color auto="1" /></top><bottom style="thin"><color auto="1" /></bottom><diagonal /></border></borders><cellStyleXfs count="1"><xf numFmtId="0" fontId="0" fillId="0" borderId="0" /></cellStyleXfs><cellXfs count="68"><xf numFmtId="0" fontId="0" fillId="0" borderId="0" applyFont="1" applyFill="1" applyBorder="1"/><xf numFmtId="0" fontId="1" fillId="0" borderId="0" applyFont="1" applyFill="1" applyBorder="1"/><xf numFmtId="0" fontId="2" fillId="0" borderId="0" applyFont="1" applyFill="1" applyBorder="1"/><xf numFmtId="0" fontId="3" fillId="0" borderId="0" applyFont="1" applyFill="1" applyBorder="1"/><xf numFmtId="0" fontId="4" fillId="0" borderId="0" applyFont="1" applyFill="1" applyBorder="1"/><xf numFmtId="0" fontId="0" fillId="2" borderId="0" applyFont="1" applyFill="1" applyBorder="1"/><xf numFmtId="0" fontId="1" fillId="2" borderId="0" applyFont="1" applyFill="1" applyBorder="1"/><xf numFmtId="0" fontId="2" fillId="2" borderId="0" applyFont="1" applyFill="1" applyBorder="1"/><xf numFmtId="0" fontId="3" fillId="2" borderId="0" applyFont="1" applyFill="1" applyBorder="1"/><xf numFmtId="0" fontId="4" fillId="2" borderId="0" applyFont="1" applyFill="1" applyBorder="1"/><xf numFmtId="0" fontId="0" fillId="3" borderId="0" applyFont="1" applyFill="1" applyBorder="1"/><xf numFmtId="0" fontId="1" fillId="3" borderId="0" applyFont="1" applyFill="1" applyBorder="1"/><xf numFmtId="0" fontId="2" fillId="3" borderId="0" applyFont="1" applyFill="1" applyBorder="1"/><xf numFmtId="0" fontId="3" fillId="3" borderId="0" applyFont="1" applyFill="1" applyBorder="1"/><xf numFmtId="0" fontId="4" fillId="3" borderId="0" applyFont="1" applyFill="1" applyBorder="1"/><xf numFmtId="0" fontId="0" fillId="4" borderId="0" applyFont="1" applyFill="1" applyBorder="1"/><xf numFmtId="0" fontId="1" fillId="4" borderId="0" applyFont="1" applyFill="1" applyBorder="1"/><xf numFmtId="0" fontId="2" fillId="4" borderId="0" applyFont="1" applyFill="1" applyBorder="1"/><xf numFmtId="0" fontId="3" fillId="4" borderId="0" applyFont="1" applyFill="1" applyBorder="1"/><xf numFmtId="0" fontId="4" fillId="4" borderId="0" applyFont="1" applyFill="1" applyBorder="1"/><xf numFmtId="0" fontId="0" fillId="5" borderId="0" applyFont="1" applyFill="1" applyBorder="1"/><xf numFmtId="0" fontId="1" fillId="5" borderId="0" applyFont="1" applyFill="1" applyBorder="1"/><xf numFmtId="0" fontId="2" fillId="5" borderId="0" applyFont="1" applyFill="1" applyBorder="1"/><xf numFmtId="0" fontId="3" fillId="5" borderId="0" applyFont="1" applyFill="1" applyBorder="1"/><xf numFmtId="0" fontId="4" fillId="5" borderId="0" applyFont="1" applyFill="1" applyBorder="1"/><xf numFmtId="0" fontId="0" fillId="0" borderId="1" applyFont="1" applyFill="1" applyBorder="1"/><xf numFmtId="0" fontId="1" fillId="0" borderId="1" applyFont="1" applyFill="1" applyBorder="1"/><xf numFmtId="0" fontId="2" fillId="0" borderId="1" applyFont="1" applyFill="1" applyBorder="1"/><xf numFmtId="0" fontId="3" fillId="0" borderId="1" applyFont="1" applyFill="1" applyBorder="1"/><xf numFmtId="0" fontId="4" fillId="0" borderId="1" applyFont="1" applyFill="1" applyBorder="1"/><xf numFmtId="0" fontId="0" fillId="2" borderId="1" applyFont="1" applyFill="1" applyBorder="1"/><xf numFmtId="0" fontId="1" fillId="2" borderId="1" applyFont="1" applyFill="1" applyBorder="1"/><xf numFmtId="0" fontId="2" fillId="2" borderId="1" applyFont="1" applyFill="1" applyBorder="1"/><xf numFmtId="0" fontId="3" fillId="2" borderId="1" applyFont="1" applyFill="1" applyBorder="1"/><xf numFmtId="0" fontId="4" fillId="2" borderId="1" applyFont="1" applyFill="1" applyBorder="1"/><xf numFmtId="0" fontId="0" fillId="3" borderId="1" applyFont="1" applyFill="1" applyBorder="1"/><xf numFmtId="0" fontId="1" fillId="3" borderId="1" applyFont="1" applyFill="1" applyBorder="1"/><xf numFmtId="0" fontId="2" fillId="3" borderId="1" applyFont="1" applyFill="1" applyBorder="1"/><xf numFmtId="0" fontId="3" fillId="3" borderId="1" applyFont="1" applyFill="1" applyBorder="1"/><xf numFmtId="0" fontId="4" fillId="3" borderId="1" applyFont="1" applyFill="1" applyBorder="1"/><xf numFmtId="0" fontId="0" fillId="4" borderId="1" applyFont="1" applyFill="1" applyBorder="1"/><xf numFmtId="0" fontId="1" fillId="4" borderId="1" applyFont="1" applyFill="1" applyBorder="1"/><xf numFmtId="0" fontId="2" fillId="4" borderId="1" applyFont="1" applyFill="1" applyBorder="1"/><xf numFmtId="0" fontId="3" fillId="4" borderId="1" applyFont="1" applyFill="1" applyBorder="1"/><xf numFmtId="0" fontId="4" fillId="4" borderId="1" applyFont="1" applyFill="1" applyBorder="1"/><xf numFmtId="0" fontId="0" fillId="5" borderId="1" applyFont="1" applyFill="1" applyBorder="1"/><xf numFmtId="0" fontId="1" fillId="5" borderId="1" applyFont="1" applyFill="1" applyBorder="1"/><xf numFmtId="0" fontId="2" fillId="5" borderId="1" applyFont="1" applyFill="1" applyBorder="1"/><xf numFmtId="0" fontId="3" fillId="5" borderId="1" applyFont="1" applyFill="1" applyBorder="1"/><xf numFmtId="0" fontId="4" fillId="5" borderId="1" applyFont="1" applyFill="1" applyBorder="1"/><xf numFmtId="0" fontId="0" fillId="0" borderId="0" applyFont="1" applyFill="1" applyBorder="1" xfId="0" applyAlignment="1"><alignment horizontal="left"/></xf><xf numFmtId="0" fontId="0" fillId="0" borderId="0" applyFont="1" applyFill="1" applyBorder="1" xfId="0" applyAlignment="1"><alignment horizontal="center"/></xf><xf numFmtId="0" fontId="0" fillId="0" borderId="0" applyFont="1" applyFill="1" applyBorder="1" xfId="0" applyAlignment="1"><alignment horizontal="right"/></xf><xf numFmtId="0" fontId="0" fillId="0" borderId="0" applyFont="1" applyFill="1" applyBorder="1" xfId="0" applyAlignment="1"><alignment horizontal="fill"/></xf><xf numFmtId="0" fontId="0" fillId="0" borderId="0" applyFont="1" applyFill="1" applyBorder="1" xfId="0" applyAlignment="1"><alignment textRotation="90"/></xf><xf numFmtId="0" fontId="0" fillId="0" borderId="0" applyFont="1" applyFill="1" applyBorder="1" xfId="0" applyAlignment="1"><alignment wrapText="1"/></xf><xf numFmtId="9"   fontId="0" fillId="0" borderId="0" applyFont="1" applyFill="1" applyBorder="1" xfId="0" applyNumberFormat="1"/><xf numFmtId="164" fontId="0" fillId="0" borderId="0" applyFont="1" applyFill="1" applyBorder="1" xfId="0" applyNumberFormat="1"/><xf numFmtId="165" fontId="0" fillId="0" borderId="0" applyFont="1" applyFill="1" applyBorder="1" xfId="0" applyNumberFormat="1"/><xf numFmtId="166" fontId="0" fillId="0" borderId="0" applyFont="1" applyFill="1" applyBorder="1" xfId="0" applyNumberFormat="1"/><xf numFmtId="167" fontId="0" fillId="0" borderId="0" applyFont="1" applyFill="1" applyBorder="1" xfId="0" applyNumberFormat="1"/><xf numFmtId="168" fontId="0" fillId="0" borderId="0" applyFont="1" applyFill="1" applyBorder="1" xfId="0" applyNumberFormat="1"/><xf numFmtId="169" fontId="0" fillId="0" borderId="0" applyFont="1" applyFill="1" applyBorder="1" xfId="0" applyNumberFormat="1"/><xf numFmtId="3" fontId="0" fillId="0" borderId="0" applyFont="1" applyFill="1" applyBorder="1" xfId="0" applyNumberFormat="1"/><xf numFmtId="4" fontId="0" fillId="0" borderId="0" applyFont="1" applyFill="1" applyBorder="1" xfId="0" applyNumberFormat="1"/><xf numFmtId="1" fontId="0" fillId="0" borderId="0" applyFont="1" applyFill="1" applyBorder="1" xfId="0" applyNumberFormat="1"/><xf numFmtId="2" fontId="0" fillId="0" borderId="0" applyFont="1" applyFill="1" applyBorder="1" xfId="0" applyNumberFormat="1"/><xf numFmtId="14" fontId="0" fillId="0" borderId="0" applyFont="1" applyFill="1" applyBorder="1" xfId="0" applyNumberFormat="1"/></cellXfs><cellStyles count="1"><cellStyle name="Normal" xfId="0" builtinId="0" /></cellStyles><dxfs count="0" /><tableStyles count="0" defaultTableStyle="TableStyleMedium9" defaultPivotStyle="PivotStyleMedium4" /></styleSheet>'},
-K=[{match:/^\-?\d+\.\d%$/,style:60,fmt:function(a){return a/100}},{match:/^\-?\d+\.?\d*%$/,style:56,fmt:function(a){return a/100}},{match:/^\-?\$[\d,]+.?\d*$/,style:57},{match:/^\-?£[\d,]+.?\d*$/,style:58},{match:/^\-?€[\d,]+.?\d*$/,style:59},{match:/^\-?\d+$/,style:65},{match:/^\-?\d+\.\d{2}$/,style:66},{match:/^\([\d,]+\)$/,style:61,fmt:function(a){return-1*a.replace(/[\(\)]/g,"")}},{match:/^\([\d,]+\.\d{2}\)$/,style:62,fmt:function(a){return-1*a.replace(/[\(\)]/g,"")}},{match:/^\-?[\d,]+$/,style:63},
-{match:/^\-?[\d,]+\.\d{2}$/,style:64},{match:/^[\d]{4}\-[\d]{2}\-[\d]{2}$/,style:67,fmt:function(a){return Math.round(25569+Date.parse(a)/864E5)}}];v.ext.buttons.copyHtml5={className:"buttons-copy buttons-html5",text:function(a){return a.i18n("buttons.copy","Copy")},action:function(a,b,d,c){this.processing(!0);var g=this;a=I(b,c);var e=b.buttons.exportInfo(c),h=H(c),n=a.str;d=f("<div/>").css({height:1,width:1,overflow:"hidden",position:"fixed",top:0,left:0});e.title&&(n=e.title+h+h+n);e.messageTop&&
-(n=e.messageTop+h+h+n);e.messageBottom&&(n=n+h+h+e.messageBottom);c.customize&&(n=c.customize(n,c,b));c=f("<textarea readonly/>").val(n).appendTo(d);if(l.queryCommandSupported("copy")){d.appendTo(b.table().container());c[0].focus();c[0].select();try{var k=l.execCommand("copy");d.remove();if(k){b.buttons.info(b.i18n("buttons.copyTitle","Copy to clipboard"),b.i18n("buttons.copySuccess",{1:"Copied one row to clipboard",_:"Copied %d rows to clipboard"},a.rows),2E3);this.processing(!1);return}}catch(q){}}k=
-f("<span>"+b.i18n("buttons.copyKeys","Press <i>ctrl</i> or <i>⌘</i> + <i>C</i> to copy the table data<br>to your system clipboard.<br><br>To cancel, click this message or press escape.")+"</span>").append(d);b.buttons.info(b.i18n("buttons.copyTitle","Copy to clipboard"),k,0);c[0].focus();c[0].select();var p=f(k).closest(".dt-button-info"),r=function(){p.off("click.buttons-copy");f(l).off(".buttons-copy");b.buttons.info(!1)};p.on("click.buttons-copy",r);f(l).on("keydown.buttons-copy",function(a){27===
-a.keyCode&&(r(),g.processing(!1))}).on("copy.buttons-copy cut.buttons-copy",function(){r();g.processing(!1)})},exportOptions:{},fieldSeparator:"\t",fieldBoundary:"",header:!0,footer:!1,title:"*",messageTop:"*",messageBottom:"*"};v.ext.buttons.csvHtml5={bom:!1,className:"buttons-csv buttons-html5",available:function(){return g.FileReader!==w&&g.Blob},text:function(a){return a.i18n("buttons.csv","CSV")},action:function(a,b,d,c){this.processing(!0);a=I(b,c).str;d=b.buttons.exportInfo(c);var f=c.charset;
-c.customize&&(a=c.customize(a,c,b));!1!==f?(f||(f=l.characterSet||l.charset),f&&(f=";charset="+f)):f="";c.bom&&(a=""+a);B(new Blob([a],{type:"text/csv"+f}),d.filename,!0);this.processing(!1)},filename:"*",extension:".csv",exportOptions:{},fieldSeparator:",",fieldBoundary:'"',escapeChar:'"',charset:null,header:!0,footer:!1};v.ext.buttons.excelHtml5={className:"buttons-excel buttons-html5",available:function(){return g.FileReader!==w&&(z||g.JSZip)!==w&&!J()&&C},text:function(a){return a.i18n("buttons.excel",
-"Excel")},action:function(a,b,d,c){this.processing(!0);var l=this,e=0;a=function(a){return f.parseXML(F[a])};var h=a("xl/worksheets/sheet1.xml"),n=h.getElementsByTagName("sheetData")[0];a={_rels:{".rels":a("_rels/.rels")},xl:{_rels:{"workbook.xml.rels":a("xl/_rels/workbook.xml.rels")},"workbook.xml":a("xl/workbook.xml"),"styles.xml":a("xl/styles.xml"),worksheets:{"sheet1.xml":h}},"[Content_Types].xml":a("[Content_Types].xml")};var k=b.buttons.exportData(c.exportOptions),p,v,q=function(a){p=e+1;v=
-r(h,"row",{attr:{r:p}});for(var b=0,d=a.length;b<d;b++){var k=A(b)+""+p,g=null;if(null===a[b]||a[b]===w||""===a[b])if(!0===c.createEmptyCells)a[b]="";else continue;var m=a[b];a[b]=f.trim(a[b]);for(var l=0,q=K.length;l<q;l++){var u=K[l];if(a[b].match&&!a[b].match(/^0\d+/)&&a[b].match(u.match)){g=a[b].replace(/[^\d\.\-]/g,"");u.fmt&&(g=u.fmt(g));g=r(h,"c",{attr:{r:k,s:u.style},children:[r(h,"v",{text:g})]});break}}g||("number"===typeof a[b]||a[b].match&&a[b].match(/^-?\d+(\.\d+)?$/)&&!a[b].match(/^0\d+/)?
-g=r(h,"c",{attr:{t:"n",r:k},children:[r(h,"v",{text:a[b]})]}):(m=m.replace?m.replace(/[\x00-\x09\x0B\x0C\x0E-\x1F\x7F-\x9F]/g,""):m,g=r(h,"c",{attr:{t:"inlineStr",r:k},children:{row:r(h,"is",{children:{row:r(h,"t",{text:m,attr:{"xml:space":"preserve"}})}})}})));v.appendChild(g)}n.appendChild(v);e++};c.customizeData&&c.customizeData(k);var x=function(a,b){var c=f("mergeCells",h);c[0].appendChild(r(h,"mergeCell",{attr:{ref:"A"+a+":"+A(b)+a}}));c.attr("count",parseFloat(c.attr("count"))+1);f("row:eq("+
-(a-1)+") c",h).attr("s","51")},m=b.buttons.exportInfo(c);m.title&&(q([m.title],e),x(e,k.header.length-1));m.messageTop&&(q([m.messageTop],e),x(e,k.header.length-1));c.header&&(q(k.header,e),f("row:last c",h).attr("s","2"));d=e;var t=0;for(var y=k.body.length;t<y;t++)q(k.body[t],e);t=e;c.footer&&k.footer&&(q(k.footer,e),f("row:last c",h).attr("s","2"));m.messageBottom&&(q([m.messageBottom],e),x(e,k.header.length-1));q=r(h,"cols");f("worksheet",h).prepend(q);x=0;for(y=k.header.length;x<y;x++)q.appendChild(r(h,
-"col",{attr:{min:x+1,max:x+1,width:L(k,x),customWidth:1}}));q=a.xl["workbook.xml"];f("sheets sheet",q).attr("name",G(c));c.autoFilter&&(f("mergeCells",h).before(r(h,"autoFilter",{attr:{ref:"A"+d+":"+A(k.header.length-1)+t}})),f("definedNames",q).append(r(q,"definedName",{attr:{name:"_xlnm._FilterDatabase",localSheetId:"0",hidden:1},text:G(c)+"!$A$"+d+":"+A(k.header.length-1)+t})));c.customize&&c.customize(a,c,b);0===f("mergeCells",h).children().length&&f("mergeCells",h).remove();b=new (z||g.JSZip);
-d={type:"blob",mimeType:"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"};E(b,a);b.generateAsync?b.generateAsync(d).then(function(a){B(a,m.filename);l.processing(!1)}):(B(b.generate(d),m.filename),this.processing(!1))},filename:"*",extension:".xlsx",exportOptions:{},header:!0,footer:!1,title:"*",messageTop:"*",messageBottom:"*",createEmptyCells:!1,autoFilter:!1,sheetName:""};v.ext.buttons.pdfHtml5={className:"buttons-pdf buttons-html5",available:function(){return g.FileReader!==
-w&&(t||g.pdfMake)},text:function(a){return a.i18n("buttons.pdf","PDF")},action:function(a,b,d,c){this.processing(!0);d=b.buttons.exportData(c.exportOptions);a=b.buttons.exportInfo(c);var l=[];c.header&&l.push(f.map(d.header,function(a){return{text:"string"===typeof a?a:a+"",style:"tableHeader"}}));for(var e=0,h=d.body.length;e<h;e++)l.push(f.map(d.body[e],function(a){if(null===a||a===w)a="";return{text:"string"===typeof a?a:a+"",style:e%2?"tableBodyEven":"tableBodyOdd"}}));c.footer&&d.footer&&l.push(f.map(d.footer,
-function(a){return{text:"string"===typeof a?a:a+"",style:"tableFooter"}}));d={pageSize:c.pageSize,pageOrientation:c.orientation,content:[{table:{headerRows:1,body:l},layout:"noBorders"}],styles:{tableHeader:{bold:!0,fontSize:11,color:"white",fillColor:"#2d4154",alignment:"center"},tableBodyEven:{},tableBodyOdd:{fillColor:"#f3f3f3"},tableFooter:{bold:!0,fontSize:11,color:"white",fillColor:"#2d4154"},title:{alignment:"center",fontSize:15},message:{}},defaultStyle:{fontSize:10}};a.messageTop&&d.content.unshift({text:a.messageTop,
-style:"message",margin:[0,0,0,12]});a.messageBottom&&d.content.push({text:a.messageBottom,style:"message",margin:[0,0,0,12]});a.title&&d.content.unshift({text:a.title,style:"title",margin:[0,0,0,12]});c.customize&&c.customize(d,c,b);b=(t||g.pdfMake).createPdf(d);"open"!==c.download||J()?b.download(a.filename):b.open();this.processing(!1)},title:"*",filename:"*",extension:".pdf",exportOptions:{},orientation:"portrait",pageSize:"A4",header:!0,footer:!1,messageTop:"*",messageBottom:"*",customize:null,
-download:"download"};return v.Buttons});
diff --git a/DataTables/Buttons-1.6.2/js/buttons.jqueryui.js b/DataTables/Buttons-1.6.2/js/buttons.jqueryui.js
deleted file mode 100644
index 3fb4971..0000000
--- a/DataTables/Buttons-1.6.2/js/buttons.jqueryui.js
+++ /dev/null
@@ -1,62 +0,0 @@
-/*! jQuery UI integration for DataTables' Buttons
- * ©2016 SpryMedia Ltd - datatables.net/license
- */
-
-(function( factory ){
-	if ( typeof define === 'function' && define.amd ) {
-		// AMD
-		define( ['jquery', 'datatables.net-jqui', 'datatables.net-buttons'], function ( $ ) {
-			return factory( $, window, document );
-		} );
-	}
-	else if ( typeof exports === 'object' ) {
-		// CommonJS
-		module.exports = function (root, $) {
-			if ( ! root ) {
-				root = window;
-			}
-
-			if ( ! $ || ! $.fn.dataTable ) {
-				$ = require('datatables.net-jqui')(root, $).$;
-			}
-
-			if ( ! $.fn.dataTable.Buttons ) {
-				require('datatables.net-buttons')(root, $);
-			}
-
-			return factory( $, root, root.document );
-		};
-	}
-	else {
-		// Browser
-		factory( jQuery, window, document );
-	}
-}(function( $, window, document, undefined ) {
-'use strict';
-var DataTable = $.fn.dataTable;
-
-
-$.extend( true, DataTable.Buttons.defaults, {
-	dom: {
-		container: {
-			className: 'dt-buttons ui-buttonset'
-		},
-		button: {
-			className: 'dt-button ui-button ui-state-default ui-button-text-only',
-			disabled: 'ui-state-disabled',
-			active: 'ui-state-active'
-		},
-		buttonLiner: {
-			tag: 'span',
-			className: 'ui-button-text'
-		}
-	}
-} );
-
-DataTable.ext.buttons.collection.text = function ( dt ) {
-	return dt.i18n('buttons.collection', 'Collection <span class="ui-button-icon-primary ui-icon ui-icon-triangle-1-s"/>');
-};
-
-
-return DataTable.Buttons;
-}));
diff --git a/DataTables/Buttons-1.6.2/js/buttons.jqueryui.min.js b/DataTables/Buttons-1.6.2/js/buttons.jqueryui.min.js
deleted file mode 100644
index df72977..0000000
--- a/DataTables/Buttons-1.6.2/js/buttons.jqueryui.min.js
+++ /dev/null
@@ -1,6 +0,0 @@
-/*!
- jQuery UI integration for DataTables' Buttons
- ©2016 SpryMedia Ltd - datatables.net/license
-*/
-(function(c){"function"===typeof define&&define.amd?define(["jquery","datatables.net-jqui","datatables.net-buttons"],function(a){return c(a,window,document)}):"object"===typeof exports?module.exports=function(a,b){a||(a=window);b&&b.fn.dataTable||(b=require("datatables.net-jqui")(a,b).$);b.fn.dataTable.Buttons||require("datatables.net-buttons")(a,b);return c(b,a,a.document)}:c(jQuery,window,document)})(function(c,a,b,d){a=c.fn.dataTable;c.extend(!0,a.Buttons.defaults,{dom:{container:{className:"dt-buttons ui-buttonset"},
-button:{className:"dt-button ui-button ui-state-default ui-button-text-only",disabled:"ui-state-disabled",active:"ui-state-active"},buttonLiner:{tag:"span",className:"ui-button-text"}}});a.ext.buttons.collection.text=function(a){return a.i18n("buttons.collection",'Collection <span class="ui-button-icon-primary ui-icon ui-icon-triangle-1-s"/>')};return a.Buttons});
diff --git a/DataTables/Buttons-1.6.2/js/buttons.print.js b/DataTables/Buttons-1.6.2/js/buttons.print.js
deleted file mode 100644
index 87ee561..0000000
--- a/DataTables/Buttons-1.6.2/js/buttons.print.js
+++ /dev/null
@@ -1,210 +0,0 @@
-/*!
- * Print button for Buttons and DataTables.
- * 2016 SpryMedia Ltd - datatables.net/license
- */
-
-(function( factory ){
-	if ( typeof define === 'function' && define.amd ) {
-		// AMD
-		define( ['jquery', 'datatables.net', 'datatables.net-buttons'], function ( $ ) {
-			return factory( $, window, document );
-		} );
-	}
-	else if ( typeof exports === 'object' ) {
-		// CommonJS
-		module.exports = function (root, $) {
-			if ( ! root ) {
-				root = window;
-			}
-
-			if ( ! $ || ! $.fn.dataTable ) {
-				$ = require('datatables.net')(root, $).$;
-			}
-
-			if ( ! $.fn.dataTable.Buttons ) {
-				require('datatables.net-buttons')(root, $);
-			}
-
-			return factory( $, root, root.document );
-		};
-	}
-	else {
-		// Browser
-		factory( jQuery, window, document );
-	}
-}(function( $, window, document, undefined ) {
-'use strict';
-var DataTable = $.fn.dataTable;
-
-
-var _link = document.createElement( 'a' );
-
-/**
- * Clone link and style tags, taking into account the need to change the source
- * path.
- *
- * @param  {node}     el Element to convert
- */
-var _styleToAbs = function( el ) {
-	var url;
-	var clone = $(el).clone()[0];
-	var linkHost;
-
-	if ( clone.nodeName.toLowerCase() === 'link' ) {
-		clone.href = _relToAbs( clone.href );
-	}
-
-	return clone.outerHTML;
-};
-
-/**
- * Convert a URL from a relative to an absolute address so it will work
- * correctly in the popup window which has no base URL.
- *
- * @param  {string} href URL
- */
-var _relToAbs = function( href ) {
-	// Assign to a link on the original page so the browser will do all the
-	// hard work of figuring out where the file actually is
-	_link.href = href;
-	var linkHost = _link.host;
-
-	// IE doesn't have a trailing slash on the host
-	// Chrome has it on the pathname
-	if ( linkHost.indexOf('/') === -1 && _link.pathname.indexOf('/') !== 0) {
-		linkHost += '/';
-	}
-
-	return _link.protocol+"//"+linkHost+_link.pathname+_link.search;
-};
-
-
-DataTable.ext.buttons.print = {
-	className: 'buttons-print',
-
-	text: function ( dt ) {
-		return dt.i18n( 'buttons.print', 'Print' );
-	},
-
-	action: function ( e, dt, button, config ) {
-		var data = dt.buttons.exportData(
-			$.extend( {decodeEntities: false}, config.exportOptions ) // XSS protection
-		);
-		var exportInfo = dt.buttons.exportInfo( config );
-		var columnClasses = dt
-			.columns( config.exportOptions.columns )
-			.flatten()
-			.map( function (idx) {
-				return dt.settings()[0].aoColumns[dt.column(idx).index()].sClass;
-			} )
-			.toArray();
-
-		var addRow = function ( d, tag ) {
-			var str = '<tr>';
-
-			for ( var i=0, ien=d.length ; i<ien ; i++ ) {
-				// null and undefined aren't useful in the print output
-				var dataOut = d[i] === null || d[i] === undefined ?
-					'' :
-					d[i];
-				var classAttr = columnClasses[i] ?
-					'class="'+columnClasses[i]+'"' :
-					'';
-
-				str += '<'+tag+' '+classAttr+'>'+dataOut+'</'+tag+'>';
-			}
-
-			return str + '</tr>';
-		};
-
-		// Construct a table for printing
-		var html = '<table class="'+dt.table().node().className+'">';
-
-		if ( config.header ) {
-			html += '<thead>'+ addRow( data.header, 'th' ) +'</thead>';
-		}
-
-		html += '<tbody>';
-		for ( var i=0, ien=data.body.length ; i<ien ; i++ ) {
-			html += addRow( data.body[i], 'td' );
-		}
-		html += '</tbody>';
-
-		if ( config.footer && data.footer ) {
-			html += '<tfoot>'+ addRow( data.footer, 'th' ) +'</tfoot>';
-		}
-		html += '</table>';
-
-		// Open a new window for the printable table
-		var win = window.open( '', '' );
-		win.document.close();
-
-		// Inject the title and also a copy of the style and link tags from this
-		// document so the table can retain its base styling. Note that we have
-		// to use string manipulation as IE won't allow elements to be created
-		// in the host document and then appended to the new window.
-		var head = '<title>'+exportInfo.title+'</title>';
-		$('style, link').each( function () {
-			head += _styleToAbs( this );
-		} );
-
-		try {
-			win.document.head.innerHTML = head; // Work around for Edge
-		}
-		catch (e) {
-			$(win.document.head).html( head ); // Old IE
-		}
-
-		// Inject the table and other surrounding information
-		win.document.body.innerHTML =
-			'<h1>'+exportInfo.title+'</h1>'+
-			'<div>'+(exportInfo.messageTop || '')+'</div>'+
-			html+
-			'<div>'+(exportInfo.messageBottom || '')+'</div>';
-
-		$(win.document.body).addClass('dt-print-view');
-
-		$('img', win.document.body).each( function ( i, img ) {
-			img.setAttribute( 'src', _relToAbs( img.getAttribute('src') ) );
-		} );
-
-		if ( config.customize ) {
-			config.customize( win, config, dt );
-		}
-
-		// Allow stylesheets time to load
-		var autoPrint = function () {
-			if ( config.autoPrint ) {
-				win.print(); // blocking - so close will not
-				win.close(); // execute until this is done
-			}
-		};
-
-		if ( navigator.userAgent.match(/Trident\/\d.\d/) ) { // IE needs to call this without a setTimeout
-			autoPrint();
-		}
-		else {
-			win.setTimeout( autoPrint, 1000 );
-		}
-	},
-
-	title: '*',
-
-	messageTop: '*',
-
-	messageBottom: '*',
-
-	exportOptions: {},
-
-	header: true,
-
-	footer: false,
-
-	autoPrint: true,
-
-	customize: null
-};
-
-
-return DataTable.Buttons;
-}));
diff --git a/DataTables/Buttons-1.6.2/js/buttons.print.min.js b/DataTables/Buttons-1.6.2/js/buttons.print.min.js
deleted file mode 100644
index 373295a..0000000
--- a/DataTables/Buttons-1.6.2/js/buttons.print.min.js
+++ /dev/null
@@ -1,9 +0,0 @@
-/*!
- Print button for Buttons and DataTables.
- 2016 SpryMedia Ltd - datatables.net/license
-*/
-(function(c){"function"===typeof define&&define.amd?define(["jquery","datatables.net","datatables.net-buttons"],function(e){return c(e,window,document)}):"object"===typeof exports?module.exports=function(e,a){e||(e=window);a&&a.fn.dataTable||(a=require("datatables.net")(e,a).$);a.fn.dataTable.Buttons||require("datatables.net-buttons")(e,a);return c(a,e,e.document)}:c(jQuery,window,document)})(function(c,e,a,q){var k=c.fn.dataTable,d=a.createElement("a"),p=function(b){d.href=b;b=d.host;-1===b.indexOf("/")&&
-0!==d.pathname.indexOf("/")&&(b+="/");return d.protocol+"//"+b+d.pathname+d.search};k.ext.buttons.print={className:"buttons-print",text:function(b){return b.i18n("buttons.print","Print")},action:function(b,a,d,g){b=a.buttons.exportData(c.extend({decodeEntities:!1},g.exportOptions));d=a.buttons.exportInfo(g);var k=a.columns(g.exportOptions.columns).flatten().map(function(b){return a.settings()[0].aoColumns[a.column(b).index()].sClass}).toArray(),m=function(b,a){for(var d="<tr>",c=0,e=b.length;c<e;c++)d+=
-"<"+a+" "+(k[c]?'class="'+k[c]+'"':"")+">"+(null===b[c]||b[c]===q?"":b[c])+"</"+a+">";return d+"</tr>"},h='<table class="'+a.table().node().className+'">';g.header&&(h+="<thead>"+m(b.header,"th")+"</thead>");h+="<tbody>";for(var n=0,r=b.body.length;n<r;n++)h+=m(b.body[n],"td");h+="</tbody>";g.footer&&b.footer&&(h+="<tfoot>"+m(b.footer,"th")+"</tfoot>");h+="</table>";var f=e.open("","");f.document.close();var l="<title>"+d.title+"</title>";c("style, link").each(function(){var b=l,a=c(this).clone()[0];
-"link"===a.nodeName.toLowerCase()&&(a.href=p(a.href));l=b+a.outerHTML});try{f.document.head.innerHTML=l}catch(t){c(f.document.head).html(l)}f.document.body.innerHTML="<h1>"+d.title+"</h1><div>"+(d.messageTop||"")+"</div>"+h+"<div>"+(d.messageBottom||"")+"</div>";c(f.document.body).addClass("dt-print-view");c("img",f.document.body).each(function(b,a){a.setAttribute("src",p(a.getAttribute("src")))});g.customize&&g.customize(f,g,a);b=function(){g.autoPrint&&(f.print(),f.close())};navigator.userAgent.match(/Trident\/\d.\d/)?
-b():f.setTimeout(b,1E3)},title:"*",messageTop:"*",messageBottom:"*",exportOptions:{},header:!0,footer:!1,autoPrint:!0,customize:null};return k.Buttons});
diff --git a/DataTables/Buttons-1.6.2/js/buttons.semanticui.js b/DataTables/Buttons-1.6.2/js/buttons.semanticui.js
deleted file mode 100644
index e16e1f6..0000000
--- a/DataTables/Buttons-1.6.2/js/buttons.semanticui.js
+++ /dev/null
@@ -1,69 +0,0 @@
-/*! Bootstrap integration for DataTables' Buttons
- * ©2016 SpryMedia Ltd - datatables.net/license
- */
-
-(function( factory ){
-	if ( typeof define === 'function' && define.amd ) {
-		// AMD
-		define( ['jquery', 'datatables.net-se', 'datatables.net-buttons'], function ( $ ) {
-			return factory( $, window, document );
-		} );
-	}
-	else if ( typeof exports === 'object' ) {
-		// CommonJS
-		module.exports = function (root, $) {
-			if ( ! root ) {
-				root = window;
-			}
-
-			if ( ! $ || ! $.fn.dataTable ) {
-				$ = require('datatables.net-se')(root, $).$;
-			}
-
-			if ( ! $.fn.dataTable.Buttons ) {
-				require('datatables.net-buttons')(root, $);
-			}
-
-			return factory( $, root, root.document );
-		};
-	}
-	else {
-		// Browser
-		factory( jQuery, window, document );
-	}
-}(function( $, window, document, undefined ) {
-'use strict';
-var DataTable = $.fn.dataTable;
-
-
-$.extend( true, DataTable.Buttons.defaults, {
-	dom: {
-		container: {
-			className: 'dt-buttons ui basic buttons'
-		},
-		button: {
-			tag: 'button',
-			className: 'ui button'
-		},
-		collection: {
-			tag: 'div',
-			className: 'ui basic vertical buttons'
-		}
-	}
-} );
-
-$(document).on('buttons-popover.dt', function () {
-	var notButton = false;
-	$('.dtsp-panesContainer').each(function() {
-		if(!$(this).is('button')){
-			notButton = true;
-		}
-	});
-	if(notButton){
-		$('.dtsp-panesContainer').removeClass('vertical buttons')
-	}
-});
-
-
-return DataTable.Buttons;
-}));
diff --git a/DataTables/Buttons-1.6.2/js/buttons.semanticui.min.js b/DataTables/Buttons-1.6.2/js/buttons.semanticui.min.js
deleted file mode 100644
index a1d344e..0000000
--- a/DataTables/Buttons-1.6.2/js/buttons.semanticui.min.js
+++ /dev/null
@@ -1,6 +0,0 @@
-/*!
- Bootstrap integration for DataTables' Buttons
- ©2016 SpryMedia Ltd - datatables.net/license
-*/
-(function(b){"function"===typeof define&&define.amd?define(["jquery","datatables.net-se","datatables.net-buttons"],function(a){return b(a,window,document)}):"object"===typeof exports?module.exports=function(a,c){a||(a=window);c&&c.fn.dataTable||(c=require("datatables.net-se")(a,c).$);c.fn.dataTable.Buttons||require("datatables.net-buttons")(a,c);return b(c,a,a.document)}:b(jQuery,window,document)})(function(b,a,c,d){a=b.fn.dataTable;b.extend(!0,a.Buttons.defaults,{dom:{container:{className:"dt-buttons ui basic buttons"},
-button:{tag:"button",className:"ui button"},collection:{tag:"div",className:"ui basic vertical buttons"}}});b(c).on("buttons-popover.dt",function(){var a=!1;b(".dtsp-panesContainer").each(function(){b(this).is("button")||(a=!0)});a&&b(".dtsp-panesContainer").removeClass("vertical buttons")});return a.Buttons});
diff --git a/DataTables/Buttons-1.6.2/js/dataTables.buttons.js b/DataTables/Buttons-1.6.2/js/dataTables.buttons.js
deleted file mode 100644
index 22e7dc7..0000000
--- a/DataTables/Buttons-1.6.2/js/dataTables.buttons.js
+++ /dev/null
@@ -1,2104 +0,0 @@
-/*! Buttons for DataTables 1.6.2
- * ©2016-2020 SpryMedia Ltd - datatables.net/license
- */
-
-(function( factory ){
-	if ( typeof define === 'function' && define.amd ) {
-		// AMD
-		define( ['jquery', 'datatables.net'], function ( $ ) {
-			return factory( $, window, document );
-		} );
-	}
-	else if ( typeof exports === 'object' ) {
-		// CommonJS
-		module.exports = function (root, $) {
-			if ( ! root ) {
-				root = window;
-			}
-
-			if ( ! $ || ! $.fn.dataTable ) {
-				$ = require('datatables.net')(root, $).$;
-			}
-
-			return factory( $, root, root.document );
-		};
-	}
-	else {
-		// Browser
-		factory( jQuery, window, document );
-	}
-}(function( $, window, document, undefined ) {
-'use strict';
-var DataTable = $.fn.dataTable;
-
-
-// Used for namespacing events added to the document by each instance, so they
-// can be removed on destroy
-var _instCounter = 0;
-
-// Button namespacing counter for namespacing events on individual buttons
-var _buttonCounter = 0;
-
-var _dtButtons = DataTable.ext.buttons;
-
-// Allow for jQuery slim
-function _fadeIn(el, duration, fn) {
-	if ($.fn.animate) {
-		el
-			.stop()
-			.fadeIn( duration, fn );
-	}
-	else {
-		el.css('display', 'block');
-
-		if (fn) {
-			fn.call(el);
-		}
-	}
-}
-
-function _fadeOut(el, duration, fn) {
-	if ($.fn.animate) {
-		el
-			.stop()
-			.fadeOut( duration, fn );
-	}
-	else {
-		el.css('display', 'none');
-		
-		if (fn) {
-			fn.call(el);
-		}
-	}
-}
-
-/**
- * [Buttons description]
- * @param {[type]}
- * @param {[type]}
- */
-var Buttons = function( dt, config )
-{
-	// If not created with a `new` keyword then we return a wrapper function that
-	// will take the settings object for a DT. This allows easy use of new instances
-	// with the `layout` option - e.g. `topLeft: $.fn.dataTable.Buttons( ... )`.
-	if ( !(this instanceof Buttons) ) {
-		return function (settings) {
-			return new Buttons( settings, dt ).container();
-		};
-	}
-
-	// If there is no config set it to an empty object
-	if ( typeof( config ) === 'undefined' ) {
-		config = {};	
-	}
-	
-	// Allow a boolean true for defaults
-	if ( config === true ) {
-		config = {};
-	}
-
-	// For easy configuration of buttons an array can be given
-	if ( $.isArray( config ) ) {
-		config = { buttons: config };
-	}
-
-	this.c = $.extend( true, {}, Buttons.defaults, config );
-
-	// Don't want a deep copy for the buttons
-	if ( config.buttons ) {
-		this.c.buttons = config.buttons;
-	}
-
-	this.s = {
-		dt: new DataTable.Api( dt ),
-		buttons: [],
-		listenKeys: '',
-		namespace: 'dtb'+(_instCounter++)
-	};
-
-	this.dom = {
-		container: $('<'+this.c.dom.container.tag+'/>')
-			.addClass( this.c.dom.container.className )
-	};
-
-	this._constructor();
-};
-
-
-$.extend( Buttons.prototype, {
-	/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
-	 * Public methods
-	 */
-
-	/**
-	 * Get the action of a button
-	 * @param  {int|string} Button index
-	 * @return {function}
-	 *//**
-	 * Set the action of a button
-	 * @param  {node} node Button element
-	 * @param  {function} action Function to set
-	 * @return {Buttons} Self for chaining
-	 */
-	action: function ( node, action )
-	{
-		var button = this._nodeToButton( node );
-
-		if ( action === undefined ) {
-			return button.conf.action;
-		}
-
-		button.conf.action = action;
-
-		return this;
-	},
-
-	/**
-	 * Add an active class to the button to make to look active or get current
-	 * active state.
-	 * @param  {node} node Button element
-	 * @param  {boolean} [flag] Enable / disable flag
-	 * @return {Buttons} Self for chaining or boolean for getter
-	 */
-	active: function ( node, flag ) {
-		var button = this._nodeToButton( node );
-		var klass = this.c.dom.button.active;
-		var jqNode = $(button.node);
-
-		if ( flag === undefined ) {
-			return jqNode.hasClass( klass );
-		}
-
-		jqNode.toggleClass( klass, flag === undefined ? true : flag );
-
-		return this;
-	},
-
-	/**
-	 * Add a new button
-	 * @param {object} config Button configuration object, base string name or function
-	 * @param {int|string} [idx] Button index for where to insert the button
-	 * @return {Buttons} Self for chaining
-	 */
-	add: function ( config, idx )
-	{
-		var buttons = this.s.buttons;
-
-		if ( typeof idx === 'string' ) {
-			var split = idx.split('-');
-			var base = this.s;
-
-			for ( var i=0, ien=split.length-1 ; i<ien ; i++ ) {
-				base = base.buttons[ split[i]*1 ];
-			}
-
-			buttons = base.buttons;
-			idx = split[ split.length-1 ]*1;
-		}
-
-		this._expandButton( buttons, config, base !== undefined, idx );
-		this._draw();
-
-		return this;
-	},
-
-	/**
-	 * Get the container node for the buttons
-	 * @return {jQuery} Buttons node
-	 */
-	container: function ()
-	{
-		return this.dom.container;
-	},
-
-	/**
-	 * Disable a button
-	 * @param  {node} node Button node
-	 * @return {Buttons} Self for chaining
-	 */
-	disable: function ( node ) {
-		var button = this._nodeToButton( node );
-
-		$(button.node)
-			.addClass( this.c.dom.button.disabled )
-			.attr('disabled', true);
-
-		return this;
-	},
-
-	/**
-	 * Destroy the instance, cleaning up event handlers and removing DOM
-	 * elements
-	 * @return {Buttons} Self for chaining
-	 */
-	destroy: function ()
-	{
-		// Key event listener
-		$('body').off( 'keyup.'+this.s.namespace );
-
-		// Individual button destroy (so they can remove their own events if
-		// needed). Take a copy as the array is modified by `remove`
-		var buttons = this.s.buttons.slice();
-		var i, ien;
-		
-		for ( i=0, ien=buttons.length ; i<ien ; i++ ) {
-			this.remove( buttons[i].node );
-		}
-
-		// Container
-		this.dom.container.remove();
-
-		// Remove from the settings object collection
-		var buttonInsts = this.s.dt.settings()[0];
-
-		for ( i=0, ien=buttonInsts.length ; i<ien ; i++ ) {
-			if ( buttonInsts.inst === this ) {
-				buttonInsts.splice( i, 1 );
-				break;
-			}
-		}
-
-		return this;
-	},
-
-	/**
-	 * Enable / disable a button
-	 * @param  {node} node Button node
-	 * @param  {boolean} [flag=true] Enable / disable flag
-	 * @return {Buttons} Self for chaining
-	 */
-	enable: function ( node, flag )
-	{
-		if ( flag === false ) {
-			return this.disable( node );
-		}
-
-		var button = this._nodeToButton( node );
-		$(button.node)
-			.removeClass( this.c.dom.button.disabled )
-			.removeAttr('disabled');
-
-		return this;
-	},
-
-	/**
-	 * Get the instance name for the button set selector
-	 * @return {string} Instance name
-	 */
-	name: function ()
-	{
-		return this.c.name;
-	},
-
-	/**
-	 * Get a button's node of the buttons container if no button is given
-	 * @param  {node} [node] Button node
-	 * @return {jQuery} Button element, or container
-	 */
-	node: function ( node )
-	{
-		if ( ! node ) {
-			return this.dom.container;
-		}
-
-		var button = this._nodeToButton( node );
-		return $(button.node);
-	},
-
-	/**
-	 * Set / get a processing class on the selected button
-	 * @param {element} node Triggering button node
-	 * @param  {boolean} flag true to add, false to remove, undefined to get
-	 * @return {boolean|Buttons} Getter value or this if a setter.
-	 */
-	processing: function ( node, flag )
-	{
-		var dt = this.s.dt;
-		var button = this._nodeToButton( node );
-
-		if ( flag === undefined ) {
-			return $(button.node).hasClass( 'processing' );
-		}
-
-		$(button.node).toggleClass( 'processing', flag );
-
-		$(dt.table().node()).triggerHandler( 'buttons-processing.dt', [
-			flag, dt.button( node ), dt, $(node), button.conf
-		] );
-
-		return this;
-	},
-
-	/**
-	 * Remove a button.
-	 * @param  {node} node Button node
-	 * @return {Buttons} Self for chaining
-	 */
-	remove: function ( node )
-	{
-		var button = this._nodeToButton( node );
-		var host = this._nodeToHost( node );
-		var dt = this.s.dt;
-
-		// Remove any child buttons first
-		if ( button.buttons.length ) {
-			for ( var i=button.buttons.length-1 ; i>=0 ; i-- ) {
-				this.remove( button.buttons[i].node );
-			}
-		}
-
-		// Allow the button to remove event handlers, etc
-		if ( button.conf.destroy ) {
-			button.conf.destroy.call( dt.button(node), dt, $(node), button.conf );
-		}
-
-		this._removeKey( button.conf );
-
-		$(button.node).remove();
-
-		var idx = $.inArray( button, host );
-		host.splice( idx, 1 );
-
-		return this;
-	},
-
-	/**
-	 * Get the text for a button
-	 * @param  {int|string} node Button index
-	 * @return {string} Button text
-	 *//**
-	 * Set the text for a button
-	 * @param  {int|string|function} node Button index
-	 * @param  {string} label Text
-	 * @return {Buttons} Self for chaining
-	 */
-	text: function ( node, label )
-	{
-		var button = this._nodeToButton( node );
-		var buttonLiner = this.c.dom.collection.buttonLiner;
-		var linerTag = button.inCollection && buttonLiner && buttonLiner.tag ?
-			buttonLiner.tag :
-			this.c.dom.buttonLiner.tag;
-		var dt = this.s.dt;
-		var jqNode = $(button.node);
-		var text = function ( opt ) {
-			return typeof opt === 'function' ?
-				opt( dt, jqNode, button.conf ) :
-				opt;
-		};
-
-		if ( label === undefined ) {
-			return text( button.conf.text );
-		}
-
-		button.conf.text = label;
-
-		if ( linerTag ) {
-			jqNode.children( linerTag ).html( text(label) );
-		}
-		else {
-			jqNode.html( text(label) );
-		}
-
-		return this;
-	},
-
-
-	/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
-	 * Constructor
-	 */
-
-	/**
-	 * Buttons constructor
-	 * @private
-	 */
-	_constructor: function ()
-	{
-		var that = this;
-		var dt = this.s.dt;
-		var dtSettings = dt.settings()[0];
-		var buttons =  this.c.buttons;
-
-		if ( ! dtSettings._buttons ) {
-			dtSettings._buttons = [];
-		}
-
-		dtSettings._buttons.push( {
-			inst: this,
-			name: this.c.name
-		} );
-
-		for ( var i=0, ien=buttons.length ; i<ien ; i++ ) {
-			this.add( buttons[i] );
-		}
-
-		dt.on( 'destroy', function ( e, settings ) {
-			if ( settings === dtSettings ) {
-				that.destroy();
-			}
-		} );
-
-		// Global key event binding to listen for button keys
-		$('body').on( 'keyup.'+this.s.namespace, function ( e ) {
-			if ( ! document.activeElement || document.activeElement === document.body ) {
-				// SUse a string of characters for fast lookup of if we need to
-				// handle this
-				var character = String.fromCharCode(e.keyCode).toLowerCase();
-
-				if ( that.s.listenKeys.toLowerCase().indexOf( character ) !== -1 ) {
-					that._keypress( character, e );
-				}
-			}
-		} );
-	},
-
-
-	/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
-	 * Private methods
-	 */
-
-	/**
-	 * Add a new button to the key press listener
-	 * @param {object} conf Resolved button configuration object
-	 * @private
-	 */
-	_addKey: function ( conf )
-	{
-		if ( conf.key ) {
-			this.s.listenKeys += $.isPlainObject( conf.key ) ?
-				conf.key.key :
-				conf.key;
-		}
-	},
-
-	/**
-	 * Insert the buttons into the container. Call without parameters!
-	 * @param  {node} [container] Recursive only - Insert point
-	 * @param  {array} [buttons] Recursive only - Buttons array
-	 * @private
-	 */
-	_draw: function ( container, buttons )
-	{
-		if ( ! container ) {
-			container = this.dom.container;
-			buttons = this.s.buttons;
-		}
-
-		container.children().detach();
-
-		for ( var i=0, ien=buttons.length ; i<ien ; i++ ) {
-			container.append( buttons[i].inserter );
-			container.append( ' ' );
-
-			if ( buttons[i].buttons && buttons[i].buttons.length ) {
-				this._draw( buttons[i].collection, buttons[i].buttons );
-			}
-		}
-	},
-
-	/**
-	 * Create buttons from an array of buttons
-	 * @param  {array} attachTo Buttons array to attach to
-	 * @param  {object} button Button definition
-	 * @param  {boolean} inCollection true if the button is in a collection
-	 * @private
-	 */
-	_expandButton: function ( attachTo, button, inCollection, attachPoint )
-	{
-		var dt = this.s.dt;
-		var buttonCounter = 0;
-		var buttons = ! $.isArray( button ) ?
-			[ button ] :
-			button;
-
-		for ( var i=0, ien=buttons.length ; i<ien ; i++ ) {
-			var conf = this._resolveExtends( buttons[i] );
-
-			if ( ! conf ) {
-				continue;
-			}
-
-			// If the configuration is an array, then expand the buttons at this
-			// point
-			if ( $.isArray( conf ) ) {
-				this._expandButton( attachTo, conf, inCollection, attachPoint );
-				continue;
-			}
-
-			var built = this._buildButton( conf, inCollection );
-			if ( ! built ) {
-				continue;
-			}
-
-			if ( attachPoint !== undefined && attachPoint !== null ) {
-				attachTo.splice( attachPoint, 0, built );
-				attachPoint++;
-			}
-			else {
-				attachTo.push( built );
-			}
-
-			if ( built.conf.buttons ) {
-				built.collection = $('<'+this.c.dom.collection.tag+'/>');
-
-				built.conf._collection = built.collection;
-
-				this._expandButton( built.buttons, built.conf.buttons, true, attachPoint );
-			}
-
-			// init call is made here, rather than buildButton as it needs to
-			// be selectable, and for that it needs to be in the buttons array
-			if ( conf.init ) {
-				conf.init.call( dt.button( built.node ), dt, $(built.node), conf );
-			}
-
-			buttonCounter++;
-		}
-	},
-
-	/**
-	 * Create an individual button
-	 * @param  {object} config            Resolved button configuration
-	 * @param  {boolean} inCollection `true` if a collection button
-	 * @return {jQuery} Created button node (jQuery)
-	 * @private
-	 */
-	_buildButton: function ( config, inCollection )
-	{
-		var buttonDom = this.c.dom.button;
-		var linerDom = this.c.dom.buttonLiner;
-		var collectionDom = this.c.dom.collection;
-		var dt = this.s.dt;
-		var text = function ( opt ) {
-			return typeof opt === 'function' ?
-				opt( dt, button, config ) :
-				opt;
-		};
-
-		if ( inCollection && collectionDom.button ) {
-			buttonDom = collectionDom.button;
-		}
-
-		if ( inCollection && collectionDom.buttonLiner ) {
-			linerDom = collectionDom.buttonLiner;
-		}
-
-		// Make sure that the button is available based on whatever requirements
-		// it has. For example, Flash buttons require Flash
-		if ( config.available && ! config.available( dt, config ) ) {
-			return false;
-		}
-
-		var action = function ( e, dt, button, config ) {
-			config.action.call( dt.button( button ), e, dt, button, config );
-
-			$(dt.table().node()).triggerHandler( 'buttons-action.dt', [
-				dt.button( button ), dt, button, config 
-			] );
-		};
-
-		var tag = config.tag || buttonDom.tag;
-		var clickBlurs = config.clickBlurs === undefined ? true : config.clickBlurs
-		var button = $('<'+tag+'/>')
-			.addClass( buttonDom.className )
-			.attr( 'tabindex', this.s.dt.settings()[0].iTabIndex )
-			.attr( 'aria-controls', this.s.dt.table().node().id )
-			.on( 'click.dtb', function (e) {
-				e.preventDefault();
-
-				if ( ! button.hasClass( buttonDom.disabled ) && config.action ) {
-					action( e, dt, button, config );
-				}
-				if( clickBlurs ) {
-					button.trigger('blur');
-				}
-			} )
-			.on( 'keyup.dtb', function (e) {
-				if ( e.keyCode === 13 ) {
-					if ( ! button.hasClass( buttonDom.disabled ) && config.action ) {
-						action( e, dt, button, config );
-					}
-				}
-			} );
-
-		// Make `a` tags act like a link
-		if ( tag.toLowerCase() === 'a' ) {
-			button.attr( 'href', '#' );
-		}
-
-		// Button tags should have `type=button` so they don't have any default behaviour
-		if ( tag.toLowerCase() === 'button' ) {
-			button.attr( 'type', 'button' );
-		}
-
-		if ( linerDom.tag ) {
-			var liner = $('<'+linerDom.tag+'/>')
-				.html( text( config.text ) )
-				.addClass( linerDom.className );
-
-			if ( linerDom.tag.toLowerCase() === 'a' ) {
-				liner.attr( 'href', '#' );
-			}
-
-			button.append( liner );
-		}
-		else {
-			button.html( text( config.text ) );
-		}
-
-		if ( config.enabled === false ) {
-			button.addClass( buttonDom.disabled );
-		}
-
-		if ( config.className ) {
-			button.addClass( config.className );
-		}
-
-		if ( config.titleAttr ) {
-			button.attr( 'title', text( config.titleAttr ) );
-		}
-
-		if ( config.attr ) {
-			button.attr( config.attr );
-		}
-
-		if ( ! config.namespace ) {
-			config.namespace = '.dt-button-'+(_buttonCounter++);
-		}
-
-		var buttonContainer = this.c.dom.buttonContainer;
-		var inserter;
-		if ( buttonContainer && buttonContainer.tag ) {
-			inserter = $('<'+buttonContainer.tag+'/>')
-				.addClass( buttonContainer.className )
-				.append( button );
-		}
-		else {
-			inserter = button;
-		}
-
-		this._addKey( config );
-
-		// Style integration callback for DOM manipulation
-		// Note that this is _not_ documented. It is currently
-		// for style integration only
-		if( this.c.buttonCreated ) {
-			inserter = this.c.buttonCreated( config, inserter );
-		}
-
-		return {
-			conf:         config,
-			node:         button.get(0),
-			inserter:     inserter,
-			buttons:      [],
-			inCollection: inCollection,
-			collection:   null
-		};
-	},
-
-	/**
-	 * Get the button object from a node (recursive)
-	 * @param  {node} node Button node
-	 * @param  {array} [buttons] Button array, uses base if not defined
-	 * @return {object} Button object
-	 * @private
-	 */
-	_nodeToButton: function ( node, buttons )
-	{
-		if ( ! buttons ) {
-			buttons = this.s.buttons;
-		}
-
-		for ( var i=0, ien=buttons.length ; i<ien ; i++ ) {
-			if ( buttons[i].node === node ) {
-				return buttons[i];
-			}
-
-			if ( buttons[i].buttons.length ) {
-				var ret = this._nodeToButton( node, buttons[i].buttons );
-
-				if ( ret ) {
-					return ret;
-				}
-			}
-		}
-	},
-
-	/**
-	 * Get container array for a button from a button node (recursive)
-	 * @param  {node} node Button node
-	 * @param  {array} [buttons] Button array, uses base if not defined
-	 * @return {array} Button's host array
-	 * @private
-	 */
-	_nodeToHost: function ( node, buttons )
-	{
-		if ( ! buttons ) {
-			buttons = this.s.buttons;
-		}
-
-		for ( var i=0, ien=buttons.length ; i<ien ; i++ ) {
-			if ( buttons[i].node === node ) {
-				return buttons;
-			}
-
-			if ( buttons[i].buttons.length ) {
-				var ret = this._nodeToHost( node, buttons[i].buttons );
-
-				if ( ret ) {
-					return ret;
-				}
-			}
-		}
-	},
-
-	/**
-	 * Handle a key press - determine if any button's key configured matches
-	 * what was typed and trigger the action if so.
-	 * @param  {string} character The character pressed
-	 * @param  {object} e Key event that triggered this call
-	 * @private
-	 */
-	_keypress: function ( character, e )
-	{
-		// Check if this button press already activated on another instance of Buttons
-		if ( e._buttonsHandled ) {
-			return;
-		}
-
-		var run = function ( conf, node ) {
-			if ( ! conf.key ) {
-				return;
-			}
-
-			if ( conf.key === character ) {
-				e._buttonsHandled = true;
-				$(node).click();
-			}
-			else if ( $.isPlainObject( conf.key ) ) {
-				if ( conf.key.key !== character ) {
-					return;
-				}
-
-				if ( conf.key.shiftKey && ! e.shiftKey ) {
-					return;
-				}
-
-				if ( conf.key.altKey && ! e.altKey ) {
-					return;
-				}
-
-				if ( conf.key.ctrlKey && ! e.ctrlKey ) {
-					return;
-				}
-
-				if ( conf.key.metaKey && ! e.metaKey ) {
-					return;
-				}
-
-				// Made it this far - it is good
-				e._buttonsHandled = true;
-				$(node).click();
-			}
-		};
-
-		var recurse = function ( a ) {
-			for ( var i=0, ien=a.length ; i<ien ; i++ ) {
-				run( a[i].conf, a[i].node );
-
-				if ( a[i].buttons.length ) {
-					recurse( a[i].buttons );
-				}
-			}
-		};
-
-		recurse( this.s.buttons );
-	},
-
-	/**
-	 * Remove a key from the key listener for this instance (to be used when a
-	 * button is removed)
-	 * @param  {object} conf Button configuration
-	 * @private
-	 */
-	_removeKey: function ( conf )
-	{
-		if ( conf.key ) {
-			var character = $.isPlainObject( conf.key ) ?
-				conf.key.key :
-				conf.key;
-
-			// Remove only one character, as multiple buttons could have the
-			// same listening key
-			var a = this.s.listenKeys.split('');
-			var idx = $.inArray( character, a );
-			a.splice( idx, 1 );
-			this.s.listenKeys = a.join('');
-		}
-	},
-
-	/**
-	 * Resolve a button configuration
-	 * @param  {string|function|object} conf Button config to resolve
-	 * @return {object} Button configuration
-	 * @private
-	 */
-	_resolveExtends: function ( conf )
-	{
-		var dt = this.s.dt;
-		var i, ien;
-		var toConfObject = function ( base ) {
-			var loop = 0;
-
-			// Loop until we have resolved to a button configuration, or an
-			// array of button configurations (which will be iterated
-			// separately)
-			while ( ! $.isPlainObject(base) && ! $.isArray(base) ) {
-				if ( base === undefined ) {
-					return;
-				}
-
-				if ( typeof base === 'function' ) {
-					base = base( dt, conf );
-
-					if ( ! base ) {
-						return false;
-					}
-				}
-				else if ( typeof base === 'string' ) {
-					if ( ! _dtButtons[ base ] ) {
-						throw 'Unknown button type: '+base;
-					}
-
-					base = _dtButtons[ base ];
-				}
-
-				loop++;
-				if ( loop > 30 ) {
-					// Protect against misconfiguration killing the browser
-					throw 'Buttons: Too many iterations';
-				}
-			}
-
-			return $.isArray( base ) ?
-				base :
-				$.extend( {}, base );
-		};
-
-		conf = toConfObject( conf );
-
-		while ( conf && conf.extend ) {
-			// Use `toConfObject` in case the button definition being extended
-			// is itself a string or a function
-			if ( ! _dtButtons[ conf.extend ] ) {
-				throw 'Cannot extend unknown button type: '+conf.extend;
-			}
-
-			var objArray = toConfObject( _dtButtons[ conf.extend ] );
-			if ( $.isArray( objArray ) ) {
-				return objArray;
-			}
-			else if ( ! objArray ) {
-				// This is a little brutal as it might be possible to have a
-				// valid button without the extend, but if there is no extend
-				// then the host button would be acting in an undefined state
-				return false;
-			}
-
-			// Stash the current class name
-			var originalClassName = objArray.className;
-
-			conf = $.extend( {}, objArray, conf );
-
-			// The extend will have overwritten the original class name if the
-			// `conf` object also assigned a class, but we want to concatenate
-			// them so they are list that is combined from all extended buttons
-			if ( originalClassName && conf.className !== originalClassName ) {
-				conf.className = originalClassName+' '+conf.className;
-			}
-
-			// Buttons to be added to a collection  -gives the ability to define
-			// if buttons should be added to the start or end of a collection
-			var postfixButtons = conf.postfixButtons;
-			if ( postfixButtons ) {
-				if ( ! conf.buttons ) {
-					conf.buttons = [];
-				}
-
-				for ( i=0, ien=postfixButtons.length ; i<ien ; i++ ) {
-					conf.buttons.push( postfixButtons[i] );
-				}
-
-				conf.postfixButtons = null;
-			}
-
-			var prefixButtons = conf.prefixButtons;
-			if ( prefixButtons ) {
-				if ( ! conf.buttons ) {
-					conf.buttons = [];
-				}
-
-				for ( i=0, ien=prefixButtons.length ; i<ien ; i++ ) {
-					conf.buttons.splice( i, 0, prefixButtons[i] );
-				}
-
-				conf.prefixButtons = null;
-			}
-
-			// Although we want the `conf` object to overwrite almost all of
-			// the properties of the object being extended, the `extend`
-			// property should come from the object being extended
-			conf.extend = objArray.extend;
-		}
-
-		return conf;
-	},
-
-	/**
-	 * Display (and replace if there is an existing one) a popover attached to a button
-	 * @param {string|node} content Content to show
-	 * @param {DataTable.Api} hostButton DT API instance of the button
-	 * @param {object} inOpts Options (see object below for all options)
-	 */
-	_popover: function ( content, hostButton, inOpts ) {
-		var dt = hostButton;
-		var buttonsSettings = this.c;
-		var options = $.extend( {
-			align: 'button-left', // button-right, dt-container
-			autoClose: false,
-			background: true,
-			backgroundClassName: 'dt-button-background',
-			contentClassName: buttonsSettings.dom.collection.className,
-			collectionLayout: '',
-			collectionTitle: '',
-			dropup: false,
-			fade: 400,
-			rightAlignClassName: 'dt-button-right',
-			tag: buttonsSettings.dom.collection.tag
-		}, inOpts );
-		var hostNode = hostButton.node();
-
-		var close = function () {
-			_fadeOut(
-				$('.dt-button-collection'),
-				options.fade,
-				function () {
-					$(this).detach();
-				}
-			);
-
-			$(dt.buttons( '[aria-haspopup="true"][aria-expanded="true"]' ).nodes())
-				.attr('aria-expanded', 'false');
-
-			$('div.dt-button-background').off( 'click.dtb-collection' );
-			Buttons.background( false, options.backgroundClassName, options.fade, hostNode );
-
-			$('body').off( '.dtb-collection' );
-			dt.off( 'buttons-action.b-internal' );
-		};
-
-		if (content === false) {
-			close();
-		}
-
-		var existingExpanded = $(dt.buttons( '[aria-haspopup="true"][aria-expanded="true"]' ).nodes());
-		if ( existingExpanded.length ) {
-			hostNode = existingExpanded.eq(0);
-
-			close();
-		}
-
-		var display = $('<div/>')
-			.addClass('dt-button-collection')
-			.addClass(options.collectionLayout)
-			.css('display', 'none');
-
-		content = $(content)
-			.addClass(options.contentClassName)
-			.attr('role', 'menu')
-			.appendTo(display);
-
-		hostNode.attr( 'aria-expanded', 'true' );
-
-		if ( hostNode.parents('body')[0] !== document.body ) {
-			hostNode = document.body.lastChild;
-		}
-
-		if ( options.collectionTitle ) {
-			display.prepend('<div class="dt-button-collection-title">'+options.collectionTitle+'</div>');
-		}
-
-		_fadeIn( display.insertAfter( hostNode ) );
-
-		var tableContainer = $( hostButton.table().container() );
-		var position = display.css( 'position' );
-
-		if ( options.align === 'dt-container' ) {
-			hostNode = hostNode.parent();
-			display.css('width', tableContainer.width());
-		}
-
-		if ( position === 'absolute' ) {
-
-			var hostPosition = hostNode.position();
-
-			display.css( {
-				top: hostPosition.top + hostNode.outerHeight(),
-				left: hostPosition.left
-			} );
-
-			// calculate overflow when positioned beneath
-			var collectionHeight = display.outerHeight();
-			var collectionWidth = display.outerWidth();
-			var tableBottom = tableContainer.offset().top + tableContainer.height();
-			var listBottom = hostPosition.top + hostNode.outerHeight() + collectionHeight;
-			var bottomOverflow = listBottom - tableBottom;
-
-			// calculate overflow when positioned above
-			var listTop = hostPosition.top - collectionHeight;
-			var tableTop = tableContainer.offset().top;
-			var topOverflow = tableTop - listTop;
-
-			// if bottom overflow is larger, move to the top because it fits better, or if dropup is requested
-			var moveTop = hostPosition.top - collectionHeight - 5;
-			if ( (bottomOverflow > topOverflow || options.dropup) && -moveTop < tableTop ) {
-				display.css( 'top', moveTop);
-			}
-
-			// Get the size of the container (left and width - and thus also right)
-			var tableLeft = tableContainer.offset().left;
-			var tableWidth = tableContainer.width();
-			var tableRight = tableLeft + tableWidth;
-
-			// Get the size of the popover (left and width - and ...)
-			var popoverLeft = display.offset().left;
-			var popoverWidth = display.width();
-			var popoverRight = popoverLeft + popoverWidth;
-
-			// Get the size of the host buttons (left and width - and ...)
-			var buttonsLeft = hostNode.offset().left;
-			var buttonsWidth = hostNode.outerWidth()
-			var buttonsRight = buttonsLeft + buttonsWidth;
-			
-			// You've then got all the numbers you need to do some calculations and if statements,
-			//  so we can do some quick JS maths and apply it only once
-			// If it has the right align class OR the buttons are right aligned,
-			//  then calculate left position for the popover to align the popover to the right hand
-			//  side of the button - check to see if the left of the popover is inside the table container.
-			// If not, move the popover so it is, but not more than it means that the popover is to the right of the table container
-			var popoverShuffle = 0;
-			if ( display.hasClass( options.rightAlignClassName ) || options.align === 'button-right' ) {
-				popoverShuffle = buttonsRight - popoverRight;
-				if(tableLeft > (popoverLeft + popoverShuffle)){
-					var leftGap = tableLeft - (popoverLeft + popoverShuffle);
-					var rightGap = tableRight - (popoverRight + popoverShuffle);
-	
-					if(leftGap > rightGap){
-						popoverShuffle += rightGap; 
-					}
-					else {
-						popoverShuffle += leftGap;
-					}
-				}
-			}
-			// else attempt to left align the popover to the button. Similar to above, if the popover's right goes past the table container's right,
-			//  then move it back, but not so much that it goes past the left of the table container
-			else {
-				popoverShuffle = tableLeft - popoverLeft;
-
-				if(tableRight < (popoverRight + popoverShuffle)){
-					var leftGap = tableLeft - (popoverLeft + popoverShuffle);
-					var rightGap = tableRight - (popoverRight + popoverShuffle);
-
-					if(leftGap > rightGap ){
-						popoverShuffle += rightGap;
-					}
-					else {
-						popoverShuffle += leftGap;
-					}
-
-				}
-			}
-
-			display.css('left', display.position().left + popoverShuffle);
-			
-		}
-		else {
-			// Fix position - centre on screen
-			var top = display.height() / 2;
-			if ( top > $(window).height() / 2 ) {
-				top = $(window).height() / 2;
-			}
-
-			display.css( 'marginTop', top*-1 );
-		}
-
-		if ( options.background ) {
-			Buttons.background( true, options.backgroundClassName, options.fade, hostNode );
-		}
-
-		// This is bonkers, but if we don't have a click listener on the
-		// background element, iOS Safari will ignore the body click
-		// listener below. An empty function here is all that is
-		// required to make it work...
-		$('div.dt-button-background').on( 'click.dtb-collection', function () {} );
-
-		$('body')
-			.on( 'click.dtb-collection', function (e) {
-				// andSelf is deprecated in jQ1.8, but we want 1.7 compat
-				var back = $.fn.addBack ? 'addBack' : 'andSelf';
-
-				if ( ! $(e.target).parents()[back]().filter( content ).length ) {
-					close();
-				}
-			} )
-			.on( 'keyup.dtb-collection', function (e) {
-				if ( e.keyCode === 27 ) {
-					close();
-				}
-			} );
-
-		if ( options.autoClose ) {
-			setTimeout( function () {
-				dt.on( 'buttons-action.b-internal', function (e, btn, dt, node) {
-					if ( node[0] === hostNode[0] ) {
-						return;
-					}
-					close();
-				} );
-			}, 0);
-		}
-
-		$(display).trigger('buttons-popover.dt');
-	}
-} );
-
-
-
-/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- * Statics
- */
-
-/**
- * Show / hide a background layer behind a collection
- * @param  {boolean} Flag to indicate if the background should be shown or
- *   hidden 
- * @param  {string} Class to assign to the background
- * @static
- */
-Buttons.background = function ( show, className, fade, insertPoint ) {
-	if ( fade === undefined ) {
-		fade = 400;
-	}
-	if ( ! insertPoint ) {
-		insertPoint = document.body;
-	}
-
-	if ( show ) {
-		_fadeIn(
-			$('<div/>')
-				.addClass( className )
-				.css( 'display', 'none' )
-				.insertAfter( insertPoint ),
-			fade
-		);
-	}
-	else {
-		_fadeOut(
-			$('div.'+className),
-			fade,
-			function () {
-				$(this)
-					.removeClass( className )
-					.remove();
-			}
-		);
-	}
-};
-
-/**
- * Instance selector - select Buttons instances based on an instance selector
- * value from the buttons assigned to a DataTable. This is only useful if
- * multiple instances are attached to a DataTable.
- * @param  {string|int|array} Instance selector - see `instance-selector`
- *   documentation on the DataTables site
- * @param  {array} Button instance array that was attached to the DataTables
- *   settings object
- * @return {array} Buttons instances
- * @static
- */
-Buttons.instanceSelector = function ( group, buttons )
-{
-	if ( group === undefined || group === null ) {
-		return $.map( buttons, function ( v ) {
-			return v.inst;
-		} );
-	}
-
-	var ret = [];
-	var names = $.map( buttons, function ( v ) {
-		return v.name;
-	} );
-
-	// Flatten the group selector into an array of single options
-	var process = function ( input ) {
-		if ( $.isArray( input ) ) {
-			for ( var i=0, ien=input.length ; i<ien ; i++ ) {
-				process( input[i] );
-			}
-			return;
-		}
-
-		if ( typeof input === 'string' ) {
-			if ( input.indexOf( ',' ) !== -1 ) {
-				// String selector, list of names
-				process( input.split(',') );
-			}
-			else {
-				// String selector individual name
-				var idx = $.inArray( $.trim(input), names );
-
-				if ( idx !== -1 ) {
-					ret.push( buttons[ idx ].inst );
-				}
-			}
-		}
-		else if ( typeof input === 'number' ) {
-			// Index selector
-			ret.push( buttons[ input ].inst );
-		}
-	};
-	
-	process( group );
-
-	return ret;
-};
-
-/**
- * Button selector - select one or more buttons from a selector input so some
- * operation can be performed on them.
- * @param  {array} Button instances array that the selector should operate on
- * @param  {string|int|node|jQuery|array} Button selector - see
- *   `button-selector` documentation on the DataTables site
- * @return {array} Array of objects containing `inst` and `idx` properties of
- *   the selected buttons so you know which instance each button belongs to.
- * @static
- */
-Buttons.buttonSelector = function ( insts, selector )
-{
-	var ret = [];
-	var nodeBuilder = function ( a, buttons, baseIdx ) {
-		var button;
-		var idx;
-
-		for ( var i=0, ien=buttons.length ; i<ien ; i++ ) {
-			button = buttons[i];
-
-			if ( button ) {
-				idx = baseIdx !== undefined ?
-					baseIdx+i :
-					i+'';
-
-				a.push( {
-					node: button.node,
-					name: button.conf.name,
-					idx:  idx
-				} );
-
-				if ( button.buttons ) {
-					nodeBuilder( a, button.buttons, idx+'-' );
-				}
-			}
-		}
-	};
-
-	var run = function ( selector, inst ) {
-		var i, ien;
-		var buttons = [];
-		nodeBuilder( buttons, inst.s.buttons );
-
-		var nodes = $.map( buttons, function (v) {
-			return v.node;
-		} );
-
-		if ( $.isArray( selector ) || selector instanceof $ ) {
-			for ( i=0, ien=selector.length ; i<ien ; i++ ) {
-				run( selector[i], inst );
-			}
-			return;
-		}
-
-		if ( selector === null || selector === undefined || selector === '*' ) {
-			// Select all
-			for ( i=0, ien=buttons.length ; i<ien ; i++ ) {
-				ret.push( {
-					inst: inst,
-					node: buttons[i].node
-				} );
-			}
-		}
-		else if ( typeof selector === 'number' ) {
-			// Main button index selector
-			ret.push( {
-				inst: inst,
-				node: inst.s.buttons[ selector ].node
-			} );
-		}
-		else if ( typeof selector === 'string' ) {
-			if ( selector.indexOf( ',' ) !== -1 ) {
-				// Split
-				var a = selector.split(',');
-
-				for ( i=0, ien=a.length ; i<ien ; i++ ) {
-					run( $.trim(a[i]), inst );
-				}
-			}
-			else if ( selector.match( /^\d+(\-\d+)*$/ ) ) {
-				// Sub-button index selector
-				var indexes = $.map( buttons, function (v) {
-					return v.idx;
-				} );
-
-				ret.push( {
-					inst: inst,
-					node: buttons[ $.inArray( selector, indexes ) ].node
-				} );
-			}
-			else if ( selector.indexOf( ':name' ) !== -1 ) {
-				// Button name selector
-				var name = selector.replace( ':name', '' );
-
-				for ( i=0, ien=buttons.length ; i<ien ; i++ ) {
-					if ( buttons[i].name === name ) {
-						ret.push( {
-							inst: inst,
-							node: buttons[i].node
-						} );
-					}
-				}
-			}
-			else {
-				// jQuery selector on the nodes
-				$( nodes ).filter( selector ).each( function () {
-					ret.push( {
-						inst: inst,
-						node: this
-					} );
-				} );
-			}
-		}
-		else if ( typeof selector === 'object' && selector.nodeName ) {
-			// Node selector
-			var idx = $.inArray( selector, nodes );
-
-			if ( idx !== -1 ) {
-				ret.push( {
-					inst: inst,
-					node: nodes[ idx ]
-				} );
-			}
-		}
-	};
-
-
-	for ( var i=0, ien=insts.length ; i<ien ; i++ ) {
-		var inst = insts[i];
-
-		run( selector, inst );
-	}
-
-	return ret;
-};
-
-
-/**
- * Buttons defaults. For full documentation, please refer to the docs/option
- * directory or the DataTables site.
- * @type {Object}
- * @static
- */
-Buttons.defaults = {
-	buttons: [ 'copy', 'excel', 'csv', 'pdf', 'print' ],
-	name: 'main',
-	tabIndex: 0,
-	dom: {
-		container: {
-			tag: 'div',
-			className: 'dt-buttons'
-		},
-		collection: {
-			tag: 'div',
-			className: ''
-		},
-		button: {
-			// Flash buttons will not work with `<button>` in IE - it has to be `<a>`
-			tag: 'ActiveXObject' in window ?
-				'a' :
-				'button',
-			className: 'dt-button',
-			active: 'active',
-			disabled: 'disabled'
-		},
-		buttonLiner: {
-			tag: 'span',
-			className: ''
-		}
-	}
-};
-
-/**
- * Version information
- * @type {string}
- * @static
- */
-Buttons.version = '1.6.2';
-
-
-$.extend( _dtButtons, {
-	collection: {
-		text: function ( dt ) {
-			return dt.i18n( 'buttons.collection', 'Collection' );
-		},
-		className: 'buttons-collection',
-		init: function ( dt, button, config ) {
-			button.attr( 'aria-expanded', false );
-		},
-		action: function ( e, dt, button, config ) {
-			e.stopPropagation();
-
-			if ( config._collection.parents('body').length ) {
-				this.popover(false, config);
-			}
-			else {
-				this.popover(config._collection, config);
-			}
-		},
-		attr: {
-			'aria-haspopup': true
-		}
-		// Also the popover options, defined in Buttons.popover
-	},
-	copy: function ( dt, conf ) {
-		if ( _dtButtons.copyHtml5 ) {
-			return 'copyHtml5';
-		}
-		if ( _dtButtons.copyFlash && _dtButtons.copyFlash.available( dt, conf ) ) {
-			return 'copyFlash';
-		}
-	},
-	csv: function ( dt, conf ) {
-		// Common option that will use the HTML5 or Flash export buttons
-		if ( _dtButtons.csvHtml5 && _dtButtons.csvHtml5.available( dt, conf ) ) {
-			return 'csvHtml5';
-		}
-		if ( _dtButtons.csvFlash && _dtButtons.csvFlash.available( dt, conf ) ) {
-			return 'csvFlash';
-		}
-	},
-	excel: function ( dt, conf ) {
-		// Common option that will use the HTML5 or Flash export buttons
-		if ( _dtButtons.excelHtml5 && _dtButtons.excelHtml5.available( dt, conf ) ) {
-			return 'excelHtml5';
-		}
-		if ( _dtButtons.excelFlash && _dtButtons.excelFlash.available( dt, conf ) ) {
-			return 'excelFlash';
-		}
-	},
-	pdf: function ( dt, conf ) {
-		// Common option that will use the HTML5 or Flash export buttons
-		if ( _dtButtons.pdfHtml5 && _dtButtons.pdfHtml5.available( dt, conf ) ) {
-			return 'pdfHtml5';
-		}
-		if ( _dtButtons.pdfFlash && _dtButtons.pdfFlash.available( dt, conf ) ) {
-			return 'pdfFlash';
-		}
-	},
-	pageLength: function ( dt ) {
-		var lengthMenu = dt.settings()[0].aLengthMenu;
-		var vals = $.isArray( lengthMenu[0] ) ? lengthMenu[0] : lengthMenu;
-		var lang = $.isArray( lengthMenu[0] ) ? lengthMenu[1] : lengthMenu;
-		var text = function ( dt ) {
-			return dt.i18n( 'buttons.pageLength', {
-				"-1": 'Show all rows',
-				_:    'Show %d rows'
-			}, dt.page.len() );
-		};
-
-		return {
-			extend: 'collection',
-			text: text,
-			className: 'buttons-page-length',
-			autoClose: true,
-			buttons: $.map( vals, function ( val, i ) {
-				return {
-					text: lang[i],
-					className: 'button-page-length',
-					action: function ( e, dt ) {
-						dt.page.len( val ).draw();
-					},
-					init: function ( dt, node, conf ) {
-						var that = this;
-						var fn = function () {
-							that.active( dt.page.len() === val );
-						};
-
-						dt.on( 'length.dt'+conf.namespace, fn );
-						fn();
-					},
-					destroy: function ( dt, node, conf ) {
-						dt.off( 'length.dt'+conf.namespace );
-					}
-				};
-			} ),
-			init: function ( dt, node, conf ) {
-				var that = this;
-				dt.on( 'length.dt'+conf.namespace, function () {
-					that.text( conf.text );
-				} );
-			},
-			destroy: function ( dt, node, conf ) {
-				dt.off( 'length.dt'+conf.namespace );
-			}
-		};
-	}
-} );
-
-
-/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- * DataTables API
- *
- * For complete documentation, please refer to the docs/api directory or the
- * DataTables site
- */
-
-// Buttons group and individual button selector
-DataTable.Api.register( 'buttons()', function ( group, selector ) {
-	// Argument shifting
-	if ( selector === undefined ) {
-		selector = group;
-		group = undefined;
-	}
-
-	this.selector.buttonGroup = group;
-
-	var res = this.iterator( true, 'table', function ( ctx ) {
-		if ( ctx._buttons ) {
-			return Buttons.buttonSelector(
-				Buttons.instanceSelector( group, ctx._buttons ),
-				selector
-			);
-		}
-	}, true );
-
-	res._groupSelector = group;
-	return res;
-} );
-
-// Individual button selector
-DataTable.Api.register( 'button()', function ( group, selector ) {
-	// just run buttons() and truncate
-	var buttons = this.buttons( group, selector );
-
-	if ( buttons.length > 1 ) {
-		buttons.splice( 1, buttons.length );
-	}
-
-	return buttons;
-} );
-
-// Active buttons
-DataTable.Api.registerPlural( 'buttons().active()', 'button().active()', function ( flag ) {
-	if ( flag === undefined ) {
-		return this.map( function ( set ) {
-			return set.inst.active( set.node );
-		} );
-	}
-
-	return this.each( function ( set ) {
-		set.inst.active( set.node, flag );
-	} );
-} );
-
-// Get / set button action
-DataTable.Api.registerPlural( 'buttons().action()', 'button().action()', function ( action ) {
-	if ( action === undefined ) {
-		return this.map( function ( set ) {
-			return set.inst.action( set.node );
-		} );
-	}
-
-	return this.each( function ( set ) {
-		set.inst.action( set.node, action );
-	} );
-} );
-
-// Enable / disable buttons
-DataTable.Api.register( ['buttons().enable()', 'button().enable()'], function ( flag ) {
-	return this.each( function ( set ) {
-		set.inst.enable( set.node, flag );
-	} );
-} );
-
-// Disable buttons
-DataTable.Api.register( ['buttons().disable()', 'button().disable()'], function () {
-	return this.each( function ( set ) {
-		set.inst.disable( set.node );
-	} );
-} );
-
-// Get button nodes
-DataTable.Api.registerPlural( 'buttons().nodes()', 'button().node()', function () {
-	var jq = $();
-
-	// jQuery will automatically reduce duplicates to a single entry
-	$( this.each( function ( set ) {
-		jq = jq.add( set.inst.node( set.node ) );
-	} ) );
-
-	return jq;
-} );
-
-// Get / set button processing state
-DataTable.Api.registerPlural( 'buttons().processing()', 'button().processing()', function ( flag ) {
-	if ( flag === undefined ) {
-		return this.map( function ( set ) {
-			return set.inst.processing( set.node );
-		} );
-	}
-
-	return this.each( function ( set ) {
-		set.inst.processing( set.node, flag );
-	} );
-} );
-
-// Get / set button text (i.e. the button labels)
-DataTable.Api.registerPlural( 'buttons().text()', 'button().text()', function ( label ) {
-	if ( label === undefined ) {
-		return this.map( function ( set ) {
-			return set.inst.text( set.node );
-		} );
-	}
-
-	return this.each( function ( set ) {
-		set.inst.text( set.node, label );
-	} );
-} );
-
-// Trigger a button's action
-DataTable.Api.registerPlural( 'buttons().trigger()', 'button().trigger()', function () {
-	return this.each( function ( set ) {
-		set.inst.node( set.node ).trigger( 'click' );
-	} );
-} );
-
-// Button resolver to the popover
-DataTable.Api.register( 'button().popover()', function (content, options) {
-	return this.map( function ( set ) {
-		return set.inst._popover( content, this.button(this[0].node), options );
-	} );
-} );
-
-// Get the container elements
-DataTable.Api.register( 'buttons().containers()', function () {
-	var jq = $();
-	var groupSelector = this._groupSelector;
-
-	// We need to use the group selector directly, since if there are no buttons
-	// the result set will be empty
-	this.iterator( true, 'table', function ( ctx ) {
-		if ( ctx._buttons ) {
-			var insts = Buttons.instanceSelector( groupSelector, ctx._buttons );
-
-			for ( var i=0, ien=insts.length ; i<ien ; i++ ) {
-				jq = jq.add( insts[i].container() );
-			}
-		}
-	} );
-
-	return jq;
-} );
-
-DataTable.Api.register( 'buttons().container()', function () {
-	// API level of nesting is `buttons()` so we can zip into the containers method
-	return this.containers().eq(0);
-} );
-
-// Add a new button
-DataTable.Api.register( 'button().add()', function ( idx, conf ) {
-	var ctx = this.context;
-
-	// Don't use `this` as it could be empty - select the instances directly
-	if ( ctx.length ) {
-		var inst = Buttons.instanceSelector( this._groupSelector, ctx[0]._buttons );
-
-		if ( inst.length ) {
-			inst[0].add( conf, idx );
-		}
-	}
-
-	return this.button( this._groupSelector, idx );
-} );
-
-// Destroy the button sets selected
-DataTable.Api.register( 'buttons().destroy()', function () {
-	this.pluck( 'inst' ).unique().each( function ( inst ) {
-		inst.destroy();
-	} );
-
-	return this;
-} );
-
-// Remove a button
-DataTable.Api.registerPlural( 'buttons().remove()', 'buttons().remove()', function () {
-	this.each( function ( set ) {
-		set.inst.remove( set.node );
-	} );
-
-	return this;
-} );
-
-// Information box that can be used by buttons
-var _infoTimer;
-DataTable.Api.register( 'buttons.info()', function ( title, message, time ) {
-	var that = this;
-
-	if ( title === false ) {
-		this.off('destroy.btn-info');
-		_fadeOut(
-			$('#datatables_buttons_info'),
-			400,
-			function () {
-				$(this).remove();
-			}
-		);
-		clearTimeout( _infoTimer );
-		_infoTimer = null;
-
-		return this;
-	}
-
-	if ( _infoTimer ) {
-		clearTimeout( _infoTimer );
-	}
-
-	if ( $('#datatables_buttons_info').length ) {
-		$('#datatables_buttons_info').remove();
-	}
-
-	title = title ? '<h2>'+title+'</h2>' : '';
-
-	_fadeIn(
-		$('<div id="datatables_buttons_info" class="dt-button-info"/>')
-			.html( title )
-			.append( $('<div/>')[ typeof message === 'string' ? 'html' : 'append' ]( message ) )
-			.css( 'display', 'none' )
-			.appendTo( 'body' )
-	);
-
-	if ( time !== undefined && time !== 0 ) {
-		_infoTimer = setTimeout( function () {
-			that.buttons.info( false );
-		}, time );
-	}
-
-	this.on('destroy.btn-info', function () {
-		that.buttons.info(false);
-	});
-
-	return this;
-} );
-
-// Get data from the table for export - this is common to a number of plug-in
-// buttons so it is included in the Buttons core library
-DataTable.Api.register( 'buttons.exportData()', function ( options ) {
-	if ( this.context.length ) {
-		return _exportData( new DataTable.Api( this.context[0] ), options );
-	}
-} );
-
-// Get information about the export that is common to many of the export data
-// types (DRY)
-DataTable.Api.register( 'buttons.exportInfo()', function ( conf ) {
-	if ( ! conf ) {
-		conf = {};
-	}
-
-	return {
-		filename: _filename( conf ),
-		title: _title( conf ),
-		messageTop: _message(this, conf.message || conf.messageTop, 'top'),
-		messageBottom: _message(this, conf.messageBottom, 'bottom')
-	};
-} );
-
-
-
-/**
- * Get the file name for an exported file.
- *
- * @param {object}	config Button configuration
- * @param {boolean} incExtension Include the file name extension
- */
-var _filename = function ( config )
-{
-	// Backwards compatibility
-	var filename = config.filename === '*' && config.title !== '*' && config.title !== undefined && config.title !== null && config.title !== '' ?
-		config.title :
-		config.filename;
-
-	if ( typeof filename === 'function' ) {
-		filename = filename();
-	}
-
-	if ( filename === undefined || filename === null ) {
-		return null;
-	}
-
-	if ( filename.indexOf( '*' ) !== -1 ) {
-		filename = $.trim( filename.replace( '*', $('head > title').text() ) );
-	}
-
-	// Strip characters which the OS will object to
-	filename = filename.replace(/[^a-zA-Z0-9_\u00A1-\uFFFF\.,\-_ !\(\)]/g, "");
-
-	var extension = _stringOrFunction( config.extension );
-	if ( ! extension ) {
-		extension = '';
-	}
-
-	return filename + extension;
-};
-
-/**
- * Simply utility method to allow parameters to be given as a function
- *
- * @param {undefined|string|function} option Option
- * @return {null|string} Resolved value
- */
-var _stringOrFunction = function ( option )
-{
-	if ( option === null || option === undefined ) {
-		return null;
-	}
-	else if ( typeof option === 'function' ) {
-		return option();
-	}
-	return option;
-};
-
-/**
- * Get the title for an exported file.
- *
- * @param {object} config	Button configuration
- */
-var _title = function ( config )
-{
-	var title = _stringOrFunction( config.title );
-
-	return title === null ?
-		null : title.indexOf( '*' ) !== -1 ?
-			title.replace( '*', $('head > title').text() || 'Exported data' ) :
-			title;
-};
-
-var _message = function ( dt, option, position )
-{
-	var message = _stringOrFunction( option );
-	if ( message === null ) {
-		return null;
-	}
-
-	var caption = $('caption', dt.table().container()).eq(0);
-	if ( message === '*' ) {
-		var side = caption.css( 'caption-side' );
-		if ( side !== position ) {
-			return null;
-		}
-
-		return caption.length ?
-			caption.text() :
-			'';
-	}
-
-	return message;
-};
-
-
-
-
-
-
-
-var _exportTextarea = $('<textarea/>')[0];
-var _exportData = function ( dt, inOpts )
-{
-	var config = $.extend( true, {}, {
-		rows:           null,
-		columns:        '',
-		modifier:       {
-			search: 'applied',
-			order:  'applied'
-		},
-		orthogonal:     'display',
-		stripHtml:      true,
-		stripNewlines:  true,
-		decodeEntities: true,
-		trim:           true,
-		format:         {
-			header: function ( d ) {
-				return strip( d );
-			},
-			footer: function ( d ) {
-				return strip( d );
-			},
-			body: function ( d ) {
-				return strip( d );
-			}
-		},
-		customizeData: null
-	}, inOpts );
-
-	var strip = function ( str ) {
-		if ( typeof str !== 'string' ) {
-			return str;
-		}
-
-		// Always remove script tags
-		str = str.replace( /<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi, '' );
-
-		// Always remove comments
-		str = str.replace( /<!\-\-.*?\-\->/g, '' );
-
-		if ( config.stripHtml ) {
-			str = str.replace( /<[^>]*>/g, '' );
-		}
-
-		if ( config.trim ) {
-			str = str.replace( /^\s+|\s+$/g, '' );
-		}
-
-		if ( config.stripNewlines ) {
-			str = str.replace( /\n/g, ' ' );
-		}
-
-		if ( config.decodeEntities ) {
-			_exportTextarea.innerHTML = str;
-			str = _exportTextarea.value;
-		}
-
-		return str;
-	};
-
-
-	var header = dt.columns( config.columns ).indexes().map( function (idx) {
-		var el = dt.column( idx ).header();
-		return config.format.header( el.innerHTML, idx, el );
-	} ).toArray();
-
-	var footer = dt.table().footer() ?
-		dt.columns( config.columns ).indexes().map( function (idx) {
-			var el = dt.column( idx ).footer();
-			return config.format.footer( el ? el.innerHTML : '', idx, el );
-		} ).toArray() :
-		null;
-	
-	// If Select is available on this table, and any rows are selected, limit the export
-	// to the selected rows. If no rows are selected, all rows will be exported. Specify
-	// a `selected` modifier to control directly.
-	var modifier = $.extend( {}, config.modifier );
-	if ( dt.select && typeof dt.select.info === 'function' && modifier.selected === undefined ) {
-		if ( dt.rows( config.rows, $.extend( { selected: true }, modifier ) ).any() ) {
-			$.extend( modifier, { selected: true } )
-		}
-	}
-
-	var rowIndexes = dt.rows( config.rows, modifier ).indexes().toArray();
-	var selectedCells = dt.cells( rowIndexes, config.columns );
-	var cells = selectedCells
-		.render( config.orthogonal )
-		.toArray();
-	var cellNodes = selectedCells
-		.nodes()
-		.toArray();
-
-	var columns = header.length;
-	var rows = columns > 0 ? cells.length / columns : 0;
-	var body = [];
-	var cellCounter = 0;
-
-	for ( var i=0, ien=rows ; i<ien ; i++ ) {
-		var row = [ columns ];
-
-		for ( var j=0 ; j<columns ; j++ ) {
-			row[j] = config.format.body( cells[ cellCounter ], i, j, cellNodes[ cellCounter ] );
-			cellCounter++;
-		}
-
-		body[i] = row;
-	}
-
-	var data = {
-		header: header,
-		footer: footer,
-		body:   body
-	};
-
-	if ( config.customizeData ) {
-		config.customizeData( data );
-	}
-
-	return data;
-};
-
-
-/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- * DataTables interface
- */
-
-// Attach to DataTables objects for global access
-$.fn.dataTable.Buttons = Buttons;
-$.fn.DataTable.Buttons = Buttons;
-
-
-
-// DataTables creation - check if the buttons have been defined for this table,
-// they will have been if the `B` option was used in `dom`, otherwise we should
-// create the buttons instance here so they can be inserted into the document
-// using the API. Listen for `init` for compatibility with pre 1.10.10, but to
-// be removed in future.
-$(document).on( 'init.dt plugin-init.dt', function (e, settings) {
-	if ( e.namespace !== 'dt' ) {
-		return;
-	}
-
-	var opts = settings.oInit.buttons || DataTable.defaults.buttons;
-
-	if ( opts && ! settings._buttons ) {
-		new Buttons( settings, opts ).container();
-	}
-} );
-
-function _init ( settings, options ) {
-	var api = new DataTable.Api( settings );
-	var opts = options
-		? options
-		: api.init().buttons || DataTable.defaults.buttons;
-
-	return new Buttons( api, opts ).container();
-}
-
-// DataTables `dom` feature option
-DataTable.ext.feature.push( {
-	fnInit: _init,
-	cFeature: "B"
-} );
-
-// DataTables 2 layout feature
-if ( DataTable.ext.features ) {
-	DataTable.ext.features.register( 'buttons', _init );
-}
-
-
-return Buttons;
-}));
diff --git a/DataTables/Buttons-1.6.2/js/dataTables.buttons.min.js b/DataTables/Buttons-1.6.2/js/dataTables.buttons.min.js
deleted file mode 100644
index 120ad60..0000000
--- a/DataTables/Buttons-1.6.2/js/dataTables.buttons.min.js
+++ /dev/null
@@ -1,43 +0,0 @@
-/*!
- Buttons for DataTables 1.6.2
- ©2016-2020 SpryMedia Ltd - datatables.net/license
-*/
-(function(d){"function"===typeof define&&define.amd?define(["jquery","datatables.net"],function(v){return d(v,window,document)}):"object"===typeof exports?module.exports=function(v,u){v||(v=window);u&&u.fn.dataTable||(u=require("datatables.net")(v,u).$);return d(u,v,v.document)}:d(jQuery,window,document)})(function(d,v,u,n){function y(a,b,c){d.fn.animate?a.stop().fadeIn(b,c):(a.css("display","block"),c&&c.call(a))}function z(a,b,c){d.fn.animate?a.stop().fadeOut(b,c):(a.css("display","none"),c&&c.call(a))}
-function B(a,b){a=new m.Api(a);b=b?b:a.init().buttons||m.defaults.buttons;return(new r(a,b)).container()}var m=d.fn.dataTable,E=0,F=0,q=m.ext.buttons,r=function(a,b){if(!(this instanceof r))return function(b){return(new r(b,a)).container()};"undefined"===typeof b&&(b={});!0===b&&(b={});d.isArray(b)&&(b={buttons:b});this.c=d.extend(!0,{},r.defaults,b);b.buttons&&(this.c.buttons=b.buttons);this.s={dt:new m.Api(a),buttons:[],listenKeys:"",namespace:"dtb"+E++};this.dom={container:d("<"+this.c.dom.container.tag+
-"/>").addClass(this.c.dom.container.className)};this._constructor()};d.extend(r.prototype,{action:function(a,b){a=this._nodeToButton(a);if(b===n)return a.conf.action;a.conf.action=b;return this},active:function(a,b){var c=this._nodeToButton(a);a=this.c.dom.button.active;c=d(c.node);if(b===n)return c.hasClass(a);c.toggleClass(a,b===n?!0:b);return this},add:function(a,b){var c=this.s.buttons;if("string"===typeof b){b=b.split("-");var e=this.s;c=0;for(var d=b.length-1;c<d;c++)e=e.buttons[1*b[c]];c=e.buttons;
-b=1*b[b.length-1]}this._expandButton(c,a,e!==n,b);this._draw();return this},container:function(){return this.dom.container},disable:function(a){a=this._nodeToButton(a);d(a.node).addClass(this.c.dom.button.disabled).attr("disabled",!0);return this},destroy:function(){d("body").off("keyup."+this.s.namespace);var a=this.s.buttons.slice(),b;var c=0;for(b=a.length;c<b;c++)this.remove(a[c].node);this.dom.container.remove();a=this.s.dt.settings()[0];c=0;for(b=a.length;c<b;c++)if(a.inst===this){a.splice(c,
-1);break}return this},enable:function(a,b){if(!1===b)return this.disable(a);a=this._nodeToButton(a);d(a.node).removeClass(this.c.dom.button.disabled).removeAttr("disabled");return this},name:function(){return this.c.name},node:function(a){if(!a)return this.dom.container;a=this._nodeToButton(a);return d(a.node)},processing:function(a,b){var c=this.s.dt,e=this._nodeToButton(a);if(b===n)return d(e.node).hasClass("processing");d(e.node).toggleClass("processing",b);d(c.table().node()).triggerHandler("buttons-processing.dt",
-[b,c.button(a),c,d(a),e.conf]);return this},remove:function(a){var b=this._nodeToButton(a),c=this._nodeToHost(a),e=this.s.dt;if(b.buttons.length)for(var g=b.buttons.length-1;0<=g;g--)this.remove(b.buttons[g].node);b.conf.destroy&&b.conf.destroy.call(e.button(a),e,d(a),b.conf);this._removeKey(b.conf);d(b.node).remove();a=d.inArray(b,c);c.splice(a,1);return this},text:function(a,b){var c=this._nodeToButton(a);a=this.c.dom.collection.buttonLiner;a=c.inCollection&&a&&a.tag?a.tag:this.c.dom.buttonLiner.tag;
-var e=this.s.dt,g=d(c.node),f=function(a){return"function"===typeof a?a(e,g,c.conf):a};if(b===n)return f(c.conf.text);c.conf.text=b;a?g.children(a).html(f(b)):g.html(f(b));return this},_constructor:function(){var a=this,b=this.s.dt,c=b.settings()[0],e=this.c.buttons;c._buttons||(c._buttons=[]);c._buttons.push({inst:this,name:this.c.name});for(var g=0,f=e.length;g<f;g++)this.add(e[g]);b.on("destroy",function(b,e){e===c&&a.destroy()});d("body").on("keyup."+this.s.namespace,function(b){if(!u.activeElement||
-u.activeElement===u.body){var c=String.fromCharCode(b.keyCode).toLowerCase();-1!==a.s.listenKeys.toLowerCase().indexOf(c)&&a._keypress(c,b)}})},_addKey:function(a){a.key&&(this.s.listenKeys+=d.isPlainObject(a.key)?a.key.key:a.key)},_draw:function(a,b){a||(a=this.dom.container,b=this.s.buttons);a.children().detach();for(var c=0,e=b.length;c<e;c++)a.append(b[c].inserter),a.append(" "),b[c].buttons&&b[c].buttons.length&&this._draw(b[c].collection,b[c].buttons)},_expandButton:function(a,b,c,e){var g=
-this.s.dt,f=0;b=d.isArray(b)?b:[b];for(var k=0,h=b.length;k<h;k++){var t=this._resolveExtends(b[k]);if(t)if(d.isArray(t))this._expandButton(a,t,c,e);else{var l=this._buildButton(t,c);l&&(e!==n&&null!==e?(a.splice(e,0,l),e++):a.push(l),l.conf.buttons&&(l.collection=d("<"+this.c.dom.collection.tag+"/>"),l.conf._collection=l.collection,this._expandButton(l.buttons,l.conf.buttons,!0,e)),t.init&&t.init.call(g.button(l.node),g,d(l.node),t),f++)}}},_buildButton:function(a,b){var c=this.c.dom.button,e=this.c.dom.buttonLiner,
-g=this.c.dom.collection,f=this.s.dt,k=function(b){return"function"===typeof b?b(f,l,a):b};b&&g.button&&(c=g.button);b&&g.buttonLiner&&(e=g.buttonLiner);if(a.available&&!a.available(f,a))return!1;var h=function(a,b,c,e){e.action.call(b.button(c),a,b,c,e);d(b.table().node()).triggerHandler("buttons-action.dt",[b.button(c),b,c,e])};g=a.tag||c.tag;var t=a.clickBlurs===n?!0:a.clickBlurs,l=d("<"+g+"/>").addClass(c.className).attr("tabindex",this.s.dt.settings()[0].iTabIndex).attr("aria-controls",this.s.dt.table().node().id).on("click.dtb",
-function(b){b.preventDefault();!l.hasClass(c.disabled)&&a.action&&h(b,f,l,a);t&&l.trigger("blur")}).on("keyup.dtb",function(b){13===b.keyCode&&!l.hasClass(c.disabled)&&a.action&&h(b,f,l,a)});"a"===g.toLowerCase()&&l.attr("href","#");"button"===g.toLowerCase()&&l.attr("type","button");e.tag?(g=d("<"+e.tag+"/>").html(k(a.text)).addClass(e.className),"a"===e.tag.toLowerCase()&&g.attr("href","#"),l.append(g)):l.html(k(a.text));!1===a.enabled&&l.addClass(c.disabled);a.className&&l.addClass(a.className);
-a.titleAttr&&l.attr("title",k(a.titleAttr));a.attr&&l.attr(a.attr);a.namespace||(a.namespace=".dt-button-"+F++);e=(e=this.c.dom.buttonContainer)&&e.tag?d("<"+e.tag+"/>").addClass(e.className).append(l):l;this._addKey(a);this.c.buttonCreated&&(e=this.c.buttonCreated(a,e));return{conf:a,node:l.get(0),inserter:e,buttons:[],inCollection:b,collection:null}},_nodeToButton:function(a,b){b||(b=this.s.buttons);for(var c=0,e=b.length;c<e;c++){if(b[c].node===a)return b[c];if(b[c].buttons.length){var d=this._nodeToButton(a,
-b[c].buttons);if(d)return d}}},_nodeToHost:function(a,b){b||(b=this.s.buttons);for(var c=0,e=b.length;c<e;c++){if(b[c].node===a)return b;if(b[c].buttons.length){var d=this._nodeToHost(a,b[c].buttons);if(d)return d}}},_keypress:function(a,b){if(!b._buttonsHandled){var c=function(e){for(var g=0,f=e.length;g<f;g++){var k=e[g].conf,h=e[g].node;k.key&&(k.key===a?(b._buttonsHandled=!0,d(h).click()):!d.isPlainObject(k.key)||k.key.key!==a||k.key.shiftKey&&!b.shiftKey||k.key.altKey&&!b.altKey||k.key.ctrlKey&&
-!b.ctrlKey||k.key.metaKey&&!b.metaKey||(b._buttonsHandled=!0,d(h).click()));e[g].buttons.length&&c(e[g].buttons)}};c(this.s.buttons)}},_removeKey:function(a){if(a.key){var b=d.isPlainObject(a.key)?a.key.key:a.key;a=this.s.listenKeys.split("");b=d.inArray(b,a);a.splice(b,1);this.s.listenKeys=a.join("")}},_resolveExtends:function(a){var b=this.s.dt,c,e=function(c){for(var e=0;!d.isPlainObject(c)&&!d.isArray(c);){if(c===n)return;if("function"===typeof c){if(c=c(b,a),!c)return!1}else if("string"===typeof c){if(!q[c])throw"Unknown button type: "+
-c;c=q[c]}e++;if(30<e)throw"Buttons: Too many iterations";}return d.isArray(c)?c:d.extend({},c)};for(a=e(a);a&&a.extend;){if(!q[a.extend])throw"Cannot extend unknown button type: "+a.extend;var g=e(q[a.extend]);if(d.isArray(g))return g;if(!g)return!1;var f=g.className;a=d.extend({},g,a);f&&a.className!==f&&(a.className=f+" "+a.className);var k=a.postfixButtons;if(k){a.buttons||(a.buttons=[]);f=0;for(c=k.length;f<c;f++)a.buttons.push(k[f]);a.postfixButtons=null}if(k=a.prefixButtons){a.buttons||(a.buttons=
-[]);f=0;for(c=k.length;f<c;f++)a.buttons.splice(f,0,k[f]);a.prefixButtons=null}a.extend=g.extend}return a},_popover:function(a,b,c){var e=this.c,g=d.extend({align:"button-left",autoClose:!1,background:!0,backgroundClassName:"dt-button-background",contentClassName:e.dom.collection.className,collectionLayout:"",collectionTitle:"",dropup:!1,fade:400,rightAlignClassName:"dt-button-right",tag:e.dom.collection.tag},c),f=b.node(),k=function(){z(d(".dt-button-collection"),g.fade,function(){d(this).detach()});
-d(b.buttons('[aria-haspopup="true"][aria-expanded="true"]').nodes()).attr("aria-expanded","false");d("div.dt-button-background").off("click.dtb-collection");r.background(!1,g.backgroundClassName,g.fade,f);d("body").off(".dtb-collection");b.off("buttons-action.b-internal")};!1===a&&k();c=d(b.buttons('[aria-haspopup="true"][aria-expanded="true"]').nodes());c.length&&(f=c.eq(0),k());c=d("<div/>").addClass("dt-button-collection").addClass(g.collectionLayout).css("display","none");a=d(a).addClass(g.contentClassName).attr("role",
-"menu").appendTo(c);f.attr("aria-expanded","true");f.parents("body")[0]!==u.body&&(f=u.body.lastChild);g.collectionTitle&&c.prepend('<div class="dt-button-collection-title">'+g.collectionTitle+"</div>");y(c.insertAfter(f));var h=d(b.table().container());e=c.css("position");"dt-container"===g.align&&(f=f.parent(),c.css("width",h.width()));if("absolute"===e){e=f.position();c.css({top:e.top+f.outerHeight(),left:e.left});var t=c.outerHeight();c.outerWidth();var l=h.offset().top+h.height();l=e.top+f.outerHeight()+
-t-l;var p=e.top-t,w=h.offset().top;e=e.top-t-5;(l>w-p||g.dropup)&&-e<w&&c.css("top",e);e=h.offset().left;h=h.width();h=e+h;t=c.offset().left;l=c.width();l=t+l;p=f.offset().left;w=f.outerWidth();w=p+w;p=0;c.hasClass(g.rightAlignClassName)||"button-right"===g.align?(p=w-l,e>t+p&&(e-=t+p,h-=l+p,p=e>h?p+h:p+e)):(p=e-t,h<l+p&&(e-=t+p,h-=l+p,p=e>h?p+h:p+e));c.css("left",c.position().left+p)}else e=c.height()/2,e>d(v).height()/2&&(e=d(v).height()/2),c.css("marginTop",-1*e);g.background&&r.background(!0,
-g.backgroundClassName,g.fade,f);d("div.dt-button-background").on("click.dtb-collection",function(){});d("body").on("click.dtb-collection",function(b){var c=d.fn.addBack?"addBack":"andSelf";d(b.target).parents()[c]().filter(a).length||k()}).on("keyup.dtb-collection",function(a){27===a.keyCode&&k()});g.autoClose&&setTimeout(function(){b.on("buttons-action.b-internal",function(a,b,c,e){e[0]!==f[0]&&k()})},0);d(c).trigger("buttons-popover.dt")}});r.background=function(a,b,c,e){c===n&&(c=400);e||(e=u.body);
-a?y(d("<div/>").addClass(b).css("display","none").insertAfter(e),c):z(d("div."+b),c,function(){d(this).removeClass(b).remove()})};r.instanceSelector=function(a,b){if(a===n||null===a)return d.map(b,function(a){return a.inst});var c=[],e=d.map(b,function(a){return a.name}),g=function(a){if(d.isArray(a))for(var f=0,h=a.length;f<h;f++)g(a[f]);else"string"===typeof a?-1!==a.indexOf(",")?g(a.split(",")):(a=d.inArray(d.trim(a),e),-1!==a&&c.push(b[a].inst)):"number"===typeof a&&c.push(b[a].inst)};g(a);return c};
-r.buttonSelector=function(a,b){for(var c=[],e=function(a,b,c){for(var d,g,f=0,h=b.length;f<h;f++)if(d=b[f])g=c!==n?c+f:f+"",a.push({node:d.node,name:d.conf.name,idx:g}),d.buttons&&e(a,d.buttons,g+"-")},g=function(a,b){var f,k=[];e(k,b.s.buttons);var h=d.map(k,function(a){return a.node});if(d.isArray(a)||a instanceof d)for(h=0,f=a.length;h<f;h++)g(a[h],b);else if(null===a||a===n||"*"===a)for(h=0,f=k.length;h<f;h++)c.push({inst:b,node:k[h].node});else if("number"===typeof a)c.push({inst:b,node:b.s.buttons[a].node});
-else if("string"===typeof a)if(-1!==a.indexOf(","))for(k=a.split(","),h=0,f=k.length;h<f;h++)g(d.trim(k[h]),b);else if(a.match(/^\d+(\-\d+)*$/))h=d.map(k,function(a){return a.idx}),c.push({inst:b,node:k[d.inArray(a,h)].node});else if(-1!==a.indexOf(":name"))for(a=a.replace(":name",""),h=0,f=k.length;h<f;h++)k[h].name===a&&c.push({inst:b,node:k[h].node});else d(h).filter(a).each(function(){c.push({inst:b,node:this})});else"object"===typeof a&&a.nodeName&&(k=d.inArray(a,h),-1!==k&&c.push({inst:b,node:h[k]}))},
-f=0,k=a.length;f<k;f++)g(b,a[f]);return c};r.defaults={buttons:["copy","excel","csv","pdf","print"],name:"main",tabIndex:0,dom:{container:{tag:"div",className:"dt-buttons"},collection:{tag:"div",className:""},button:{tag:"ActiveXObject"in v?"a":"button",className:"dt-button",active:"active",disabled:"disabled"},buttonLiner:{tag:"span",className:""}}};r.version="1.6.2";d.extend(q,{collection:{text:function(a){return a.i18n("buttons.collection","Collection")},className:"buttons-collection",init:function(a,
-b,c){b.attr("aria-expanded",!1)},action:function(a,b,c,e){a.stopPropagation();e._collection.parents("body").length?this.popover(!1,e):this.popover(e._collection,e)},attr:{"aria-haspopup":!0}},copy:function(a,b){if(q.copyHtml5)return"copyHtml5";if(q.copyFlash&&q.copyFlash.available(a,b))return"copyFlash"},csv:function(a,b){if(q.csvHtml5&&q.csvHtml5.available(a,b))return"csvHtml5";if(q.csvFlash&&q.csvFlash.available(a,b))return"csvFlash"},excel:function(a,b){if(q.excelHtml5&&q.excelHtml5.available(a,
-b))return"excelHtml5";if(q.excelFlash&&q.excelFlash.available(a,b))return"excelFlash"},pdf:function(a,b){if(q.pdfHtml5&&q.pdfHtml5.available(a,b))return"pdfHtml5";if(q.pdfFlash&&q.pdfFlash.available(a,b))return"pdfFlash"},pageLength:function(a){a=a.settings()[0].aLengthMenu;var b=d.isArray(a[0])?a[0]:a,c=d.isArray(a[0])?a[1]:a;return{extend:"collection",text:function(a){return a.i18n("buttons.pageLength",{"-1":"Show all rows",_:"Show %d rows"},a.page.len())},className:"buttons-page-length",autoClose:!0,
-buttons:d.map(b,function(a,b){return{text:c[b],className:"button-page-length",action:function(b,c){c.page.len(a).draw()},init:function(b,c,e){var d=this;c=function(){d.active(b.page.len()===a)};b.on("length.dt"+e.namespace,c);c()},destroy:function(a,b,c){a.off("length.dt"+c.namespace)}}}),init:function(a,b,c){var e=this;a.on("length.dt"+c.namespace,function(){e.text(c.text)})},destroy:function(a,b,c){a.off("length.dt"+c.namespace)}}}});m.Api.register("buttons()",function(a,b){b===n&&(b=a,a=n);this.selector.buttonGroup=
-a;var c=this.iterator(!0,"table",function(c){if(c._buttons)return r.buttonSelector(r.instanceSelector(a,c._buttons),b)},!0);c._groupSelector=a;return c});m.Api.register("button()",function(a,b){a=this.buttons(a,b);1<a.length&&a.splice(1,a.length);return a});m.Api.registerPlural("buttons().active()","button().active()",function(a){return a===n?this.map(function(a){return a.inst.active(a.node)}):this.each(function(b){b.inst.active(b.node,a)})});m.Api.registerPlural("buttons().action()","button().action()",
-function(a){return a===n?this.map(function(a){return a.inst.action(a.node)}):this.each(function(b){b.inst.action(b.node,a)})});m.Api.register(["buttons().enable()","button().enable()"],function(a){return this.each(function(b){b.inst.enable(b.node,a)})});m.Api.register(["buttons().disable()","button().disable()"],function(){return this.each(function(a){a.inst.disable(a.node)})});m.Api.registerPlural("buttons().nodes()","button().node()",function(){var a=d();d(this.each(function(b){a=a.add(b.inst.node(b.node))}));
-return a});m.Api.registerPlural("buttons().processing()","button().processing()",function(a){return a===n?this.map(function(a){return a.inst.processing(a.node)}):this.each(function(b){b.inst.processing(b.node,a)})});m.Api.registerPlural("buttons().text()","button().text()",function(a){return a===n?this.map(function(a){return a.inst.text(a.node)}):this.each(function(b){b.inst.text(b.node,a)})});m.Api.registerPlural("buttons().trigger()","button().trigger()",function(){return this.each(function(a){a.inst.node(a.node).trigger("click")})});
-m.Api.register("button().popover()",function(a,b){return this.map(function(c){return c.inst._popover(a,this.button(this[0].node),b)})});m.Api.register("buttons().containers()",function(){var a=d(),b=this._groupSelector;this.iterator(!0,"table",function(c){if(c._buttons){c=r.instanceSelector(b,c._buttons);for(var e=0,d=c.length;e<d;e++)a=a.add(c[e].container())}});return a});m.Api.register("buttons().container()",function(){return this.containers().eq(0)});m.Api.register("button().add()",function(a,
-b){var c=this.context;c.length&&(c=r.instanceSelector(this._groupSelector,c[0]._buttons),c.length&&c[0].add(b,a));return this.button(this._groupSelector,a)});m.Api.register("buttons().destroy()",function(){this.pluck("inst").unique().each(function(a){a.destroy()});return this});m.Api.registerPlural("buttons().remove()","buttons().remove()",function(){this.each(function(a){a.inst.remove(a.node)});return this});var x;m.Api.register("buttons.info()",function(a,b,c){var e=this;if(!1===a)return this.off("destroy.btn-info"),
-z(d("#datatables_buttons_info"),400,function(){d(this).remove()}),clearTimeout(x),x=null,this;x&&clearTimeout(x);d("#datatables_buttons_info").length&&d("#datatables_buttons_info").remove();a=a?"<h2>"+a+"</h2>":"";y(d('<div id="datatables_buttons_info" class="dt-button-info"/>').html(a).append(d("<div/>")["string"===typeof b?"html":"append"](b)).css("display","none").appendTo("body"));c!==n&&0!==c&&(x=setTimeout(function(){e.buttons.info(!1)},c));this.on("destroy.btn-info",function(){e.buttons.info(!1)});
-return this});m.Api.register("buttons.exportData()",function(a){if(this.context.length)return G(new m.Api(this.context[0]),a)});m.Api.register("buttons.exportInfo()",function(a){a||(a={});var b=a;var c="*"===b.filename&&"*"!==b.title&&b.title!==n&&null!==b.title&&""!==b.title?b.title:b.filename;"function"===typeof c&&(c=c());c===n||null===c?c=null:(-1!==c.indexOf("*")&&(c=d.trim(c.replace("*",d("head > title").text()))),c=c.replace(/[^a-zA-Z0-9_\u00A1-\uFFFF\.,\-_ !\(\)]/g,""),(b=A(b.extension))||
-(b=""),c+=b);b=A(a.title);b=null===b?null:-1!==b.indexOf("*")?b.replace("*",d("head > title").text()||"Exported data"):b;return{filename:c,title:b,messageTop:C(this,a.message||a.messageTop,"top"),messageBottom:C(this,a.messageBottom,"bottom")}});var A=function(a){return null===a||a===n?null:"function"===typeof a?a():a},C=function(a,b,c){b=A(b);if(null===b)return null;a=d("caption",a.table().container()).eq(0);return"*"===b?a.css("caption-side")!==c?null:a.length?a.text():"":b},D=d("<textarea/>")[0],
-G=function(a,b){var c=d.extend(!0,{},{rows:null,columns:"",modifier:{search:"applied",order:"applied"},orthogonal:"display",stripHtml:!0,stripNewlines:!0,decodeEntities:!0,trim:!0,format:{header:function(a){return e(a)},footer:function(a){return e(a)},body:function(a){return e(a)}},customizeData:null},b),e=function(a){if("string"!==typeof a)return a;a=a.replace(/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,"");a=a.replace(/<!\-\-.*?\-\->/g,"");c.stripHtml&&(a=a.replace(/<[^>]*>/g,""));c.trim&&
-(a=a.replace(/^\s+|\s+$/g,""));c.stripNewlines&&(a=a.replace(/\n/g," "));c.decodeEntities&&(D.innerHTML=a,a=D.value);return a};b=a.columns(c.columns).indexes().map(function(b){var d=a.column(b).header();return c.format.header(d.innerHTML,b,d)}).toArray();var g=a.table().footer()?a.columns(c.columns).indexes().map(function(b){var d=a.column(b).footer();return c.format.footer(d?d.innerHTML:"",b,d)}).toArray():null,f=d.extend({},c.modifier);a.select&&"function"===typeof a.select.info&&f.selected===n&&
-a.rows(c.rows,d.extend({selected:!0},f)).any()&&d.extend(f,{selected:!0});f=a.rows(c.rows,f).indexes().toArray();var k=a.cells(f,c.columns);f=k.render(c.orthogonal).toArray();k=k.nodes().toArray();for(var h=b.length,m=[],l=0,p=0,r=0<h?f.length/h:0;p<r;p++){for(var q=[h],u=0;u<h;u++)q[u]=c.format.body(f[l],p,u,k[l]),l++;m[p]=q}b={header:b,footer:g,body:m};c.customizeData&&c.customizeData(b);return b};d.fn.dataTable.Buttons=r;d.fn.DataTable.Buttons=r;d(u).on("init.dt plugin-init.dt",function(a,b){"dt"===
-a.namespace&&(a=b.oInit.buttons||m.defaults.buttons)&&!b._buttons&&(new r(b,a)).container()});m.ext.feature.push({fnInit:B,cFeature:"B"});m.ext.features&&m.ext.features.register("buttons",B);return r});
diff --git a/DataTables/Buttons-1.6.2/swf/flashExport.swf b/DataTables/Buttons-1.6.2/swf/flashExport.swf
deleted file mode 100644
index eb971dd8c42bf01b5edfaf9f6711fbc5ff861bf3..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 64603
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
TQ@?8br~3o64G#Q&lOJZXb#AhG

diff --git a/DataTables/DataTables-1.10.21/css/dataTables.bootstrap.css b/DataTables/DataTables-1.10.21/css/dataTables.bootstrap.css
deleted file mode 100644
index 9d9847a..0000000
--- a/DataTables/DataTables-1.10.21/css/dataTables.bootstrap.css
+++ /dev/null
@@ -1,190 +0,0 @@
-table.dataTable {
-  clear: both;
-  margin-top: 6px !important;
-  margin-bottom: 6px !important;
-  max-width: none !important;
-  border-collapse: separate !important;
-}
-table.dataTable td,
-table.dataTable th {
-  -webkit-box-sizing: content-box;
-  box-sizing: content-box;
-}
-table.dataTable td.dataTables_empty,
-table.dataTable th.dataTables_empty {
-  text-align: center;
-}
-table.dataTable.nowrap th,
-table.dataTable.nowrap td {
-  white-space: nowrap;
-}
-
-div.dataTables_wrapper div.dataTables_length label {
-  font-weight: normal;
-  text-align: left;
-  white-space: nowrap;
-}
-div.dataTables_wrapper div.dataTables_length select {
-  width: 75px;
-  display: inline-block;
-}
-div.dataTables_wrapper div.dataTables_filter {
-  text-align: right;
-}
-div.dataTables_wrapper div.dataTables_filter label {
-  font-weight: normal;
-  white-space: nowrap;
-  text-align: left;
-}
-div.dataTables_wrapper div.dataTables_filter input {
-  margin-left: 0.5em;
-  display: inline-block;
-  width: auto;
-}
-div.dataTables_wrapper div.dataTables_info {
-  padding-top: 8px;
-  white-space: nowrap;
-}
-div.dataTables_wrapper div.dataTables_paginate {
-  margin: 0;
-  white-space: nowrap;
-  text-align: right;
-}
-div.dataTables_wrapper div.dataTables_paginate ul.pagination {
-  margin: 2px 0;
-  white-space: nowrap;
-}
-div.dataTables_wrapper div.dataTables_processing {
-  position: absolute;
-  top: 50%;
-  left: 50%;
-  width: 200px;
-  margin-left: -100px;
-  margin-top: -26px;
-  text-align: center;
-  padding: 1em 0;
-}
-
-table.dataTable thead > tr > th.sorting_asc, table.dataTable thead > tr > th.sorting_desc, table.dataTable thead > tr > th.sorting,
-table.dataTable thead > tr > td.sorting_asc,
-table.dataTable thead > tr > td.sorting_desc,
-table.dataTable thead > tr > td.sorting {
-  padding-right: 30px;
-}
-table.dataTable thead > tr > th:active,
-table.dataTable thead > tr > td:active {
-  outline: none;
-}
-table.dataTable thead .sorting,
-table.dataTable thead .sorting_asc,
-table.dataTable thead .sorting_desc,
-table.dataTable thead .sorting_asc_disabled,
-table.dataTable thead .sorting_desc_disabled {
-  cursor: pointer;
-  position: relative;
-}
-table.dataTable thead .sorting:after,
-table.dataTable thead .sorting_asc:after,
-table.dataTable thead .sorting_desc:after,
-table.dataTable thead .sorting_asc_disabled:after,
-table.dataTable thead .sorting_desc_disabled:after {
-  position: absolute;
-  bottom: 8px;
-  right: 8px;
-  display: block;
-  font-family: 'Glyphicons Halflings';
-  opacity: 0.5;
-}
-table.dataTable thead .sorting:after {
-  opacity: 0.2;
-  content: "\e150";
-  /* sort */
-}
-table.dataTable thead .sorting_asc:after {
-  content: "\e155";
-  /* sort-by-attributes */
-}
-table.dataTable thead .sorting_desc:after {
-  content: "\e156";
-  /* sort-by-attributes-alt */
-}
-table.dataTable thead .sorting_asc_disabled:after,
-table.dataTable thead .sorting_desc_disabled:after {
-  color: #eee;
-}
-
-div.dataTables_scrollHead table.dataTable {
-  margin-bottom: 0 !important;
-}
-
-div.dataTables_scrollBody > table {
-  border-top: none;
-  margin-top: 0 !important;
-  margin-bottom: 0 !important;
-}
-div.dataTables_scrollBody > table > thead .sorting:after,
-div.dataTables_scrollBody > table > thead .sorting_asc:after,
-div.dataTables_scrollBody > table > thead .sorting_desc:after {
-  display: none;
-}
-div.dataTables_scrollBody > table > tbody > tr:first-child > th,
-div.dataTables_scrollBody > table > tbody > tr:first-child > td {
-  border-top: none;
-}
-
-div.dataTables_scrollFoot > .dataTables_scrollFootInner {
-  box-sizing: content-box;
-}
-div.dataTables_scrollFoot > .dataTables_scrollFootInner > table {
-  margin-top: 0 !important;
-  border-top: none;
-}
-
-@media screen and (max-width: 767px) {
-  div.dataTables_wrapper div.dataTables_length,
-  div.dataTables_wrapper div.dataTables_filter,
-  div.dataTables_wrapper div.dataTables_info,
-  div.dataTables_wrapper div.dataTables_paginate {
-    text-align: center;
-  }
-}
-table.dataTable.table-condensed > thead > tr > th {
-  padding-right: 20px;
-}
-table.dataTable.table-condensed .sorting:after,
-table.dataTable.table-condensed .sorting_asc:after,
-table.dataTable.table-condensed .sorting_desc:after {
-  top: 6px;
-  right: 6px;
-}
-
-table.table-bordered.dataTable {
-  border-right-width: 0;
-}
-table.table-bordered.dataTable th,
-table.table-bordered.dataTable td {
-  border-left-width: 0;
-}
-table.table-bordered.dataTable th:last-child, table.table-bordered.dataTable th:last-child,
-table.table-bordered.dataTable td:last-child,
-table.table-bordered.dataTable td:last-child {
-  border-right-width: 1px;
-}
-table.table-bordered.dataTable tbody th,
-table.table-bordered.dataTable tbody td {
-  border-bottom-width: 0;
-}
-
-div.dataTables_scrollHead table.table-bordered {
-  border-bottom-width: 0;
-}
-
-div.table-responsive > div.dataTables_wrapper > div.row {
-  margin: 0;
-}
-div.table-responsive > div.dataTables_wrapper > div.row > div[class^="col-"]:first-child {
-  padding-left: 0;
-}
-div.table-responsive > div.dataTables_wrapper > div.row > div[class^="col-"]:last-child {
-  padding-right: 0;
-}
diff --git a/DataTables/DataTables-1.10.21/css/dataTables.bootstrap.min.css b/DataTables/DataTables-1.10.21/css/dataTables.bootstrap.min.css
deleted file mode 100644
index 7913766..0000000
--- a/DataTables/DataTables-1.10.21/css/dataTables.bootstrap.min.css
+++ /dev/null
@@ -1 +0,0 @@
-table.dataTable{clear:both;margin-top:6px !important;margin-bottom:6px !important;max-width:none !important;border-collapse:separate !important}table.dataTable td,table.dataTable th{-webkit-box-sizing:content-box;box-sizing:content-box}table.dataTable td.dataTables_empty,table.dataTable th.dataTables_empty{text-align:center}table.dataTable.nowrap th,table.dataTable.nowrap td{white-space:nowrap}div.dataTables_wrapper div.dataTables_length label{font-weight:normal;text-align:left;white-space:nowrap}div.dataTables_wrapper div.dataTables_length select{width:75px;display:inline-block}div.dataTables_wrapper div.dataTables_filter{text-align:right}div.dataTables_wrapper div.dataTables_filter label{font-weight:normal;white-space:nowrap;text-align:left}div.dataTables_wrapper div.dataTables_filter input{margin-left:0.5em;display:inline-block;width:auto}div.dataTables_wrapper div.dataTables_info{padding-top:8px;white-space:nowrap}div.dataTables_wrapper div.dataTables_paginate{margin:0;white-space:nowrap;text-align:right}div.dataTables_wrapper div.dataTables_paginate ul.pagination{margin:2px 0;white-space:nowrap}div.dataTables_wrapper div.dataTables_processing{position:absolute;top:50%;left:50%;width:200px;margin-left:-100px;margin-top:-26px;text-align:center;padding:1em 0}table.dataTable thead>tr>th.sorting_asc,table.dataTable thead>tr>th.sorting_desc,table.dataTable thead>tr>th.sorting,table.dataTable thead>tr>td.sorting_asc,table.dataTable thead>tr>td.sorting_desc,table.dataTable thead>tr>td.sorting{padding-right:30px}table.dataTable thead>tr>th:active,table.dataTable thead>tr>td:active{outline:none}table.dataTable thead .sorting,table.dataTable thead .sorting_asc,table.dataTable thead .sorting_desc,table.dataTable thead .sorting_asc_disabled,table.dataTable thead .sorting_desc_disabled{cursor:pointer;position:relative}table.dataTable thead .sorting:after,table.dataTable thead .sorting_asc:after,table.dataTable thead .sorting_desc:after,table.dataTable thead .sorting_asc_disabled:after,table.dataTable thead .sorting_desc_disabled:after{position:absolute;bottom:8px;right:8px;display:block;font-family:'Glyphicons Halflings';opacity:0.5}table.dataTable thead .sorting:after{opacity:0.2;content:"\e150"}table.dataTable thead .sorting_asc:after{content:"\e155"}table.dataTable thead .sorting_desc:after{content:"\e156"}table.dataTable thead .sorting_asc_disabled:after,table.dataTable thead .sorting_desc_disabled:after{color:#eee}div.dataTables_scrollHead table.dataTable{margin-bottom:0 !important}div.dataTables_scrollBody>table{border-top:none;margin-top:0 !important;margin-bottom:0 !important}div.dataTables_scrollBody>table>thead .sorting:after,div.dataTables_scrollBody>table>thead .sorting_asc:after,div.dataTables_scrollBody>table>thead .sorting_desc:after{display:none}div.dataTables_scrollBody>table>tbody>tr:first-child>th,div.dataTables_scrollBody>table>tbody>tr:first-child>td{border-top:none}div.dataTables_scrollFoot>.dataTables_scrollFootInner{box-sizing:content-box}div.dataTables_scrollFoot>.dataTables_scrollFootInner>table{margin-top:0 !important;border-top:none}@media screen and (max-width: 767px){div.dataTables_wrapper div.dataTables_length,div.dataTables_wrapper div.dataTables_filter,div.dataTables_wrapper div.dataTables_info,div.dataTables_wrapper div.dataTables_paginate{text-align:center}}table.dataTable.table-condensed>thead>tr>th{padding-right:20px}table.dataTable.table-condensed .sorting:after,table.dataTable.table-condensed .sorting_asc:after,table.dataTable.table-condensed .sorting_desc:after{top:6px;right:6px}table.table-bordered.dataTable{border-right-width:0}table.table-bordered.dataTable th,table.table-bordered.dataTable td{border-left-width:0}table.table-bordered.dataTable th:last-child,table.table-bordered.dataTable th:last-child,table.table-bordered.dataTable td:last-child,table.table-bordered.dataTable td:last-child{border-right-width:1px}table.table-bordered.dataTable tbody th,table.table-bordered.dataTable tbody td{border-bottom-width:0}div.dataTables_scrollHead table.table-bordered{border-bottom-width:0}div.table-responsive>div.dataTables_wrapper>div.row{margin:0}div.table-responsive>div.dataTables_wrapper>div.row>div[class^="col-"]:first-child{padding-left:0}div.table-responsive>div.dataTables_wrapper>div.row>div[class^="col-"]:last-child{padding-right:0}
diff --git a/DataTables/DataTables-1.10.21/css/dataTables.bootstrap4.css b/DataTables/DataTables-1.10.21/css/dataTables.bootstrap4.css
deleted file mode 100644
index e54d564..0000000
--- a/DataTables/DataTables-1.10.21/css/dataTables.bootstrap4.css
+++ /dev/null
@@ -1,212 +0,0 @@
-table.dataTable {
-  clear: both;
-  margin-top: 6px !important;
-  margin-bottom: 6px !important;
-  max-width: none !important;
-  border-collapse: separate !important;
-  border-spacing: 0;
-}
-table.dataTable td,
-table.dataTable th {
-  -webkit-box-sizing: content-box;
-  box-sizing: content-box;
-}
-table.dataTable td.dataTables_empty,
-table.dataTable th.dataTables_empty {
-  text-align: center;
-}
-table.dataTable.nowrap th,
-table.dataTable.nowrap td {
-  white-space: nowrap;
-}
-
-div.dataTables_wrapper div.dataTables_length label {
-  font-weight: normal;
-  text-align: left;
-  white-space: nowrap;
-}
-div.dataTables_wrapper div.dataTables_length select {
-  width: auto;
-  display: inline-block;
-}
-div.dataTables_wrapper div.dataTables_filter {
-  text-align: right;
-}
-div.dataTables_wrapper div.dataTables_filter label {
-  font-weight: normal;
-  white-space: nowrap;
-  text-align: left;
-}
-div.dataTables_wrapper div.dataTables_filter input {
-  margin-left: 0.5em;
-  display: inline-block;
-  width: auto;
-}
-div.dataTables_wrapper div.dataTables_info {
-  padding-top: 0.85em;
-  white-space: nowrap;
-}
-div.dataTables_wrapper div.dataTables_paginate {
-  margin: 0;
-  white-space: nowrap;
-  text-align: right;
-}
-div.dataTables_wrapper div.dataTables_paginate ul.pagination {
-  margin: 2px 0;
-  white-space: nowrap;
-  justify-content: flex-end;
-}
-div.dataTables_wrapper div.dataTables_processing {
-  position: absolute;
-  top: 50%;
-  left: 50%;
-  width: 200px;
-  margin-left: -100px;
-  margin-top: -26px;
-  text-align: center;
-  padding: 1em 0;
-}
-
-table.dataTable thead > tr > th.sorting_asc, table.dataTable thead > tr > th.sorting_desc, table.dataTable thead > tr > th.sorting,
-table.dataTable thead > tr > td.sorting_asc,
-table.dataTable thead > tr > td.sorting_desc,
-table.dataTable thead > tr > td.sorting {
-  padding-right: 30px;
-}
-table.dataTable thead > tr > th:active,
-table.dataTable thead > tr > td:active {
-  outline: none;
-}
-table.dataTable thead .sorting,
-table.dataTable thead .sorting_asc,
-table.dataTable thead .sorting_desc,
-table.dataTable thead .sorting_asc_disabled,
-table.dataTable thead .sorting_desc_disabled {
-  cursor: pointer;
-  position: relative;
-}
-table.dataTable thead .sorting:before, table.dataTable thead .sorting:after,
-table.dataTable thead .sorting_asc:before,
-table.dataTable thead .sorting_asc:after,
-table.dataTable thead .sorting_desc:before,
-table.dataTable thead .sorting_desc:after,
-table.dataTable thead .sorting_asc_disabled:before,
-table.dataTable thead .sorting_asc_disabled:after,
-table.dataTable thead .sorting_desc_disabled:before,
-table.dataTable thead .sorting_desc_disabled:after {
-  position: absolute;
-  bottom: 0.9em;
-  display: block;
-  opacity: 0.3;
-}
-table.dataTable thead .sorting:before,
-table.dataTable thead .sorting_asc:before,
-table.dataTable thead .sorting_desc:before,
-table.dataTable thead .sorting_asc_disabled:before,
-table.dataTable thead .sorting_desc_disabled:before {
-  right: 1em;
-  content: "\2191";
-}
-table.dataTable thead .sorting:after,
-table.dataTable thead .sorting_asc:after,
-table.dataTable thead .sorting_desc:after,
-table.dataTable thead .sorting_asc_disabled:after,
-table.dataTable thead .sorting_desc_disabled:after {
-  right: 0.5em;
-  content: "\2193";
-}
-table.dataTable thead .sorting_asc:before,
-table.dataTable thead .sorting_desc:after {
-  opacity: 1;
-}
-table.dataTable thead .sorting_asc_disabled:before,
-table.dataTable thead .sorting_desc_disabled:after {
-  opacity: 0;
-}
-
-div.dataTables_scrollHead table.dataTable {
-  margin-bottom: 0 !important;
-}
-
-div.dataTables_scrollBody table {
-  border-top: none;
-  margin-top: 0 !important;
-  margin-bottom: 0 !important;
-}
-div.dataTables_scrollBody table thead .sorting:before,
-div.dataTables_scrollBody table thead .sorting_asc:before,
-div.dataTables_scrollBody table thead .sorting_desc:before,
-div.dataTables_scrollBody table thead .sorting:after,
-div.dataTables_scrollBody table thead .sorting_asc:after,
-div.dataTables_scrollBody table thead .sorting_desc:after {
-  display: none;
-}
-div.dataTables_scrollBody table tbody tr:first-child th,
-div.dataTables_scrollBody table tbody tr:first-child td {
-  border-top: none;
-}
-
-div.dataTables_scrollFoot > .dataTables_scrollFootInner {
-  box-sizing: content-box;
-}
-div.dataTables_scrollFoot > .dataTables_scrollFootInner > table {
-  margin-top: 0 !important;
-  border-top: none;
-}
-
-@media screen and (max-width: 767px) {
-  div.dataTables_wrapper div.dataTables_length,
-  div.dataTables_wrapper div.dataTables_filter,
-  div.dataTables_wrapper div.dataTables_info,
-  div.dataTables_wrapper div.dataTables_paginate {
-    text-align: center;
-  }
-  div.dataTables_wrapper div.dataTables_paginate ul.pagination {
-    justify-content: center !important;
-  }
-}
-table.dataTable.table-sm > thead > tr > th :not(.sorting_disabled) {
-  padding-right: 20px;
-}
-table.dataTable.table-sm .sorting:before,
-table.dataTable.table-sm .sorting_asc:before,
-table.dataTable.table-sm .sorting_desc:before {
-  top: 5px;
-  right: 0.85em;
-}
-table.dataTable.table-sm .sorting:after,
-table.dataTable.table-sm .sorting_asc:after,
-table.dataTable.table-sm .sorting_desc:after {
-  top: 5px;
-}
-
-table.table-bordered.dataTable {
-  border-right-width: 0;
-}
-table.table-bordered.dataTable th,
-table.table-bordered.dataTable td {
-  border-left-width: 0;
-}
-table.table-bordered.dataTable th:last-child, table.table-bordered.dataTable th:last-child,
-table.table-bordered.dataTable td:last-child,
-table.table-bordered.dataTable td:last-child {
-  border-right-width: 1px;
-}
-table.table-bordered.dataTable tbody th,
-table.table-bordered.dataTable tbody td {
-  border-bottom-width: 0;
-}
-
-div.dataTables_scrollHead table.table-bordered {
-  border-bottom-width: 0;
-}
-
-div.table-responsive > div.dataTables_wrapper > div.row {
-  margin: 0;
-}
-div.table-responsive > div.dataTables_wrapper > div.row > div[class^="col-"]:first-child {
-  padding-left: 0;
-}
-div.table-responsive > div.dataTables_wrapper > div.row > div[class^="col-"]:last-child {
-  padding-right: 0;
-}
diff --git a/DataTables/DataTables-1.10.21/css/dataTables.bootstrap4.min.css b/DataTables/DataTables-1.10.21/css/dataTables.bootstrap4.min.css
deleted file mode 100644
index 047788e..0000000
--- a/DataTables/DataTables-1.10.21/css/dataTables.bootstrap4.min.css
+++ /dev/null
@@ -1 +0,0 @@
-table.dataTable{clear:both;margin-top:6px !important;margin-bottom:6px !important;max-width:none !important;border-collapse:separate !important;border-spacing:0}table.dataTable td,table.dataTable th{-webkit-box-sizing:content-box;box-sizing:content-box}table.dataTable td.dataTables_empty,table.dataTable th.dataTables_empty{text-align:center}table.dataTable.nowrap th,table.dataTable.nowrap td{white-space:nowrap}div.dataTables_wrapper div.dataTables_length label{font-weight:normal;text-align:left;white-space:nowrap}div.dataTables_wrapper div.dataTables_length select{width:auto;display:inline-block}div.dataTables_wrapper div.dataTables_filter{text-align:right}div.dataTables_wrapper div.dataTables_filter label{font-weight:normal;white-space:nowrap;text-align:left}div.dataTables_wrapper div.dataTables_filter input{margin-left:0.5em;display:inline-block;width:auto}div.dataTables_wrapper div.dataTables_info{padding-top:0.85em;white-space:nowrap}div.dataTables_wrapper div.dataTables_paginate{margin:0;white-space:nowrap;text-align:right}div.dataTables_wrapper div.dataTables_paginate ul.pagination{margin:2px 0;white-space:nowrap;justify-content:flex-end}div.dataTables_wrapper div.dataTables_processing{position:absolute;top:50%;left:50%;width:200px;margin-left:-100px;margin-top:-26px;text-align:center;padding:1em 0}table.dataTable thead>tr>th.sorting_asc,table.dataTable thead>tr>th.sorting_desc,table.dataTable thead>tr>th.sorting,table.dataTable thead>tr>td.sorting_asc,table.dataTable thead>tr>td.sorting_desc,table.dataTable thead>tr>td.sorting{padding-right:30px}table.dataTable thead>tr>th:active,table.dataTable thead>tr>td:active{outline:none}table.dataTable thead .sorting,table.dataTable thead .sorting_asc,table.dataTable thead .sorting_desc,table.dataTable thead .sorting_asc_disabled,table.dataTable thead .sorting_desc_disabled{cursor:pointer;position:relative}table.dataTable thead .sorting:before,table.dataTable thead .sorting:after,table.dataTable thead .sorting_asc:before,table.dataTable thead .sorting_asc:after,table.dataTable thead .sorting_desc:before,table.dataTable thead .sorting_desc:after,table.dataTable thead .sorting_asc_disabled:before,table.dataTable thead .sorting_asc_disabled:after,table.dataTable thead .sorting_desc_disabled:before,table.dataTable thead .sorting_desc_disabled:after{position:absolute;bottom:0.9em;display:block;opacity:0.3}table.dataTable thead .sorting:before,table.dataTable thead .sorting_asc:before,table.dataTable thead .sorting_desc:before,table.dataTable thead .sorting_asc_disabled:before,table.dataTable thead .sorting_desc_disabled:before{right:1em;content:"\2191"}table.dataTable thead .sorting:after,table.dataTable thead .sorting_asc:after,table.dataTable thead .sorting_desc:after,table.dataTable thead .sorting_asc_disabled:after,table.dataTable thead .sorting_desc_disabled:after{right:0.5em;content:"\2193"}table.dataTable thead .sorting_asc:before,table.dataTable thead .sorting_desc:after{opacity:1}table.dataTable thead .sorting_asc_disabled:before,table.dataTable thead .sorting_desc_disabled:after{opacity:0}div.dataTables_scrollHead table.dataTable{margin-bottom:0 !important}div.dataTables_scrollBody table{border-top:none;margin-top:0 !important;margin-bottom:0 !important}div.dataTables_scrollBody table thead .sorting:before,div.dataTables_scrollBody table thead .sorting_asc:before,div.dataTables_scrollBody table thead .sorting_desc:before,div.dataTables_scrollBody table thead .sorting:after,div.dataTables_scrollBody table thead .sorting_asc:after,div.dataTables_scrollBody table thead .sorting_desc:after{display:none}div.dataTables_scrollBody table tbody tr:first-child th,div.dataTables_scrollBody table tbody tr:first-child td{border-top:none}div.dataTables_scrollFoot>.dataTables_scrollFootInner{box-sizing:content-box}div.dataTables_scrollFoot>.dataTables_scrollFootInner>table{margin-top:0 !important;border-top:none}@media screen and (max-width: 767px){div.dataTables_wrapper div.dataTables_length,div.dataTables_wrapper div.dataTables_filter,div.dataTables_wrapper div.dataTables_info,div.dataTables_wrapper div.dataTables_paginate{text-align:center}div.dataTables_wrapper div.dataTables_paginate ul.pagination{justify-content:center !important}}table.dataTable.table-sm>thead>tr>th :not(.sorting_disabled){padding-right:20px}table.dataTable.table-sm .sorting:before,table.dataTable.table-sm .sorting_asc:before,table.dataTable.table-sm .sorting_desc:before{top:5px;right:0.85em}table.dataTable.table-sm .sorting:after,table.dataTable.table-sm .sorting_asc:after,table.dataTable.table-sm .sorting_desc:after{top:5px}table.table-bordered.dataTable{border-right-width:0}table.table-bordered.dataTable th,table.table-bordered.dataTable td{border-left-width:0}table.table-bordered.dataTable th:last-child,table.table-bordered.dataTable th:last-child,table.table-bordered.dataTable td:last-child,table.table-bordered.dataTable td:last-child{border-right-width:1px}table.table-bordered.dataTable tbody th,table.table-bordered.dataTable tbody td{border-bottom-width:0}div.dataTables_scrollHead table.table-bordered{border-bottom-width:0}div.table-responsive>div.dataTables_wrapper>div.row{margin:0}div.table-responsive>div.dataTables_wrapper>div.row>div[class^="col-"]:first-child{padding-left:0}div.table-responsive>div.dataTables_wrapper>div.row>div[class^="col-"]:last-child{padding-right:0}
diff --git a/DataTables/DataTables-1.10.21/css/dataTables.foundation.css b/DataTables/DataTables-1.10.21/css/dataTables.foundation.css
deleted file mode 100644
index 79848c9..0000000
--- a/DataTables/DataTables-1.10.21/css/dataTables.foundation.css
+++ /dev/null
@@ -1,118 +0,0 @@
-table.dataTable {
-  clear: both;
-  margin: 0.5em 0 !important;
-  max-width: none !important;
-  width: 100%;
-}
-table.dataTable td,
-table.dataTable th {
-  -webkit-box-sizing: content-box;
-  box-sizing: content-box;
-}
-table.dataTable td.dataTables_empty,
-table.dataTable th.dataTables_empty {
-  text-align: center;
-}
-table.dataTable.nowrap th, table.dataTable.nowrap td {
-  white-space: nowrap;
-}
-
-div.dataTables_wrapper {
-  position: relative;
-}
-div.dataTables_wrapper div.dataTables_length label {
-  float: left;
-  text-align: left;
-  margin-bottom: 0;
-}
-div.dataTables_wrapper div.dataTables_length select {
-  width: 75px;
-  margin-bottom: 0;
-}
-div.dataTables_wrapper div.dataTables_filter label {
-  float: right;
-  margin-bottom: 0;
-}
-div.dataTables_wrapper div.dataTables_filter input {
-  display: inline-block !important;
-  width: auto !important;
-  margin-bottom: 0;
-  margin-left: 0.5em;
-}
-div.dataTables_wrapper div.dataTables_info {
-  padding-top: 2px;
-}
-div.dataTables_wrapper div.dataTables_paginate {
-  float: right;
-  margin: 0;
-}
-div.dataTables_wrapper div.dataTables_processing {
-  position: absolute;
-  top: 50%;
-  left: 50%;
-  width: 200px;
-  margin-left: -100px;
-  margin-top: -26px;
-  text-align: center;
-  padding: 1rem 0;
-}
-
-table.dataTable thead > tr > th.sorting_asc, table.dataTable thead > tr > th.sorting_desc, table.dataTable thead > tr > th.sorting,
-table.dataTable thead > tr > td.sorting_asc,
-table.dataTable thead > tr > td.sorting_desc,
-table.dataTable thead > tr > td.sorting {
-  padding-right: 1.5rem;
-}
-table.dataTable thead > tr > th:active,
-table.dataTable thead > tr > td:active {
-  outline: none;
-}
-table.dataTable thead .sorting,
-table.dataTable thead .sorting_asc,
-table.dataTable thead .sorting_desc,
-table.dataTable thead .sorting_asc_disabled,
-table.dataTable thead .sorting_desc_disabled {
-  cursor: pointer;
-}
-table.dataTable thead .sorting,
-table.dataTable thead .sorting_asc,
-table.dataTable thead .sorting_desc,
-table.dataTable thead .sorting_asc_disabled,
-table.dataTable thead .sorting_desc_disabled {
-  background-repeat: no-repeat;
-  background-position: center right;
-}
-table.dataTable thead .sorting {
-  background-image: url("../images/sort_both.png");
-}
-table.dataTable thead .sorting_asc {
-  background-image: url("../images/sort_asc.png");
-}
-table.dataTable thead .sorting_desc {
-  background-image: url("../images/sort_desc.png");
-}
-table.dataTable thead .sorting_asc_disabled {
-  background-image: url("../images/sort_asc_disabled.png");
-}
-table.dataTable thead .sorting_desc_disabled {
-  background-image: url("../images/sort_desc_disabled.png");
-}
-
-div.dataTables_scrollHead table {
-  margin-bottom: 0 !important;
-}
-
-div.dataTables_scrollBody table {
-  border-top: none;
-  margin-top: 0 !important;
-  margin-bottom: 0 !important;
-}
-div.dataTables_scrollBody table tbody tr:first-child th,
-div.dataTables_scrollBody table tbody tr:first-child td {
-  border-top: none;
-}
-
-div.dataTables_scrollFoot table {
-  margin-top: 0 !important;
-  border-top: none;
-}
diff --git a/DataTables/DataTables-1.10.21/css/dataTables.foundation.min.css b/DataTables/DataTables-1.10.21/css/dataTables.foundation.min.css
deleted file mode 100644
index 73af41e..0000000
--- a/DataTables/DataTables-1.10.21/css/dataTables.foundation.min.css
+++ /dev/null
@@ -1 +0,0 @@
-table.dataTable{clear:both;margin:0.5em 0 !important;max-width:none !important;width:100%}table.dataTable td,table.dataTable th{-webkit-box-sizing:content-box;box-sizing:content-box}table.dataTable td.dataTables_empty,table.dataTable th.dataTables_empty{text-align:center}table.dataTable.nowrap th,table.dataTable.nowrap td{white-space:nowrap}div.dataTables_wrapper{position:relative}div.dataTables_wrapper div.dataTables_length label{float:left;text-align:left;margin-bottom:0}div.dataTables_wrapper div.dataTables_length select{width:75px;margin-bottom:0}div.dataTables_wrapper div.dataTables_filter label{float:right;margin-bottom:0}div.dataTables_wrapper div.dataTables_filter input{display:inline-block !important;width:auto !important;margin-bottom:0;margin-left:0.5em}div.dataTables_wrapper div.dataTables_info{padding-top:2px}div.dataTables_wrapper div.dataTables_paginate{float:right;margin:0}div.dataTables_wrapper div.dataTables_processing{position:absolute;top:50%;left:50%;width:200px;margin-left:-100px;margin-top:-26px;text-align:center;padding:1rem 0}table.dataTable thead>tr>th.sorting_asc,table.dataTable thead>tr>th.sorting_desc,table.dataTable thead>tr>th.sorting,table.dataTable thead>tr>td.sorting_asc,table.dataTable thead>tr>td.sorting_desc,table.dataTable thead>tr>td.sorting{padding-right:1.5rem}table.dataTable thead>tr>th:active,table.dataTable thead>tr>td:active{outline:none}table.dataTable thead .sorting,table.dataTable thead .sorting_asc,table.dataTable thead .sorting_desc,table.dataTable thead .sorting_asc_disabled,table.dataTable thead .sorting_desc_disabled{cursor:pointer}table.dataTable thead .sorting,table.dataTable thead .sorting_asc,table.dataTable thead .sorting_desc,table.dataTable thead .sorting_asc_disabled,table.dataTable thead .sorting_desc_disabled{background-repeat:no-repeat;background-position:center right}table.dataTable thead .sorting{background-image:url("../images/sort_both.png")}table.dataTable thead .sorting_asc{background-image:url("../images/sort_asc.png")}table.dataTable thead .sorting_desc{background-image:url("../images/sort_desc.png")}table.dataTable thead .sorting_asc_disabled{background-image:url("../images/sort_asc_disabled.png")}table.dataTable thead .sorting_desc_disabled{background-image:url("../images/sort_desc_disabled.png")}div.dataTables_scrollHead table{margin-bottom:0 !important}div.dataTables_scrollBody table{border-top:none;margin-top:0 !important;margin-bottom:0 !important}div.dataTables_scrollBody table tbody tr:first-child th,div.dataTables_scrollBody table tbody tr:first-child td{border-top:none}div.dataTables_scrollFoot table{margin-top:0 !important;border-top:none}
diff --git a/DataTables/DataTables-1.10.21/css/dataTables.jqueryui.css b/DataTables/DataTables-1.10.21/css/dataTables.jqueryui.css
deleted file mode 100644
index 6b079de..0000000
--- a/DataTables/DataTables-1.10.21/css/dataTables.jqueryui.css
+++ /dev/null
@@ -1,481 +0,0 @@
-/*
- * Table styles
- */
-table.dataTable {
-  width: 100%;
-  margin: 0 auto;
-  clear: both;
-  border-collapse: separate;
-  border-spacing: 0;
-  /*
-   * Header and footer styles
-   */
-  /*
-   * Body styles
-   */
-}
-table.dataTable thead th,
-table.dataTable tfoot th {
-  font-weight: bold;
-}
-table.dataTable thead th,
-table.dataTable thead td {
-  padding: 10px 18px;
-}
-table.dataTable thead th:active,
-table.dataTable thead td:active {
-  outline: none;
-}
-table.dataTable tfoot th,
-table.dataTable tfoot td {
-  padding: 10px 18px 6px 18px;
-}
-table.dataTable tbody tr {
-  background-color: #ffffff;
-}
-table.dataTable tbody tr.selected {
-  background-color: #B0BED9;
-}
-table.dataTable tbody th,
-table.dataTable tbody td {
-  padding: 8px 10px;
-}
-table.dataTable.row-border tbody th, table.dataTable.row-border tbody td, table.dataTable.display tbody th, table.dataTable.display tbody td {
-  border-top: 1px solid #ddd;
-}
-table.dataTable.row-border tbody tr:first-child th,
-table.dataTable.row-border tbody tr:first-child td, table.dataTable.display tbody tr:first-child th,
-table.dataTable.display tbody tr:first-child td {
-  border-top: none;
-}
-table.dataTable.cell-border tbody th, table.dataTable.cell-border tbody td {
-  border-top: 1px solid #ddd;
-  border-right: 1px solid #ddd;
-}
-table.dataTable.cell-border tbody tr th:first-child,
-table.dataTable.cell-border tbody tr td:first-child {
-  border-left: 1px solid #ddd;
-}
-table.dataTable.cell-border tbody tr:first-child th,
-table.dataTable.cell-border tbody tr:first-child td {
-  border-top: none;
-}
-table.dataTable.stripe tbody tr.odd, table.dataTable.display tbody tr.odd {
-  background-color: #f9f9f9;
-}
-table.dataTable.stripe tbody tr.odd.selected, table.dataTable.display tbody tr.odd.selected {
-  background-color: #acbad4;
-}
-table.dataTable.hover tbody tr:hover, table.dataTable.display tbody tr:hover {
-  background-color: #f6f6f6;
-}
-table.dataTable.hover tbody tr:hover.selected, table.dataTable.display tbody tr:hover.selected {
-  background-color: #aab7d1;
-}
-table.dataTable.order-column tbody tr > .sorting_1,
-table.dataTable.order-column tbody tr > .sorting_2,
-table.dataTable.order-column tbody tr > .sorting_3, table.dataTable.display tbody tr > .sorting_1,
-table.dataTable.display tbody tr > .sorting_2,
-table.dataTable.display tbody tr > .sorting_3 {
-  background-color: #fafafa;
-}
-table.dataTable.order-column tbody tr.selected > .sorting_1,
-table.dataTable.order-column tbody tr.selected > .sorting_2,
-table.dataTable.order-column tbody tr.selected > .sorting_3, table.dataTable.display tbody tr.selected > .sorting_1,
-table.dataTable.display tbody tr.selected > .sorting_2,
-table.dataTable.display tbody tr.selected > .sorting_3 {
-  background-color: #acbad5;
-}
-table.dataTable.display tbody tr.odd > .sorting_1, table.dataTable.order-column.stripe tbody tr.odd > .sorting_1 {
-  background-color: #f1f1f1;
-}
-table.dataTable.display tbody tr.odd > .sorting_2, table.dataTable.order-column.stripe tbody tr.odd > .sorting_2 {
-  background-color: #f3f3f3;
-}
-table.dataTable.display tbody tr.odd > .sorting_3, table.dataTable.order-column.stripe tbody tr.odd > .sorting_3 {
-  background-color: whitesmoke;
-}
-table.dataTable.display tbody tr.odd.selected > .sorting_1, table.dataTable.order-column.stripe tbody tr.odd.selected > .sorting_1 {
-  background-color: #a6b4cd;
-}
-table.dataTable.display tbody tr.odd.selected > .sorting_2, table.dataTable.order-column.stripe tbody tr.odd.selected > .sorting_2 {
-  background-color: #a8b5cf;
-}
-table.dataTable.display tbody tr.odd.selected > .sorting_3, table.dataTable.order-column.stripe tbody tr.odd.selected > .sorting_3 {
-  background-color: #a9b7d1;
-}
-table.dataTable.display tbody tr.even > .sorting_1, table.dataTable.order-column.stripe tbody tr.even > .sorting_1 {
-  background-color: #fafafa;
-}
-table.dataTable.display tbody tr.even > .sorting_2, table.dataTable.order-column.stripe tbody tr.even > .sorting_2 {
-  background-color: #fcfcfc;
-}
-table.dataTable.display tbody tr.even > .sorting_3, table.dataTable.order-column.stripe tbody tr.even > .sorting_3 {
-  background-color: #fefefe;
-}
-table.dataTable.display tbody tr.even.selected > .sorting_1, table.dataTable.order-column.stripe tbody tr.even.selected > .sorting_1 {
-  background-color: #acbad5;
-}
-table.dataTable.display tbody tr.even.selected > .sorting_2, table.dataTable.order-column.stripe tbody tr.even.selected > .sorting_2 {
-  background-color: #aebcd6;
-}
-table.dataTable.display tbody tr.even.selected > .sorting_3, table.dataTable.order-column.stripe tbody tr.even.selected > .sorting_3 {
-  background-color: #afbdd8;
-}
-table.dataTable.display tbody tr:hover > .sorting_1, table.dataTable.order-column.hover tbody tr:hover > .sorting_1 {
-  background-color: #eaeaea;
-}
-table.dataTable.display tbody tr:hover > .sorting_2, table.dataTable.order-column.hover tbody tr:hover > .sorting_2 {
-  background-color: #ececec;
-}
-table.dataTable.display tbody tr:hover > .sorting_3, table.dataTable.order-column.hover tbody tr:hover > .sorting_3 {
-  background-color: #efefef;
-}
-table.dataTable.display tbody tr:hover.selected > .sorting_1, table.dataTable.order-column.hover tbody tr:hover.selected > .sorting_1 {
-  background-color: #a2aec7;
-}
-table.dataTable.display tbody tr:hover.selected > .sorting_2, table.dataTable.order-column.hover tbody tr:hover.selected > .sorting_2 {
-  background-color: #a3b0c9;
-}
-table.dataTable.display tbody tr:hover.selected > .sorting_3, table.dataTable.order-column.hover tbody tr:hover.selected > .sorting_3 {
-  background-color: #a5b2cb;
-}
-table.dataTable.no-footer {
-  border-bottom: 1px solid #111;
-}
-table.dataTable.nowrap th, table.dataTable.nowrap td {
-  white-space: nowrap;
-}
-table.dataTable.compact thead th,
-table.dataTable.compact thead td {
-  padding: 4px 17px;
-}
-table.dataTable.compact tfoot th,
-table.dataTable.compact tfoot td {
-  padding: 4px;
-}
-table.dataTable.compact tbody th,
-table.dataTable.compact tbody td {
-  padding: 4px;
-}
-table.dataTable th.dt-left,
-table.dataTable td.dt-left {
-  text-align: left;
-}
-table.dataTable th.dt-center,
-table.dataTable td.dt-center,
-table.dataTable td.dataTables_empty {
-  text-align: center;
-}
-table.dataTable th.dt-right,
-table.dataTable td.dt-right {
-  text-align: right;
-}
-table.dataTable th.dt-justify,
-table.dataTable td.dt-justify {
-  text-align: justify;
-}
-table.dataTable th.dt-nowrap,
-table.dataTable td.dt-nowrap {
-  white-space: nowrap;
-}
-table.dataTable thead th.dt-head-left,
-table.dataTable thead td.dt-head-left,
-table.dataTable tfoot th.dt-head-left,
-table.dataTable tfoot td.dt-head-left {
-  text-align: left;
-}
-table.dataTable thead th.dt-head-center,
-table.dataTable thead td.dt-head-center,
-table.dataTable tfoot th.dt-head-center,
-table.dataTable tfoot td.dt-head-center {
-  text-align: center;
-}
-table.dataTable thead th.dt-head-right,
-table.dataTable thead td.dt-head-right,
-table.dataTable tfoot th.dt-head-right,
-table.dataTable tfoot td.dt-head-right {
-  text-align: right;
-}
-table.dataTable thead th.dt-head-justify,
-table.dataTable thead td.dt-head-justify,
-table.dataTable tfoot th.dt-head-justify,
-table.dataTable tfoot td.dt-head-justify {
-  text-align: justify;
-}
-table.dataTable thead th.dt-head-nowrap,
-table.dataTable thead td.dt-head-nowrap,
-table.dataTable tfoot th.dt-head-nowrap,
-table.dataTable tfoot td.dt-head-nowrap {
-  white-space: nowrap;
-}
-table.dataTable tbody th.dt-body-left,
-table.dataTable tbody td.dt-body-left {
-  text-align: left;
-}
-table.dataTable tbody th.dt-body-center,
-table.dataTable tbody td.dt-body-center {
-  text-align: center;
-}
-table.dataTable tbody th.dt-body-right,
-table.dataTable tbody td.dt-body-right {
-  text-align: right;
-}
-table.dataTable tbody th.dt-body-justify,
-table.dataTable tbody td.dt-body-justify {
-  text-align: justify;
-}
-table.dataTable tbody th.dt-body-nowrap,
-table.dataTable tbody td.dt-body-nowrap {
-  white-space: nowrap;
-}
-
-table.dataTable,
-table.dataTable th,
-table.dataTable td {
-  box-sizing: content-box;
-}
-
-/*
- * Control feature layout
- */
-.dataTables_wrapper {
-  position: relative;
-  clear: both;
-  *zoom: 1;
-  zoom: 1;
-}
-.dataTables_wrapper .dataTables_length {
-  float: left;
-}
-.dataTables_wrapper .dataTables_filter {
-  float: right;
-  text-align: right;
-}
-.dataTables_wrapper .dataTables_filter input {
-  margin-left: 0.5em;
-}
-.dataTables_wrapper .dataTables_info {
-  clear: both;
-  float: left;
-  padding-top: 0.755em;
-}
-.dataTables_wrapper .dataTables_paginate {
-  float: right;
-  text-align: right;
-  padding-top: 0.25em;
-}
-.dataTables_wrapper .dataTables_paginate .paginate_button {
-  box-sizing: border-box;
-  display: inline-block;
-  min-width: 1.5em;
-  padding: 0.5em 1em;
-  margin-left: 2px;
-  text-align: center;
-  text-decoration: none !important;
-  cursor: pointer;
-  *cursor: hand;
-  color: #333 !important;
-  border: 1px solid transparent;
-  border-radius: 2px;
-}
-.dataTables_wrapper .dataTables_paginate .paginate_button.current, .dataTables_wrapper .dataTables_paginate .paginate_button.current:hover {
-  color: #333 !important;
-  border: 1px solid #979797;
-  background-color: white;
-  background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, white), color-stop(100%, #dcdcdc));
-  /* Chrome,Safari4+ */
-  background: -webkit-linear-gradient(top, white 0%, #dcdcdc 100%);
-  /* Chrome10+,Safari5.1+ */
-  background: -moz-linear-gradient(top, white 0%, #dcdcdc 100%);
-  /* FF3.6+ */
-  background: -ms-linear-gradient(top, white 0%, #dcdcdc 100%);
-  /* IE10+ */
-  background: -o-linear-gradient(top, white 0%, #dcdcdc 100%);
-  /* Opera 11.10+ */
-  background: linear-gradient(to bottom, white 0%, #dcdcdc 100%);
-  /* W3C */
-}
-.dataTables_wrapper .dataTables_paginate .paginate_button.disabled, .dataTables_wrapper .dataTables_paginate .paginate_button.disabled:hover, .dataTables_wrapper .dataTables_paginate .paginate_button.disabled:active {
-  cursor: default;
-  color: #666 !important;
-  border: 1px solid transparent;
-  background: transparent;
-  box-shadow: none;
-}
-.dataTables_wrapper .dataTables_paginate .paginate_button:hover {
-  color: white !important;
-  border: 1px solid #111;
-  background-color: #585858;
-  background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #585858), color-stop(100%, #111));
-  /* Chrome,Safari4+ */
-  background: -webkit-linear-gradient(top, #585858 0%, #111 100%);
-  /* Chrome10+,Safari5.1+ */
-  background: -moz-linear-gradient(top, #585858 0%, #111 100%);
-  /* FF3.6+ */
-  background: -ms-linear-gradient(top, #585858 0%, #111 100%);
-  /* IE10+ */
-  background: -o-linear-gradient(top, #585858 0%, #111 100%);
-  /* Opera 11.10+ */
-  background: linear-gradient(to bottom, #585858 0%, #111 100%);
-  /* W3C */
-}
-.dataTables_wrapper .dataTables_paginate .paginate_button:active {
-  outline: none;
-  background-color: #2b2b2b;
-  background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #2b2b2b), color-stop(100%, #0c0c0c));
-  /* Chrome,Safari4+ */
-  background: -webkit-linear-gradient(top, #2b2b2b 0%, #0c0c0c 100%);
-  /* Chrome10+,Safari5.1+ */
-  background: -moz-linear-gradient(top, #2b2b2b 0%, #0c0c0c 100%);
-  /* FF3.6+ */
-  background: -ms-linear-gradient(top, #2b2b2b 0%, #0c0c0c 100%);
-  /* IE10+ */
-  background: -o-linear-gradient(top, #2b2b2b 0%, #0c0c0c 100%);
-  /* Opera 11.10+ */
-  background: linear-gradient(to bottom, #2b2b2b 0%, #0c0c0c 100%);
-  /* W3C */
-  box-shadow: inset 0 0 3px #111;
-}
-.dataTables_wrapper .dataTables_paginate .ellipsis {
-  padding: 0 1em;
-}
-.dataTables_wrapper .dataTables_processing {
-  position: absolute;
-  top: 50%;
-  left: 50%;
-  width: 100%;
-  height: 40px;
-  margin-left: -50%;
-  margin-top: -25px;
-  padding-top: 20px;
-  text-align: center;
-  font-size: 1.2em;
-  background-color: white;
-  background: -webkit-gradient(linear, left top, right top, color-stop(0%, rgba(255, 255, 255, 0)), color-stop(25%, rgba(255, 255, 255, 0.9)), color-stop(75%, rgba(255, 255, 255, 0.9)), color-stop(100%, rgba(255, 255, 255, 0)));
-  background: -webkit-linear-gradient(left, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 0.9) 25%, rgba(255, 255, 255, 0.9) 75%, rgba(255, 255, 255, 0) 100%);
-  background: -moz-linear-gradient(left, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 0.9) 25%, rgba(255, 255, 255, 0.9) 75%, rgba(255, 255, 255, 0) 100%);
-  background: -ms-linear-gradient(left, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 0.9) 25%, rgba(255, 255, 255, 0.9) 75%, rgba(255, 255, 255, 0) 100%);
-  background: -o-linear-gradient(left, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 0.9) 25%, rgba(255, 255, 255, 0.9) 75%, rgba(255, 255, 255, 0) 100%);
-  background: linear-gradient(to right, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 0.9) 25%, rgba(255, 255, 255, 0.9) 75%, rgba(255, 255, 255, 0) 100%);
-}
-.dataTables_wrapper .dataTables_length,
-.dataTables_wrapper .dataTables_filter,
-.dataTables_wrapper .dataTables_info,
-.dataTables_wrapper .dataTables_processing,
-.dataTables_wrapper .dataTables_paginate {
-  color: #333;
-}
-.dataTables_wrapper .dataTables_scroll {
-  clear: both;
-}
-.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody {
-  *margin-top: -1px;
-  -webkit-overflow-scrolling: touch;
-}
-.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody > table > thead > tr > th, .dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody > table > thead > tr > td, .dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody > table > tbody > tr > th, .dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody > table > tbody > tr > td {
-  vertical-align: middle;
-}
-.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody > table > thead > tr > th > div.dataTables_sizing,
-.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody > table > thead > tr > td > div.dataTables_sizing, .dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody > table > tbody > tr > th > div.dataTables_sizing,
-.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody > table > tbody > tr > td > div.dataTables_sizing {
-  height: 0;
-  overflow: hidden;
-  margin: 0 !important;
-  padding: 0 !important;
-}
-.dataTables_wrapper.no-footer .dataTables_scrollBody {
-  border-bottom: 1px solid #111;
-}
-.dataTables_wrapper.no-footer div.dataTables_scrollHead table.dataTable,
-.dataTables_wrapper.no-footer div.dataTables_scrollBody > table {
-  border-bottom: none;
-}
-.dataTables_wrapper:after {
-  visibility: hidden;
-  display: block;
-  content: "";
-  clear: both;
-  height: 0;
-}
-
-@media screen and (max-width: 767px) {
-  .dataTables_wrapper .dataTables_info,
-  .dataTables_wrapper .dataTables_paginate {
-    float: none;
-    text-align: center;
-  }
-  .dataTables_wrapper .dataTables_paginate {
-    margin-top: 0.5em;
-  }
-}
-@media screen and (max-width: 640px) {
-  .dataTables_wrapper .dataTables_length,
-  .dataTables_wrapper .dataTables_filter {
-    float: none;
-    text-align: center;
-  }
-  .dataTables_wrapper .dataTables_filter {
-    margin-top: 0.5em;
-  }
-}
-table.dataTable thead th div.DataTables_sort_wrapper {
-  position: relative;
-}
-table.dataTable thead th div.DataTables_sort_wrapper span {
-  position: absolute;
-  top: 50%;
-  margin-top: -8px;
-  right: -18px;
-}
-table.dataTable thead th.ui-state-default,
-table.dataTable tfoot th.ui-state-default {
-  border-left-width: 0;
-}
-table.dataTable thead th.ui-state-default:first-child,
-table.dataTable tfoot th.ui-state-default:first-child {
-  border-left-width: 1px;
-}
-
-/*
- * Control feature layout
- */
-.dataTables_wrapper .dataTables_paginate .fg-button {
-  box-sizing: border-box;
-  display: inline-block;
-  min-width: 1.5em;
-  padding: 0.5em;
-  margin-left: 2px;
-  text-align: center;
-  text-decoration: none !important;
-  cursor: pointer;
-  *cursor: hand;
-  border: 1px solid transparent;
-}
-.dataTables_wrapper .dataTables_paginate .fg-button:active {
-  outline: none;
-}
-.dataTables_wrapper .dataTables_paginate .fg-button:first-child {
-  border-top-left-radius: 3px;
-  border-bottom-left-radius: 3px;
-}
-.dataTables_wrapper .dataTables_paginate .fg-button:last-child {
-  border-top-right-radius: 3px;
-  border-bottom-right-radius: 3px;
-}
-.dataTables_wrapper .ui-widget-header {
-  font-weight: normal;
-}
-.dataTables_wrapper .ui-toolbar {
-  padding: 8px;
-}
-.dataTables_wrapper.no-footer .dataTables_scrollBody {
-  border-bottom: none;
-}
-.dataTables_wrapper .dataTables_length,
-.dataTables_wrapper .dataTables_filter,
-.dataTables_wrapper .dataTables_info,
-.dataTables_wrapper .dataTables_processing,
-.dataTables_wrapper .dataTables_paginate {
-  color: inherit;
-}
diff --git a/DataTables/DataTables-1.10.21/css/dataTables.jqueryui.min.css b/DataTables/DataTables-1.10.21/css/dataTables.jqueryui.min.css
deleted file mode 100644
index fc1dd45..0000000
--- a/DataTables/DataTables-1.10.21/css/dataTables.jqueryui.min.css
+++ /dev/null
@@ -1 +0,0 @@
-table.dataTable{width:100%;margin:0 auto;clear:both;border-collapse:separate;border-spacing:0}table.dataTable thead th,table.dataTable tfoot th{font-weight:bold}table.dataTable thead th,table.dataTable thead td{padding:10px 18px}table.dataTable thead th:active,table.dataTable thead td:active{outline:none}table.dataTable tfoot th,table.dataTable tfoot td{padding:10px 18px 6px 18px}table.dataTable tbody tr{background-color:#ffffff}table.dataTable tbody tr.selected{background-color:#B0BED9}table.dataTable tbody th,table.dataTable tbody td{padding:8px 10px}table.dataTable.row-border tbody th,table.dataTable.row-border tbody td,table.dataTable.display tbody th,table.dataTable.display tbody td{border-top:1px solid #ddd}table.dataTable.row-border tbody tr:first-child th,table.dataTable.row-border tbody tr:first-child td,table.dataTable.display tbody tr:first-child th,table.dataTable.display tbody tr:first-child td{border-top:none}table.dataTable.cell-border tbody th,table.dataTable.cell-border tbody td{border-top:1px solid #ddd;border-right:1px solid #ddd}table.dataTable.cell-border tbody tr th:first-child,table.dataTable.cell-border tbody tr td:first-child{border-left:1px solid #ddd}table.dataTable.cell-border tbody tr:first-child th,table.dataTable.cell-border tbody tr:first-child td{border-top:none}table.dataTable.stripe tbody tr.odd,table.dataTable.display tbody tr.odd{background-color:#f9f9f9}table.dataTable.stripe tbody tr.odd.selected,table.dataTable.display tbody tr.odd.selected{background-color:#acbad4}table.dataTable.hover tbody tr:hover,table.dataTable.display tbody tr:hover{background-color:#f6f6f6}table.dataTable.hover tbody tr:hover.selected,table.dataTable.display tbody tr:hover.selected{background-color:#aab7d1}table.dataTable.order-column tbody tr>.sorting_1,table.dataTable.order-column tbody tr>.sorting_2,table.dataTable.order-column tbody tr>.sorting_3,table.dataTable.display tbody tr>.sorting_1,table.dataTable.display tbody tr>.sorting_2,table.dataTable.display tbody tr>.sorting_3{background-color:#fafafa}table.dataTable.order-column tbody tr.selected>.sorting_1,table.dataTable.order-column tbody tr.selected>.sorting_2,table.dataTable.order-column tbody tr.selected>.sorting_3,table.dataTable.display tbody tr.selected>.sorting_1,table.dataTable.display tbody tr.selected>.sorting_2,table.dataTable.display tbody tr.selected>.sorting_3{background-color:#acbad5}table.dataTable.display tbody tr.odd>.sorting_1,table.dataTable.order-column.stripe tbody tr.odd>.sorting_1{background-color:#f1f1f1}table.dataTable.display tbody tr.odd>.sorting_2,table.dataTable.order-column.stripe tbody tr.odd>.sorting_2{background-color:#f3f3f3}table.dataTable.display tbody tr.odd>.sorting_3,table.dataTable.order-column.stripe tbody tr.odd>.sorting_3{background-color:whitesmoke}table.dataTable.display tbody tr.odd.selected>.sorting_1,table.dataTable.order-column.stripe tbody tr.odd.selected>.sorting_1{background-color:#a6b4cd}table.dataTable.display tbody tr.odd.selected>.sorting_2,table.dataTable.order-column.stripe tbody tr.odd.selected>.sorting_2{background-color:#a8b5cf}table.dataTable.display tbody tr.odd.selected>.sorting_3,table.dataTable.order-column.stripe tbody tr.odd.selected>.sorting_3{background-color:#a9b7d1}table.dataTable.display tbody tr.even>.sorting_1,table.dataTable.order-column.stripe tbody tr.even>.sorting_1{background-color:#fafafa}table.dataTable.display tbody tr.even>.sorting_2,table.dataTable.order-column.stripe tbody tr.even>.sorting_2{background-color:#fcfcfc}table.dataTable.display tbody tr.even>.sorting_3,table.dataTable.order-column.stripe tbody tr.even>.sorting_3{background-color:#fefefe}table.dataTable.display tbody tr.even.selected>.sorting_1,table.dataTable.order-column.stripe tbody tr.even.selected>.sorting_1{background-color:#acbad5}table.dataTable.display tbody tr.even.selected>.sorting_2,table.dataTable.order-column.stripe tbody tr.even.selected>.sorting_2{background-color:#aebcd6}table.dataTable.display tbody tr.even.selected>.sorting_3,table.dataTable.order-column.stripe tbody tr.even.selected>.sorting_3{background-color:#afbdd8}table.dataTable.display tbody tr:hover>.sorting_1,table.dataTable.order-column.hover tbody tr:hover>.sorting_1{background-color:#eaeaea}table.dataTable.display tbody tr:hover>.sorting_2,table.dataTable.order-column.hover tbody tr:hover>.sorting_2{background-color:#ececec}table.dataTable.display tbody tr:hover>.sorting_3,table.dataTable.order-column.hover tbody tr:hover>.sorting_3{background-color:#efefef}table.dataTable.display tbody tr:hover.selected>.sorting_1,table.dataTable.order-column.hover tbody tr:hover.selected>.sorting_1{background-color:#a2aec7}table.dataTable.display tbody tr:hover.selected>.sorting_2,table.dataTable.order-column.hover tbody tr:hover.selected>.sorting_2{background-color:#a3b0c9}table.dataTable.display tbody tr:hover.selected>.sorting_3,table.dataTable.order-column.hover tbody tr:hover.selected>.sorting_3{background-color:#a5b2cb}table.dataTable.no-footer{border-bottom:1px solid #111}table.dataTable.nowrap th,table.dataTable.nowrap td{white-space:nowrap}table.dataTable.compact thead th,table.dataTable.compact thead td{padding:4px 17px}table.dataTable.compact tfoot th,table.dataTable.compact tfoot td{padding:4px}table.dataTable.compact tbody th,table.dataTable.compact tbody td{padding:4px}table.dataTable th.dt-left,table.dataTable td.dt-left{text-align:left}table.dataTable th.dt-center,table.dataTable td.dt-center,table.dataTable td.dataTables_empty{text-align:center}table.dataTable th.dt-right,table.dataTable td.dt-right{text-align:right}table.dataTable th.dt-justify,table.dataTable td.dt-justify{text-align:justify}table.dataTable th.dt-nowrap,table.dataTable td.dt-nowrap{white-space:nowrap}table.dataTable thead th.dt-head-left,table.dataTable thead td.dt-head-left,table.dataTable tfoot th.dt-head-left,table.dataTable tfoot td.dt-head-left{text-align:left}table.dataTable thead th.dt-head-center,table.dataTable thead td.dt-head-center,table.dataTable tfoot th.dt-head-center,table.dataTable tfoot td.dt-head-center{text-align:center}table.dataTable thead th.dt-head-right,table.dataTable thead td.dt-head-right,table.dataTable tfoot th.dt-head-right,table.dataTable tfoot td.dt-head-right{text-align:right}table.dataTable thead th.dt-head-justify,table.dataTable thead td.dt-head-justify,table.dataTable tfoot th.dt-head-justify,table.dataTable tfoot td.dt-head-justify{text-align:justify}table.dataTable thead th.dt-head-nowrap,table.dataTable thead td.dt-head-nowrap,table.dataTable tfoot th.dt-head-nowrap,table.dataTable tfoot td.dt-head-nowrap{white-space:nowrap}table.dataTable tbody th.dt-body-left,table.dataTable tbody td.dt-body-left{text-align:left}table.dataTable tbody th.dt-body-center,table.dataTable tbody td.dt-body-center{text-align:center}table.dataTable tbody th.dt-body-right,table.dataTable tbody td.dt-body-right{text-align:right}table.dataTable tbody th.dt-body-justify,table.dataTable tbody td.dt-body-justify{text-align:justify}table.dataTable tbody th.dt-body-nowrap,table.dataTable tbody td.dt-body-nowrap{white-space:nowrap}table.dataTable,table.dataTable th,table.dataTable td{box-sizing:content-box}.dataTables_wrapper{position:relative;clear:both;*zoom:1;zoom:1}.dataTables_wrapper .dataTables_length{float:left}.dataTables_wrapper .dataTables_filter{float:right;text-align:right}.dataTables_wrapper .dataTables_filter input{margin-left:0.5em}.dataTables_wrapper .dataTables_info{clear:both;float:left;padding-top:0.755em}.dataTables_wrapper .dataTables_paginate{float:right;text-align:right;padding-top:0.25em}.dataTables_wrapper .dataTables_paginate .paginate_button{box-sizing:border-box;display:inline-block;min-width:1.5em;padding:0.5em 1em;margin-left:2px;text-align:center;text-decoration:none !important;cursor:pointer;*cursor:hand;color:#333 !important;border:1px solid transparent;border-radius:2px}.dataTables_wrapper .dataTables_paginate .paginate_button.current,.dataTables_wrapper .dataTables_paginate .paginate_button.current:hover{color:#333 !important;border:1px solid #979797;background-color:white;background:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #fff), color-stop(100%, #dcdcdc));background:-webkit-linear-gradient(top, #fff 0%, #dcdcdc 100%);background:-moz-linear-gradient(top, #fff 0%, #dcdcdc 100%);background:-ms-linear-gradient(top, #fff 0%, #dcdcdc 100%);background:-o-linear-gradient(top, #fff 0%, #dcdcdc 100%);background:linear-gradient(to bottom, #fff 0%, #dcdcdc 100%)}.dataTables_wrapper .dataTables_paginate .paginate_button.disabled,.dataTables_wrapper .dataTables_paginate .paginate_button.disabled:hover,.dataTables_wrapper .dataTables_paginate .paginate_button.disabled:active{cursor:default;color:#666 !important;border:1px solid transparent;background:transparent;box-shadow:none}.dataTables_wrapper .dataTables_paginate .paginate_button:hover{color:white !important;border:1px solid #111;background-color:#585858;background:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #585858), color-stop(100%, #111));background:-webkit-linear-gradient(top, #585858 0%, #111 100%);background:-moz-linear-gradient(top, #585858 0%, #111 100%);background:-ms-linear-gradient(top, #585858 0%, #111 100%);background:-o-linear-gradient(top, #585858 0%, #111 100%);background:linear-gradient(to bottom, #585858 0%, #111 100%)}.dataTables_wrapper .dataTables_paginate .paginate_button:active{outline:none;background-color:#2b2b2b;background:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #2b2b2b), color-stop(100%, #0c0c0c));background:-webkit-linear-gradient(top, #2b2b2b 0%, #0c0c0c 100%);background:-moz-linear-gradient(top, #2b2b2b 0%, #0c0c0c 100%);background:-ms-linear-gradient(top, #2b2b2b 0%, #0c0c0c 100%);background:-o-linear-gradient(top, #2b2b2b 0%, #0c0c0c 100%);background:linear-gradient(to bottom, #2b2b2b 0%, #0c0c0c 100%);box-shadow:inset 0 0 3px #111}.dataTables_wrapper .dataTables_paginate .ellipsis{padding:0 1em}.dataTables_wrapper .dataTables_processing{position:absolute;top:50%;left:50%;width:100%;height:40px;margin-left:-50%;margin-top:-25px;padding-top:20px;text-align:center;font-size:1.2em;background-color:white;background:-webkit-gradient(linear, left top, right top, color-stop(0%, rgba(255,255,255,0)), color-stop(25%, rgba(255,255,255,0.9)), color-stop(75%, rgba(255,255,255,0.9)), color-stop(100%, rgba(255,255,255,0)));background:-webkit-linear-gradient(left, rgba(255,255,255,0) 0%, rgba(255,255,255,0.9) 25%, rgba(255,255,255,0.9) 75%, rgba(255,255,255,0) 100%);background:-moz-linear-gradient(left, rgba(255,255,255,0) 0%, rgba(255,255,255,0.9) 25%, rgba(255,255,255,0.9) 75%, rgba(255,255,255,0) 100%);background:-ms-linear-gradient(left, rgba(255,255,255,0) 0%, rgba(255,255,255,0.9) 25%, rgba(255,255,255,0.9) 75%, rgba(255,255,255,0) 100%);background:-o-linear-gradient(left, rgba(255,255,255,0) 0%, rgba(255,255,255,0.9) 25%, rgba(255,255,255,0.9) 75%, rgba(255,255,255,0) 100%);background:linear-gradient(to right, rgba(255,255,255,0) 0%, rgba(255,255,255,0.9) 25%, rgba(255,255,255,0.9) 75%, rgba(255,255,255,0) 100%)}.dataTables_wrapper .dataTables_length,.dataTables_wrapper .dataTables_filter,.dataTables_wrapper .dataTables_info,.dataTables_wrapper .dataTables_processing,.dataTables_wrapper .dataTables_paginate{color:#333}.dataTables_wrapper .dataTables_scroll{clear:both}.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody{*margin-top:-1px;-webkit-overflow-scrolling:touch}.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody>table>thead>tr>th,.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody>table>thead>tr>td,.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody>table>tbody>tr>th,.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody>table>tbody>tr>td{vertical-align:middle}.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody>table>thead>tr>th>div.dataTables_sizing,.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody>table>thead>tr>td>div.dataTables_sizing,.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody>table>tbody>tr>th>div.dataTables_sizing,.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody>table>tbody>tr>td>div.dataTables_sizing{height:0;overflow:hidden;margin:0 !important;padding:0 !important}.dataTables_wrapper.no-footer .dataTables_scrollBody{border-bottom:1px solid #111}.dataTables_wrapper.no-footer div.dataTables_scrollHead table.dataTable,.dataTables_wrapper.no-footer div.dataTables_scrollBody>table{border-bottom:none}.dataTables_wrapper:after{visibility:hidden;display:block;content:"";clear:both;height:0}@media screen and (max-width: 767px){.dataTables_wrapper .dataTables_info,.dataTables_wrapper .dataTables_paginate{float:none;text-align:center}.dataTables_wrapper .dataTables_paginate{margin-top:0.5em}}@media screen and (max-width: 640px){.dataTables_wrapper .dataTables_length,.dataTables_wrapper .dataTables_filter{float:none;text-align:center}.dataTables_wrapper .dataTables_filter{margin-top:0.5em}}table.dataTable thead th div.DataTables_sort_wrapper{position:relative}table.dataTable thead th div.DataTables_sort_wrapper span{position:absolute;top:50%;margin-top:-8px;right:-18px}table.dataTable thead th.ui-state-default,table.dataTable tfoot th.ui-state-default{border-left-width:0}table.dataTable thead th.ui-state-default:first-child,table.dataTable tfoot th.ui-state-default:first-child{border-left-width:1px}.dataTables_wrapper .dataTables_paginate .fg-button{box-sizing:border-box;display:inline-block;min-width:1.5em;padding:0.5em;margin-left:2px;text-align:center;text-decoration:none !important;cursor:pointer;*cursor:hand;border:1px solid transparent}.dataTables_wrapper .dataTables_paginate .fg-button:active{outline:none}.dataTables_wrapper .dataTables_paginate .fg-button:first-child{border-top-left-radius:3px;border-bottom-left-radius:3px}.dataTables_wrapper .dataTables_paginate .fg-button:last-child{border-top-right-radius:3px;border-bottom-right-radius:3px}.dataTables_wrapper .ui-widget-header{font-weight:normal}.dataTables_wrapper .ui-toolbar{padding:8px}.dataTables_wrapper.no-footer .dataTables_scrollBody{border-bottom:none}.dataTables_wrapper .dataTables_length,.dataTables_wrapper .dataTables_filter,.dataTables_wrapper .dataTables_info,.dataTables_wrapper .dataTables_processing,.dataTables_wrapper .dataTables_paginate{color:inherit}
diff --git a/DataTables/DataTables-1.10.21/css/dataTables.semanticui.css b/DataTables/DataTables-1.10.21/css/dataTables.semanticui.css
deleted file mode 100644
index 077db2a..0000000
--- a/DataTables/DataTables-1.10.21/css/dataTables.semanticui.css
+++ /dev/null
@@ -1,102 +0,0 @@
-/*
- * Styling for DataTables with Semantic UI
- */
-table.dataTable.table {
-  margin: 0;
-}
-table.dataTable.table thead th,
-table.dataTable.table thead td {
-  position: relative;
-}
-table.dataTable.table thead th.sorting, table.dataTable.table thead th.sorting_asc, table.dataTable.table thead th.sorting_desc,
-table.dataTable.table thead td.sorting,
-table.dataTable.table thead td.sorting_asc,
-table.dataTable.table thead td.sorting_desc {
-  padding-right: 20px;
-}
-table.dataTable.table thead th.sorting:after, table.dataTable.table thead th.sorting_asc:after, table.dataTable.table thead th.sorting_desc:after,
-table.dataTable.table thead td.sorting:after,
-table.dataTable.table thead td.sorting_asc:after,
-table.dataTable.table thead td.sorting_desc:after {
-  position: absolute;
-  top: 12px;
-  right: 8px;
-  display: block;
-  font-family: Icons;
-}
-table.dataTable.table thead th.sorting:after,
-table.dataTable.table thead td.sorting:after {
-  content: "\f0dc";
-  color: #ddd;
-  font-size: 0.8em;
-}
-table.dataTable.table thead th.sorting_asc:after,
-table.dataTable.table thead td.sorting_asc:after {
-  content: "\f0de";
-}
-table.dataTable.table thead th.sorting_desc:after,
-table.dataTable.table thead td.sorting_desc:after {
-  content: "\f0dd";
-}
-table.dataTable.table td,
-table.dataTable.table th {
-  -webkit-box-sizing: content-box;
-  box-sizing: content-box;
-}
-table.dataTable.table td.dataTables_empty,
-table.dataTable.table th.dataTables_empty {
-  text-align: center;
-}
-table.dataTable.table.nowrap th,
-table.dataTable.table.nowrap td {
-  white-space: nowrap;
-}
-
-div.dataTables_wrapper div.dataTables_length select {
-  vertical-align: middle;
-  min-height: 2.7142em;
-}
-div.dataTables_wrapper div.dataTables_length .ui.selection.dropdown {
-  min-width: 0;
-}
-div.dataTables_wrapper div.dataTables_filter span.input {
-  margin-left: 0.5em;
-}
-div.dataTables_wrapper div.dataTables_info {
-  padding-top: 13px;
-  white-space: nowrap;
-}
-div.dataTables_wrapper div.dataTables_processing {
-  position: absolute;
-  top: 50%;
-  left: 50%;
-  width: 200px;
-  margin-left: -100px;
-  text-align: center;
-}
-div.dataTables_wrapper div.row.dt-table {
-  padding: 0;
-}
-div.dataTables_wrapper div.dataTables_scrollHead table.dataTable {
-  border-bottom-right-radius: 0;
-  border-bottom-left-radius: 0;
-  border-bottom: none;
-}
-div.dataTables_wrapper div.dataTables_scrollBody thead .sorting:after,
-div.dataTables_wrapper div.dataTables_scrollBody thead .sorting_asc:after,
-div.dataTables_wrapper div.dataTables_scrollBody thead .sorting_desc:after {
-  display: none;
-}
-div.dataTables_wrapper div.dataTables_scrollBody table.dataTable {
-  border-radius: 0;
-  border-top: none;
-  border-bottom-width: 0;
-}
-div.dataTables_wrapper div.dataTables_scrollBody table.dataTable.no-footer {
-  border-bottom-width: 1px;
-}
-div.dataTables_wrapper div.dataTables_scrollFoot table.dataTable {
-  border-top-right-radius: 0;
-  border-top-left-radius: 0;
-  border-top: none;
-}
diff --git a/DataTables/DataTables-1.10.21/css/dataTables.semanticui.min.css b/DataTables/DataTables-1.10.21/css/dataTables.semanticui.min.css
deleted file mode 100644
index fcffe0c..0000000
--- a/DataTables/DataTables-1.10.21/css/dataTables.semanticui.min.css
+++ /dev/null
@@ -1 +0,0 @@
-table.dataTable.table{margin:0}table.dataTable.table thead th,table.dataTable.table thead td{position:relative}table.dataTable.table thead th.sorting,table.dataTable.table thead th.sorting_asc,table.dataTable.table thead th.sorting_desc,table.dataTable.table thead td.sorting,table.dataTable.table thead td.sorting_asc,table.dataTable.table thead td.sorting_desc{padding-right:20px}table.dataTable.table thead th.sorting:after,table.dataTable.table thead th.sorting_asc:after,table.dataTable.table thead th.sorting_desc:after,table.dataTable.table thead td.sorting:after,table.dataTable.table thead td.sorting_asc:after,table.dataTable.table thead td.sorting_desc:after{position:absolute;top:12px;right:8px;display:block;font-family:Icons}table.dataTable.table thead th.sorting:after,table.dataTable.table thead td.sorting:after{content:"\f0dc";color:#ddd;font-size:0.8em}table.dataTable.table thead th.sorting_asc:after,table.dataTable.table thead td.sorting_asc:after{content:"\f0de"}table.dataTable.table thead th.sorting_desc:after,table.dataTable.table thead td.sorting_desc:after{content:"\f0dd"}table.dataTable.table td,table.dataTable.table th{-webkit-box-sizing:content-box;box-sizing:content-box}table.dataTable.table td.dataTables_empty,table.dataTable.table th.dataTables_empty{text-align:center}table.dataTable.table.nowrap th,table.dataTable.table.nowrap td{white-space:nowrap}div.dataTables_wrapper div.dataTables_length select{vertical-align:middle;min-height:2.7142em}div.dataTables_wrapper div.dataTables_length .ui.selection.dropdown{min-width:0}div.dataTables_wrapper div.dataTables_filter span.input{margin-left:0.5em}div.dataTables_wrapper div.dataTables_info{padding-top:13px;white-space:nowrap}div.dataTables_wrapper div.dataTables_processing{position:absolute;top:50%;left:50%;width:200px;margin-left:-100px;text-align:center}div.dataTables_wrapper div.row.dt-table{padding:0}div.dataTables_wrapper div.dataTables_scrollHead table.dataTable{border-bottom-right-radius:0;border-bottom-left-radius:0;border-bottom:none}div.dataTables_wrapper div.dataTables_scrollBody thead .sorting:after,div.dataTables_wrapper div.dataTables_scrollBody thead .sorting_asc:after,div.dataTables_wrapper div.dataTables_scrollBody thead .sorting_desc:after{display:none}div.dataTables_wrapper div.dataTables_scrollBody table.dataTable{border-radius:0;border-top:none;border-bottom-width:0}div.dataTables_wrapper div.dataTables_scrollBody table.dataTable.no-footer{border-bottom-width:1px}div.dataTables_wrapper div.dataTables_scrollFoot table.dataTable{border-top-right-radius:0;border-top-left-radius:0;border-top:none}
diff --git a/DataTables/DataTables-1.10.21/css/jquery.dataTables.css b/DataTables/DataTables-1.10.21/css/jquery.dataTables.css
deleted file mode 100644
index 9c6caec..0000000
--- a/DataTables/DataTables-1.10.21/css/jquery.dataTables.css
+++ /dev/null
@@ -1,448 +0,0 @@
-/*
- * Table styles
- */
-table.dataTable {
-  width: 100%;
-  margin: 0 auto;
-  clear: both;
-  border-collapse: separate;
-  border-spacing: 0;
-  /*
-   * Header and footer styles
-   */
-  /*
-   * Body styles
-   */
-}
-table.dataTable thead th,
-table.dataTable tfoot th {
-  font-weight: bold;
-}
-table.dataTable thead th,
-table.dataTable thead td {
-  padding: 10px 18px;
-  border-bottom: 1px solid #111;
-}
-table.dataTable thead th:active,
-table.dataTable thead td:active {
-  outline: none;
-}
-table.dataTable tfoot th,
-table.dataTable tfoot td {
-  padding: 10px 18px 6px 18px;
-  border-top: 1px solid #111;
-}
-table.dataTable thead .sorting,
-table.dataTable thead .sorting_asc,
-table.dataTable thead .sorting_desc,
-table.dataTable thead .sorting_asc_disabled,
-table.dataTable thead .sorting_desc_disabled {
-  cursor: pointer;
-  *cursor: hand;
-  background-repeat: no-repeat;
-  background-position: center right;
-}
-table.dataTable thead .sorting {
-  background-image: url("../images/sort_both.png");
-}
-table.dataTable thead .sorting_asc {
-  background-image: url("../images/sort_asc.png");
-}
-table.dataTable thead .sorting_desc {
-  background-image: url("../images/sort_desc.png");
-}
-table.dataTable thead .sorting_asc_disabled {
-  background-image: url("../images/sort_asc_disabled.png");
-}
-table.dataTable thead .sorting_desc_disabled {
-  background-image: url("../images/sort_desc_disabled.png");
-}
-table.dataTable tbody tr {
-  background-color: #ffffff;
-}
-table.dataTable tbody tr.selected {
-  background-color: #B0BED9;
-}
-table.dataTable tbody th,
-table.dataTable tbody td {
-  padding: 8px 10px;
-}
-table.dataTable.row-border tbody th, table.dataTable.row-border tbody td, table.dataTable.display tbody th, table.dataTable.display tbody td {
-  border-top: 1px solid #ddd;
-}
-table.dataTable.row-border tbody tr:first-child th,
-table.dataTable.row-border tbody tr:first-child td, table.dataTable.display tbody tr:first-child th,
-table.dataTable.display tbody tr:first-child td {
-  border-top: none;
-}
-table.dataTable.cell-border tbody th, table.dataTable.cell-border tbody td {
-  border-top: 1px solid #ddd;
-  border-right: 1px solid #ddd;
-}
-table.dataTable.cell-border tbody tr th:first-child,
-table.dataTable.cell-border tbody tr td:first-child {
-  border-left: 1px solid #ddd;
-}
-table.dataTable.cell-border tbody tr:first-child th,
-table.dataTable.cell-border tbody tr:first-child td {
-  border-top: none;
-}
-table.dataTable.stripe tbody tr.odd, table.dataTable.display tbody tr.odd {
-  background-color: #f9f9f9;
-}
-table.dataTable.stripe tbody tr.odd.selected, table.dataTable.display tbody tr.odd.selected {
-  background-color: #acbad4;
-}
-table.dataTable.hover tbody tr:hover, table.dataTable.display tbody tr:hover {
-  background-color: #f6f6f6;
-}
-table.dataTable.hover tbody tr:hover.selected, table.dataTable.display tbody tr:hover.selected {
-  background-color: #aab7d1;
-}
-table.dataTable.order-column tbody tr > .sorting_1,
-table.dataTable.order-column tbody tr > .sorting_2,
-table.dataTable.order-column tbody tr > .sorting_3, table.dataTable.display tbody tr > .sorting_1,
-table.dataTable.display tbody tr > .sorting_2,
-table.dataTable.display tbody tr > .sorting_3 {
-  background-color: #fafafa;
-}
-table.dataTable.order-column tbody tr.selected > .sorting_1,
-table.dataTable.order-column tbody tr.selected > .sorting_2,
-table.dataTable.order-column tbody tr.selected > .sorting_3, table.dataTable.display tbody tr.selected > .sorting_1,
-table.dataTable.display tbody tr.selected > .sorting_2,
-table.dataTable.display tbody tr.selected > .sorting_3 {
-  background-color: #acbad5;
-}
-table.dataTable.display tbody tr.odd > .sorting_1, table.dataTable.order-column.stripe tbody tr.odd > .sorting_1 {
-  background-color: #f1f1f1;
-}
-table.dataTable.display tbody tr.odd > .sorting_2, table.dataTable.order-column.stripe tbody tr.odd > .sorting_2 {
-  background-color: #f3f3f3;
-}
-table.dataTable.display tbody tr.odd > .sorting_3, table.dataTable.order-column.stripe tbody tr.odd > .sorting_3 {
-  background-color: whitesmoke;
-}
-table.dataTable.display tbody tr.odd.selected > .sorting_1, table.dataTable.order-column.stripe tbody tr.odd.selected > .sorting_1 {
-  background-color: #a6b4cd;
-}
-table.dataTable.display tbody tr.odd.selected > .sorting_2, table.dataTable.order-column.stripe tbody tr.odd.selected > .sorting_2 {
-  background-color: #a8b5cf;
-}
-table.dataTable.display tbody tr.odd.selected > .sorting_3, table.dataTable.order-column.stripe tbody tr.odd.selected > .sorting_3 {
-  background-color: #a9b7d1;
-}
-table.dataTable.display tbody tr.even > .sorting_1, table.dataTable.order-column.stripe tbody tr.even > .sorting_1 {
-  background-color: #fafafa;
-}
-table.dataTable.display tbody tr.even > .sorting_2, table.dataTable.order-column.stripe tbody tr.even > .sorting_2 {
-  background-color: #fcfcfc;
-}
-table.dataTable.display tbody tr.even > .sorting_3, table.dataTable.order-column.stripe tbody tr.even > .sorting_3 {
-  background-color: #fefefe;
-}
-table.dataTable.display tbody tr.even.selected > .sorting_1, table.dataTable.order-column.stripe tbody tr.even.selected > .sorting_1 {
-  background-color: #acbad5;
-}
-table.dataTable.display tbody tr.even.selected > .sorting_2, table.dataTable.order-column.stripe tbody tr.even.selected > .sorting_2 {
-  background-color: #aebcd6;
-}
-table.dataTable.display tbody tr.even.selected > .sorting_3, table.dataTable.order-column.stripe tbody tr.even.selected > .sorting_3 {
-  background-color: #afbdd8;
-}
-table.dataTable.display tbody tr:hover > .sorting_1, table.dataTable.order-column.hover tbody tr:hover > .sorting_1 {
-  background-color: #eaeaea;
-}
-table.dataTable.display tbody tr:hover > .sorting_2, table.dataTable.order-column.hover tbody tr:hover > .sorting_2 {
-  background-color: #ececec;
-}
-table.dataTable.display tbody tr:hover > .sorting_3, table.dataTable.order-column.hover tbody tr:hover > .sorting_3 {
-  background-color: #efefef;
-}
-table.dataTable.display tbody tr:hover.selected > .sorting_1, table.dataTable.order-column.hover tbody tr:hover.selected > .sorting_1 {
-  background-color: #a2aec7;
-}
-table.dataTable.display tbody tr:hover.selected > .sorting_2, table.dataTable.order-column.hover tbody tr:hover.selected > .sorting_2 {
-  background-color: #a3b0c9;
-}
-table.dataTable.display tbody tr:hover.selected > .sorting_3, table.dataTable.order-column.hover tbody tr:hover.selected > .sorting_3 {
-  background-color: #a5b2cb;
-}
-table.dataTable.no-footer {
-  border-bottom: 1px solid #111;
-}
-table.dataTable.nowrap th, table.dataTable.nowrap td {
-  white-space: nowrap;
-}
-table.dataTable.compact thead th,
-table.dataTable.compact thead td {
-  padding: 4px 17px;
-}
-table.dataTable.compact tfoot th,
-table.dataTable.compact tfoot td {
-  padding: 4px;
-}
-table.dataTable.compact tbody th,
-table.dataTable.compact tbody td {
-  padding: 4px;
-}
-table.dataTable th.dt-left,
-table.dataTable td.dt-left {
-  text-align: left;
-}
-table.dataTable th.dt-center,
-table.dataTable td.dt-center,
-table.dataTable td.dataTables_empty {
-  text-align: center;
-}
-table.dataTable th.dt-right,
-table.dataTable td.dt-right {
-  text-align: right;
-}
-table.dataTable th.dt-justify,
-table.dataTable td.dt-justify {
-  text-align: justify;
-}
-table.dataTable th.dt-nowrap,
-table.dataTable td.dt-nowrap {
-  white-space: nowrap;
-}
-table.dataTable thead th.dt-head-left,
-table.dataTable thead td.dt-head-left,
-table.dataTable tfoot th.dt-head-left,
-table.dataTable tfoot td.dt-head-left {
-  text-align: left;
-}
-table.dataTable thead th.dt-head-center,
-table.dataTable thead td.dt-head-center,
-table.dataTable tfoot th.dt-head-center,
-table.dataTable tfoot td.dt-head-center {
-  text-align: center;
-}
-table.dataTable thead th.dt-head-right,
-table.dataTable thead td.dt-head-right,
-table.dataTable tfoot th.dt-head-right,
-table.dataTable tfoot td.dt-head-right {
-  text-align: right;
-}
-table.dataTable thead th.dt-head-justify,
-table.dataTable thead td.dt-head-justify,
-table.dataTable tfoot th.dt-head-justify,
-table.dataTable tfoot td.dt-head-justify {
-  text-align: justify;
-}
-table.dataTable thead th.dt-head-nowrap,
-table.dataTable thead td.dt-head-nowrap,
-table.dataTable tfoot th.dt-head-nowrap,
-table.dataTable tfoot td.dt-head-nowrap {
-  white-space: nowrap;
-}
-table.dataTable tbody th.dt-body-left,
-table.dataTable tbody td.dt-body-left {
-  text-align: left;
-}
-table.dataTable tbody th.dt-body-center,
-table.dataTable tbody td.dt-body-center {
-  text-align: center;
-}
-table.dataTable tbody th.dt-body-right,
-table.dataTable tbody td.dt-body-right {
-  text-align: right;
-}
-table.dataTable tbody th.dt-body-justify,
-table.dataTable tbody td.dt-body-justify {
-  text-align: justify;
-}
-table.dataTable tbody th.dt-body-nowrap,
-table.dataTable tbody td.dt-body-nowrap {
-  white-space: nowrap;
-}
-
-table.dataTable,
-table.dataTable th,
-table.dataTable td {
-  box-sizing: content-box;
-}
-
-/*
- * Control feature layout
- */
-.dataTables_wrapper {
-  position: relative;
-  clear: both;
-  *zoom: 1;
-  zoom: 1;
-}
-.dataTables_wrapper .dataTables_length {
-  float: left;
-}
-.dataTables_wrapper .dataTables_filter {
-  float: right;
-  text-align: right;
-}
-.dataTables_wrapper .dataTables_filter input {
-  margin-left: 0.5em;
-}
-.dataTables_wrapper .dataTables_info {
-  clear: both;
-  float: left;
-  padding-top: 0.755em;
-}
-.dataTables_wrapper .dataTables_paginate {
-  float: right;
-  text-align: right;
-  padding-top: 0.25em;
-}
-.dataTables_wrapper .dataTables_paginate .paginate_button {
-  box-sizing: border-box;
-  display: inline-block;
-  min-width: 1.5em;
-  padding: 0.5em 1em;
-  margin-left: 2px;
-  text-align: center;
-  text-decoration: none !important;
-  cursor: pointer;
-  *cursor: hand;
-  color: #333 !important;
-  border: 1px solid transparent;
-  border-radius: 2px;
-}
-.dataTables_wrapper .dataTables_paginate .paginate_button.current, .dataTables_wrapper .dataTables_paginate .paginate_button.current:hover {
-  color: #333 !important;
-  border: 1px solid #979797;
-  background-color: white;
-  background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, white), color-stop(100%, #dcdcdc));
-  /* Chrome,Safari4+ */
-  background: -webkit-linear-gradient(top, white 0%, #dcdcdc 100%);
-  /* Chrome10+,Safari5.1+ */
-  background: -moz-linear-gradient(top, white 0%, #dcdcdc 100%);
-  /* FF3.6+ */
-  background: -ms-linear-gradient(top, white 0%, #dcdcdc 100%);
-  /* IE10+ */
-  background: -o-linear-gradient(top, white 0%, #dcdcdc 100%);
-  /* Opera 11.10+ */
-  background: linear-gradient(to bottom, white 0%, #dcdcdc 100%);
-  /* W3C */
-}
-.dataTables_wrapper .dataTables_paginate .paginate_button.disabled, .dataTables_wrapper .dataTables_paginate .paginate_button.disabled:hover, .dataTables_wrapper .dataTables_paginate .paginate_button.disabled:active {
-  cursor: default;
-  color: #666 !important;
-  border: 1px solid transparent;
-  background: transparent;
-  box-shadow: none;
-}
-.dataTables_wrapper .dataTables_paginate .paginate_button:hover {
-  color: white !important;
-  border: 1px solid #111;
-  background-color: #585858;
-  background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #585858), color-stop(100%, #111));
-  /* Chrome,Safari4+ */
-  background: -webkit-linear-gradient(top, #585858 0%, #111 100%);
-  /* Chrome10+,Safari5.1+ */
-  background: -moz-linear-gradient(top, #585858 0%, #111 100%);
-  /* FF3.6+ */
-  background: -ms-linear-gradient(top, #585858 0%, #111 100%);
-  /* IE10+ */
-  background: -o-linear-gradient(top, #585858 0%, #111 100%);
-  /* Opera 11.10+ */
-  background: linear-gradient(to bottom, #585858 0%, #111 100%);
-  /* W3C */
-}
-.dataTables_wrapper .dataTables_paginate .paginate_button:active {
-  outline: none;
-  background-color: #2b2b2b;
-  background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #2b2b2b), color-stop(100%, #0c0c0c));
-  /* Chrome,Safari4+ */
-  background: -webkit-linear-gradient(top, #2b2b2b 0%, #0c0c0c 100%);
-  /* Chrome10+,Safari5.1+ */
-  background: -moz-linear-gradient(top, #2b2b2b 0%, #0c0c0c 100%);
-  /* FF3.6+ */
-  background: -ms-linear-gradient(top, #2b2b2b 0%, #0c0c0c 100%);
-  /* IE10+ */
-  background: -o-linear-gradient(top, #2b2b2b 0%, #0c0c0c 100%);
-  /* Opera 11.10+ */
-  background: linear-gradient(to bottom, #2b2b2b 0%, #0c0c0c 100%);
-  /* W3C */
-  box-shadow: inset 0 0 3px #111;
-}
-.dataTables_wrapper .dataTables_paginate .ellipsis {
-  padding: 0 1em;
-}
-.dataTables_wrapper .dataTables_processing {
-  position: absolute;
-  top: 50%;
-  left: 50%;
-  width: 100%;
-  height: 40px;
-  margin-left: -50%;
-  margin-top: -25px;
-  padding-top: 20px;
-  text-align: center;
-  font-size: 1.2em;
-  background-color: white;
-  background: -webkit-gradient(linear, left top, right top, color-stop(0%, rgba(255, 255, 255, 0)), color-stop(25%, rgba(255, 255, 255, 0.9)), color-stop(75%, rgba(255, 255, 255, 0.9)), color-stop(100%, rgba(255, 255, 255, 0)));
-  background: -webkit-linear-gradient(left, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 0.9) 25%, rgba(255, 255, 255, 0.9) 75%, rgba(255, 255, 255, 0) 100%);
-  background: -moz-linear-gradient(left, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 0.9) 25%, rgba(255, 255, 255, 0.9) 75%, rgba(255, 255, 255, 0) 100%);
-  background: -ms-linear-gradient(left, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 0.9) 25%, rgba(255, 255, 255, 0.9) 75%, rgba(255, 255, 255, 0) 100%);
-  background: -o-linear-gradient(left, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 0.9) 25%, rgba(255, 255, 255, 0.9) 75%, rgba(255, 255, 255, 0) 100%);
-  background: linear-gradient(to right, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 0.9) 25%, rgba(255, 255, 255, 0.9) 75%, rgba(255, 255, 255, 0) 100%);
-}
-.dataTables_wrapper .dataTables_length,
-.dataTables_wrapper .dataTables_filter,
-.dataTables_wrapper .dataTables_info,
-.dataTables_wrapper .dataTables_processing,
-.dataTables_wrapper .dataTables_paginate {
-  color: #333;
-}
-.dataTables_wrapper .dataTables_scroll {
-  clear: both;
-}
-.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody {
-  *margin-top: -1px;
-  -webkit-overflow-scrolling: touch;
-}
-.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody > table > thead > tr > th, .dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody > table > thead > tr > td, .dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody > table > tbody > tr > th, .dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody > table > tbody > tr > td {
-  vertical-align: middle;
-}
-.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody > table > thead > tr > th > div.dataTables_sizing,
-.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody > table > thead > tr > td > div.dataTables_sizing, .dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody > table > tbody > tr > th > div.dataTables_sizing,
-.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody > table > tbody > tr > td > div.dataTables_sizing {
-  height: 0;
-  overflow: hidden;
-  margin: 0 !important;
-  padding: 0 !important;
-}
-.dataTables_wrapper.no-footer .dataTables_scrollBody {
-  border-bottom: 1px solid #111;
-}
-.dataTables_wrapper.no-footer div.dataTables_scrollHead table.dataTable,
-.dataTables_wrapper.no-footer div.dataTables_scrollBody > table {
-  border-bottom: none;
-}
-.dataTables_wrapper:after {
-  visibility: hidden;
-  display: block;
-  content: "";
-  clear: both;
-  height: 0;
-}
-
-@media screen and (max-width: 767px) {
-  .dataTables_wrapper .dataTables_info,
-  .dataTables_wrapper .dataTables_paginate {
-    float: none;
-    text-align: center;
-  }
-  .dataTables_wrapper .dataTables_paginate {
-    margin-top: 0.5em;
-  }
-}
-@media screen and (max-width: 640px) {
-  .dataTables_wrapper .dataTables_length,
-  .dataTables_wrapper .dataTables_filter {
-    float: none;
-    text-align: center;
-  }
-  .dataTables_wrapper .dataTables_filter {
-    margin-top: 0.5em;
-  }
-}
diff --git a/DataTables/DataTables-1.10.21/css/jquery.dataTables.min.css b/DataTables/DataTables-1.10.21/css/jquery.dataTables.min.css
deleted file mode 100644
index c2ea9b4..0000000
--- a/DataTables/DataTables-1.10.21/css/jquery.dataTables.min.css
+++ /dev/null
@@ -1 +0,0 @@
-table.dataTable{width:100%;margin:0 auto;clear:both;border-collapse:separate;border-spacing:0}table.dataTable thead th,table.dataTable tfoot th{font-weight:bold}table.dataTable thead th,table.dataTable thead td{padding:10px 18px;border-bottom:1px solid #111}table.dataTable thead th:active,table.dataTable thead td:active{outline:none}table.dataTable tfoot th,table.dataTable tfoot td{padding:10px 18px 6px 18px;border-top:1px solid #111}table.dataTable thead .sorting,table.dataTable thead .sorting_asc,table.dataTable thead .sorting_desc,table.dataTable thead .sorting_asc_disabled,table.dataTable thead .sorting_desc_disabled{cursor:pointer;*cursor:hand;background-repeat:no-repeat;background-position:center right}table.dataTable thead .sorting{background-image:url("../images/sort_both.png")}table.dataTable thead .sorting_asc{background-image:url("../images/sort_asc.png")}table.dataTable thead .sorting_desc{background-image:url("../images/sort_desc.png")}table.dataTable thead .sorting_asc_disabled{background-image:url("../images/sort_asc_disabled.png")}table.dataTable thead .sorting_desc_disabled{background-image:url("../images/sort_desc_disabled.png")}table.dataTable tbody tr{background-color:#ffffff}table.dataTable tbody tr.selected{background-color:#B0BED9}table.dataTable tbody th,table.dataTable tbody td{padding:8px 10px}table.dataTable.row-border tbody th,table.dataTable.row-border tbody td,table.dataTable.display tbody th,table.dataTable.display tbody td{border-top:1px solid #ddd}table.dataTable.row-border tbody tr:first-child th,table.dataTable.row-border tbody tr:first-child td,table.dataTable.display tbody tr:first-child th,table.dataTable.display tbody tr:first-child td{border-top:none}table.dataTable.cell-border tbody th,table.dataTable.cell-border tbody td{border-top:1px solid #ddd;border-right:1px solid #ddd}table.dataTable.cell-border tbody tr th:first-child,table.dataTable.cell-border tbody tr td:first-child{border-left:1px solid #ddd}table.dataTable.cell-border tbody tr:first-child th,table.dataTable.cell-border tbody tr:first-child td{border-top:none}table.dataTable.stripe tbody tr.odd,table.dataTable.display tbody tr.odd{background-color:#f9f9f9}table.dataTable.stripe tbody tr.odd.selected,table.dataTable.display tbody tr.odd.selected{background-color:#acbad4}table.dataTable.hover tbody tr:hover,table.dataTable.display tbody tr:hover{background-color:#f6f6f6}table.dataTable.hover tbody tr:hover.selected,table.dataTable.display tbody tr:hover.selected{background-color:#aab7d1}table.dataTable.order-column tbody tr>.sorting_1,table.dataTable.order-column tbody tr>.sorting_2,table.dataTable.order-column tbody tr>.sorting_3,table.dataTable.display tbody tr>.sorting_1,table.dataTable.display tbody tr>.sorting_2,table.dataTable.display tbody tr>.sorting_3{background-color:#fafafa}table.dataTable.order-column tbody tr.selected>.sorting_1,table.dataTable.order-column tbody tr.selected>.sorting_2,table.dataTable.order-column tbody tr.selected>.sorting_3,table.dataTable.display tbody tr.selected>.sorting_1,table.dataTable.display tbody tr.selected>.sorting_2,table.dataTable.display tbody tr.selected>.sorting_3{background-color:#acbad5}table.dataTable.display tbody tr.odd>.sorting_1,table.dataTable.order-column.stripe tbody tr.odd>.sorting_1{background-color:#f1f1f1}table.dataTable.display tbody tr.odd>.sorting_2,table.dataTable.order-column.stripe tbody tr.odd>.sorting_2{background-color:#f3f3f3}table.dataTable.display tbody tr.odd>.sorting_3,table.dataTable.order-column.stripe tbody tr.odd>.sorting_3{background-color:whitesmoke}table.dataTable.display tbody tr.odd.selected>.sorting_1,table.dataTable.order-column.stripe tbody tr.odd.selected>.sorting_1{background-color:#a6b4cd}table.dataTable.display tbody tr.odd.selected>.sorting_2,table.dataTable.order-column.stripe tbody tr.odd.selected>.sorting_2{background-color:#a8b5cf}table.dataTable.display tbody tr.odd.selected>.sorting_3,table.dataTable.order-column.stripe tbody tr.odd.selected>.sorting_3{background-color:#a9b7d1}table.dataTable.display tbody tr.even>.sorting_1,table.dataTable.order-column.stripe tbody tr.even>.sorting_1{background-color:#fafafa}table.dataTable.display tbody tr.even>.sorting_2,table.dataTable.order-column.stripe tbody tr.even>.sorting_2{background-color:#fcfcfc}table.dataTable.display tbody tr.even>.sorting_3,table.dataTable.order-column.stripe tbody tr.even>.sorting_3{background-color:#fefefe}table.dataTable.display tbody tr.even.selected>.sorting_1,table.dataTable.order-column.stripe tbody tr.even.selected>.sorting_1{background-color:#acbad5}table.dataTable.display tbody tr.even.selected>.sorting_2,table.dataTable.order-column.stripe tbody tr.even.selected>.sorting_2{background-color:#aebcd6}table.dataTable.display tbody tr.even.selected>.sorting_3,table.dataTable.order-column.stripe tbody tr.even.selected>.sorting_3{background-color:#afbdd8}table.dataTable.display tbody tr:hover>.sorting_1,table.dataTable.order-column.hover tbody tr:hover>.sorting_1{background-color:#eaeaea}table.dataTable.display tbody tr:hover>.sorting_2,table.dataTable.order-column.hover tbody tr:hover>.sorting_2{background-color:#ececec}table.dataTable.display tbody tr:hover>.sorting_3,table.dataTable.order-column.hover tbody tr:hover>.sorting_3{background-color:#efefef}table.dataTable.display tbody tr:hover.selected>.sorting_1,table.dataTable.order-column.hover tbody tr:hover.selected>.sorting_1{background-color:#a2aec7}table.dataTable.display tbody tr:hover.selected>.sorting_2,table.dataTable.order-column.hover tbody tr:hover.selected>.sorting_2{background-color:#a3b0c9}table.dataTable.display tbody tr:hover.selected>.sorting_3,table.dataTable.order-column.hover tbody tr:hover.selected>.sorting_3{background-color:#a5b2cb}table.dataTable.no-footer{border-bottom:1px solid #111}table.dataTable.nowrap th,table.dataTable.nowrap td{white-space:nowrap}table.dataTable.compact thead th,table.dataTable.compact thead td{padding:4px 17px}table.dataTable.compact tfoot th,table.dataTable.compact tfoot td{padding:4px}table.dataTable.compact tbody th,table.dataTable.compact tbody td{padding:4px}table.dataTable th.dt-left,table.dataTable td.dt-left{text-align:left}table.dataTable th.dt-center,table.dataTable td.dt-center,table.dataTable td.dataTables_empty{text-align:center}table.dataTable th.dt-right,table.dataTable td.dt-right{text-align:right}table.dataTable th.dt-justify,table.dataTable td.dt-justify{text-align:justify}table.dataTable th.dt-nowrap,table.dataTable td.dt-nowrap{white-space:nowrap}table.dataTable thead th.dt-head-left,table.dataTable thead td.dt-head-left,table.dataTable tfoot th.dt-head-left,table.dataTable tfoot td.dt-head-left{text-align:left}table.dataTable thead th.dt-head-center,table.dataTable thead td.dt-head-center,table.dataTable tfoot th.dt-head-center,table.dataTable tfoot td.dt-head-center{text-align:center}table.dataTable thead th.dt-head-right,table.dataTable thead td.dt-head-right,table.dataTable tfoot th.dt-head-right,table.dataTable tfoot td.dt-head-right{text-align:right}table.dataTable thead th.dt-head-justify,table.dataTable thead td.dt-head-justify,table.dataTable tfoot th.dt-head-justify,table.dataTable tfoot td.dt-head-justify{text-align:justify}table.dataTable thead th.dt-head-nowrap,table.dataTable thead td.dt-head-nowrap,table.dataTable tfoot th.dt-head-nowrap,table.dataTable tfoot td.dt-head-nowrap{white-space:nowrap}table.dataTable tbody th.dt-body-left,table.dataTable tbody td.dt-body-left{text-align:left}table.dataTable tbody th.dt-body-center,table.dataTable tbody td.dt-body-center{text-align:center}table.dataTable tbody th.dt-body-right,table.dataTable tbody td.dt-body-right{text-align:right}table.dataTable tbody th.dt-body-justify,table.dataTable tbody td.dt-body-justify{text-align:justify}table.dataTable tbody th.dt-body-nowrap,table.dataTable tbody td.dt-body-nowrap{white-space:nowrap}table.dataTable,table.dataTable th,table.dataTable td{box-sizing:content-box}.dataTables_wrapper{position:relative;clear:both;*zoom:1;zoom:1}.dataTables_wrapper .dataTables_length{float:left}.dataTables_wrapper .dataTables_filter{float:right;text-align:right}.dataTables_wrapper .dataTables_filter input{margin-left:0.5em}.dataTables_wrapper .dataTables_info{clear:both;float:left;padding-top:0.755em}.dataTables_wrapper .dataTables_paginate{float:right;text-align:right;padding-top:0.25em}.dataTables_wrapper .dataTables_paginate .paginate_button{box-sizing:border-box;display:inline-block;min-width:1.5em;padding:0.5em 1em;margin-left:2px;text-align:center;text-decoration:none !important;cursor:pointer;*cursor:hand;color:#333 !important;border:1px solid transparent;border-radius:2px}.dataTables_wrapper .dataTables_paginate .paginate_button.current,.dataTables_wrapper .dataTables_paginate .paginate_button.current:hover{color:#333 !important;border:1px solid #979797;background-color:white;background:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #fff), color-stop(100%, #dcdcdc));background:-webkit-linear-gradient(top, #fff 0%, #dcdcdc 100%);background:-moz-linear-gradient(top, #fff 0%, #dcdcdc 100%);background:-ms-linear-gradient(top, #fff 0%, #dcdcdc 100%);background:-o-linear-gradient(top, #fff 0%, #dcdcdc 100%);background:linear-gradient(to bottom, #fff 0%, #dcdcdc 100%)}.dataTables_wrapper .dataTables_paginate .paginate_button.disabled,.dataTables_wrapper .dataTables_paginate .paginate_button.disabled:hover,.dataTables_wrapper .dataTables_paginate .paginate_button.disabled:active{cursor:default;color:#666 !important;border:1px solid transparent;background:transparent;box-shadow:none}.dataTables_wrapper .dataTables_paginate .paginate_button:hover{color:white !important;border:1px solid #111;background-color:#585858;background:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #585858), color-stop(100%, #111));background:-webkit-linear-gradient(top, #585858 0%, #111 100%);background:-moz-linear-gradient(top, #585858 0%, #111 100%);background:-ms-linear-gradient(top, #585858 0%, #111 100%);background:-o-linear-gradient(top, #585858 0%, #111 100%);background:linear-gradient(to bottom, #585858 0%, #111 100%)}.dataTables_wrapper .dataTables_paginate .paginate_button:active{outline:none;background-color:#2b2b2b;background:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #2b2b2b), color-stop(100%, #0c0c0c));background:-webkit-linear-gradient(top, #2b2b2b 0%, #0c0c0c 100%);background:-moz-linear-gradient(top, #2b2b2b 0%, #0c0c0c 100%);background:-ms-linear-gradient(top, #2b2b2b 0%, #0c0c0c 100%);background:-o-linear-gradient(top, #2b2b2b 0%, #0c0c0c 100%);background:linear-gradient(to bottom, #2b2b2b 0%, #0c0c0c 100%);box-shadow:inset 0 0 3px #111}.dataTables_wrapper .dataTables_paginate .ellipsis{padding:0 1em}.dataTables_wrapper .dataTables_processing{position:absolute;top:50%;left:50%;width:100%;height:40px;margin-left:-50%;margin-top:-25px;padding-top:20px;text-align:center;font-size:1.2em;background-color:white;background:-webkit-gradient(linear, left top, right top, color-stop(0%, rgba(255,255,255,0)), color-stop(25%, rgba(255,255,255,0.9)), color-stop(75%, rgba(255,255,255,0.9)), color-stop(100%, rgba(255,255,255,0)));background:-webkit-linear-gradient(left, rgba(255,255,255,0) 0%, rgba(255,255,255,0.9) 25%, rgba(255,255,255,0.9) 75%, rgba(255,255,255,0) 100%);background:-moz-linear-gradient(left, rgba(255,255,255,0) 0%, rgba(255,255,255,0.9) 25%, rgba(255,255,255,0.9) 75%, rgba(255,255,255,0) 100%);background:-ms-linear-gradient(left, rgba(255,255,255,0) 0%, rgba(255,255,255,0.9) 25%, rgba(255,255,255,0.9) 75%, rgba(255,255,255,0) 100%);background:-o-linear-gradient(left, rgba(255,255,255,0) 0%, rgba(255,255,255,0.9) 25%, rgba(255,255,255,0.9) 75%, rgba(255,255,255,0) 100%);background:linear-gradient(to right, rgba(255,255,255,0) 0%, rgba(255,255,255,0.9) 25%, rgba(255,255,255,0.9) 75%, rgba(255,255,255,0) 100%)}.dataTables_wrapper .dataTables_length,.dataTables_wrapper .dataTables_filter,.dataTables_wrapper .dataTables_info,.dataTables_wrapper .dataTables_processing,.dataTables_wrapper .dataTables_paginate{color:#333}.dataTables_wrapper .dataTables_scroll{clear:both}.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody{*margin-top:-1px;-webkit-overflow-scrolling:touch}.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody>table>thead>tr>th,.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody>table>thead>tr>td,.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody>table>tbody>tr>th,.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody>table>tbody>tr>td{vertical-align:middle}.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody>table>thead>tr>th>div.dataTables_sizing,.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody>table>thead>tr>td>div.dataTables_sizing,.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody>table>tbody>tr>th>div.dataTables_sizing,.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody>table>tbody>tr>td>div.dataTables_sizing{height:0;overflow:hidden;margin:0 !important;padding:0 !important}.dataTables_wrapper.no-footer .dataTables_scrollBody{border-bottom:1px solid #111}.dataTables_wrapper.no-footer div.dataTables_scrollHead table.dataTable,.dataTables_wrapper.no-footer div.dataTables_scrollBody>table{border-bottom:none}.dataTables_wrapper:after{visibility:hidden;display:block;content:"";clear:both;height:0}@media screen and (max-width: 767px){.dataTables_wrapper .dataTables_info,.dataTables_wrapper .dataTables_paginate{float:none;text-align:center}.dataTables_wrapper .dataTables_paginate{margin-top:0.5em}}@media screen and (max-width: 640px){.dataTables_wrapper .dataTables_length,.dataTables_wrapper .dataTables_filter{float:none;text-align:center}.dataTables_wrapper .dataTables_filter{margin-top:0.5em}}
diff --git a/DataTables/DataTables-1.10.21/images/sort_asc.png b/DataTables/DataTables-1.10.21/images/sort_asc.png
deleted file mode 100644
index e1ba61a8055fcb18273f2468d335572204667b1f..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 160
zcmeAS@N?(olHy`uVBq!ia0vp^!XV7S1|*9D%+3I*bWaz@5R22v2@;zYta_*?F5u6Q
zWR@in#&u+WgT?Hi<}D3B3<dtPKf3L(#%G;lkAsbPmH>}GOXuX|8Oj3tosHiJ3*4TN
zC7>_x-r1O=t(?KoTC+`+>7&2GzdqLHBg&F)2Q?&EGZ+}|Rpsc~9`m>jw35No)z4*}
HQ$iB}HK{Sd

diff --git a/DataTables/DataTables-1.10.21/images/sort_asc_disabled.png b/DataTables/DataTables-1.10.21/images/sort_asc_disabled.png
deleted file mode 100644
index fb11dfe24a6c564cb7ddf8bc96703ebb121df1e7..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 148
zcmeAS@N?(olHy`uVBq!ia0vp^!XV7S0wixl{&NRX(Vi}jAsXkC6BcOhI9!^3NY?Do
zDX;f`c1`y6n0RgO@$!H7ch<T~&R05SUEJ8^Q1D3B?anEg_j{VPewQ3)o33=v`u75$
u@NwC)H>ZT&|Jn0dmaqO^XNm-CGtk!Ur<_=Jws3;%W$<+Mb6Mw<&;$T1GdZXL

diff --git a/DataTables/DataTables-1.10.21/images/sort_both.png b/DataTables/DataTables-1.10.21/images/sort_both.png
deleted file mode 100644
index af5bc7c5a10b9d6d57cb641aeec752428a07f0ca..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 201
zcmeAS@N?(olHy`uVBq!ia0vp^!XV7S0wixl{&NRX6FglULp08By<o`a;2_ZY@ahDQ
zIZn@cq>cxyy87-Q;~nRxO8@-UU*I^KVWyN+&SiMHu5xDOu|HNvwzODfTdXjhVyNu1
z#7^XbGKZ7<gEZFeRPCMIsy$+yhaA3~(<<ARU4F{HcWVEZS94u?w%>LW3XeONb<yeJ
z>$RKLeE*WhqbYpIXPIqK@r4)v+qN8um%99%MPpS9d#7Ed7SL@Bp00i_>zopr0H-Zb
Aj{pDw

diff --git a/DataTables/DataTables-1.10.21/images/sort_desc.png b/DataTables/DataTables-1.10.21/images/sort_desc.png
deleted file mode 100644
index 0e156deb5f61d18f9e2ec5da4f6a8c94a5b4fb41..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 158
zcmeAS@N?(olHy`uVBq!ia0vp^!XV7S1|*9D%+3I*R8JSj5R22v2@<S}6GRp?u4>yo
z(czD9$NuDl3Ljm9c#_#4$vXUz=f1~&WY3aa=h!;z7fOEN>ySP9QA=6C-^Dmb&tuM=
z4Z&=WZU;2WF>e%GI&mWJk^K!jrbro{W;-I>FeCfLGJl3}+Z^2)3Kw?+EoAU?^>bP0
Hl+XkKC^<KP

diff --git a/DataTables/DataTables-1.10.21/images/sort_desc_disabled.png b/DataTables/DataTables-1.10.21/images/sort_desc_disabled.png
deleted file mode 100644
index c9fdd8a1502fda301682e907afde86bc450da10f..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 146
zcmeAS@N?(olHy`uVBq!ia0vp^!XV7S0wixl{&NRXk)AG&AsXkC6C_xhx$boC`TY4@
zxy7GKb-~?6->j|Q{b@g3TV7E(Grjn^aLC2o)_ptHrtUEoT$S@q)~)7U@V;W{6)!%@
u>N?4t-1qslpJw9!O?PJ&w0Cby<YFk^=EPF?qfY~934^DrpUXO@geCx6y*UB^

diff --git a/DataTables/DataTables-1.10.21/js/dataTables.bootstrap.js b/DataTables/DataTables-1.10.21/js/dataTables.bootstrap.js
deleted file mode 100644
index 51075ce..0000000
--- a/DataTables/DataTables-1.10.21/js/dataTables.bootstrap.js
+++ /dev/null
@@ -1,182 +0,0 @@
-/*! DataTables Bootstrap 3 integration
- * ©2011-2015 SpryMedia Ltd - datatables.net/license
- */
-
-/**
- * DataTables integration for Bootstrap 3. This requires Bootstrap 3 and
- * DataTables 1.10 or newer.
- *
- * This file sets the defaults and adds options to DataTables to style its
- * controls using Bootstrap. See http://datatables.net/manual/styling/bootstrap
- * for further information.
- */
-(function( factory ){
-	if ( typeof define === 'function' && define.amd ) {
-		// AMD
-		define( ['jquery', 'datatables.net'], function ( $ ) {
-			return factory( $, window, document );
-		} );
-	}
-	else if ( typeof exports === 'object' ) {
-		// CommonJS
-		module.exports = function (root, $) {
-			if ( ! root ) {
-				root = window;
-			}
-
-			if ( ! $ || ! $.fn.dataTable ) {
-				// Require DataTables, which attaches to jQuery, including
-				// jQuery if needed and have a $ property so we can access the
-				// jQuery object that is used
-				$ = require('datatables.net')(root, $).$;
-			}
-
-			return factory( $, root, root.document );
-		};
-	}
-	else {
-		// Browser
-		factory( jQuery, window, document );
-	}
-}(function( $, window, document, undefined ) {
-'use strict';
-var DataTable = $.fn.dataTable;
-
-
-/* Set the defaults for DataTables initialisation */
-$.extend( true, DataTable.defaults, {
-	dom:
-		"<'row'<'col-sm-6'l><'col-sm-6'f>>" +
-		"<'row'<'col-sm-12'tr>>" +
-		"<'row'<'col-sm-5'i><'col-sm-7'p>>",
-	renderer: 'bootstrap'
-} );
-
-
-/* Default class modification */
-$.extend( DataTable.ext.classes, {
-	sWrapper:      "dataTables_wrapper form-inline dt-bootstrap",
-	sFilterInput:  "form-control input-sm",
-	sLengthSelect: "form-control input-sm",
-	sProcessing:   "dataTables_processing panel panel-default"
-} );
-
-
-/* Bootstrap paging button renderer */
-DataTable.ext.renderer.pageButton.bootstrap = function ( settings, host, idx, buttons, page, pages ) {
-	var api     = new DataTable.Api( settings );
-	var classes = settings.oClasses;
-	var lang    = settings.oLanguage.oPaginate;
-	var aria = settings.oLanguage.oAria.paginate || {};
-	var btnDisplay, btnClass, counter=0;
-
-	var attach = function( container, buttons ) {
-		var i, ien, node, button;
-		var clickHandler = function ( e ) {
-			e.preventDefault();
-			if ( !$(e.currentTarget).hasClass('disabled') && api.page() != e.data.action ) {
-				api.page( e.data.action ).draw( 'page' );
-			}
-		};
-
-		for ( i=0, ien=buttons.length ; i<ien ; i++ ) {
-			button = buttons[i];
-
-			if ( $.isArray( button ) ) {
-				attach( container, button );
-			}
-			else {
-				btnDisplay = '';
-				btnClass = '';
-
-				switch ( button ) {
-					case 'ellipsis':
-						btnDisplay = '&#x2026;';
-						btnClass = 'disabled';
-						break;
-
-					case 'first':
-						btnDisplay = lang.sFirst;
-						btnClass = button + (page > 0 ?
-							'' : ' disabled');
-						break;
-
-					case 'previous':
-						btnDisplay = lang.sPrevious;
-						btnClass = button + (page > 0 ?
-							'' : ' disabled');
-						break;
-
-					case 'next':
-						btnDisplay = lang.sNext;
-						btnClass = button + (page < pages-1 ?
-							'' : ' disabled');
-						break;
-
-					case 'last':
-						btnDisplay = lang.sLast;
-						btnClass = button + (page < pages-1 ?
-							'' : ' disabled');
-						break;
-
-					default:
-						btnDisplay = button + 1;
-						btnClass = page === button ?
-							'active' : '';
-						break;
-				}
-
-				if ( btnDisplay ) {
-					node = $('<li>', {
-							'class': classes.sPageButton+' '+btnClass,
-							'id': idx === 0 && typeof button === 'string' ?
-								settings.sTableId +'_'+ button :
-								null
-						} )
-						.append( $('<a>', {
-								'href': '#',
-								'aria-controls': settings.sTableId,
-								'aria-label': aria[ button ],
-								'data-dt-idx': counter,
-								'tabindex': settings.iTabIndex
-							} )
-							.html( btnDisplay )
-						)
-						.appendTo( container );
-
-					settings.oApi._fnBindAction(
-						node, {action: button}, clickHandler
-					);
-
-					counter++;
-				}
-			}
-		}
-	};
-
-	// IE9 throws an 'unknown error' if document.activeElement is used
-	// inside an iframe or frame. 
-	var activeEl;
-
-	try {
-		// Because this approach is destroying and recreating the paging
-		// elements, focus is lost on the select button which is bad for
-		// accessibility. So we want to restore focus once the draw has
-		// completed
-		activeEl = $(host).find(document.activeElement).data('dt-idx');
-	}
-	catch (e) {}
-
-	attach(
-		$(host).empty().html('<ul class="pagination"/>').children('ul'),
-		buttons
-	);
-
-	if ( activeEl !== undefined ) {
-		$(host).find( '[data-dt-idx='+activeEl+']' ).trigger('focus');
-	}
-};
-
-
-return DataTable;
-}));
diff --git a/DataTables/DataTables-1.10.21/js/dataTables.bootstrap.min.js b/DataTables/DataTables-1.10.21/js/dataTables.bootstrap.min.js
deleted file mode 100644
index 0705076..0000000
--- a/DataTables/DataTables-1.10.21/js/dataTables.bootstrap.min.js
+++ /dev/null
@@ -1,11 +0,0 @@
-/*!
- DataTables Bootstrap 3 integration
- ©2011-2015 SpryMedia Ltd - datatables.net/license
-*/
-var $jscomp=$jscomp||{};$jscomp.scope={};$jscomp.findInternal=function(a,b,c){a instanceof String&&(a=String(a));for(var e=a.length,d=0;d<e;d++){var k=a[d];if(b.call(c,k,d,a))return{i:d,v:k}}return{i:-1,v:void 0}};$jscomp.ASSUME_ES5=!1;$jscomp.ASSUME_NO_NATIVE_MAP=!1;$jscomp.ASSUME_NO_NATIVE_SET=!1;$jscomp.SIMPLE_FROUND_POLYFILL=!1;
-$jscomp.defineProperty=$jscomp.ASSUME_ES5||"function"==typeof Object.defineProperties?Object.defineProperty:function(a,b,c){a!=Array.prototype&&a!=Object.prototype&&(a[b]=c.value)};$jscomp.getGlobal=function(a){a=["object"==typeof window&&window,"object"==typeof self&&self,"object"==typeof global&&global,a];for(var b=0;b<a.length;++b){var c=a[b];if(c&&c.Math==Math)return c}throw Error("Cannot find global object");};$jscomp.global=$jscomp.getGlobal(this);
-$jscomp.polyfill=function(a,b,c,e){if(b){c=$jscomp.global;a=a.split(".");for(e=0;e<a.length-1;e++){var d=a[e];d in c||(c[d]={});c=c[d]}a=a[a.length-1];e=c[a];b=b(e);b!=e&&null!=b&&$jscomp.defineProperty(c,a,{configurable:!0,writable:!0,value:b})}};$jscomp.polyfill("Array.prototype.find",function(a){return a?a:function(a,c){return $jscomp.findInternal(this,a,c).v}},"es6","es3");
-(function(a){"function"===typeof define&&define.amd?define(["jquery","datatables.net"],function(b){return a(b,window,document)}):"object"===typeof exports?module.exports=function(b,c){b||(b=window);c&&c.fn.dataTable||(c=require("datatables.net")(b,c).$);return a(c,b,b.document)}:a(jQuery,window,document)})(function(a,b,c,e){var d=a.fn.dataTable;a.extend(!0,d.defaults,{dom:"<'row'<'col-sm-6'l><'col-sm-6'f>><'row'<'col-sm-12'tr>><'row'<'col-sm-5'i><'col-sm-7'p>>",renderer:"bootstrap"});a.extend(d.ext.classes,
-{sWrapper:"dataTables_wrapper form-inline dt-bootstrap",sFilterInput:"form-control input-sm",sLengthSelect:"form-control input-sm",sProcessing:"dataTables_processing panel panel-default"});d.ext.renderer.pageButton.bootstrap=function(b,l,v,w,m,r){var k=new d.Api(b),x=b.oClasses,n=b.oLanguage.oPaginate,y=b.oLanguage.oAria.paginate||{},g,h,t=0,u=function(c,d){var e,l=function(b){b.preventDefault();a(b.currentTarget).hasClass("disabled")||k.page()==b.data.action||k.page(b.data.action).draw("page")};
-var q=0;for(e=d.length;q<e;q++){var f=d[q];if(a.isArray(f))u(c,f);else{h=g="";switch(f){case "ellipsis":g="&#x2026;";h="disabled";break;case "first":g=n.sFirst;h=f+(0<m?"":" disabled");break;case "previous":g=n.sPrevious;h=f+(0<m?"":" disabled");break;case "next":g=n.sNext;h=f+(m<r-1?"":" disabled");break;case "last":g=n.sLast;h=f+(m<r-1?"":" disabled");break;default:g=f+1,h=m===f?"active":""}if(g){var p=a("<li>",{"class":x.sPageButton+" "+h,id:0===v&&"string"===typeof f?b.sTableId+"_"+f:null}).append(a("<a>",
-{href:"#","aria-controls":b.sTableId,"aria-label":y[f],"data-dt-idx":t,tabindex:b.iTabIndex}).html(g)).appendTo(c);b.oApi._fnBindAction(p,{action:f},l);t++}}}};try{var p=a(l).find(c.activeElement).data("dt-idx")}catch(z){}u(a(l).empty().html('<ul class="pagination"/>').children("ul"),w);p!==e&&a(l).find("[data-dt-idx="+p+"]").trigger("focus")};return d});
diff --git a/DataTables/DataTables-1.10.21/js/dataTables.bootstrap4.js b/DataTables/DataTables-1.10.21/js/dataTables.bootstrap4.js
deleted file mode 100644
index 1db1139..0000000
--- a/DataTables/DataTables-1.10.21/js/dataTables.bootstrap4.js
+++ /dev/null
@@ -1,184 +0,0 @@
-/*! DataTables Bootstrap 4 integration
- * ©2011-2017 SpryMedia Ltd - datatables.net/license
- */
-
-/**
- * DataTables integration for Bootstrap 4. This requires Bootstrap 4 and
- * DataTables 1.10 or newer.
- *
- * This file sets the defaults and adds options to DataTables to style its
- * controls using Bootstrap. See http://datatables.net/manual/styling/bootstrap
- * for further information.
- */
-(function( factory ){
-	if ( typeof define === 'function' && define.amd ) {
-		// AMD
-		define( ['jquery', 'datatables.net'], function ( $ ) {
-			return factory( $, window, document );
-		} );
-	}
-	else if ( typeof exports === 'object' ) {
-		// CommonJS
-		module.exports = function (root, $) {
-			if ( ! root ) {
-				root = window;
-			}
-
-			if ( ! $ || ! $.fn.dataTable ) {
-				// Require DataTables, which attaches to jQuery, including
-				// jQuery if needed and have a $ property so we can access the
-				// jQuery object that is used
-				$ = require('datatables.net')(root, $).$;
-			}
-
-			return factory( $, root, root.document );
-		};
-	}
-	else {
-		// Browser
-		factory( jQuery, window, document );
-	}
-}(function( $, window, document, undefined ) {
-'use strict';
-var DataTable = $.fn.dataTable;
-
-
-/* Set the defaults for DataTables initialisation */
-$.extend( true, DataTable.defaults, {
-	dom:
-		"<'row'<'col-sm-12 col-md-6'l><'col-sm-12 col-md-6'f>>" +
-		"<'row'<'col-sm-12'tr>>" +
-		"<'row'<'col-sm-12 col-md-5'i><'col-sm-12 col-md-7'p>>",
-	renderer: 'bootstrap'
-} );
-
-
-/* Default class modification */
-$.extend( DataTable.ext.classes, {
-	sWrapper:      "dataTables_wrapper dt-bootstrap4",
-	sFilterInput:  "form-control form-control-sm",
-	sLengthSelect: "custom-select custom-select-sm form-control form-control-sm",
-	sProcessing:   "dataTables_processing card",
-	sPageButton:   "paginate_button page-item"
-} );
-
-
-/* Bootstrap paging button renderer */
-DataTable.ext.renderer.pageButton.bootstrap = function ( settings, host, idx, buttons, page, pages ) {
-	var api     = new DataTable.Api( settings );
-	var classes = settings.oClasses;
-	var lang    = settings.oLanguage.oPaginate;
-	var aria = settings.oLanguage.oAria.paginate || {};
-	var btnDisplay, btnClass, counter=0;
-
-	var attach = function( container, buttons ) {
-		var i, ien, node, button;
-		var clickHandler = function ( e ) {
-			e.preventDefault();
-			if ( !$(e.currentTarget).hasClass('disabled') && api.page() != e.data.action ) {
-				api.page( e.data.action ).draw( 'page' );
-			}
-		};
-
-		for ( i=0, ien=buttons.length ; i<ien ; i++ ) {
-			button = buttons[i];
-
-			if ( $.isArray( button ) ) {
-				attach( container, button );
-			}
-			else {
-				btnDisplay = '';
-				btnClass = '';
-
-				switch ( button ) {
-					case 'ellipsis':
-						btnDisplay = '&#x2026;';
-						btnClass = 'disabled';
-						break;
-
-					case 'first':
-						btnDisplay = lang.sFirst;
-						btnClass = button + (page > 0 ?
-							'' : ' disabled');
-						break;
-
-					case 'previous':
-						btnDisplay = lang.sPrevious;
-						btnClass = button + (page > 0 ?
-							'' : ' disabled');
-						break;
-
-					case 'next':
-						btnDisplay = lang.sNext;
-						btnClass = button + (page < pages-1 ?
-							'' : ' disabled');
-						break;
-
-					case 'last':
-						btnDisplay = lang.sLast;
-						btnClass = button + (page < pages-1 ?
-							'' : ' disabled');
-						break;
-
-					default:
-						btnDisplay = button + 1;
-						btnClass = page === button ?
-							'active' : '';
-						break;
-				}
-
-				if ( btnDisplay ) {
-					node = $('<li>', {
-							'class': classes.sPageButton+' '+btnClass,
-							'id': idx === 0 && typeof button === 'string' ?
-								settings.sTableId +'_'+ button :
-								null
-						} )
-						.append( $('<a>', {
-								'href': '#',
-								'aria-controls': settings.sTableId,
-								'aria-label': aria[ button ],
-								'data-dt-idx': counter,
-								'tabindex': settings.iTabIndex,
-								'class': 'page-link'
-							} )
-							.html( btnDisplay )
-						)
-						.appendTo( container );
-
-					settings.oApi._fnBindAction(
-						node, {action: button}, clickHandler
-					);
-
-					counter++;
-				}
-			}
-		}
-	};
-
-	// IE9 throws an 'unknown error' if document.activeElement is used
-	// inside an iframe or frame. 
-	var activeEl;
-
-	try {
-		// Because this approach is destroying and recreating the paging
-		// elements, focus is lost on the select button which is bad for
-		// accessibility. So we want to restore focus once the draw has
-		// completed
-		activeEl = $(host).find(document.activeElement).data('dt-idx');
-	}
-	catch (e) {}
-
-	attach(
-		$(host).empty().html('<ul class="pagination"/>').children('ul'),
-		buttons
-	);
-
-	if ( activeEl !== undefined ) {
-		$(host).find( '[data-dt-idx='+activeEl+']' ).trigger('focus');
-	}
-};
-
-
-return DataTable;
-}));
diff --git a/DataTables/DataTables-1.10.21/js/dataTables.bootstrap4.min.js b/DataTables/DataTables-1.10.21/js/dataTables.bootstrap4.min.js
deleted file mode 100644
index 50aaa42..0000000
--- a/DataTables/DataTables-1.10.21/js/dataTables.bootstrap4.min.js
+++ /dev/null
@@ -1,11 +0,0 @@
-/*!
- DataTables Bootstrap 4 integration
- ©2011-2017 SpryMedia Ltd - datatables.net/license
-*/
-var $jscomp=$jscomp||{};$jscomp.scope={};$jscomp.findInternal=function(a,b,c){a instanceof String&&(a=String(a));for(var e=a.length,d=0;d<e;d++){var k=a[d];if(b.call(c,k,d,a))return{i:d,v:k}}return{i:-1,v:void 0}};$jscomp.ASSUME_ES5=!1;$jscomp.ASSUME_NO_NATIVE_MAP=!1;$jscomp.ASSUME_NO_NATIVE_SET=!1;$jscomp.SIMPLE_FROUND_POLYFILL=!1;
-$jscomp.defineProperty=$jscomp.ASSUME_ES5||"function"==typeof Object.defineProperties?Object.defineProperty:function(a,b,c){a!=Array.prototype&&a!=Object.prototype&&(a[b]=c.value)};$jscomp.getGlobal=function(a){a=["object"==typeof window&&window,"object"==typeof self&&self,"object"==typeof global&&global,a];for(var b=0;b<a.length;++b){var c=a[b];if(c&&c.Math==Math)return c}throw Error("Cannot find global object");};$jscomp.global=$jscomp.getGlobal(this);
-$jscomp.polyfill=function(a,b,c,e){if(b){c=$jscomp.global;a=a.split(".");for(e=0;e<a.length-1;e++){var d=a[e];d in c||(c[d]={});c=c[d]}a=a[a.length-1];e=c[a];b=b(e);b!=e&&null!=b&&$jscomp.defineProperty(c,a,{configurable:!0,writable:!0,value:b})}};$jscomp.polyfill("Array.prototype.find",function(a){return a?a:function(a,c){return $jscomp.findInternal(this,a,c).v}},"es6","es3");
-(function(a){"function"===typeof define&&define.amd?define(["jquery","datatables.net"],function(b){return a(b,window,document)}):"object"===typeof exports?module.exports=function(b,c){b||(b=window);c&&c.fn.dataTable||(c=require("datatables.net")(b,c).$);return a(c,b,b.document)}:a(jQuery,window,document)})(function(a,b,c,e){var d=a.fn.dataTable;a.extend(!0,d.defaults,{dom:"<'row'<'col-sm-12 col-md-6'l><'col-sm-12 col-md-6'f>><'row'<'col-sm-12'tr>><'row'<'col-sm-12 col-md-5'i><'col-sm-12 col-md-7'p>>",
-renderer:"bootstrap"});a.extend(d.ext.classes,{sWrapper:"dataTables_wrapper dt-bootstrap4",sFilterInput:"form-control form-control-sm",sLengthSelect:"custom-select custom-select-sm form-control form-control-sm",sProcessing:"dataTables_processing card",sPageButton:"paginate_button page-item"});d.ext.renderer.pageButton.bootstrap=function(b,l,v,w,m,r){var k=new d.Api(b),x=b.oClasses,n=b.oLanguage.oPaginate,y=b.oLanguage.oAria.paginate||{},g,h,t=0,u=function(c,d){var e,l=function(b){b.preventDefault();
-a(b.currentTarget).hasClass("disabled")||k.page()==b.data.action||k.page(b.data.action).draw("page")};var q=0;for(e=d.length;q<e;q++){var f=d[q];if(a.isArray(f))u(c,f);else{h=g="";switch(f){case "ellipsis":g="&#x2026;";h="disabled";break;case "first":g=n.sFirst;h=f+(0<m?"":" disabled");break;case "previous":g=n.sPrevious;h=f+(0<m?"":" disabled");break;case "next":g=n.sNext;h=f+(m<r-1?"":" disabled");break;case "last":g=n.sLast;h=f+(m<r-1?"":" disabled");break;default:g=f+1,h=m===f?"active":""}if(g){var p=
-a("<li>",{"class":x.sPageButton+" "+h,id:0===v&&"string"===typeof f?b.sTableId+"_"+f:null}).append(a("<a>",{href:"#","aria-controls":b.sTableId,"aria-label":y[f],"data-dt-idx":t,tabindex:b.iTabIndex,"class":"page-link"}).html(g)).appendTo(c);b.oApi._fnBindAction(p,{action:f},l);t++}}}};try{var p=a(l).find(c.activeElement).data("dt-idx")}catch(z){}u(a(l).empty().html('<ul class="pagination"/>').children("ul"),w);p!==e&&a(l).find("[data-dt-idx="+p+"]").trigger("focus")};return d});
diff --git a/DataTables/DataTables-1.10.21/js/dataTables.foundation.js b/DataTables/DataTables-1.10.21/js/dataTables.foundation.js
deleted file mode 100644
index cdafb66..0000000
--- a/DataTables/DataTables-1.10.21/js/dataTables.foundation.js
+++ /dev/null
@@ -1,174 +0,0 @@
-/*! DataTables Foundation integration
- * ©2011-2015 SpryMedia Ltd - datatables.net/license
- */
-
-/**
- * DataTables integration for Foundation. This requires Foundation 5 and
- * DataTables 1.10 or newer.
- *
- * This file sets the defaults and adds options to DataTables to style its
- * controls using Foundation. See http://datatables.net/manual/styling/foundation
- * for further information.
- */
-(function( factory ){
-	if ( typeof define === 'function' && define.amd ) {
-		// AMD
-		define( ['jquery', 'datatables.net'], function ( $ ) {
-			return factory( $, window, document );
-		} );
-	}
-	else if ( typeof exports === 'object' ) {
-		// CommonJS
-		module.exports = function (root, $) {
-			if ( ! root ) {
-				root = window;
-			}
-
-			if ( ! $ || ! $.fn.dataTable ) {
-				$ = require('datatables.net')(root, $).$;
-			}
-
-			return factory( $, root, root.document );
-		};
-	}
-	else {
-		// Browser
-		factory( jQuery, window, document );
-	}
-}(function( $, window, document, undefined ) {
-'use strict';
-var DataTable = $.fn.dataTable;
-
-// Detect Foundation 5 / 6 as they have different element and class requirements
-var meta = $('<meta class="foundation-mq"/>').appendTo('head');
-DataTable.ext.foundationVersion = meta.css('font-family').match(/small|medium|large/) ? 6 : 5;
-meta.remove();
-
-
-$.extend( DataTable.ext.classes, {
-	sWrapper:    "dataTables_wrapper dt-foundation",
-	sProcessing: "dataTables_processing panel callout"
-} );
-
-
-/* Set the defaults for DataTables initialisation */
-$.extend( true, DataTable.defaults, {
-	dom:
-		"<'row grid-x'<'small-6 columns cell'l><'small-6 columns cell'f>r>"+
-		"t"+
-		"<'row grid-x'<'small-6 columns cell'i><'small-6 columns cell'p>>",
-	renderer: 'foundation'
-} );
-
-
-/* Page button renderer */
-DataTable.ext.renderer.pageButton.foundation = function ( settings, host, idx, buttons, page, pages ) {
-	var api = new DataTable.Api( settings );
-	var classes = settings.oClasses;
-	var lang = settings.oLanguage.oPaginate;
-	var aria = settings.oLanguage.oAria.paginate || {};
-	var btnDisplay, btnClass;
-	var tag;
-	var v5 = DataTable.ext.foundationVersion === 5;
-
-	var attach = function( container, buttons ) {
-		var i, ien, node, button;
-		var clickHandler = function ( e ) {
-			e.preventDefault();
-			if ( !$(e.currentTarget).hasClass('unavailable') && api.page() != e.data.action ) {
-				api.page( e.data.action ).draw( 'page' );
-			}
-		};
-
-		for ( i=0, ien=buttons.length ; i<ien ; i++ ) {
-			button = buttons[i];
-
-			if ( $.isArray( button ) ) {
-				attach( container, button );
-			}
-			else {
-				btnDisplay = '';
-				btnClass = '';
-				tag = null;
-
-				switch ( button ) {
-					case 'ellipsis':
-						btnDisplay = '&#x2026;';
-						btnClass = 'unavailable disabled';
-						tag = null;
-						break;
-
-					case 'first':
-						btnDisplay = lang.sFirst;
-						btnClass = button + (page > 0 ?
-							'' : ' unavailable disabled');
-						tag = page > 0 ? 'a' : null;
-						break;
-
-					case 'previous':
-						btnDisplay = lang.sPrevious;
-						btnClass = button + (page > 0 ?
-							'' : ' unavailable disabled');
-						tag = page > 0 ? 'a' : null;
-						break;
-
-					case 'next':
-						btnDisplay = lang.sNext;
-						btnClass = button + (page < pages-1 ?
-							'' : ' unavailable disabled');
-						tag = page < pages-1 ? 'a' : null;
-						break;
-
-					case 'last':
-						btnDisplay = lang.sLast;
-						btnClass = button + (page < pages-1 ?
-							'' : ' unavailable disabled');
-						tag = page < pages-1 ? 'a' : null;
-						break;
-
-					default:
-						btnDisplay = button + 1;
-						btnClass = page === button ?
-							'current' : '';
-						tag = page === button ?
-							null : 'a';
-						break;
-				}
-
-				if ( v5 ) {
-					tag = 'a';
-				}
-
-				if ( btnDisplay ) {
-					node = $('<li>', {
-							'class': classes.sPageButton+' '+btnClass,
-							'aria-controls': settings.sTableId,
-							'aria-label': aria[ button ],
-							'tabindex': settings.iTabIndex,
-							'id': idx === 0 && typeof button === 'string' ?
-								settings.sTableId +'_'+ button :
-								null
-						} )
-						.append( tag ?
-							$('<'+tag+'/>', {'href': '#'} ).html( btnDisplay ) :
-							btnDisplay
-						)
-						.appendTo( container );
-
-					settings.oApi._fnBindAction(
-						node, {action: button}, clickHandler
-					);
-				}
-			}
-		}
-	};
-
-	attach(
-		$(host).empty().html('<ul class="pagination"/>').children('ul'),
-		buttons
-	);
-};
-
-
-return DataTable;
-}));
diff --git a/DataTables/DataTables-1.10.21/js/dataTables.foundation.min.js b/DataTables/DataTables-1.10.21/js/dataTables.foundation.min.js
deleted file mode 100644
index 8a4b010..0000000
--- a/DataTables/DataTables-1.10.21/js/dataTables.foundation.min.js
+++ /dev/null
@@ -1,9 +0,0 @@
-/*!
- DataTables Foundation integration
- ©2011-2015 SpryMedia Ltd - datatables.net/license
-*/
-(function(c){"function"===typeof define&&define.amd?define(["jquery","datatables.net"],function(a){return c(a,window,document)}):"object"===typeof exports?module.exports=function(a,d){a||(a=window);d&&d.fn.dataTable||(d=require("datatables.net")(a,d).$);return c(d,a,a.document)}:c(jQuery,window,document)})(function(c,a,d,z){var e=c.fn.dataTable;a=c('<meta class="foundation-mq"/>').appendTo("head");e.ext.foundationVersion=a.css("font-family").match(/small|medium|large/)?6:5;a.remove();c.extend(e.ext.classes,
-{sWrapper:"dataTables_wrapper dt-foundation",sProcessing:"dataTables_processing panel callout"});c.extend(!0,e.defaults,{dom:"<'row grid-x'<'small-6 columns cell'l><'small-6 columns cell'f>r>t<'row grid-x'<'small-6 columns cell'i><'small-6 columns cell'p>>",renderer:"foundation"});e.ext.renderer.pageButton.foundation=function(a,d,u,n,f,l){var q=new e.Api(a),v=a.oClasses,m=a.oLanguage.oPaginate,w=a.oLanguage.oAria.paginate||{},g,k,h,x=5===e.ext.foundationVersion,t=function(d,e){var r,n=function(a){a.preventDefault();
-c(a.currentTarget).hasClass("unavailable")||q.page()==a.data.action||q.page(a.data.action).draw("page")};var p=0;for(r=e.length;p<r;p++){var b=e[p];if(c.isArray(b))t(d,b);else{k=g="";h=null;switch(b){case "ellipsis":g="&#x2026;";k="unavailable disabled";h=null;break;case "first":g=m.sFirst;k=b+(0<f?"":" unavailable disabled");h=0<f?"a":null;break;case "previous":g=m.sPrevious;k=b+(0<f?"":" unavailable disabled");h=0<f?"a":null;break;case "next":g=m.sNext;k=b+(f<l-1?"":" unavailable disabled");h=f<
-l-1?"a":null;break;case "last":g=m.sLast;k=b+(f<l-1?"":" unavailable disabled");h=f<l-1?"a":null;break;default:g=b+1,k=f===b?"current":"",h=f===b?null:"a"}x&&(h="a");if(g){var y=c("<li>",{"class":v.sPageButton+" "+k,"aria-controls":a.sTableId,"aria-label":w[b],tabindex:a.iTabIndex,id:0===u&&"string"===typeof b?a.sTableId+"_"+b:null}).append(h?c("<"+h+"/>",{href:"#"}).html(g):g).appendTo(d);a.oApi._fnBindAction(y,{action:b},n)}}}};t(c(d).empty().html('<ul class="pagination"/>').children("ul"),n)};
-return e});
diff --git a/DataTables/DataTables-1.10.21/js/dataTables.jqueryui.js b/DataTables/DataTables-1.10.21/js/dataTables.jqueryui.js
deleted file mode 100644
index b060a3e..0000000
--- a/DataTables/DataTables-1.10.21/js/dataTables.jqueryui.js
+++ /dev/null
@@ -1,164 +0,0 @@
-/*! DataTables jQuery UI integration
- * ©2011-2014 SpryMedia Ltd - datatables.net/license
- */
-
-/**
- * DataTables integration for jQuery UI. This requires jQuery UI and
- * DataTables 1.10 or newer.
- *
- * This file sets the defaults and adds options to DataTables to style its
- * controls using jQuery UI. See http://datatables.net/manual/styling/jqueryui
- * for further information.
- */
-(function( factory ){
-	if ( typeof define === 'function' && define.amd ) {
-		// AMD
-		define( ['jquery', 'datatables.net'], function ( $ ) {
-			return factory( $, window, document );
-		} );
-	}
-	else if ( typeof exports === 'object' ) {
-		// CommonJS
-		module.exports = function (root, $) {
-			if ( ! root ) {
-				root = window;
-			}
-
-			if ( ! $ || ! $.fn.dataTable ) {
-				$ = require('datatables.net')(root, $).$;
-			}
-
-			return factory( $, root, root.document );
-		};
-	}
-	else {
-		// Browser
-		factory( jQuery, window, document );
-	}
-}(function( $, window, document, undefined ) {
-'use strict';
-var DataTable = $.fn.dataTable;
-
-
-var sort_prefix = 'css_right ui-icon ui-icon-';
-var toolbar_prefix = 'fg-toolbar ui-toolbar ui-widget-header ui-helper-clearfix ui-corner-';
-
-/* Set the defaults for DataTables initialisation */
-$.extend( true, DataTable.defaults, {
-	dom:
-		'<"'+toolbar_prefix+'tl ui-corner-tr"lfr>'+
-		't'+
-		'<"'+toolbar_prefix+'bl ui-corner-br"ip>',
-	renderer: 'jqueryui'
-} );
-
-
-$.extend( DataTable.ext.classes, {
-	"sWrapper":            "dataTables_wrapper dt-jqueryui",
-
-	/* Full numbers paging buttons */
-	"sPageButton":         "fg-button ui-button ui-state-default",
-	"sPageButtonActive":   "ui-state-disabled",
-	"sPageButtonDisabled": "ui-state-disabled",
-
-	/* Features */
-	"sPaging": "dataTables_paginate fg-buttonset ui-buttonset fg-buttonset-multi "+
-		"ui-buttonset-multi paging_", /* Note that the type is postfixed */
-
-	/* Sorting */
-	"sSortAsc":            "ui-state-default sorting_asc",
-	"sSortDesc":           "ui-state-default sorting_desc",
-	"sSortable":           "ui-state-default sorting",
-	"sSortableAsc":        "ui-state-default sorting_asc_disabled",
-	"sSortableDesc":       "ui-state-default sorting_desc_disabled",
-	"sSortableNone":       "ui-state-default sorting_disabled",
-	"sSortIcon":           "DataTables_sort_icon",
-
-	/* Scrolling */
-	"sScrollHead": "dataTables_scrollHead "+"ui-state-default",
-	"sScrollFoot": "dataTables_scrollFoot "+"ui-state-default",
-
-	/* Misc */
-	"sHeaderTH":  "ui-state-default",
-	"sFooterTH":  "ui-state-default"
-} );
-
-
-DataTable.ext.renderer.header.jqueryui = function ( settings, cell, column, classes ) {
-	// Calculate what the unsorted class should be
-	var noSortAppliedClass = sort_prefix+'caret-2-n-s';
-	var asc = $.inArray('asc', column.asSorting) !== -1;
-	var desc = $.inArray('desc', column.asSorting) !== -1;
-
-	if ( !column.bSortable || (!asc && !desc) ) {
-		noSortAppliedClass = '';
-	}
-	else if ( asc && !desc ) {
-		noSortAppliedClass = sort_prefix+'caret-1-n';
-	}
-	else if ( !asc && desc ) {
-		noSortAppliedClass = sort_prefix+'caret-1-s';
-	}
-
-	// Setup the DOM structure
-	$('<div/>')
-		.addClass( 'DataTables_sort_wrapper' )
-		.append( cell.contents() )
-		.append( $('<span/>')
-			.addClass( classes.sSortIcon+' '+noSortAppliedClass )
-		)
-		.appendTo( cell );
-
-	// Attach a sort listener to update on sort
-	$(settings.nTable).on( 'order.dt', function ( e, ctx, sorting, columns ) {
-		if ( settings !== ctx ) {
-			return;
-		}
-
-		var colIdx = column.idx;
-
-		cell
-			.removeClass( classes.sSortAsc +" "+classes.sSortDesc )
-			.addClass( columns[ colIdx ] == 'asc' ?
-				classes.sSortAsc : columns[ colIdx ] == 'desc' ?
-					classes.sSortDesc :
-					column.sSortingClass
-			);
-
-		cell
-			.find( 'span.'+classes.sSortIcon )
-			.removeClass(
-				sort_prefix+'triangle-1-n' +" "+
-				sort_prefix+'triangle-1-s' +" "+
-				sort_prefix+'caret-2-n-s' +" "+
-				sort_prefix+'caret-1-n' +" "+
-				sort_prefix+'caret-1-s'
-			)
-			.addClass( columns[ colIdx ] == 'asc' ?
-				sort_prefix+'triangle-1-n' : columns[ colIdx ] == 'desc' ?
-					sort_prefix+'triangle-1-s' :
-					noSortAppliedClass
-			);
-	} );
-};
-
-
-/*
- * TableTools jQuery UI compatibility
- * Required TableTools 2.1+
- */
-if ( DataTable.TableTools ) {
-	$.extend( true, DataTable.TableTools.classes, {
-		"container": "DTTT_container ui-buttonset ui-buttonset-multi",
-		"buttons": {
-			"normal": "DTTT_button ui-button ui-state-default"
-		},
-		"collection": {
-			"container": "DTTT_collection ui-buttonset ui-buttonset-multi"
-		}
-	} );
-}
-
-
-return DataTable;
-}));
diff --git a/DataTables/DataTables-1.10.21/js/dataTables.jqueryui.min.js b/DataTables/DataTables-1.10.21/js/dataTables.jqueryui.min.js
deleted file mode 100644
index 899fc3a..0000000
--- a/DataTables/DataTables-1.10.21/js/dataTables.jqueryui.min.js
+++ /dev/null
@@ -1,12 +0,0 @@
-/*!
- DataTables jQuery UI integration
- ©2011-2014 SpryMedia Ltd - datatables.net/license
-*/
-var $jscomp=$jscomp||{};$jscomp.scope={};$jscomp.findInternal=function(a,b,c){a instanceof String&&(a=String(a));for(var d=a.length,e=0;e<d;e++){var l=a[e];if(b.call(c,l,e,a))return{i:e,v:l}}return{i:-1,v:void 0}};$jscomp.ASSUME_ES5=!1;$jscomp.ASSUME_NO_NATIVE_MAP=!1;$jscomp.ASSUME_NO_NATIVE_SET=!1;$jscomp.SIMPLE_FROUND_POLYFILL=!1;
-$jscomp.defineProperty=$jscomp.ASSUME_ES5||"function"==typeof Object.defineProperties?Object.defineProperty:function(a,b,c){a!=Array.prototype&&a!=Object.prototype&&(a[b]=c.value)};$jscomp.getGlobal=function(a){a=["object"==typeof window&&window,"object"==typeof self&&self,"object"==typeof global&&global,a];for(var b=0;b<a.length;++b){var c=a[b];if(c&&c.Math==Math)return c}throw Error("Cannot find global object");};$jscomp.global=$jscomp.getGlobal(this);
-$jscomp.polyfill=function(a,b,c,d){if(b){c=$jscomp.global;a=a.split(".");for(d=0;d<a.length-1;d++){var e=a[d];e in c||(c[e]={});c=c[e]}a=a[a.length-1];d=c[a];b=b(d);b!=d&&null!=b&&$jscomp.defineProperty(c,a,{configurable:!0,writable:!0,value:b})}};$jscomp.polyfill("Array.prototype.find",function(a){return a?a:function(a,c){return $jscomp.findInternal(this,a,c).v}},"es6","es3");
-(function(a){"function"===typeof define&&define.amd?define(["jquery","datatables.net"],function(b){return a(b,window,document)}):"object"===typeof exports?module.exports=function(b,c){b||(b=window);c&&c.fn.dataTable||(c=require("datatables.net")(b,c).$);return a(c,b,b.document)}:a(jQuery,window,document)})(function(a,b,c,d){b=a.fn.dataTable;a.extend(!0,b.defaults,{dom:'<"fg-toolbar ui-toolbar ui-widget-header ui-helper-clearfix ui-corner-tl ui-corner-tr"lfr>t<"fg-toolbar ui-toolbar ui-widget-header ui-helper-clearfix ui-corner-bl ui-corner-br"ip>',
-renderer:"jqueryui"});a.extend(b.ext.classes,{sWrapper:"dataTables_wrapper dt-jqueryui",sPageButton:"fg-button ui-button ui-state-default",sPageButtonActive:"ui-state-disabled",sPageButtonDisabled:"ui-state-disabled",sPaging:"dataTables_paginate fg-buttonset ui-buttonset fg-buttonset-multi ui-buttonset-multi paging_",sSortAsc:"ui-state-default sorting_asc",sSortDesc:"ui-state-default sorting_desc",sSortable:"ui-state-default sorting",sSortableAsc:"ui-state-default sorting_asc_disabled",sSortableDesc:"ui-state-default sorting_desc_disabled",
-sSortableNone:"ui-state-default sorting_disabled",sSortIcon:"DataTables_sort_icon",sScrollHead:"dataTables_scrollHead ui-state-default",sScrollFoot:"dataTables_scrollFoot ui-state-default",sHeaderTH:"ui-state-default",sFooterTH:"ui-state-default"});b.ext.renderer.header.jqueryui=function(b,c,d,f){var e="css_right ui-icon ui-icon-caret-2-n-s",g=-1!==a.inArray("asc",d.asSorting),h=-1!==a.inArray("desc",d.asSorting);d.bSortable&&(g||h)?g&&!h?e="css_right ui-icon ui-icon-caret-1-n":!g&&h&&(e="css_right ui-icon ui-icon-caret-1-s"):
-e="";a("<div/>").addClass("DataTables_sort_wrapper").append(c.contents()).append(a("<span/>").addClass(f.sSortIcon+" "+e)).appendTo(c);a(b.nTable).on("order.dt",function(a,g,h,k){b===g&&(a=d.idx,c.removeClass(f.sSortAsc+" "+f.sSortDesc).addClass("asc"==k[a]?f.sSortAsc:"desc"==k[a]?f.sSortDesc:d.sSortingClass),c.find("span."+f.sSortIcon).removeClass("css_right ui-icon ui-icon-triangle-1-n css_right ui-icon ui-icon-triangle-1-s css_right ui-icon ui-icon-caret-2-n-s css_right ui-icon ui-icon-caret-1-n css_right ui-icon ui-icon-caret-1-s").addClass("asc"==
-k[a]?"css_right ui-icon ui-icon-triangle-1-n":"desc"==k[a]?"css_right ui-icon ui-icon-triangle-1-s":e))})};b.TableTools&&a.extend(!0,b.TableTools.classes,{container:"DTTT_container ui-buttonset ui-buttonset-multi",buttons:{normal:"DTTT_button ui-button ui-state-default"},collection:{container:"DTTT_collection ui-buttonset ui-buttonset-multi"}});return b});
diff --git a/DataTables/DataTables-1.10.21/js/dataTables.semanticui.js b/DataTables/DataTables-1.10.21/js/dataTables.semanticui.js
deleted file mode 100644
index 716af85..0000000
--- a/DataTables/DataTables-1.10.21/js/dataTables.semanticui.js
+++ /dev/null
@@ -1,212 +0,0 @@
-/*! DataTables Bootstrap 3 integration
- * ©2011-2015 SpryMedia Ltd - datatables.net/license
- */
-
-/**
- * DataTables integration for Bootstrap 3. This requires Bootstrap 3 and
- * DataTables 1.10 or newer.
- *
- * This file sets the defaults and adds options to DataTables to style its
- * controls using Bootstrap. See http://datatables.net/manual/styling/bootstrap
- * for further information.
- */
-(function( factory ){
-	if ( typeof define === 'function' && define.amd ) {
-		// AMD
-		define( ['jquery', 'datatables.net'], function ( $ ) {
-			return factory( $, window, document );
-		} );
-	}
-	else if ( typeof exports === 'object' ) {
-		// CommonJS
-		module.exports = function (root, $) {
-			if ( ! root ) {
-				root = window;
-			}
-
-			if ( ! $ || ! $.fn.dataTable ) {
-				// Require DataTables, which attaches to jQuery, including
-				// jQuery if needed and have a $ property so we can access the
-				// jQuery object that is used
-				$ = require('datatables.net')(root, $).$;
-			}
-
-			return factory( $, root, root.document );
-		};
-	}
-	else {
-		// Browser
-		factory( jQuery, window, document );
-	}
-}(function( $, window, document, undefined ) {
-'use strict';
-var DataTable = $.fn.dataTable;
-
-
-/* Set the defaults for DataTables initialisation */
-$.extend( true, DataTable.defaults, {
-	dom:
-		"<'ui stackable grid'"+
-			"<'row'"+
-				"<'eight wide column'l>"+
-				"<'right aligned eight wide column'f>"+
-			">"+
-			"<'row dt-table'"+
-				"<'sixteen wide column'tr>"+
-			">"+
-			"<'row'"+
-				"<'seven wide column'i>"+
-				"<'right aligned nine wide column'p>"+
-			">"+
-		">",
-	renderer: 'semanticUI'
-} );
-
-
-/* Default class modification */
-$.extend( DataTable.ext.classes, {
-	sWrapper:      "dataTables_wrapper dt-semanticUI",
-	sFilter:       "dataTables_filter ui input",
-	sProcessing:   "dataTables_processing ui segment",
-	sPageButton:   "paginate_button item"
-} );
-
-
-/* Bootstrap paging button renderer */
-DataTable.ext.renderer.pageButton.semanticUI = function ( settings, host, idx, buttons, page, pages ) {
-	var api     = new DataTable.Api( settings );
-	var classes = settings.oClasses;
-	var lang    = settings.oLanguage.oPaginate;
-	var aria = settings.oLanguage.oAria.paginate || {};
-	var btnDisplay, btnClass, counter=0;
-
-	var attach = function( container, buttons ) {
-		var i, ien, node, button;
-		var clickHandler = function ( e ) {
-			e.preventDefault();
-			if ( !$(e.currentTarget).hasClass('disabled') && api.page() != e.data.action ) {
-				api.page( e.data.action ).draw( 'page' );
-			}
-		};
-
-		for ( i=0, ien=buttons.length ; i<ien ; i++ ) {
-			button = buttons[i];
-
-			if ( $.isArray( button ) ) {
-				attach( container, button );
-			}
-			else {
-				btnDisplay = '';
-				btnClass = '';
-
-				switch ( button ) {
-					case 'ellipsis':
-						btnDisplay = '&#x2026;';
-						btnClass = 'disabled';
-						break;
-
-					case 'first':
-						btnDisplay = lang.sFirst;
-						btnClass = button + (page > 0 ?
-							'' : ' disabled');
-						break;
-
-					case 'previous':
-						btnDisplay = lang.sPrevious;
-						btnClass = button + (page > 0 ?
-							'' : ' disabled');
-						break;
-
-					case 'next':
-						btnDisplay = lang.sNext;
-						btnClass = button + (page < pages-1 ?
-							'' : ' disabled');
-						break;
-
-					case 'last':
-						btnDisplay = lang.sLast;
-						btnClass = button + (page < pages-1 ?
-							'' : ' disabled');
-						break;
-
-					default:
-						btnDisplay = button + 1;
-						btnClass = page === button ?
-							'active' : '';
-						break;
-				}
-
-				var tag = btnClass.indexOf( 'disabled' ) === -1 ?
-					'a' :
-					'div';
-
-				if ( btnDisplay ) {
-					node = $('<'+tag+'>', {
-							'class': classes.sPageButton+' '+btnClass,
-							'id': idx === 0 && typeof button === 'string' ?
-								settings.sTableId +'_'+ button :
-								null,
-							'href': '#',
-							'aria-controls': settings.sTableId,
-							'aria-label': aria[ button ],
-							'data-dt-idx': counter,
-							'tabindex': settings.iTabIndex
-						} )
-						.html( btnDisplay )
-						.appendTo( container );
-
-					settings.oApi._fnBindAction(
-						node, {action: button}, clickHandler
-					);
-
-					counter++;
-				}
-			}
-		}
-	};
-
-	// IE9 throws an 'unknown error' if document.activeElement is used
-	// inside an iframe or frame. 
-	var activeEl;
-
-	try {
-		// Because this approach is destroying and recreating the paging
-		// elements, focus is lost on the select button which is bad for
-		// accessibility. So we want to restore focus once the draw has
-		// completed
-		activeEl = $(host).find(document.activeElement).data('dt-idx');
-	}
-	catch (e) {}
-
-	attach(
-		$(host).empty().html('<div class="ui stackable pagination menu"/>').children(),
-		buttons
-	);
-
-	if ( activeEl !== undefined ) {
-		$(host).find( '[data-dt-idx='+activeEl+']' ).trigger('focus');
-	}
-};
-
-
-// Javascript enhancements on table initialisation
-$(document).on( 'init.dt', function (e, ctx) {
-	if ( e.namespace !== 'dt' ) {
-		return;
-	}
-
-	var api = new $.fn.dataTable.Api( ctx );
-
-	// Length menu drop down
-	if ( $.fn.dropdown ) {
-		$( 'div.dataTables_length select', api.table().container() ).dropdown();
-	}
-
-	// Filtering input
-	$( 'div.dataTables_filter.ui.input', api.table().container() ).removeClass('input').addClass('form');
-	$( 'div.dataTables_filter input', api.table().container() ).wrap( '<span class="ui input" />' );
-} );
-
-
-return DataTable;
-}));
diff --git a/DataTables/DataTables-1.10.21/js/dataTables.semanticui.min.js b/DataTables/DataTables-1.10.21/js/dataTables.semanticui.min.js
deleted file mode 100644
index 8256092..0000000
--- a/DataTables/DataTables-1.10.21/js/dataTables.semanticui.min.js
+++ /dev/null
@@ -1,12 +0,0 @@
-/*!
- DataTables Bootstrap 3 integration
- ©2011-2015 SpryMedia Ltd - datatables.net/license
-*/
-var $jscomp=$jscomp||{};$jscomp.scope={};$jscomp.findInternal=function(a,b,c){a instanceof String&&(a=String(a));for(var e=a.length,d=0;d<e;d++){var k=a[d];if(b.call(c,k,d,a))return{i:d,v:k}}return{i:-1,v:void 0}};$jscomp.ASSUME_ES5=!1;$jscomp.ASSUME_NO_NATIVE_MAP=!1;$jscomp.ASSUME_NO_NATIVE_SET=!1;$jscomp.SIMPLE_FROUND_POLYFILL=!1;
-$jscomp.defineProperty=$jscomp.ASSUME_ES5||"function"==typeof Object.defineProperties?Object.defineProperty:function(a,b,c){a!=Array.prototype&&a!=Object.prototype&&(a[b]=c.value)};$jscomp.getGlobal=function(a){a=["object"==typeof window&&window,"object"==typeof self&&self,"object"==typeof global&&global,a];for(var b=0;b<a.length;++b){var c=a[b];if(c&&c.Math==Math)return c}throw Error("Cannot find global object");};$jscomp.global=$jscomp.getGlobal(this);
-$jscomp.polyfill=function(a,b,c,e){if(b){c=$jscomp.global;a=a.split(".");for(e=0;e<a.length-1;e++){var d=a[e];d in c||(c[d]={});c=c[d]}a=a[a.length-1];e=c[a];b=b(e);b!=e&&null!=b&&$jscomp.defineProperty(c,a,{configurable:!0,writable:!0,value:b})}};$jscomp.polyfill("Array.prototype.find",function(a){return a?a:function(a,c){return $jscomp.findInternal(this,a,c).v}},"es6","es3");
-(function(a){"function"===typeof define&&define.amd?define(["jquery","datatables.net"],function(b){return a(b,window,document)}):"object"===typeof exports?module.exports=function(b,c){b||(b=window);c&&c.fn.dataTable||(c=require("datatables.net")(b,c).$);return a(c,b,b.document)}:a(jQuery,window,document)})(function(a,b,c,e){var d=a.fn.dataTable;a.extend(!0,d.defaults,{dom:"<'ui stackable grid'<'row'<'eight wide column'l><'right aligned eight wide column'f>><'row dt-table'<'sixteen wide column'tr>><'row'<'seven wide column'i><'right aligned nine wide column'p>>>",
-renderer:"semanticUI"});a.extend(d.ext.classes,{sWrapper:"dataTables_wrapper dt-semanticUI",sFilter:"dataTables_filter ui input",sProcessing:"dataTables_processing ui segment",sPageButton:"paginate_button item"});d.ext.renderer.pageButton.semanticUI=function(b,l,w,x,m,r){var k=new d.Api(b),y=b.oClasses,n=b.oLanguage.oPaginate,z=b.oLanguage.oAria.paginate||{},g,h,t=0,u=function(c,d){var e,l=function(b){b.preventDefault();a(b.currentTarget).hasClass("disabled")||k.page()==b.data.action||k.page(b.data.action).draw("page")};
-var p=0;for(e=d.length;p<e;p++){var f=d[p];if(a.isArray(f))u(c,f);else{h=g="";switch(f){case "ellipsis":g="&#x2026;";h="disabled";break;case "first":g=n.sFirst;h=f+(0<m?"":" disabled");break;case "previous":g=n.sPrevious;h=f+(0<m?"":" disabled");break;case "next":g=n.sNext;h=f+(m<r-1?"":" disabled");break;case "last":g=n.sLast;h=f+(m<r-1?"":" disabled");break;default:g=f+1,h=m===f?"active":""}var q=-1===h.indexOf("disabled")?"a":"div";g&&(q=a("<"+q+">",{"class":y.sPageButton+" "+h,id:0===w&&"string"===
-typeof f?b.sTableId+"_"+f:null,href:"#","aria-controls":b.sTableId,"aria-label":z[f],"data-dt-idx":t,tabindex:b.iTabIndex}).html(g).appendTo(c),b.oApi._fnBindAction(q,{action:f},l),t++)}}};try{var v=a(l).find(c.activeElement).data("dt-idx")}catch(A){}u(a(l).empty().html('<div class="ui stackable pagination menu"/>').children(),x);v!==e&&a(l).find("[data-dt-idx="+v+"]").trigger("focus")};a(c).on("init.dt",function(b,c){"dt"===b.namespace&&(b=new a.fn.dataTable.Api(c),a.fn.dropdown&&a("div.dataTables_length select",
-b.table().container()).dropdown(),a("div.dataTables_filter.ui.input",b.table().container()).removeClass("input").addClass("form"),a("div.dataTables_filter input",b.table().container()).wrap('<span class="ui input" />'))});return d});
diff --git a/DataTables/DataTables-1.10.21/js/jquery.dataTables.js b/DataTables/DataTables-1.10.21/js/jquery.dataTables.js
deleted file mode 100644
index aeb7fb9..0000000
--- a/DataTables/DataTables-1.10.21/js/jquery.dataTables.js
+++ /dev/null
@@ -1,15354 +0,0 @@
-/*! DataTables 1.10.21
- * ©2008-2020 SpryMedia Ltd - datatables.net/license
- */
-
-/**
- * @summary     DataTables
- * @description Paginate, search and order HTML tables
- * @version     1.10.21
- * @file        jquery.dataTables.js
- * @author      SpryMedia Ltd
- * @contact     www.datatables.net
- * @copyright   Copyright 2008-2020 SpryMedia Ltd.
- *
- * This source file is free software, available under the following license:
- *   MIT license - http://datatables.net/license
- *
- * This source file is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
- * or FITNESS FOR A PARTICULAR PURPOSE. See the license files for details.
- *
- * For details please refer to: http://www.datatables.net
- */
-
-/*jslint evil: true, undef: true, browser: true */
-/*globals $,require,jQuery,define,_selector_run,_selector_opts,_selector_first,_selector_row_indexes,_ext,_Api,_api_register,_api_registerPlural,_re_new_lines,_re_html,_re_formatted_numeric,_re_escape_regex,_empty,_intVal,_numToDecimal,_isNumber,_isHtml,_htmlNumeric,_pluck,_pluck_order,_range,_stripHtml,_unique,_fnBuildAjax,_fnAjaxUpdate,_fnAjaxParameters,_fnAjaxUpdateDraw,_fnAjaxDataSrc,_fnAddColumn,_fnColumnOptions,_fnAdjustColumnSizing,_fnVisibleToColumnIndex,_fnColumnIndexToVisible,_fnVisbleColumns,_fnGetColumns,_fnColumnTypes,_fnApplyColumnDefs,_fnHungarianMap,_fnCamelToHungarian,_fnLanguageCompat,_fnBrowserDetect,_fnAddData,_fnAddTr,_fnNodeToDataIndex,_fnNodeToColumnIndex,_fnGetCellData,_fnSetCellData,_fnSplitObjNotation,_fnGetObjectDataFn,_fnSetObjectDataFn,_fnGetDataMaster,_fnClearTable,_fnDeleteIndex,_fnInvalidate,_fnGetRowElements,_fnCreateTr,_fnBuildHead,_fnDrawHead,_fnDraw,_fnReDraw,_fnAddOptionsHtml,_fnDetectHeader,_fnGetUniqueThs,_fnFeatureHtmlFilter,_fnFilterComplete,_fnFilterCustom,_fnFilterColumn,_fnFilter,_fnFilterCreateSearch,_fnEscapeRegex,_fnFilterData,_fnFeatureHtmlInfo,_fnUpdateInfo,_fnInfoMacros,_fnInitialise,_fnInitComplete,_fnLengthChange,_fnFeatureHtmlLength,_fnFeatureHtmlPaginate,_fnPageChange,_fnFeatureHtmlProcessing,_fnProcessingDisplay,_fnFeatureHtmlTable,_fnScrollDraw,_fnApplyToChildren,_fnCalculateColumnWidths,_fnThrottle,_fnConvertToWidth,_fnGetWidestNode,_fnGetMaxLenString,_fnStringToCss,_fnSortFlatten,_fnSort,_fnSortAria,_fnSortListener,_fnSortAttachListener,_fnSortingClasses,_fnSortData,_fnSaveState,_fnLoadState,_fnSettingsFromNode,_fnLog,_fnMap,_fnBindAction,_fnCallbackReg,_fnCallbackFire,_fnLengthOverflow,_fnRenderer,_fnDataSource,_fnRowAttributes*/
-
-(function( factory ) {
-	"use strict";
-
-	if ( typeof define === 'function' && define.amd ) {
-		// AMD
-		define( ['jquery'], function ( $ ) {
-			return factory( $, window, document );
-		} );
-	}
-	else if ( typeof exports === 'object' ) {
-		// CommonJS
-		module.exports = function (root, $) {
-			if ( ! root ) {
-				// CommonJS environments without a window global must pass a
-				// root. This will give an error otherwise
-				root = window;
-			}
-
-			if ( ! $ ) {
-				$ = typeof window !== 'undefined' ? // jQuery's factory checks for a global window
-					require('jquery') :
-					require('jquery')( root );
-			}
-
-			return factory( $, root, root.document );
-		};
-	}
-	else {
-		// Browser
-		factory( jQuery, window, document );
-	}
-}
-(function( $, window, document, undefined ) {
-	"use strict";
-
-	/**
-	 * DataTables is a plug-in for the jQuery Javascript library. It is a highly
-	 * flexible tool, based upon the foundations of progressive enhancement,
-	 * which will add advanced interaction controls to any HTML table. For a
-	 * full list of features please refer to
-	 * [DataTables.net](href="http://datatables.net).
-	 *
-	 * Note that the `DataTable` object is not a global variable but is aliased
-	 * to `jQuery.fn.DataTable` and `jQuery.fn.dataTable` through which it may
-	 * be  accessed.
-	 *
-	 *  @class
-	 *  @param {object} [init={}] Configuration object for DataTables. Options
-	 *    are defined by {@link DataTable.defaults}
-	 *  @requires jQuery 1.7+
-	 *
-	 *  @example
-	 *    // Basic initialisation
-	 *    $(document).ready( function {
-	 *      $('#example').dataTable();
-	 *    } );
-	 *
-	 *  @example
-	 *    // Initialisation with configuration options - in this case, disable
-	 *    // pagination and sorting.
-	 *    $(document).ready( function {
-	 *      $('#example').dataTable( {
-	 *        "paginate": false,
-	 *        "sort": false
-	 *      } );
-	 *    } );
-	 */
-	var DataTable = function ( options )
-	{
-		/**
-		 * Perform a jQuery selector action on the table's TR elements (from the tbody) and
-		 * return the resulting jQuery object.
-		 *  @param {string|node|jQuery} sSelector jQuery selector or node collection to act on
-		 *  @param {object} [oOpts] Optional parameters for modifying the rows to be included
-		 *  @param {string} [oOpts.filter=none] Select TR elements that meet the current filter
-		 *    criterion ("applied") or all TR elements (i.e. no filter).
-		 *  @param {string} [oOpts.order=current] Order of the TR elements in the processed array.
-		 *    Can be either 'current', whereby the current sorting of the table is used, or
-		 *    'original' whereby the original order the data was read into the table is used.
-		 *  @param {string} [oOpts.page=all] Limit the selection to the currently displayed page
-		 *    ("current") or not ("all"). If 'current' is given, then order is assumed to be
-		 *    'current' and filter is 'applied', regardless of what they might be given as.
-		 *  @returns {object} jQuery object, filtered by the given selector.
-		 *  @dtopt API
-		 *  @deprecated Since v1.10
-		 *
-		 *  @example
-		 *    $(document).ready(function() {
-		 *      var oTable = $('#example').dataTable();
-		 *
-		 *      // Highlight every second row
-		 *      oTable.$('tr:odd').css('backgroundColor', 'blue');
-		 *    } );
-		 *
-		 *  @example
-		 *    $(document).ready(function() {
-		 *      var oTable = $('#example').dataTable();
-		 *
-		 *      // Filter to rows with 'Webkit' in them, add a background colour and then
-		 *      // remove the filter, thus highlighting the 'Webkit' rows only.
-		 *      oTable.fnFilter('Webkit');
-		 *      oTable.$('tr', {"search": "applied"}).css('backgroundColor', 'blue');
-		 *      oTable.fnFilter('');
-		 *    } );
-		 */
-		this.$ = function ( sSelector, oOpts )
-		{
-			return this.api(true).$( sSelector, oOpts );
-		};
-		
-		
-		/**
-		 * Almost identical to $ in operation, but in this case returns the data for the matched
-		 * rows - as such, the jQuery selector used should match TR row nodes or TD/TH cell nodes
-		 * rather than any descendants, so the data can be obtained for the row/cell. If matching
-		 * rows are found, the data returned is the original data array/object that was used to
-		 * create the row (or a generated array if from a DOM source).
-		 *
-		 * This method is often useful in-combination with $ where both functions are given the
-		 * same parameters and the array indexes will match identically.
-		 *  @param {string|node|jQuery} sSelector jQuery selector or node collection to act on
-		 *  @param {object} [oOpts] Optional parameters for modifying the rows to be included
-		 *  @param {string} [oOpts.filter=none] Select elements that meet the current filter
-		 *    criterion ("applied") or all elements (i.e. no filter).
-		 *  @param {string} [oOpts.order=current] Order of the data in the processed array.
-		 *    Can be either 'current', whereby the current sorting of the table is used, or
-		 *    'original' whereby the original order the data was read into the table is used.
-		 *  @param {string} [oOpts.page=all] Limit the selection to the currently displayed page
-		 *    ("current") or not ("all"). If 'current' is given, then order is assumed to be
-		 *    'current' and filter is 'applied', regardless of what they might be given as.
-		 *  @returns {array} Data for the matched elements. If any elements, as a result of the
-		 *    selector, were not TR, TD or TH elements in the DataTable, they will have a null
-		 *    entry in the array.
-		 *  @dtopt API
-		 *  @deprecated Since v1.10
-		 *
-		 *  @example
-		 *    $(document).ready(function() {
-		 *      var oTable = $('#example').dataTable();
-		 *
-		 *      // Get the data from the first row in the table
-		 *      var data = oTable._('tr:first');
-		 *
-		 *      // Do something useful with the data
-		 *      alert( "First cell is: "+data[0] );
-		 *    } );
-		 *
-		 *  @example
-		 *    $(document).ready(function() {
-		 *      var oTable = $('#example').dataTable();
-		 *
-		 *      // Filter to 'Webkit' and get all data for
-		 *      oTable.fnFilter('Webkit');
-		 *      var data = oTable._('tr', {"search": "applied"});
-		 *
-		 *      // Do something with the data
-		 *      alert( data.length+" rows matched the search" );
-		 *    } );
-		 */
-		this._ = function ( sSelector, oOpts )
-		{
-			return this.api(true).rows( sSelector, oOpts ).data();
-		};
-		
-		
-		/**
-		 * Create a DataTables Api instance, with the currently selected tables for
-		 * the Api's context.
-		 * @param {boolean} [traditional=false] Set the API instance's context to be
-		 *   only the table referred to by the `DataTable.ext.iApiIndex` option, as was
-		 *   used in the API presented by DataTables 1.9- (i.e. the traditional mode),
-		 *   or if all tables captured in the jQuery object should be used.
-		 * @return {DataTables.Api}
-		 */
-		this.api = function ( traditional )
-		{
-			return traditional ?
-				new _Api(
-					_fnSettingsFromNode( this[ _ext.iApiIndex ] )
-				) :
-				new _Api( this );
-		};
-		
-		
-		/**
-		 * Add a single new row or multiple rows of data to the table. Please note
-		 * that this is suitable for client-side processing only - if you are using
-		 * server-side processing (i.e. "bServerSide": true), then to add data, you
-		 * must add it to the data source, i.e. the server-side, through an Ajax call.
-		 *  @param {array|object} data The data to be added to the table. This can be:
-		 *    <ul>
-		 *      <li>1D array of data - add a single row with the data provided</li>
-		 *      <li>2D array of arrays - add multiple rows in a single call</li>
-		 *      <li>object - data object when using <i>mData</i></li>
-		 *      <li>array of objects - multiple data objects when using <i>mData</i></li>
-		 *    </ul>
-		 *  @param {bool} [redraw=true] redraw the table or not
-		 *  @returns {array} An array of integers, representing the list of indexes in
-		 *    <i>aoData</i> ({@link DataTable.models.oSettings}) that have been added to
-		 *    the table.
-		 *  @dtopt API
-		 *  @deprecated Since v1.10
-		 *
-		 *  @example
-		 *    // Global var for counter
-		 *    var giCount = 2;
-		 *
-		 *    $(document).ready(function() {
-		 *      $('#example').dataTable();
-		 *    } );
-		 *
-		 *    function fnClickAddRow() {
-		 *      $('#example').dataTable().fnAddData( [
-		 *        giCount+".1",
-		 *        giCount+".2",
-		 *        giCount+".3",
-		 *        giCount+".4" ]
-		 *      );
-		 *
-		 *      giCount++;
-		 *    }
-		 */
-		this.fnAddData = function( data, redraw )
-		{
-			var api = this.api( true );
-		
-			/* Check if we want to add multiple rows or not */
-			var rows = $.isArray(data) && ( $.isArray(data[0]) || $.isPlainObject(data[0]) ) ?
-				api.rows.add( data ) :
-				api.row.add( data );
-		
-			if ( redraw === undefined || redraw ) {
-				api.draw();
-			}
-		
-			return rows.flatten().toArray();
-		};
-		
-		
-		/**
-		 * This function will make DataTables recalculate the column sizes, based on the data
-		 * contained in the table and the sizes applied to the columns (in the DOM, CSS or
-		 * through the sWidth parameter). This can be useful when the width of the table's
-		 * parent element changes (for example a window resize).
-		 *  @param {boolean} [bRedraw=true] Redraw the table or not, you will typically want to
-		 *  @dtopt API
-		 *  @deprecated Since v1.10
-		 *
-		 *  @example
-		 *    $(document).ready(function() {
-		 *      var oTable = $('#example').dataTable( {
-		 *        "sScrollY": "200px",
-		 *        "bPaginate": false
-		 *      } );
-		 *
-		 *      $(window).on('resize', function () {
-		 *        oTable.fnAdjustColumnSizing();
-		 *      } );
-		 *    } );
-		 */
-		this.fnAdjustColumnSizing = function ( bRedraw )
-		{
-			var api = this.api( true ).columns.adjust();
-			var settings = api.settings()[0];
-			var scroll = settings.oScroll;
-		
-			if ( bRedraw === undefined || bRedraw ) {
-				api.draw( false );
-			}
-			else if ( scroll.sX !== "" || scroll.sY !== "" ) {
-				/* If not redrawing, but scrolling, we want to apply the new column sizes anyway */
-				_fnScrollDraw( settings );
-			}
-		};
-		
-		
-		/**
-		 * Quickly and simply clear a table
-		 *  @param {bool} [bRedraw=true] redraw the table or not
-		 *  @dtopt API
-		 *  @deprecated Since v1.10
-		 *
-		 *  @example
-		 *    $(document).ready(function() {
-		 *      var oTable = $('#example').dataTable();
-		 *
-		 *      // Immediately 'nuke' the current rows (perhaps waiting for an Ajax callback...)
-		 *      oTable.fnClearTable();
-		 *    } );
-		 */
-		this.fnClearTable = function( bRedraw )
-		{
-			var api = this.api( true ).clear();
-		
-			if ( bRedraw === undefined || bRedraw ) {
-				api.draw();
-			}
-		};
-		
-		
-		/**
-		 * The exact opposite of 'opening' a row, this function will close any rows which
-		 * are currently 'open'.
-		 *  @param {node} nTr the table row to 'close'
-		 *  @returns {int} 0 on success, or 1 if failed (can't find the row)
-		 *  @dtopt API
-		 *  @deprecated Since v1.10
-		 *
-		 *  @example
-		 *    $(document).ready(function() {
-		 *      var oTable;
-		 *
-		 *      // 'open' an information row when a row is clicked on
-		 *      $('#example tbody tr').click( function () {
-		 *        if ( oTable.fnIsOpen(this) ) {
-		 *          oTable.fnClose( this );
-		 *        } else {
-		 *          oTable.fnOpen( this, "Temporary row opened", "info_row" );
-		 *        }
-		 *      } );
-		 *
-		 *      oTable = $('#example').dataTable();
-		 *    } );
-		 */
-		this.fnClose = function( nTr )
-		{
-			this.api( true ).row( nTr ).child.hide();
-		};
-		
-		
-		/**
-		 * Remove a row for the table
-		 *  @param {mixed} target The index of the row from aoData to be deleted, or
-		 *    the TR element you want to delete
-		 *  @param {function|null} [callBack] Callback function
-		 *  @param {bool} [redraw=true] Redraw the table or not
-		 *  @returns {array} The row that was deleted
-		 *  @dtopt API
-		 *  @deprecated Since v1.10
-		 *
-		 *  @example
-		 *    $(document).ready(function() {
-		 *      var oTable = $('#example').dataTable();
-		 *
-		 *      // Immediately remove the first row
-		 *      oTable.fnDeleteRow( 0 );
-		 *    } );
-		 */
-		this.fnDeleteRow = function( target, callback, redraw )
-		{
-			var api = this.api( true );
-			var rows = api.rows( target );
-			var settings = rows.settings()[0];
-			var data = settings.aoData[ rows[0][0] ];
-		
-			rows.remove();
-		
-			if ( callback ) {
-				callback.call( this, settings, data );
-			}
-		
-			if ( redraw === undefined || redraw ) {
-				api.draw();
-			}
-		
-			return data;
-		};
-		
-		
-		/**
-		 * Restore the table to it's original state in the DOM by removing all of DataTables
-		 * enhancements, alterations to the DOM structure of the table and event listeners.
-		 *  @param {boolean} [remove=false] Completely remove the table from the DOM
-		 *  @dtopt API
-		 *  @deprecated Since v1.10
-		 *
-		 *  @example
-		 *    $(document).ready(function() {
-		 *      // This example is fairly pointless in reality, but shows how fnDestroy can be used
-		 *      var oTable = $('#example').dataTable();
-		 *      oTable.fnDestroy();
-		 *    } );
-		 */
-		this.fnDestroy = function ( remove )
-		{
-			this.api( true ).destroy( remove );
-		};
-		
-		
-		/**
-		 * Redraw the table
-		 *  @param {bool} [complete=true] Re-filter and resort (if enabled) the table before the draw.
-		 *  @dtopt API
-		 *  @deprecated Since v1.10
-		 *
-		 *  @example
-		 *    $(document).ready(function() {
-		 *      var oTable = $('#example').dataTable();
-		 *
-		 *      // Re-draw the table - you wouldn't want to do it here, but it's an example :-)
-		 *      oTable.fnDraw();
-		 *    } );
-		 */
-		this.fnDraw = function( complete )
-		{
-			// Note that this isn't an exact match to the old call to _fnDraw - it takes
-			// into account the new data, but can hold position.
-			this.api( true ).draw( complete );
-		};
-		
-		
-		/**
-		 * Filter the input based on data
-		 *  @param {string} sInput String to filter the table on
-		 *  @param {int|null} [iColumn] Column to limit filtering to
-		 *  @param {bool} [bRegex=false] Treat as regular expression or not
-		 *  @param {bool} [bSmart=true] Perform smart filtering or not
-		 *  @param {bool} [bShowGlobal=true] Show the input global filter in it's input box(es)
-		 *  @param {bool} [bCaseInsensitive=true] Do case-insensitive matching (true) or not (false)
-		 *  @dtopt API
-		 *  @deprecated Since v1.10
-		 *
-		 *  @example
-		 *    $(document).ready(function() {
-		 *      var oTable = $('#example').dataTable();
-		 *
-		 *      // Sometime later - filter...
-		 *      oTable.fnFilter( 'test string' );
-		 *    } );
-		 */
-		this.fnFilter = function( sInput, iColumn, bRegex, bSmart, bShowGlobal, bCaseInsensitive )
-		{
-			var api = this.api( true );
-		
-			if ( iColumn === null || iColumn === undefined ) {
-				api.search( sInput, bRegex, bSmart, bCaseInsensitive );
-			}
-			else {
-				api.column( iColumn ).search( sInput, bRegex, bSmart, bCaseInsensitive );
-			}
-		
-			api.draw();
-		};
-		
-		
-		/**
-		 * Get the data for the whole table, an individual row or an individual cell based on the
-		 * provided parameters.
-		 *  @param {int|node} [src] A TR row node, TD/TH cell node or an integer. If given as
-		 *    a TR node then the data source for the whole row will be returned. If given as a
-		 *    TD/TH cell node then iCol will be automatically calculated and the data for the
-		 *    cell returned. If given as an integer, then this is treated as the aoData internal
-		 *    data index for the row (see fnGetPosition) and the data for that row used.
-		 *  @param {int} [col] Optional column index that you want the data of.
-		 *  @returns {array|object|string} If mRow is undefined, then the data for all rows is
-		 *    returned. If mRow is defined, just data for that row, and is iCol is
-		 *    defined, only data for the designated cell is returned.
-		 *  @dtopt API
-		 *  @deprecated Since v1.10
-		 *
-		 *  @example
-		 *    // Row data
-		 *    $(document).ready(function() {
-		 *      oTable = $('#example').dataTable();
-		 *
-		 *      oTable.$('tr').click( function () {
-		 *        var data = oTable.fnGetData( this );
-		 *        // ... do something with the array / object of data for the row
-		 *      } );
-		 *    } );
-		 *
-		 *  @example
-		 *    // Individual cell data
-		 *    $(document).ready(function() {
-		 *      oTable = $('#example').dataTable();
-		 *
-		 *      oTable.$('td').click( function () {
-		 *        var sData = oTable.fnGetData( this );
-		 *        alert( 'The cell clicked on had the value of '+sData );
-		 *      } );
-		 *    } );
-		 */
-		this.fnGetData = function( src, col )
-		{
-			var api = this.api( true );
-		
-			if ( src !== undefined ) {
-				var type = src.nodeName ? src.nodeName.toLowerCase() : '';
-		
-				return col !== undefined || type == 'td' || type == 'th' ?
-					api.cell( src, col ).data() :
-					api.row( src ).data() || null;
-			}
-		
-			return api.data().toArray();
-		};
-		
-		
-		/**
-		 * Get an array of the TR nodes that are used in the table's body. Note that you will
-		 * typically want to use the '$' API method in preference to this as it is more
-		 * flexible.
-		 *  @param {int} [iRow] Optional row index for the TR element you want
-		 *  @returns {array|node} If iRow is undefined, returns an array of all TR elements
-		 *    in the table's body, or iRow is defined, just the TR element requested.
-		 *  @dtopt API
-		 *  @deprecated Since v1.10
-		 *
-		 *  @example
-		 *    $(document).ready(function() {
-		 *      var oTable = $('#example').dataTable();
-		 *
-		 *      // Get the nodes from the table
-		 *      var nNodes = oTable.fnGetNodes( );
-		 *    } );
-		 */
-		this.fnGetNodes = function( iRow )
-		{
-			var api = this.api( true );
-		
-			return iRow !== undefined ?
-				api.row( iRow ).node() :
-				api.rows().nodes().flatten().toArray();
-		};
-		
-		
-		/**
-		 * Get the array indexes of a particular cell from it's DOM element
-		 * and column index including hidden columns
-		 *  @param {node} node this can either be a TR, TD or TH in the table's body
-		 *  @returns {int} If nNode is given as a TR, then a single index is returned, or
-		 *    if given as a cell, an array of [row index, column index (visible),
-		 *    column index (all)] is given.
-		 *  @dtopt API
-		 *  @deprecated Since v1.10
-		 *
-		 *  @example
-		 *    $(document).ready(function() {
-		 *      $('#example tbody td').click( function () {
-		 *        // Get the position of the current data from the node
-		 *        var aPos = oTable.fnGetPosition( this );
-		 *
-		 *        // Get the data array for this row
-		 *        var aData = oTable.fnGetData( aPos[0] );
-		 *
-		 *        // Update the data array and return the value
-		 *        aData[ aPos[1] ] = 'clicked';
-		 *        this.innerHTML = 'clicked';
-		 *      } );
-		 *
-		 *      // Init DataTables
-		 *      oTable = $('#example').dataTable();
-		 *    } );
-		 */
-		this.fnGetPosition = function( node )
-		{
-			var api = this.api( true );
-			var nodeName = node.nodeName.toUpperCase();
-		
-			if ( nodeName == 'TR' ) {
-				return api.row( node ).index();
-			}
-			else if ( nodeName == 'TD' || nodeName == 'TH' ) {
-				var cell = api.cell( node ).index();
-		
-				return [
-					cell.row,
-					cell.columnVisible,
-					cell.column
-				];
-			}
-			return null;
-		};
-		
-		
-		/**
-		 * Check to see if a row is 'open' or not.
-		 *  @param {node} nTr the table row to check
-		 *  @returns {boolean} true if the row is currently open, false otherwise
-		 *  @dtopt API
-		 *  @deprecated Since v1.10
-		 *
-		 *  @example
-		 *    $(document).ready(function() {
-		 *      var oTable;
-		 *
-		 *      // 'open' an information row when a row is clicked on
-		 *      $('#example tbody tr').click( function () {
-		 *        if ( oTable.fnIsOpen(this) ) {
-		 *          oTable.fnClose( this );
-		 *        } else {
-		 *          oTable.fnOpen( this, "Temporary row opened", "info_row" );
-		 *        }
-		 *      } );
-		 *
-		 *      oTable = $('#example').dataTable();
-		 *    } );
-		 */
-		this.fnIsOpen = function( nTr )
-		{
-			return this.api( true ).row( nTr ).child.isShown();
-		};
-		
-		
-		/**
-		 * This function will place a new row directly after a row which is currently
-		 * on display on the page, with the HTML contents that is passed into the
-		 * function. This can be used, for example, to ask for confirmation that a
-		 * particular record should be deleted.
-		 *  @param {node} nTr The table row to 'open'
-		 *  @param {string|node|jQuery} mHtml The HTML to put into the row
-		 *  @param {string} sClass Class to give the new TD cell
-		 *  @returns {node} The row opened. Note that if the table row passed in as the
-		 *    first parameter, is not found in the table, this method will silently
-		 *    return.
-		 *  @dtopt API
-		 *  @deprecated Since v1.10
-		 *
-		 *  @example
-		 *    $(document).ready(function() {
-		 *      var oTable;
-		 *
-		 *      // 'open' an information row when a row is clicked on
-		 *      $('#example tbody tr').click( function () {
-		 *        if ( oTable.fnIsOpen(this) ) {
-		 *          oTable.fnClose( this );
-		 *        } else {
-		 *          oTable.fnOpen( this, "Temporary row opened", "info_row" );
-		 *        }
-		 *      } );
-		 *
-		 *      oTable = $('#example').dataTable();
-		 *    } );
-		 */
-		this.fnOpen = function( nTr, mHtml, sClass )
-		{
-			return this.api( true )
-				.row( nTr )
-				.child( mHtml, sClass )
-				.show()
-				.child()[0];
-		};
-		
-		
-		/**
-		 * Change the pagination - provides the internal logic for pagination in a simple API
-		 * function. With this function you can have a DataTables table go to the next,
-		 * previous, first or last pages.
-		 *  @param {string|int} mAction Paging action to take: "first", "previous", "next" or "last"
-		 *    or page number to jump to (integer), note that page 0 is the first page.
-		 *  @param {bool} [bRedraw=true] Redraw the table or not
-		 *  @dtopt API
-		 *  @deprecated Since v1.10
-		 *
-		 *  @example
-		 *    $(document).ready(function() {
-		 *      var oTable = $('#example').dataTable();
-		 *      oTable.fnPageChange( 'next' );
-		 *    } );
-		 */
-		this.fnPageChange = function ( mAction, bRedraw )
-		{
-			var api = this.api( true ).page( mAction );
-		
-			if ( bRedraw === undefined || bRedraw ) {
-				api.draw(false);
-			}
-		};
-		
-		
-		/**
-		 * Show a particular column
-		 *  @param {int} iCol The column whose display should be changed
-		 *  @param {bool} bShow Show (true) or hide (false) the column
-		 *  @param {bool} [bRedraw=true] Redraw the table or not
-		 *  @dtopt API
-		 *  @deprecated Since v1.10
-		 *
-		 *  @example
-		 *    $(document).ready(function() {
-		 *      var oTable = $('#example').dataTable();
-		 *
-		 *      // Hide the second column after initialisation
-		 *      oTable.fnSetColumnVis( 1, false );
-		 *    } );
-		 */
-		this.fnSetColumnVis = function ( iCol, bShow, bRedraw )
-		{
-			var api = this.api( true ).column( iCol ).visible( bShow );
-		
-			if ( bRedraw === undefined || bRedraw ) {
-				api.columns.adjust().draw();
-			}
-		};
-		
-		
-		/**
-		 * Get the settings for a particular table for external manipulation
-		 *  @returns {object} DataTables settings object. See
-		 *    {@link DataTable.models.oSettings}
-		 *  @dtopt API
-		 *  @deprecated Since v1.10
-		 *
-		 *  @example
-		 *    $(document).ready(function() {
-		 *      var oTable = $('#example').dataTable();
-		 *      var oSettings = oTable.fnSettings();
-		 *
-		 *      // Show an example parameter from the settings
-		 *      alert( oSettings._iDisplayStart );
-		 *    } );
-		 */
-		this.fnSettings = function()
-		{
-			return _fnSettingsFromNode( this[_ext.iApiIndex] );
-		};
-		
-		
-		/**
-		 * Sort the table by a particular column
-		 *  @param {int} iCol the data index to sort on. Note that this will not match the
-		 *    'display index' if you have hidden data entries
-		 *  @dtopt API
-		 *  @deprecated Since v1.10
-		 *
-		 *  @example
-		 *    $(document).ready(function() {
-		 *      var oTable = $('#example').dataTable();
-		 *
-		 *      // Sort immediately with columns 0 and 1
-		 *      oTable.fnSort( [ [0,'asc'], [1,'asc'] ] );
-		 *    } );
-		 */
-		this.fnSort = function( aaSort )
-		{
-			this.api( true ).order( aaSort ).draw();
-		};
-		
-		
-		/**
-		 * Attach a sort listener to an element for a given column
-		 *  @param {node} nNode the element to attach the sort listener to
-		 *  @param {int} iColumn the column that a click on this node will sort on
-		 *  @param {function} [fnCallback] callback function when sort is run
-		 *  @dtopt API
-		 *  @deprecated Since v1.10
-		 *
-		 *  @example
-		 *    $(document).ready(function() {
-		 *      var oTable = $('#example').dataTable();
-		 *
-		 *      // Sort on column 1, when 'sorter' is clicked on
-		 *      oTable.fnSortListener( document.getElementById('sorter'), 1 );
-		 *    } );
-		 */
-		this.fnSortListener = function( nNode, iColumn, fnCallback )
-		{
-			this.api( true ).order.listener( nNode, iColumn, fnCallback );
-		};
-		
-		
-		/**
-		 * Update a table cell or row - this method will accept either a single value to
-		 * update the cell with, an array of values with one element for each column or
-		 * an object in the same format as the original data source. The function is
-		 * self-referencing in order to make the multi column updates easier.
-		 *  @param {object|array|string} mData Data to update the cell/row with
-		 *  @param {node|int} mRow TR element you want to update or the aoData index
-		 *  @param {int} [iColumn] The column to update, give as null or undefined to
-		 *    update a whole row.
-		 *  @param {bool} [bRedraw=true] Redraw the table or not
-		 *  @param {bool} [bAction=true] Perform pre-draw actions or not
-		 *  @returns {int} 0 on success, 1 on error
-		 *  @dtopt API
-		 *  @deprecated Since v1.10
-		 *
-		 *  @example
-		 *    $(document).ready(function() {
-		 *      var oTable = $('#example').dataTable();
-		 *      oTable.fnUpdate( 'Example update', 0, 0 ); // Single cell
-		 *      oTable.fnUpdate( ['a', 'b', 'c', 'd', 'e'], $('tbody tr')[0] ); // Row
-		 *    } );
-		 */
-		this.fnUpdate = function( mData, mRow, iColumn, bRedraw, bAction )
-		{
-			var api = this.api( true );
-		
-			if ( iColumn === undefined || iColumn === null ) {
-				api.row( mRow ).data( mData );
-			}
-			else {
-				api.cell( mRow, iColumn ).data( mData );
-			}
-		
-			if ( bAction === undefined || bAction ) {
-				api.columns.adjust();
-			}
-		
-			if ( bRedraw === undefined || bRedraw ) {
-				api.draw();
-			}
-			return 0;
-		};
-		
-		
-		/**
-		 * Provide a common method for plug-ins to check the version of DataTables being used, in order
-		 * to ensure compatibility.
-		 *  @param {string} sVersion Version string to check for, in the format "X.Y.Z". Note that the
-		 *    formats "X" and "X.Y" are also acceptable.
-		 *  @returns {boolean} true if this version of DataTables is greater or equal to the required
-		 *    version, or false if this version of DataTales is not suitable
-		 *  @method
-		 *  @dtopt API
-		 *  @deprecated Since v1.10
-		 *
-		 *  @example
-		 *    $(document).ready(function() {
-		 *      var oTable = $('#example').dataTable();
-		 *      alert( oTable.fnVersionCheck( '1.9.0' ) );
-		 *    } );
-		 */
-		this.fnVersionCheck = _ext.fnVersionCheck;
-		
-
-		var _that = this;
-		var emptyInit = options === undefined;
-		var len = this.length;
-
-		if ( emptyInit ) {
-			options = {};
-		}
-
-		this.oApi = this.internal = _ext.internal;
-
-		// Extend with old style plug-in API methods
-		for ( var fn in DataTable.ext.internal ) {
-			if ( fn ) {
-				this[fn] = _fnExternApiFunc(fn);
-			}
-		}
-
-		this.each(function() {
-			// For each initialisation we want to give it a clean initialisation
-			// object that can be bashed around
-			var o = {};
-			var oInit = len > 1 ? // optimisation for single table case
-				_fnExtend( o, options, true ) :
-				options;
-
-			/*global oInit,_that,emptyInit*/
-			var i=0, iLen, j, jLen, k, kLen;
-			var sId = this.getAttribute( 'id' );
-			var bInitHandedOff = false;
-			var defaults = DataTable.defaults;
-			var $this = $(this);
-			
-			
-			/* Sanity check */
-			if ( this.nodeName.toLowerCase() != 'table' )
-			{
-				_fnLog( null, 0, 'Non-table node initialisation ('+this.nodeName+')', 2 );
-				return;
-			}
-			
-			/* Backwards compatibility for the defaults */
-			_fnCompatOpts( defaults );
-			_fnCompatCols( defaults.column );
-			
-			/* Convert the camel-case defaults to Hungarian */
-			_fnCamelToHungarian( defaults, defaults, true );
-			_fnCamelToHungarian( defaults.column, defaults.column, true );
-			
-			/* Setting up the initialisation object */
-			_fnCamelToHungarian( defaults, $.extend( oInit, $this.data() ), true );
-			
-			
-			
-			/* Check to see if we are re-initialising a table */
-			var allSettings = DataTable.settings;
-			for ( i=0, iLen=allSettings.length ; i<iLen ; i++ )
-			{
-				var s = allSettings[i];
-			
-				/* Base check on table node */
-				if (
-					s.nTable == this ||
-					(s.nTHead && s.nTHead.parentNode == this) ||
-					(s.nTFoot && s.nTFoot.parentNode == this)
-				) {
-					var bRetrieve = oInit.bRetrieve !== undefined ? oInit.bRetrieve : defaults.bRetrieve;
-					var bDestroy = oInit.bDestroy !== undefined ? oInit.bDestroy : defaults.bDestroy;
-			
-					if ( emptyInit || bRetrieve )
-					{
-						return s.oInstance;
-					}
-					else if ( bDestroy )
-					{
-						s.oInstance.fnDestroy();
-						break;
-					}
-					else
-					{
-						_fnLog( s, 0, 'Cannot reinitialise DataTable', 3 );
-						return;
-					}
-				}
-			
-				/* If the element we are initialising has the same ID as a table which was previously
-				 * initialised, but the table nodes don't match (from before) then we destroy the old
-				 * instance by simply deleting it. This is under the assumption that the table has been
-				 * destroyed by other methods. Anyone using non-id selectors will need to do this manually
-				 */
-				if ( s.sTableId == this.id )
-				{
-					allSettings.splice( i, 1 );
-					break;
-				}
-			}
-			
-			/* Ensure the table has an ID - required for accessibility */
-			if ( sId === null || sId === "" )
-			{
-				sId = "DataTables_Table_"+(DataTable.ext._unique++);
-				this.id = sId;
-			}
-			
-			/* Create the settings object for this table and set some of the default parameters */
-			var oSettings = $.extend( true, {}, DataTable.models.oSettings, {
-				"sDestroyWidth": $this[0].style.width,
-				"sInstance":     sId,
-				"sTableId":      sId
-			} );
-			oSettings.nTable = this;
-			oSettings.oApi   = _that.internal;
-			oSettings.oInit  = oInit;
-			
-			allSettings.push( oSettings );
-			
-			// Need to add the instance after the instance after the settings object has been added
-			// to the settings array, so we can self reference the table instance if more than one
-			oSettings.oInstance = (_that.length===1) ? _that : $this.dataTable();
-			
-			// Backwards compatibility, before we apply all the defaults
-			_fnCompatOpts( oInit );
-			_fnLanguageCompat( oInit.oLanguage );
-			
-			// If the length menu is given, but the init display length is not, use the length menu
-			if ( oInit.aLengthMenu && ! oInit.iDisplayLength )
-			{
-				oInit.iDisplayLength = $.isArray( oInit.aLengthMenu[0] ) ?
-					oInit.aLengthMenu[0][0] : oInit.aLengthMenu[0];
-			}
-			
-			// Apply the defaults and init options to make a single init object will all
-			// options defined from defaults and instance options.
-			oInit = _fnExtend( $.extend( true, {}, defaults ), oInit );
-			
-			
-			// Map the initialisation options onto the settings object
-			_fnMap( oSettings.oFeatures, oInit, [
-				"bPaginate",
-				"bLengthChange",
-				"bFilter",
-				"bSort",
-				"bSortMulti",
-				"bInfo",
-				"bProcessing",
-				"bAutoWidth",
-				"bSortClasses",
-				"bServerSide",
-				"bDeferRender"
-			] );
-			_fnMap( oSettings, oInit, [
-				"asStripeClasses",
-				"ajax",
-				"fnServerData",
-				"fnFormatNumber",
-				"sServerMethod",
-				"aaSorting",
-				"aaSortingFixed",
-				"aLengthMenu",
-				"sPaginationType",
-				"sAjaxSource",
-				"sAjaxDataProp",
-				"iStateDuration",
-				"sDom",
-				"bSortCellsTop",
-				"iTabIndex",
-				"fnStateLoadCallback",
-				"fnStateSaveCallback",
-				"renderer",
-				"searchDelay",
-				"rowId",
-				[ "iCookieDuration", "iStateDuration" ], // backwards compat
-				[ "oSearch", "oPreviousSearch" ],
-				[ "aoSearchCols", "aoPreSearchCols" ],
-				[ "iDisplayLength", "_iDisplayLength" ]
-			] );
-			_fnMap( oSettings.oScroll, oInit, [
-				[ "sScrollX", "sX" ],
-				[ "sScrollXInner", "sXInner" ],
-				[ "sScrollY", "sY" ],
-				[ "bScrollCollapse", "bCollapse" ]
-			] );
-			_fnMap( oSettings.oLanguage, oInit, "fnInfoCallback" );
-			
-			/* Callback functions which are array driven */
-			_fnCallbackReg( oSettings, 'aoDrawCallback',       oInit.fnDrawCallback,      'user' );
-			_fnCallbackReg( oSettings, 'aoServerParams',       oInit.fnServerParams,      'user' );
-			_fnCallbackReg( oSettings, 'aoStateSaveParams',    oInit.fnStateSaveParams,   'user' );
-			_fnCallbackReg( oSettings, 'aoStateLoadParams',    oInit.fnStateLoadParams,   'user' );
-			_fnCallbackReg( oSettings, 'aoStateLoaded',        oInit.fnStateLoaded,       'user' );
-			_fnCallbackReg( oSettings, 'aoRowCallback',        oInit.fnRowCallback,       'user' );
-			_fnCallbackReg( oSettings, 'aoRowCreatedCallback', oInit.fnCreatedRow,        'user' );
-			_fnCallbackReg( oSettings, 'aoHeaderCallback',     oInit.fnHeaderCallback,    'user' );
-			_fnCallbackReg( oSettings, 'aoFooterCallback',     oInit.fnFooterCallback,    'user' );
-			_fnCallbackReg( oSettings, 'aoInitComplete',       oInit.fnInitComplete,      'user' );
-			_fnCallbackReg( oSettings, 'aoPreDrawCallback',    oInit.fnPreDrawCallback,   'user' );
-			
-			oSettings.rowIdFn = _fnGetObjectDataFn( oInit.rowId );
-			
-			/* Browser support detection */
-			_fnBrowserDetect( oSettings );
-			
-			var oClasses = oSettings.oClasses;
-			
-			$.extend( oClasses, DataTable.ext.classes, oInit.oClasses );
-			$this.addClass( oClasses.sTable );
-			
-			
-			if ( oSettings.iInitDisplayStart === undefined )
-			{
-				/* Display start point, taking into account the save saving */
-				oSettings.iInitDisplayStart = oInit.iDisplayStart;
-				oSettings._iDisplayStart = oInit.iDisplayStart;
-			}
-			
-			if ( oInit.iDeferLoading !== null )
-			{
-				oSettings.bDeferLoading = true;
-				var tmp = $.isArray( oInit.iDeferLoading );
-				oSettings._iRecordsDisplay = tmp ? oInit.iDeferLoading[0] : oInit.iDeferLoading;
-				oSettings._iRecordsTotal = tmp ? oInit.iDeferLoading[1] : oInit.iDeferLoading;
-			}
-			
-			/* Language definitions */
-			var oLanguage = oSettings.oLanguage;
-			$.extend( true, oLanguage, oInit.oLanguage );
-			
-			if ( oLanguage.sUrl )
-			{
-				/* Get the language definitions from a file - because this Ajax call makes the language
-				 * get async to the remainder of this function we use bInitHandedOff to indicate that
-				 * _fnInitialise will be fired by the returned Ajax handler, rather than the constructor
-				 */
-				$.ajax( {
-					dataType: 'json',
-					url: oLanguage.sUrl,
-					success: function ( json ) {
-						_fnLanguageCompat( json );
-						_fnCamelToHungarian( defaults.oLanguage, json );
-						$.extend( true, oLanguage, json );
-						_fnInitialise( oSettings );
-					},
-					error: function () {
-						// Error occurred loading language file, continue on as best we can
-						_fnInitialise( oSettings );
-					}
-				} );
-				bInitHandedOff = true;
-			}
-			
-			/*
-			 * Stripes
-			 */
-			if ( oInit.asStripeClasses === null )
-			{
-				oSettings.asStripeClasses =[
-					oClasses.sStripeOdd,
-					oClasses.sStripeEven
-				];
-			}
-			
-			/* Remove row stripe classes if they are already on the table row */
-			var stripeClasses = oSettings.asStripeClasses;
-			var rowOne = $this.children('tbody').find('tr').eq(0);
-			if ( $.inArray( true, $.map( stripeClasses, function(el, i) {
-				return rowOne.hasClass(el);
-			} ) ) !== -1 ) {
-				$('tbody tr', this).removeClass( stripeClasses.join(' ') );
-				oSettings.asDestroyStripes = stripeClasses.slice();
-			}
-			
-			/*
-			 * Columns
-			 * See if we should load columns automatically or use defined ones
-			 */
-			var anThs = [];
-			var aoColumnsInit;
-			var nThead = this.getElementsByTagName('thead');
-			if ( nThead.length !== 0 )
-			{
-				_fnDetectHeader( oSettings.aoHeader, nThead[0] );
-				anThs = _fnGetUniqueThs( oSettings );
-			}
-			
-			/* If not given a column array, generate one with nulls */
-			if ( oInit.aoColumns === null )
-			{
-				aoColumnsInit = [];
-				for ( i=0, iLen=anThs.length ; i<iLen ; i++ )
-				{
-					aoColumnsInit.push( null );
-				}
-			}
-			else
-			{
-				aoColumnsInit = oInit.aoColumns;
-			}
-			
-			/* Add the columns */
-			for ( i=0, iLen=aoColumnsInit.length ; i<iLen ; i++ )
-			{
-				_fnAddColumn( oSettings, anThs ? anThs[i] : null );
-			}
-			
-			/* Apply the column definitions */
-			_fnApplyColumnDefs( oSettings, oInit.aoColumnDefs, aoColumnsInit, function (iCol, oDef) {
-				_fnColumnOptions( oSettings, iCol, oDef );
-			} );
-			
-			/* HTML5 attribute detection - build an mData object automatically if the
-			 * attributes are found
-			 */
-			if ( rowOne.length ) {
-				var a = function ( cell, name ) {
-					return cell.getAttribute( 'data-'+name ) !== null ? name : null;
-				};
-			
-				$( rowOne[0] ).children('th, td').each( function (i, cell) {
-					var col = oSettings.aoColumns[i];
-			
-					if ( col.mData === i ) {
-						var sort = a( cell, 'sort' ) || a( cell, 'order' );
-						var filter = a( cell, 'filter' ) || a( cell, 'search' );
-			
-						if ( sort !== null || filter !== null ) {
-							col.mData = {
-								_:      i+'.display',
-								sort:   sort !== null   ? i+'.@data-'+sort   : undefined,
-								type:   sort !== null   ? i+'.@data-'+sort   : undefined,
-								filter: filter !== null ? i+'.@data-'+filter : undefined
-							};
-			
-							_fnColumnOptions( oSettings, i );
-						}
-					}
-				} );
-			}
-			
-			var features = oSettings.oFeatures;
-			var loadedInit = function () {
-				/*
-				 * Sorting
-				 * @todo For modularisation (1.11) this needs to do into a sort start up handler
-				 */
-			
-				// If aaSorting is not defined, then we use the first indicator in asSorting
-				// in case that has been altered, so the default sort reflects that option
-				if ( oInit.aaSorting === undefined ) {
-					var sorting = oSettings.aaSorting;
-					for ( i=0, iLen=sorting.length ; i<iLen ; i++ ) {
-						sorting[i][1] = oSettings.aoColumns[ i ].asSorting[0];
-					}
-				}
-			
-				/* Do a first pass on the sorting classes (allows any size changes to be taken into
-				 * account, and also will apply sorting disabled classes if disabled
-				 */
-				_fnSortingClasses( oSettings );
-			
-				if ( features.bSort ) {
-					_fnCallbackReg( oSettings, 'aoDrawCallback', function () {
-						if ( oSettings.bSorted ) {
-							var aSort = _fnSortFlatten( oSettings );
-							var sortedColumns = {};
-			
-							$.each( aSort, function (i, val) {
-								sortedColumns[ val.src ] = val.dir;
-							} );
-			
-							_fnCallbackFire( oSettings, null, 'order', [oSettings, aSort, sortedColumns] );
-							_fnSortAria( oSettings );
-						}
-					} );
-				}
-			
-				_fnCallbackReg( oSettings, 'aoDrawCallback', function () {
-					if ( oSettings.bSorted || _fnDataSource( oSettings ) === 'ssp' || features.bDeferRender ) {
-						_fnSortingClasses( oSettings );
-					}
-				}, 'sc' );
-			
-			
-				/*
-				 * Final init
-				 * Cache the header, body and footer as required, creating them if needed
-				 */
-			
-				// Work around for Webkit bug 83867 - store the caption-side before removing from doc
-				var captions = $this.children('caption').each( function () {
-					this._captionSide = $(this).css('caption-side');
-				} );
-			
-				var thead = $this.children('thead');
-				if ( thead.length === 0 ) {
-					thead = $('<thead/>').appendTo($this);
-				}
-				oSettings.nTHead = thead[0];
-			
-				var tbody = $this.children('tbody');
-				if ( tbody.length === 0 ) {
-					tbody = $('<tbody/>').appendTo($this);
-				}
-				oSettings.nTBody = tbody[0];
-			
-				var tfoot = $this.children('tfoot');
-				if ( tfoot.length === 0 && captions.length > 0 && (oSettings.oScroll.sX !== "" || oSettings.oScroll.sY !== "") ) {
-					// If we are a scrolling table, and no footer has been given, then we need to create
-					// a tfoot element for the caption element to be appended to
-					tfoot = $('<tfoot/>').appendTo($this);
-				}
-			
-				if ( tfoot.length === 0 || tfoot.children().length === 0 ) {
-					$this.addClass( oClasses.sNoFooter );
-				}
-				else if ( tfoot.length > 0 ) {
-					oSettings.nTFoot = tfoot[0];
-					_fnDetectHeader( oSettings.aoFooter, oSettings.nTFoot );
-				}
-			
-				/* Check if there is data passing into the constructor */
-				if ( oInit.aaData ) {
-					for ( i=0 ; i<oInit.aaData.length ; i++ ) {
-						_fnAddData( oSettings, oInit.aaData[ i ] );
-					}
-				}
-				else if ( oSettings.bDeferLoading || _fnDataSource( oSettings ) == 'dom' ) {
-					/* Grab the data from the page - only do this when deferred loading or no Ajax
-					 * source since there is no point in reading the DOM data if we are then going
-					 * to replace it with Ajax data
-					 */
-					_fnAddTr( oSettings, $(oSettings.nTBody).children('tr') );
-				}
-			
-				/* Copy the data index array */
-				oSettings.aiDisplay = oSettings.aiDisplayMaster.slice();
-			
-				/* Initialisation complete - table can be drawn */
-				oSettings.bInitialised = true;
-			
-				/* Check if we need to initialise the table (it might not have been handed off to the
-				 * language processor)
-				 */
-				if ( bInitHandedOff === false ) {
-					_fnInitialise( oSettings );
-				}
-			};
-			
-			/* Must be done after everything which can be overridden by the state saving! */
-			if ( oInit.bStateSave )
-			{
-				features.bStateSave = true;
-				_fnCallbackReg( oSettings, 'aoDrawCallback', _fnSaveState, 'state_save' );
-				_fnLoadState( oSettings, oInit, loadedInit );
-			}
-			else {
-				loadedInit();
-			}
-			
-		} );
-		_that = null;
-		return this;
-	};
-
-	
-	/*
-	 * It is useful to have variables which are scoped locally so only the
-	 * DataTables functions can access them and they don't leak into global space.
-	 * At the same time these functions are often useful over multiple files in the
-	 * core and API, so we list, or at least document, all variables which are used
-	 * by DataTables as private variables here. This also ensures that there is no
-	 * clashing of variable names and that they can easily referenced for reuse.
-	 */
-	
-	
-	// Defined else where
-	//  _selector_run
-	//  _selector_opts
-	//  _selector_first
-	//  _selector_row_indexes
-	
-	var _ext; // DataTable.ext
-	var _Api; // DataTable.Api
-	var _api_register; // DataTable.Api.register
-	var _api_registerPlural; // DataTable.Api.registerPlural
-	
-	var _re_dic = {};
-	var _re_new_lines = /[\r\n\u2028]/g;
-	var _re_html = /<.*?>/g;
-	
-	// This is not strict ISO8601 - Date.parse() is quite lax, although
-	// implementations differ between browsers.
-	var _re_date = /^\d{2,4}[\.\/\-]\d{1,2}[\.\/\-]\d{1,2}([T ]{1}\d{1,2}[:\.]\d{2}([\.:]\d{2})?)?$/;
-	
-	// Escape regular expression special characters
-	var _re_escape_regex = new RegExp( '(\\' + [ '/', '.', '*', '+', '?', '|', '(', ')', '[', ']', '{', '}', '\\', '$', '^', '-' ].join('|\\') + ')', 'g' );
-	
-	// http://en.wikipedia.org/wiki/Foreign_exchange_market
-	// - \u20BD - Russian ruble.
-	// - \u20a9 - South Korean Won
-	// - \u20BA - Turkish Lira
-	// - \u20B9 - Indian Rupee
-	// - R - Brazil (R$) and South Africa
-	// - fr - Swiss Franc
-	// - kr - Swedish krona, Norwegian krone and Danish krone
-	// - \u2009 is thin space and \u202F is narrow no-break space, both used in many
-	// - Ƀ - Bitcoin
-	// - Ξ - Ethereum
-	//   standards as thousands separators.
-	var _re_formatted_numeric = /[',$£€¥%\u2009\u202F\u20BD\u20a9\u20BArfkɃΞ]/gi;
-	
-	
-	var _empty = function ( d ) {
-		return !d || d === true || d === '-' ? true : false;
-	};
-	
-	
-	var _intVal = function ( s ) {
-		var integer = parseInt( s, 10 );
-		return !isNaN(integer) && isFinite(s) ? integer : null;
-	};
-	
-	// Convert from a formatted number with characters other than `.` as the
-	// decimal place, to a Javascript number
-	var _numToDecimal = function ( num, decimalPoint ) {
-		// Cache created regular expressions for speed as this function is called often
-		if ( ! _re_dic[ decimalPoint ] ) {
-			_re_dic[ decimalPoint ] = new RegExp( _fnEscapeRegex( decimalPoint ), 'g' );
-		}
-		return typeof num === 'string' && decimalPoint !== '.' ?
-			num.replace( /\./g, '' ).replace( _re_dic[ decimalPoint ], '.' ) :
-			num;
-	};
-	
-	
-	var _isNumber = function ( d, decimalPoint, formatted ) {
-		var strType = typeof d === 'string';
-	
-		// If empty return immediately so there must be a number if it is a
-		// formatted string (this stops the string "k", or "kr", etc being detected
-		// as a formatted number for currency
-		if ( _empty( d ) ) {
-			return true;
-		}
-	
-		if ( decimalPoint && strType ) {
-			d = _numToDecimal( d, decimalPoint );
-		}
-	
-		if ( formatted && strType ) {
-			d = d.replace( _re_formatted_numeric, '' );
-		}
-	
-		return !isNaN( parseFloat(d) ) && isFinite( d );
-	};
-	
-	
-	// A string without HTML in it can be considered to be HTML still
-	var _isHtml = function ( d ) {
-		return _empty( d ) || typeof d === 'string';
-	};
-	
-	
-	var _htmlNumeric = function ( d, decimalPoint, formatted ) {
-		if ( _empty( d ) ) {
-			return true;
-		}
-	
-		var html = _isHtml( d );
-		return ! html ?
-			null :
-			_isNumber( _stripHtml( d ), decimalPoint, formatted ) ?
-				true :
-				null;
-	};
-	
-	
-	var _pluck = function ( a, prop, prop2 ) {
-		var out = [];
-		var i=0, ien=a.length;
-	
-		// Could have the test in the loop for slightly smaller code, but speed
-		// is essential here
-		if ( prop2 !== undefined ) {
-			for ( ; i<ien ; i++ ) {
-				if ( a[i] && a[i][ prop ] ) {
-					out.push( a[i][ prop ][ prop2 ] );
-				}
-			}
-		}
-		else {
-			for ( ; i<ien ; i++ ) {
-				if ( a[i] ) {
-					out.push( a[i][ prop ] );
-				}
-			}
-		}
-	
-		return out;
-	};
-	
-	
-	// Basically the same as _pluck, but rather than looping over `a` we use `order`
-	// as the indexes to pick from `a`
-	var _pluck_order = function ( a, order, prop, prop2 )
-	{
-		var out = [];
-		var i=0, ien=order.length;
-	
-		// Could have the test in the loop for slightly smaller code, but speed
-		// is essential here
-		if ( prop2 !== undefined ) {
-			for ( ; i<ien ; i++ ) {
-				if ( a[ order[i] ][ prop ] ) {
-					out.push( a[ order[i] ][ prop ][ prop2 ] );
-				}
-			}
-		}
-		else {
-			for ( ; i<ien ; i++ ) {
-				out.push( a[ order[i] ][ prop ] );
-			}
-		}
-	
-		return out;
-	};
-	
-	
-	var _range = function ( len, start )
-	{
-		var out = [];
-		var end;
-	
-		if ( start === undefined ) {
-			start = 0;
-			end = len;
-		}
-		else {
-			end = start;
-			start = len;
-		}
-	
-		for ( var i=start ; i<end ; i++ ) {
-			out.push( i );
-		}
-	
-		return out;
-	};
-	
-	
-	var _removeEmpty = function ( a )
-	{
-		var out = [];
-	
-		for ( var i=0, ien=a.length ; i<ien ; i++ ) {
-			if ( a[i] ) { // careful - will remove all falsy values!
-				out.push( a[i] );
-			}
-		}
-	
-		return out;
-	};
-	
-	
-	var _stripHtml = function ( d ) {
-		return d.replace( _re_html, '' );
-	};
-	
-	
-	/**
-	 * Determine if all values in the array are unique. This means we can short
-	 * cut the _unique method at the cost of a single loop. A sorted array is used
-	 * to easily check the values.
-	 *
-	 * @param  {array} src Source array
-	 * @return {boolean} true if all unique, false otherwise
-	 * @ignore
-	 */
-	var _areAllUnique = function ( src ) {
-		if ( src.length < 2 ) {
-			return true;
-		}
-	
-		var sorted = src.slice().sort();
-		var last = sorted[0];
-	
-		for ( var i=1, ien=sorted.length ; i<ien ; i++ ) {
-			if ( sorted[i] === last ) {
-				return false;
-			}
-	
-			last = sorted[i];
-		}
-	
-		return true;
-	};
-	
-	
-	/**
-	 * Find the unique elements in a source array.
-	 *
-	 * @param  {array} src Source array
-	 * @return {array} Array of unique items
-	 * @ignore
-	 */
-	var _unique = function ( src )
-	{
-		if ( _areAllUnique( src ) ) {
-			return src.slice();
-		}
-	
-		// A faster unique method is to use object keys to identify used values,
-		// but this doesn't work with arrays or objects, which we must also
-		// consider. See jsperf.com/compare-array-unique-versions/4 for more
-		// information.
-		var
-			out = [],
-			val,
-			i, ien=src.length,
-			j, k=0;
-	
-		again: for ( i=0 ; i<ien ; i++ ) {
-			val = src[i];
-	
-			for ( j=0 ; j<k ; j++ ) {
-				if ( out[j] === val ) {
-					continue again;
-				}
-			}
-	
-			out.push( val );
-			k++;
-		}
-	
-		return out;
-	};
-	
-	
-	/**
-	 * DataTables utility methods
-	 * 
-	 * This namespace provides helper methods that DataTables uses internally to
-	 * create a DataTable, but which are not exclusively used only for DataTables.
-	 * These methods can be used by extension authors to save the duplication of
-	 * code.
-	 *
-	 *  @namespace
-	 */
-	DataTable.util = {
-		/**
-		 * Throttle the calls to a function. Arguments and context are maintained
-		 * for the throttled function.
-		 *
-		 * @param {function} fn Function to be called
-		 * @param {integer} freq Call frequency in mS
-		 * @return {function} Wrapped function
-		 */
-		throttle: function ( fn, freq ) {
-			var
-				frequency = freq !== undefined ? freq : 200,
-				last,
-				timer;
-	
-			return function () {
-				var
-					that = this,
-					now  = +new Date(),
-					args = arguments;
-	
-				if ( last && now < last + frequency ) {
-					clearTimeout( timer );
-	
-					timer = setTimeout( function () {
-						last = undefined;
-						fn.apply( that, args );
-					}, frequency );
-				}
-				else {
-					last = now;
-					fn.apply( that, args );
-				}
-			};
-		},
-	
-	
-		/**
-		 * Escape a string such that it can be used in a regular expression
-		 *
-		 *  @param {string} val string to escape
-		 *  @returns {string} escaped string
-		 */
-		escapeRegex: function ( val ) {
-			return val.replace( _re_escape_regex, '\\$1' );
-		}
-	};
-	
-	
-	
-	/**
-	 * Create a mapping object that allows camel case parameters to be looked up
-	 * for their Hungarian counterparts. The mapping is stored in a private
-	 * parameter called `_hungarianMap` which can be accessed on the source object.
-	 *  @param {object} o
-	 *  @memberof DataTable#oApi
-	 */
-	function _fnHungarianMap ( o )
-	{
-		var
-			hungarian = 'a aa ai ao as b fn i m o s ',
-			match,
-			newKey,
-			map = {};
-	
-		$.each( o, function (key, val) {
-			match = key.match(/^([^A-Z]+?)([A-Z])/);
-	
-			if ( match && hungarian.indexOf(match[1]+' ') !== -1 )
-			{
-				newKey = key.replace( match[0], match[2].toLowerCase() );
-				map[ newKey ] = key;
-	
-				if ( match[1] === 'o' )
-				{
-					_fnHungarianMap( o[key] );
-				}
-			}
-		} );
-	
-		o._hungarianMap = map;
-	}
-	
-	
-	/**
-	 * Convert from camel case parameters to Hungarian, based on a Hungarian map
-	 * created by _fnHungarianMap.
-	 *  @param {object} src The model object which holds all parameters that can be
-	 *    mapped.
-	 *  @param {object} user The object to convert from camel case to Hungarian.
-	 *  @param {boolean} force When set to `true`, properties which already have a
-	 *    Hungarian value in the `user` object will be overwritten. Otherwise they
-	 *    won't be.
-	 *  @memberof DataTable#oApi
-	 */
-	function _fnCamelToHungarian ( src, user, force )
-	{
-		if ( ! src._hungarianMap ) {
-			_fnHungarianMap( src );
-		}
-	
-		var hungarianKey;
-	
-		$.each( user, function (key, val) {
-			hungarianKey = src._hungarianMap[ key ];
-	
-			if ( hungarianKey !== undefined && (force || user[hungarianKey] === undefined) )
-			{
-				// For objects, we need to buzz down into the object to copy parameters
-				if ( hungarianKey.charAt(0) === 'o' )
-				{
-					// Copy the camelCase options over to the hungarian
-					if ( ! user[ hungarianKey ] ) {
-						user[ hungarianKey ] = {};
-					}
-					$.extend( true, user[hungarianKey], user[key] );
-	
-					_fnCamelToHungarian( src[hungarianKey], user[hungarianKey], force );
-				}
-				else {
-					user[hungarianKey] = user[ key ];
-				}
-			}
-		} );
-	}
-	
-	
-	/**
-	 * Language compatibility - when certain options are given, and others aren't, we
-	 * need to duplicate the values over, in order to provide backwards compatibility
-	 * with older language files.
-	 *  @param {object} oSettings dataTables settings object
-	 *  @memberof DataTable#oApi
-	 */
-	function _fnLanguageCompat( lang )
-	{
-		// Note the use of the Hungarian notation for the parameters in this method as
-		// this is called after the mapping of camelCase to Hungarian
-		var defaults = DataTable.defaults.oLanguage;
-	
-		// Default mapping
-		var defaultDecimal = defaults.sDecimal;
-		if ( defaultDecimal ) {
-			_addNumericSort( defaultDecimal );
-		}
-	
-		if ( lang ) {
-			var zeroRecords = lang.sZeroRecords;
-	
-			// Backwards compatibility - if there is no sEmptyTable given, then use the same as
-			// sZeroRecords - assuming that is given.
-			if ( ! lang.sEmptyTable && zeroRecords &&
-				defaults.sEmptyTable === "No data available in table" )
-			{
-				_fnMap( lang, lang, 'sZeroRecords', 'sEmptyTable' );
-			}
-	
-			// Likewise with loading records
-			if ( ! lang.sLoadingRecords && zeroRecords &&
-				defaults.sLoadingRecords === "Loading..." )
-			{
-				_fnMap( lang, lang, 'sZeroRecords', 'sLoadingRecords' );
-			}
-	
-			// Old parameter name of the thousands separator mapped onto the new
-			if ( lang.sInfoThousands ) {
-				lang.sThousands = lang.sInfoThousands;
-			}
-	
-			var decimal = lang.sDecimal;
-			if ( decimal && defaultDecimal !== decimal ) {
-				_addNumericSort( decimal );
-			}
-		}
-	}
-	
-	
-	/**
-	 * Map one parameter onto another
-	 *  @param {object} o Object to map
-	 *  @param {*} knew The new parameter name
-	 *  @param {*} old The old parameter name
-	 */
-	var _fnCompatMap = function ( o, knew, old ) {
-		if ( o[ knew ] !== undefined ) {
-			o[ old ] = o[ knew ];
-		}
-	};
-	
-	
-	/**
-	 * Provide backwards compatibility for the main DT options. Note that the new
-	 * options are mapped onto the old parameters, so this is an external interface
-	 * change only.
-	 *  @param {object} init Object to map
-	 */
-	function _fnCompatOpts ( init )
-	{
-		_fnCompatMap( init, 'ordering',      'bSort' );
-		_fnCompatMap( init, 'orderMulti',    'bSortMulti' );
-		_fnCompatMap( init, 'orderClasses',  'bSortClasses' );
-		_fnCompatMap( init, 'orderCellsTop', 'bSortCellsTop' );
-		_fnCompatMap( init, 'order',         'aaSorting' );
-		_fnCompatMap( init, 'orderFixed',    'aaSortingFixed' );
-		_fnCompatMap( init, 'paging',        'bPaginate' );
-		_fnCompatMap( init, 'pagingType',    'sPaginationType' );
-		_fnCompatMap( init, 'pageLength',    'iDisplayLength' );
-		_fnCompatMap( init, 'searching',     'bFilter' );
-	
-		// Boolean initialisation of x-scrolling
-		if ( typeof init.sScrollX === 'boolean' ) {
-			init.sScrollX = init.sScrollX ? '100%' : '';
-		}
-		if ( typeof init.scrollX === 'boolean' ) {
-			init.scrollX = init.scrollX ? '100%' : '';
-		}
-	
-		// Column search objects are in an array, so it needs to be converted
-		// element by element
-		var searchCols = init.aoSearchCols;
-	
-		if ( searchCols ) {
-			for ( var i=0, ien=searchCols.length ; i<ien ; i++ ) {
-				if ( searchCols[i] ) {
-					_fnCamelToHungarian( DataTable.models.oSearch, searchCols[i] );
-				}
-			}
-		}
-	}
-	
-	
-	/**
-	 * Provide backwards compatibility for column options. Note that the new options
-	 * are mapped onto the old parameters, so this is an external interface change
-	 * only.
-	 *  @param {object} init Object to map
-	 */
-	function _fnCompatCols ( init )
-	{
-		_fnCompatMap( init, 'orderable',     'bSortable' );
-		_fnCompatMap( init, 'orderData',     'aDataSort' );
-		_fnCompatMap( init, 'orderSequence', 'asSorting' );
-		_fnCompatMap( init, 'orderDataType', 'sortDataType' );
-	
-		// orderData can be given as an integer
-		var dataSort = init.aDataSort;
-		if ( typeof dataSort === 'number' && ! $.isArray( dataSort ) ) {
-			init.aDataSort = [ dataSort ];
-		}
-	}
-	
-	
-	/**
-	 * Browser feature detection for capabilities, quirks
-	 *  @param {object} settings dataTables settings object
-	 *  @memberof DataTable#oApi
-	 */
-	function _fnBrowserDetect( settings )
-	{
-		// We don't need to do this every time DataTables is constructed, the values
-		// calculated are specific to the browser and OS configuration which we
-		// don't expect to change between initialisations
-		if ( ! DataTable.__browser ) {
-			var browser = {};
-			DataTable.__browser = browser;
-	
-			// Scrolling feature / quirks detection
-			var n = $('<div/>')
-				.css( {
-					position: 'fixed',
-					top: 0,
-					left: $(window).scrollLeft()*-1, // allow for scrolling
-					height: 1,
-					width: 1,
-					overflow: 'hidden'
-				} )
-				.append(
-					$('<div/>')
-						.css( {
-							position: 'absolute',
-							top: 1,
-							left: 1,
-							width: 100,
-							overflow: 'scroll'
-						} )
-						.append(
-							$('<div/>')
-								.css( {
-									width: '100%',
-									height: 10
-								} )
-						)
-				)
-				.appendTo( 'body' );
-	
-			var outer = n.children();
-			var inner = outer.children();
-	
-			// Numbers below, in order, are:
-			// inner.offsetWidth, inner.clientWidth, outer.offsetWidth, outer.clientWidth
-			//
-			// IE6 XP:                           100 100 100  83
-			// IE7 Vista:                        100 100 100  83
-			// IE 8+ Windows:                     83  83 100  83
-			// Evergreen Windows:                 83  83 100  83
-			// Evergreen Mac with scrollbars:     85  85 100  85
-			// Evergreen Mac without scrollbars: 100 100 100 100
-	
-			// Get scrollbar width
-			browser.barWidth = outer[0].offsetWidth - outer[0].clientWidth;
-	
-			// IE6/7 will oversize a width 100% element inside a scrolling element, to
-			// include the width of the scrollbar, while other browsers ensure the inner
-			// element is contained without forcing scrolling
-			browser.bScrollOversize = inner[0].offsetWidth === 100 && outer[0].clientWidth !== 100;
-	
-			// In rtl text layout, some browsers (most, but not all) will place the
-			// scrollbar on the left, rather than the right.
-			browser.bScrollbarLeft = Math.round( inner.offset().left ) !== 1;
-	
-			// IE8- don't provide height and width for getBoundingClientRect
-			browser.bBounding = n[0].getBoundingClientRect().width ? true : false;
-	
-			n.remove();
-		}
-	
-		$.extend( settings.oBrowser, DataTable.__browser );
-		settings.oScroll.iBarWidth = DataTable.__browser.barWidth;
-	}
-	
-	
-	/**
-	 * Array.prototype reduce[Right] method, used for browsers which don't support
-	 * JS 1.6. Done this way to reduce code size, since we iterate either way
-	 *  @param {object} settings dataTables settings object
-	 *  @memberof DataTable#oApi
-	 */
-	function _fnReduce ( that, fn, init, start, end, inc )
-	{
-		var
-			i = start,
-			value,
-			isSet = false;
-	
-		if ( init !== undefined ) {
-			value = init;
-			isSet = true;
-		}
-	
-		while ( i !== end ) {
-			if ( ! that.hasOwnProperty(i) ) {
-				continue;
-			}
-	
-			value = isSet ?
-				fn( value, that[i], i, that ) :
-				that[i];
-	
-			isSet = true;
-			i += inc;
-		}
-	
-		return value;
-	}
-	
-	/**
-	 * Add a column to the list used for the table with default values
-	 *  @param {object} oSettings dataTables settings object
-	 *  @param {node} nTh The th element for this column
-	 *  @memberof DataTable#oApi
-	 */
-	function _fnAddColumn( oSettings, nTh )
-	{
-		// Add column to aoColumns array
-		var oDefaults = DataTable.defaults.column;
-		var iCol = oSettings.aoColumns.length;
-		var oCol = $.extend( {}, DataTable.models.oColumn, oDefaults, {
-			"nTh": nTh ? nTh : document.createElement('th'),
-			"sTitle":    oDefaults.sTitle    ? oDefaults.sTitle    : nTh ? nTh.innerHTML : '',
-			"aDataSort": oDefaults.aDataSort ? oDefaults.aDataSort : [iCol],
-			"mData": oDefaults.mData ? oDefaults.mData : iCol,
-			idx: iCol
-		} );
-		oSettings.aoColumns.push( oCol );
-	
-		// Add search object for column specific search. Note that the `searchCols[ iCol ]`
-		// passed into extend can be undefined. This allows the user to give a default
-		// with only some of the parameters defined, and also not give a default
-		var searchCols = oSettings.aoPreSearchCols;
-		searchCols[ iCol ] = $.extend( {}, DataTable.models.oSearch, searchCols[ iCol ] );
-	
-		// Use the default column options function to initialise classes etc
-		_fnColumnOptions( oSettings, iCol, $(nTh).data() );
-	}
-	
-	
-	/**
-	 * Apply options for a column
-	 *  @param {object} oSettings dataTables settings object
-	 *  @param {int} iCol column index to consider
-	 *  @param {object} oOptions object with sType, bVisible and bSearchable etc
-	 *  @memberof DataTable#oApi
-	 */
-	function _fnColumnOptions( oSettings, iCol, oOptions )
-	{
-		var oCol = oSettings.aoColumns[ iCol ];
-		var oClasses = oSettings.oClasses;
-		var th = $(oCol.nTh);
-	
-		// Try to get width information from the DOM. We can't get it from CSS
-		// as we'd need to parse the CSS stylesheet. `width` option can override
-		if ( ! oCol.sWidthOrig ) {
-			// Width attribute
-			oCol.sWidthOrig = th.attr('width') || null;
-	
-			// Style attribute
-			var t = (th.attr('style') || '').match(/width:\s*(\d+[pxem%]+)/);
-			if ( t ) {
-				oCol.sWidthOrig = t[1];
-			}
-		}
-	
-		/* User specified column options */
-		if ( oOptions !== undefined && oOptions !== null )
-		{
-			// Backwards compatibility
-			_fnCompatCols( oOptions );
-	
-			// Map camel case parameters to their Hungarian counterparts
-			_fnCamelToHungarian( DataTable.defaults.column, oOptions, true );
-	
-			/* Backwards compatibility for mDataProp */
-			if ( oOptions.mDataProp !== undefined && !oOptions.mData )
-			{
-				oOptions.mData = oOptions.mDataProp;
-			}
-	
-			if ( oOptions.sType )
-			{
-				oCol._sManualType = oOptions.sType;
-			}
-	
-			// `class` is a reserved word in Javascript, so we need to provide
-			// the ability to use a valid name for the camel case input
-			if ( oOptions.className && ! oOptions.sClass )
-			{
-				oOptions.sClass = oOptions.className;
-			}
-			if ( oOptions.sClass ) {
-				th.addClass( oOptions.sClass );
-			}
-	
-			$.extend( oCol, oOptions );
-			_fnMap( oCol, oOptions, "sWidth", "sWidthOrig" );
-	
-			/* iDataSort to be applied (backwards compatibility), but aDataSort will take
-			 * priority if defined
-			 */
-			if ( oOptions.iDataSort !== undefined )
-			{
-				oCol.aDataSort = [ oOptions.iDataSort ];
-			}
-			_fnMap( oCol, oOptions, "aDataSort" );
-		}
-	
-		/* Cache the data get and set functions for speed */
-		var mDataSrc = oCol.mData;
-		var mData = _fnGetObjectDataFn( mDataSrc );
-		var mRender = oCol.mRender ? _fnGetObjectDataFn( oCol.mRender ) : null;
-	
-		var attrTest = function( src ) {
-			return typeof src === 'string' && src.indexOf('@') !== -1;
-		};
-		oCol._bAttrSrc = $.isPlainObject( mDataSrc ) && (
-			attrTest(mDataSrc.sort) || attrTest(mDataSrc.type) || attrTest(mDataSrc.filter)
-		);
-		oCol._setter = null;
-	
-		oCol.fnGetData = function (rowData, type, meta) {
-			var innerData = mData( rowData, type, undefined, meta );
-	
-			return mRender && type ?
-				mRender( innerData, type, rowData, meta ) :
-				innerData;
-		};
-		oCol.fnSetData = function ( rowData, val, meta ) {
-			return _fnSetObjectDataFn( mDataSrc )( rowData, val, meta );
-		};
-	
-		// Indicate if DataTables should read DOM data as an object or array
-		// Used in _fnGetRowElements
-		if ( typeof mDataSrc !== 'number' ) {
-			oSettings._rowReadObject = true;
-		}
-	
-		/* Feature sorting overrides column specific when off */
-		if ( !oSettings.oFeatures.bSort )
-		{
-			oCol.bSortable = false;
-			th.addClass( oClasses.sSortableNone ); // Have to add class here as order event isn't called
-		}
-	
-		/* Check that the class assignment is correct for sorting */
-		var bAsc = $.inArray('asc', oCol.asSorting) !== -1;
-		var bDesc = $.inArray('desc', oCol.asSorting) !== -1;
-		if ( !oCol.bSortable || (!bAsc && !bDesc) )
-		{
-			oCol.sSortingClass = oClasses.sSortableNone;
-			oCol.sSortingClassJUI = "";
-		}
-		else if ( bAsc && !bDesc )
-		{
-			oCol.sSortingClass = oClasses.sSortableAsc;
-			oCol.sSortingClassJUI = oClasses.sSortJUIAscAllowed;
-		}
-		else if ( !bAsc && bDesc )
-		{
-			oCol.sSortingClass = oClasses.sSortableDesc;
-			oCol.sSortingClassJUI = oClasses.sSortJUIDescAllowed;
-		}
-		else
-		{
-			oCol.sSortingClass = oClasses.sSortable;
-			oCol.sSortingClassJUI = oClasses.sSortJUI;
-		}
-	}
-	
-	
-	/**
-	 * Adjust the table column widths for new data. Note: you would probably want to
-	 * do a redraw after calling this function!
-	 *  @param {object} settings dataTables settings object
-	 *  @memberof DataTable#oApi
-	 */
-	function _fnAdjustColumnSizing ( settings )
-	{
-		/* Not interested in doing column width calculation if auto-width is disabled */
-		if ( settings.oFeatures.bAutoWidth !== false )
-		{
-			var columns = settings.aoColumns;
-	
-			_fnCalculateColumnWidths( settings );
-			for ( var i=0 , iLen=columns.length ; i<iLen ; i++ )
-			{
-				columns[i].nTh.style.width = columns[i].sWidth;
-			}
-		}
-	
-		var scroll = settings.oScroll;
-		if ( scroll.sY !== '' || scroll.sX !== '')
-		{
-			_fnScrollDraw( settings );
-		}
-	
-		_fnCallbackFire( settings, null, 'column-sizing', [settings] );
-	}
-	
-	
-	/**
-	 * Covert the index of a visible column to the index in the data array (take account
-	 * of hidden columns)
-	 *  @param {object} oSettings dataTables settings object
-	 *  @param {int} iMatch Visible column index to lookup
-	 *  @returns {int} i the data index
-	 *  @memberof DataTable#oApi
-	 */
-	function _fnVisibleToColumnIndex( oSettings, iMatch )
-	{
-		var aiVis = _fnGetColumns( oSettings, 'bVisible' );
-	
-		return typeof aiVis[iMatch] === 'number' ?
-			aiVis[iMatch] :
-			null;
-	}
-	
-	
-	/**
-	 * Covert the index of an index in the data array and convert it to the visible
-	 *   column index (take account of hidden columns)
-	 *  @param {int} iMatch Column index to lookup
-	 *  @param {object} oSettings dataTables settings object
-	 *  @returns {int} i the data index
-	 *  @memberof DataTable#oApi
-	 */
-	function _fnColumnIndexToVisible( oSettings, iMatch )
-	{
-		var aiVis = _fnGetColumns( oSettings, 'bVisible' );
-		var iPos = $.inArray( iMatch, aiVis );
-	
-		return iPos !== -1 ? iPos : null;
-	}
-	
-	
-	/**
-	 * Get the number of visible columns
-	 *  @param {object} oSettings dataTables settings object
-	 *  @returns {int} i the number of visible columns
-	 *  @memberof DataTable#oApi
-	 */
-	function _fnVisbleColumns( oSettings )
-	{
-		var vis = 0;
-	
-		// No reduce in IE8, use a loop for now
-		$.each( oSettings.aoColumns, function ( i, col ) {
-			if ( col.bVisible && $(col.nTh).css('display') !== 'none' ) {
-				vis++;
-			}
-		} );
-	
-		return vis;
-	}
-	
-	
-	/**
-	 * Get an array of column indexes that match a given property
-	 *  @param {object} oSettings dataTables settings object
-	 *  @param {string} sParam Parameter in aoColumns to look for - typically
-	 *    bVisible or bSearchable
-	 *  @returns {array} Array of indexes with matched properties
-	 *  @memberof DataTable#oApi
-	 */
-	function _fnGetColumns( oSettings, sParam )
-	{
-		var a = [];
-	
-		$.map( oSettings.aoColumns, function(val, i) {
-			if ( val[sParam] ) {
-				a.push( i );
-			}
-		} );
-	
-		return a;
-	}
-	
-	
-	/**
-	 * Calculate the 'type' of a column
-	 *  @param {object} settings dataTables settings object
-	 *  @memberof DataTable#oApi
-	 */
-	function _fnColumnTypes ( settings )
-	{
-		var columns = settings.aoColumns;
-		var data = settings.aoData;
-		var types = DataTable.ext.type.detect;
-		var i, ien, j, jen, k, ken;
-		var col, cell, detectedType, cache;
-	
-		// For each column, spin over the 
-		for ( i=0, ien=columns.length ; i<ien ; i++ ) {
-			col = columns[i];
-			cache = [];
-	
-			if ( ! col.sType && col._sManualType ) {
-				col.sType = col._sManualType;
-			}
-			else if ( ! col.sType ) {
-				for ( j=0, jen=types.length ; j<jen ; j++ ) {
-					for ( k=0, ken=data.length ; k<ken ; k++ ) {
-						// Use a cache array so we only need to get the type data
-						// from the formatter once (when using multiple detectors)
-						if ( cache[k] === undefined ) {
-							cache[k] = _fnGetCellData( settings, k, i, 'type' );
-						}
-	
-						detectedType = types[j]( cache[k], settings );
-	
-						// If null, then this type can't apply to this column, so
-						// rather than testing all cells, break out. There is an
-						// exception for the last type which is `html`. We need to
-						// scan all rows since it is possible to mix string and HTML
-						// types
-						if ( ! detectedType && j !== types.length-1 ) {
-							break;
-						}
-	
-						// Only a single match is needed for html type since it is
-						// bottom of the pile and very similar to string
-						if ( detectedType === 'html' ) {
-							break;
-						}
-					}
-	
-					// Type is valid for all data points in the column - use this
-					// type
-					if ( detectedType ) {
-						col.sType = detectedType;
-						break;
-					}
-				}
-	
-				// Fall back - if no type was detected, always use string
-				if ( ! col.sType ) {
-					col.sType = 'string';
-				}
-			}
-		}
-	}
-	
-	
-	/**
-	 * Take the column definitions and static columns arrays and calculate how
-	 * they relate to column indexes. The callback function will then apply the
-	 * definition found for a column to a suitable configuration object.
-	 *  @param {object} oSettings dataTables settings object
-	 *  @param {array} aoColDefs The aoColumnDefs array that is to be applied
-	 *  @param {array} aoCols The aoColumns array that defines columns individually
-	 *  @param {function} fn Callback function - takes two parameters, the calculated
-	 *    column index and the definition for that column.
-	 *  @memberof DataTable#oApi
-	 */
-	function _fnApplyColumnDefs( oSettings, aoColDefs, aoCols, fn )
-	{
-		var i, iLen, j, jLen, k, kLen, def;
-		var columns = oSettings.aoColumns;
-	
-		// Column definitions with aTargets
-		if ( aoColDefs )
-		{
-			/* Loop over the definitions array - loop in reverse so first instance has priority */
-			for ( i=aoColDefs.length-1 ; i>=0 ; i-- )
-			{
-				def = aoColDefs[i];
-	
-				/* Each definition can target multiple columns, as it is an array */
-				var aTargets = def.targets !== undefined ?
-					def.targets :
-					def.aTargets;
-	
-				if ( ! $.isArray( aTargets ) )
-				{
-					aTargets = [ aTargets ];
-				}
-	
-				for ( j=0, jLen=aTargets.length ; j<jLen ; j++ )
-				{
-					if ( typeof aTargets[j] === 'number' && aTargets[j] >= 0 )
-					{
-						/* Add columns that we don't yet know about */
-						while( columns.length <= aTargets[j] )
-						{
-							_fnAddColumn( oSettings );
-						}
-	
-						/* Integer, basic index */
-						fn( aTargets[j], def );
-					}
-					else if ( typeof aTargets[j] === 'number' && aTargets[j] < 0 )
-					{
-						/* Negative integer, right to left column counting */
-						fn( columns.length+aTargets[j], def );
-					}
-					else if ( typeof aTargets[j] === 'string' )
-					{
-						/* Class name matching on TH element */
-						for ( k=0, kLen=columns.length ; k<kLen ; k++ )
-						{
-							if ( aTargets[j] == "_all" ||
-							     $(columns[k].nTh).hasClass( aTargets[j] ) )
-							{
-								fn( k, def );
-							}
-						}
-					}
-				}
-			}
-		}
-	
-		// Statically defined columns array
-		if ( aoCols )
-		{
-			for ( i=0, iLen=aoCols.length ; i<iLen ; i++ )
-			{
-				fn( i, aoCols[i] );
-			}
-		}
-	}
-	
-	/**
-	 * Add a data array to the table, creating DOM node etc. This is the parallel to
-	 * _fnGatherData, but for adding rows from a Javascript source, rather than a
-	 * DOM source.
-	 *  @param {object} oSettings dataTables settings object
-	 *  @param {array} aData data array to be added
-	 *  @param {node} [nTr] TR element to add to the table - optional. If not given,
-	 *    DataTables will create a row automatically
-	 *  @param {array} [anTds] Array of TD|TH elements for the row - must be given
-	 *    if nTr is.
-	 *  @returns {int} >=0 if successful (index of new aoData entry), -1 if failed
-	 *  @memberof DataTable#oApi
-	 */
-	function _fnAddData ( oSettings, aDataIn, nTr, anTds )
-	{
-		/* Create the object for storing information about this new row */
-		var iRow = oSettings.aoData.length;
-		var oData = $.extend( true, {}, DataTable.models.oRow, {
-			src: nTr ? 'dom' : 'data',
-			idx: iRow
-		} );
-	
-		oData._aData = aDataIn;
-		oSettings.aoData.push( oData );
-	
-		/* Create the cells */
-		var nTd, sThisType;
-		var columns = oSettings.aoColumns;
-	
-		// Invalidate the column types as the new data needs to be revalidated
-		for ( var i=0, iLen=columns.length ; i<iLen ; i++ )
-		{
-			columns[i].sType = null;
-		}
-	
-		/* Add to the display array */
-		oSettings.aiDisplayMaster.push( iRow );
-	
-		var id = oSettings.rowIdFn( aDataIn );
-		if ( id !== undefined ) {
-			oSettings.aIds[ id ] = oData;
-		}
-	
-		/* Create the DOM information, or register it if already present */
-		if ( nTr || ! oSettings.oFeatures.bDeferRender )
-		{
-			_fnCreateTr( oSettings, iRow, nTr, anTds );
-		}
-	
-		return iRow;
-	}
-	
-	
-	/**
-	 * Add one or more TR elements to the table. Generally we'd expect to
-	 * use this for reading data from a DOM sourced table, but it could be
-	 * used for an TR element. Note that if a TR is given, it is used (i.e.
-	 * it is not cloned).
-	 *  @param {object} settings dataTables settings object
-	 *  @param {array|node|jQuery} trs The TR element(s) to add to the table
-	 *  @returns {array} Array of indexes for the added rows
-	 *  @memberof DataTable#oApi
-	 */
-	function _fnAddTr( settings, trs )
-	{
-		var row;
-	
-		// Allow an individual node to be passed in
-		if ( ! (trs instanceof $) ) {
-			trs = $(trs);
-		}
-	
-		return trs.map( function (i, el) {
-			row = _fnGetRowElements( settings, el );
-			return _fnAddData( settings, row.data, el, row.cells );
-		} );
-	}
-	
-	
-	/**
-	 * Take a TR element and convert it to an index in aoData
-	 *  @param {object} oSettings dataTables settings object
-	 *  @param {node} n the TR element to find
-	 *  @returns {int} index if the node is found, null if not
-	 *  @memberof DataTable#oApi
-	 */
-	function _fnNodeToDataIndex( oSettings, n )
-	{
-		return (n._DT_RowIndex!==undefined) ? n._DT_RowIndex : null;
-	}
-	
-	
-	/**
-	 * Take a TD element and convert it into a column data index (not the visible index)
-	 *  @param {object} oSettings dataTables settings object
-	 *  @param {int} iRow The row number the TD/TH can be found in
-	 *  @param {node} n The TD/TH element to find
-	 *  @returns {int} index if the node is found, -1 if not
-	 *  @memberof DataTable#oApi
-	 */
-	function _fnNodeToColumnIndex( oSettings, iRow, n )
-	{
-		return $.inArray( n, oSettings.aoData[ iRow ].anCells );
-	}
-	
-	
-	/**
-	 * Get the data for a given cell from the internal cache, taking into account data mapping
-	 *  @param {object} settings dataTables settings object
-	 *  @param {int} rowIdx aoData row id
-	 *  @param {int} colIdx Column index
-	 *  @param {string} type data get type ('display', 'type' 'filter' 'sort')
-	 *  @returns {*} Cell data
-	 *  @memberof DataTable#oApi
-	 */
-	function _fnGetCellData( settings, rowIdx, colIdx, type )
-	{
-		var draw           = settings.iDraw;
-		var col            = settings.aoColumns[colIdx];
-		var rowData        = settings.aoData[rowIdx]._aData;
-		var defaultContent = col.sDefaultContent;
-		var cellData       = col.fnGetData( rowData, type, {
-			settings: settings,
-			row:      rowIdx,
-			col:      colIdx
-		} );
-	
-		if ( cellData === undefined ) {
-			if ( settings.iDrawError != draw && defaultContent === null ) {
-				_fnLog( settings, 0, "Requested unknown parameter "+
-					(typeof col.mData=='function' ? '{function}' : "'"+col.mData+"'")+
-					" for row "+rowIdx+", column "+colIdx, 4 );
-				settings.iDrawError = draw;
-			}
-			return defaultContent;
-		}
-	
-		// When the data source is null and a specific data type is requested (i.e.
-		// not the original data), we can use default column data
-		if ( (cellData === rowData || cellData === null) && defaultContent !== null && type !== undefined ) {
-			cellData = defaultContent;
-		}
-		else if ( typeof cellData === 'function' ) {
-			// If the data source is a function, then we run it and use the return,
-			// executing in the scope of the data object (for instances)
-			return cellData.call( rowData );
-		}
-	
-		if ( cellData === null && type == 'display' ) {
-			return '';
-		}
-		return cellData;
-	}
-	
-	
-	/**
-	 * Set the value for a specific cell, into the internal data cache
-	 *  @param {object} settings dataTables settings object
-	 *  @param {int} rowIdx aoData row id
-	 *  @param {int} colIdx Column index
-	 *  @param {*} val Value to set
-	 *  @memberof DataTable#oApi
-	 */
-	function _fnSetCellData( settings, rowIdx, colIdx, val )
-	{
-		var col     = settings.aoColumns[colIdx];
-		var rowData = settings.aoData[rowIdx]._aData;
-	
-		col.fnSetData( rowData, val, {
-			settings: settings,
-			row:      rowIdx,
-			col:      colIdx
-		}  );
-	}
-	
-	
-	// Private variable that is used to match action syntax in the data property object
-	var __reArray = /\[.*?\]$/;
-	var __reFn = /\(\)$/;
-	
-	/**
-	 * Split string on periods, taking into account escaped periods
-	 * @param  {string} str String to split
-	 * @return {array} Split string
-	 */
-	function _fnSplitObjNotation( str )
-	{
-		return $.map( str.match(/(\\.|[^\.])+/g) || [''], function ( s ) {
-			return s.replace(/\\\./g, '.');
-		} );
-	}
-	
-	
-	/**
-	 * Return a function that can be used to get data from a source object, taking
-	 * into account the ability to use nested objects as a source
-	 *  @param {string|int|function} mSource The data source for the object
-	 *  @returns {function} Data get function
-	 *  @memberof DataTable#oApi
-	 */
-	function _fnGetObjectDataFn( mSource )
-	{
-		if ( $.isPlainObject( mSource ) )
-		{
-			/* Build an object of get functions, and wrap them in a single call */
-			var o = {};
-			$.each( mSource, function (key, val) {
-				if ( val ) {
-					o[key] = _fnGetObjectDataFn( val );
-				}
-			} );
-	
-			return function (data, type, row, meta) {
-				var t = o[type] || o._;
-				return t !== undefined ?
-					t(data, type, row, meta) :
-					data;
-			};
-		}
-		else if ( mSource === null )
-		{
-			/* Give an empty string for rendering / sorting etc */
-			return function (data) { // type, row and meta also passed, but not used
-				return data;
-			};
-		}
-		else if ( typeof mSource === 'function' )
-		{
-			return function (data, type, row, meta) {
-				return mSource( data, type, row, meta );
-			};
-		}
-		else if ( typeof mSource === 'string' && (mSource.indexOf('.') !== -1 ||
-			      mSource.indexOf('[') !== -1 || mSource.indexOf('(') !== -1) )
-		{
-			/* If there is a . in the source string then the data source is in a
-			 * nested object so we loop over the data for each level to get the next
-			 * level down. On each loop we test for undefined, and if found immediately
-			 * return. This allows entire objects to be missing and sDefaultContent to
-			 * be used if defined, rather than throwing an error
-			 */
-			var fetchData = function (data, type, src) {
-				var arrayNotation, funcNotation, out, innerSrc;
-	
-				if ( src !== "" )
-				{
-					var a = _fnSplitObjNotation( src );
-	
-					for ( var i=0, iLen=a.length ; i<iLen ; i++ )
-					{
-						// Check if we are dealing with special notation
-						arrayNotation = a[i].match(__reArray);
-						funcNotation = a[i].match(__reFn);
-	
-						if ( arrayNotation )
-						{
-							// Array notation
-							a[i] = a[i].replace(__reArray, '');
-	
-							// Condition allows simply [] to be passed in
-							if ( a[i] !== "" ) {
-								data = data[ a[i] ];
-							}
-							out = [];
-	
-							// Get the remainder of the nested object to get
-							a.splice( 0, i+1 );
-							innerSrc = a.join('.');
-	
-							// Traverse each entry in the array getting the properties requested
-							if ( $.isArray( data ) ) {
-								for ( var j=0, jLen=data.length ; j<jLen ; j++ ) {
-									out.push( fetchData( data[j], type, innerSrc ) );
-								}
-							}
-	
-							// If a string is given in between the array notation indicators, that
-							// is used to join the strings together, otherwise an array is returned
-							var join = arrayNotation[0].substring(1, arrayNotation[0].length-1);
-							data = (join==="") ? out : out.join(join);
-	
-							// The inner call to fetchData has already traversed through the remainder
-							// of the source requested, so we exit from the loop
-							break;
-						}
-						else if ( funcNotation )
-						{
-							// Function call
-							a[i] = a[i].replace(__reFn, '');
-							data = data[ a[i] ]();
-							continue;
-						}
-	
-						if ( data === null || data[ a[i] ] === undefined )
-						{
-							return undefined;
-						}
-						data = data[ a[i] ];
-					}
-				}
-	
-				return data;
-			};
-	
-			return function (data, type) { // row and meta also passed, but not used
-				return fetchData( data, type, mSource );
-			};
-		}
-		else
-		{
-			/* Array or flat object mapping */
-			return function (data, type) { // row and meta also passed, but not used
-				return data[mSource];
-			};
-		}
-	}
-	
-	
-	/**
-	 * Return a function that can be used to set data from a source object, taking
-	 * into account the ability to use nested objects as a source
-	 *  @param {string|int|function} mSource The data source for the object
-	 *  @returns {function} Data set function
-	 *  @memberof DataTable#oApi
-	 */
-	function _fnSetObjectDataFn( mSource )
-	{
-		if ( $.isPlainObject( mSource ) )
-		{
-			/* Unlike get, only the underscore (global) option is used for for
-			 * setting data since we don't know the type here. This is why an object
-			 * option is not documented for `mData` (which is read/write), but it is
-			 * for `mRender` which is read only.
-			 */
-			return _fnSetObjectDataFn( mSource._ );
-		}
-		else if ( mSource === null )
-		{
-			/* Nothing to do when the data source is null */
-			return function () {};
-		}
-		else if ( typeof mSource === 'function' )
-		{
-			return function (data, val, meta) {
-				mSource( data, 'set', val, meta );
-			};
-		}
-		else if ( typeof mSource === 'string' && (mSource.indexOf('.') !== -1 ||
-			      mSource.indexOf('[') !== -1 || mSource.indexOf('(') !== -1) )
-		{
-			/* Like the get, we need to get data from a nested object */
-			var setData = function (data, val, src) {
-				var a = _fnSplitObjNotation( src ), b;
-				var aLast = a[a.length-1];
-				var arrayNotation, funcNotation, o, innerSrc;
-	
-				for ( var i=0, iLen=a.length-1 ; i<iLen ; i++ )
-				{
-					// Check if we are dealing with an array notation request
-					arrayNotation = a[i].match(__reArray);
-					funcNotation = a[i].match(__reFn);
-	
-					if ( arrayNotation )
-					{
-						a[i] = a[i].replace(__reArray, '');
-						data[ a[i] ] = [];
-	
-						// Get the remainder of the nested object to set so we can recurse
-						b = a.slice();
-						b.splice( 0, i+1 );
-						innerSrc = b.join('.');
-	
-						// Traverse each entry in the array setting the properties requested
-						if ( $.isArray( val ) )
-						{
-							for ( var j=0, jLen=val.length ; j<jLen ; j++ )
-							{
-								o = {};
-								setData( o, val[j], innerSrc );
-								data[ a[i] ].push( o );
-							}
-						}
-						else
-						{
-							// We've been asked to save data to an array, but it
-							// isn't array data to be saved. Best that can be done
-							// is to just save the value.
-							data[ a[i] ] = val;
-						}
-	
-						// The inner call to setData has already traversed through the remainder
-						// of the source and has set the data, thus we can exit here
-						return;
-					}
-					else if ( funcNotation )
-					{
-						// Function call
-						a[i] = a[i].replace(__reFn, '');
-						data = data[ a[i] ]( val );
-					}
-	
-					// If the nested object doesn't currently exist - since we are
-					// trying to set the value - create it
-					if ( data[ a[i] ] === null || data[ a[i] ] === undefined )
-					{
-						data[ a[i] ] = {};
-					}
-					data = data[ a[i] ];
-				}
-	
-				// Last item in the input - i.e, the actual set
-				if ( aLast.match(__reFn ) )
-				{
-					// Function call
-					data = data[ aLast.replace(__reFn, '') ]( val );
-				}
-				else
-				{
-					// If array notation is used, we just want to strip it and use the property name
-					// and assign the value. If it isn't used, then we get the result we want anyway
-					data[ aLast.replace(__reArray, '') ] = val;
-				}
-			};
-	
-			return function (data, val) { // meta is also passed in, but not used
-				return setData( data, val, mSource );
-			};
-		}
-		else
-		{
-			/* Array or flat object mapping */
-			return function (data, val) { // meta is also passed in, but not used
-				data[mSource] = val;
-			};
-		}
-	}
-	
-	
-	/**
-	 * Return an array with the full table data
-	 *  @param {object} oSettings dataTables settings object
-	 *  @returns array {array} aData Master data array
-	 *  @memberof DataTable#oApi
-	 */
-	function _fnGetDataMaster ( settings )
-	{
-		return _pluck( settings.aoData, '_aData' );
-	}
-	
-	
-	/**
-	 * Nuke the table
-	 *  @param {object} oSettings dataTables settings object
-	 *  @memberof DataTable#oApi
-	 */
-	function _fnClearTable( settings )
-	{
-		settings.aoData.length = 0;
-		settings.aiDisplayMaster.length = 0;
-		settings.aiDisplay.length = 0;
-		settings.aIds = {};
-	}
-	
-	
-	 /**
-	 * Take an array of integers (index array) and remove a target integer (value - not
-	 * the key!)
-	 *  @param {array} a Index array to target
-	 *  @param {int} iTarget value to find
-	 *  @memberof DataTable#oApi
-	 */
-	function _fnDeleteIndex( a, iTarget, splice )
-	{
-		var iTargetIndex = -1;
-	
-		for ( var i=0, iLen=a.length ; i<iLen ; i++ )
-		{
-			if ( a[i] == iTarget )
-			{
-				iTargetIndex = i;
-			}
-			else if ( a[i] > iTarget )
-			{
-				a[i]--;
-			}
-		}
-	
-		if ( iTargetIndex != -1 && splice === undefined )
-		{
-			a.splice( iTargetIndex, 1 );
-		}
-	}
-	
-	
-	/**
-	 * Mark cached data as invalid such that a re-read of the data will occur when
-	 * the cached data is next requested. Also update from the data source object.
-	 *
-	 * @param {object} settings DataTables settings object
-	 * @param {int}    rowIdx   Row index to invalidate
-	 * @param {string} [src]    Source to invalidate from: undefined, 'auto', 'dom'
-	 *     or 'data'
-	 * @param {int}    [colIdx] Column index to invalidate. If undefined the whole
-	 *     row will be invalidated
-	 * @memberof DataTable#oApi
-	 *
-	 * @todo For the modularisation of v1.11 this will need to become a callback, so
-	 *   the sort and filter methods can subscribe to it. That will required
-	 *   initialisation options for sorting, which is why it is not already baked in
-	 */
-	function _fnInvalidate( settings, rowIdx, src, colIdx )
-	{
-		var row = settings.aoData[ rowIdx ];
-		var i, ien;
-		var cellWrite = function ( cell, col ) {
-			// This is very frustrating, but in IE if you just write directly
-			// to innerHTML, and elements that are overwritten are GC'ed,
-			// even if there is a reference to them elsewhere
-			while ( cell.childNodes.length ) {
-				cell.removeChild( cell.firstChild );
-			}
-	
-			cell.innerHTML = _fnGetCellData( settings, rowIdx, col, 'display' );
-		};
-	
-		// Are we reading last data from DOM or the data object?
-		if ( src === 'dom' || ((! src || src === 'auto') && row.src === 'dom') ) {
-			// Read the data from the DOM
-			row._aData = _fnGetRowElements(
-					settings, row, colIdx, colIdx === undefined ? undefined : row._aData
-				)
-				.data;
-		}
-		else {
-			// Reading from data object, update the DOM
-			var cells = row.anCells;
-	
-			if ( cells ) {
-				if ( colIdx !== undefined ) {
-					cellWrite( cells[colIdx], colIdx );
-				}
-				else {
-					for ( i=0, ien=cells.length ; i<ien ; i++ ) {
-						cellWrite( cells[i], i );
-					}
-				}
-			}
-		}
-	
-		// For both row and cell invalidation, the cached data for sorting and
-		// filtering is nulled out
-		row._aSortData = null;
-		row._aFilterData = null;
-	
-		// Invalidate the type for a specific column (if given) or all columns since
-		// the data might have changed
-		var cols = settings.aoColumns;
-		if ( colIdx !== undefined ) {
-			cols[ colIdx ].sType = null;
-		}
-		else {
-			for ( i=0, ien=cols.length ; i<ien ; i++ ) {
-				cols[i].sType = null;
-			}
-	
-			// Update DataTables special `DT_*` attributes for the row
-			_fnRowAttributes( settings, row );
-		}
-	}
-	
-	
-	/**
-	 * Build a data source object from an HTML row, reading the contents of the
-	 * cells that are in the row.
-	 *
-	 * @param {object} settings DataTables settings object
-	 * @param {node|object} TR element from which to read data or existing row
-	 *   object from which to re-read the data from the cells
-	 * @param {int} [colIdx] Optional column index
-	 * @param {array|object} [d] Data source object. If `colIdx` is given then this
-	 *   parameter should also be given and will be used to write the data into.
-	 *   Only the column in question will be written
-	 * @returns {object} Object with two parameters: `data` the data read, in
-	 *   document order, and `cells` and array of nodes (they can be useful to the
-	 *   caller, so rather than needing a second traversal to get them, just return
-	 *   them from here).
-	 * @memberof DataTable#oApi
-	 */
-	function _fnGetRowElements( settings, row, colIdx, d )
-	{
-		var
-			tds = [],
-			td = row.firstChild,
-			name, col, o, i=0, contents,
-			columns = settings.aoColumns,
-			objectRead = settings._rowReadObject;
-	
-		// Allow the data object to be passed in, or construct
-		d = d !== undefined ?
-			d :
-			objectRead ?
-				{} :
-				[];
-	
-		var attr = function ( str, td  ) {
-			if ( typeof str === 'string' ) {
-				var idx = str.indexOf('@');
-	
-				if ( idx !== -1 ) {
-					var attr = str.substring( idx+1 );
-					var setter = _fnSetObjectDataFn( str );
-					setter( d, td.getAttribute( attr ) );
-				}
-			}
-		};
-	
-		// Read data from a cell and store into the data object
-		var cellProcess = function ( cell ) {
-			if ( colIdx === undefined || colIdx === i ) {
-				col = columns[i];
-				contents = $.trim(cell.innerHTML);
-	
-				if ( col && col._bAttrSrc ) {
-					var setter = _fnSetObjectDataFn( col.mData._ );
-					setter( d, contents );
-	
-					attr( col.mData.sort, cell );
-					attr( col.mData.type, cell );
-					attr( col.mData.filter, cell );
-				}
-				else {
-					// Depending on the `data` option for the columns the data can
-					// be read to either an object or an array.
-					if ( objectRead ) {
-						if ( ! col._setter ) {
-							// Cache the setter function
-							col._setter = _fnSetObjectDataFn( col.mData );
-						}
-						col._setter( d, contents );
-					}
-					else {
-						d[i] = contents;
-					}
-				}
-			}
-	
-			i++;
-		};
-	
-		if ( td ) {
-			// `tr` element was passed in
-			while ( td ) {
-				name = td.nodeName.toUpperCase();
-	
-				if ( name == "TD" || name == "TH" ) {
-					cellProcess( td );
-					tds.push( td );
-				}
-	
-				td = td.nextSibling;
-			}
-		}
-		else {
-			// Existing row object passed in
-			tds = row.anCells;
-	
-			for ( var j=0, jen=tds.length ; j<jen ; j++ ) {
-				cellProcess( tds[j] );
-			}
-		}
-	
-		// Read the ID from the DOM if present
-		var rowNode = row.firstChild ? row : row.nTr;
-	
-		if ( rowNode ) {
-			var id = rowNode.getAttribute( 'id' );
-	
-			if ( id ) {
-				_fnSetObjectDataFn( settings.rowId )( d, id );
-			}
-		}
-	
-		return {
-			data: d,
-			cells: tds
-		};
-	}
-	/**
-	 * Create a new TR element (and it's TD children) for a row
-	 *  @param {object} oSettings dataTables settings object
-	 *  @param {int} iRow Row to consider
-	 *  @param {node} [nTrIn] TR element to add to the table - optional. If not given,
-	 *    DataTables will create a row automatically
-	 *  @param {array} [anTds] Array of TD|TH elements for the row - must be given
-	 *    if nTr is.
-	 *  @memberof DataTable#oApi
-	 */
-	function _fnCreateTr ( oSettings, iRow, nTrIn, anTds )
-	{
-		var
-			row = oSettings.aoData[iRow],
-			rowData = row._aData,
-			cells = [],
-			nTr, nTd, oCol,
-			i, iLen, create;
-	
-		if ( row.nTr === null )
-		{
-			nTr = nTrIn || document.createElement('tr');
-	
-			row.nTr = nTr;
-			row.anCells = cells;
-	
-			/* Use a private property on the node to allow reserve mapping from the node
-			 * to the aoData array for fast look up
-			 */
-			nTr._DT_RowIndex = iRow;
-	
-			/* Special parameters can be given by the data source to be used on the row */
-			_fnRowAttributes( oSettings, row );
-	
-			/* Process each column */
-			for ( i=0, iLen=oSettings.aoColumns.length ; i<iLen ; i++ )
-			{
-				oCol = oSettings.aoColumns[i];
-				create = nTrIn ? false : true;
-	
-				nTd = create ? document.createElement( oCol.sCellType ) : anTds[i];
-				nTd._DT_CellIndex = {
-					row: iRow,
-					column: i
-				};
-				
-				cells.push( nTd );
-	
-				// Need to create the HTML if new, or if a rendering function is defined
-				if ( create || ((!nTrIn || oCol.mRender || oCol.mData !== i) &&
-					 (!$.isPlainObject(oCol.mData) || oCol.mData._ !== i+'.display')
-				)) {
-					nTd.innerHTML = _fnGetCellData( oSettings, iRow, i, 'display' );
-				}
-	
-				/* Add user defined class */
-				if ( oCol.sClass )
-				{
-					nTd.className += ' '+oCol.sClass;
-				}
-	
-				// Visibility - add or remove as required
-				if ( oCol.bVisible && ! nTrIn )
-				{
-					nTr.appendChild( nTd );
-				}
-				else if ( ! oCol.bVisible && nTrIn )
-				{
-					nTd.parentNode.removeChild( nTd );
-				}
-	
-				if ( oCol.fnCreatedCell )
-				{
-					oCol.fnCreatedCell.call( oSettings.oInstance,
-						nTd, _fnGetCellData( oSettings, iRow, i ), rowData, iRow, i
-					);
-				}
-			}
-	
-			_fnCallbackFire( oSettings, 'aoRowCreatedCallback', null, [nTr, rowData, iRow, cells] );
-		}
-	
-		// Remove once webkit bug 131819 and Chromium bug 365619 have been resolved
-		// and deployed
-		row.nTr.setAttribute( 'role', 'row' );
-	}
-	
-	
-	/**
-	 * Add attributes to a row based on the special `DT_*` parameters in a data
-	 * source object.
-	 *  @param {object} settings DataTables settings object
-	 *  @param {object} DataTables row object for the row to be modified
-	 *  @memberof DataTable#oApi
-	 */
-	function _fnRowAttributes( settings, row )
-	{
-		var tr = row.nTr;
-		var data = row._aData;
-	
-		if ( tr ) {
-			var id = settings.rowIdFn( data );
-	
-			if ( id ) {
-				tr.id = id;
-			}
-	
-			if ( data.DT_RowClass ) {
-				// Remove any classes added by DT_RowClass before
-				var a = data.DT_RowClass.split(' ');
-				row.__rowc = row.__rowc ?
-					_unique( row.__rowc.concat( a ) ) :
-					a;
-	
-				$(tr)
-					.removeClass( row.__rowc.join(' ') )
-					.addClass( data.DT_RowClass );
-			}
-	
-			if ( data.DT_RowAttr ) {
-				$(tr).attr( data.DT_RowAttr );
-			}
-	
-			if ( data.DT_RowData ) {
-				$(tr).data( data.DT_RowData );
-			}
-		}
-	}
-	
-	
-	/**
-	 * Create the HTML header for the table
-	 *  @param {object} oSettings dataTables settings object
-	 *  @memberof DataTable#oApi
-	 */
-	function _fnBuildHead( oSettings )
-	{
-		var i, ien, cell, row, column;
-		var thead = oSettings.nTHead;
-		var tfoot = oSettings.nTFoot;
-		var createHeader = $('th, td', thead).length === 0;
-		var classes = oSettings.oClasses;
-		var columns = oSettings.aoColumns;
-	
-		if ( createHeader ) {
-			row = $('<tr/>').appendTo( thead );
-		}
-	
-		for ( i=0, ien=columns.length ; i<ien ; i++ ) {
-			column = columns[i];
-			cell = $( column.nTh ).addClass( column.sClass );
-	
-			if ( createHeader ) {
-				cell.appendTo( row );
-			}
-	
-			// 1.11 move into sorting
-			if ( oSettings.oFeatures.bSort ) {
-				cell.addClass( column.sSortingClass );
-	
-				if ( column.bSortable !== false ) {
-					cell
-						.attr( 'tabindex', oSettings.iTabIndex )
-						.attr( 'aria-controls', oSettings.sTableId );
-	
-					_fnSortAttachListener( oSettings, column.nTh, i );
-				}
-			}
-	
-			if ( column.sTitle != cell[0].innerHTML ) {
-				cell.html( column.sTitle );
-			}
-	
-			_fnRenderer( oSettings, 'header' )(
-				oSettings, cell, column, classes
-			);
-		}
-	
-		if ( createHeader ) {
-			_fnDetectHeader( oSettings.aoHeader, thead );
-		}
-		
-		/* ARIA role for the rows */
-	 	$(thead).find('>tr').attr('role', 'row');
-	
-		/* Deal with the footer - add classes if required */
-		$(thead).find('>tr>th, >tr>td').addClass( classes.sHeaderTH );
-		$(tfoot).find('>tr>th, >tr>td').addClass( classes.sFooterTH );
-	
-		// Cache the footer cells. Note that we only take the cells from the first
-		// row in the footer. If there is more than one row the user wants to
-		// interact with, they need to use the table().foot() method. Note also this
-		// allows cells to be used for multiple columns using colspan
-		if ( tfoot !== null ) {
-			var cells = oSettings.aoFooter[0];
-	
-			for ( i=0, ien=cells.length ; i<ien ; i++ ) {
-				column = columns[i];
-				column.nTf = cells[i].cell;
-	
-				if ( column.sClass ) {
-					$(column.nTf).addClass( column.sClass );
-				}
-			}
-		}
-	}
-	
-	
-	/**
-	 * Draw the header (or footer) element based on the column visibility states. The
-	 * methodology here is to use the layout array from _fnDetectHeader, modified for
-	 * the instantaneous column visibility, to construct the new layout. The grid is
-	 * traversed over cell at a time in a rows x columns grid fashion, although each
-	 * cell insert can cover multiple elements in the grid - which is tracks using the
-	 * aApplied array. Cell inserts in the grid will only occur where there isn't
-	 * already a cell in that position.
-	 *  @param {object} oSettings dataTables settings object
-	 *  @param array {objects} aoSource Layout array from _fnDetectHeader
-	 *  @param {boolean} [bIncludeHidden=false] If true then include the hidden columns in the calc,
-	 *  @memberof DataTable#oApi
-	 */
-	function _fnDrawHead( oSettings, aoSource, bIncludeHidden )
-	{
-		var i, iLen, j, jLen, k, kLen, n, nLocalTr;
-		var aoLocal = [];
-		var aApplied = [];
-		var iColumns = oSettings.aoColumns.length;
-		var iRowspan, iColspan;
-	
-		if ( ! aoSource )
-		{
-			return;
-		}
-	
-		if (  bIncludeHidden === undefined )
-		{
-			bIncludeHidden = false;
-		}
-	
-		/* Make a copy of the master layout array, but without the visible columns in it */
-		for ( i=0, iLen=aoSource.length ; i<iLen ; i++ )
-		{
-			aoLocal[i] = aoSource[i].slice();
-			aoLocal[i].nTr = aoSource[i].nTr;
-	
-			/* Remove any columns which are currently hidden */
-			for ( j=iColumns-1 ; j>=0 ; j-- )
-			{
-				if ( !oSettings.aoColumns[j].bVisible && !bIncludeHidden )
-				{
-					aoLocal[i].splice( j, 1 );
-				}
-			}
-	
-			/* Prep the applied array - it needs an element for each row */
-			aApplied.push( [] );
-		}
-	
-		for ( i=0, iLen=aoLocal.length ; i<iLen ; i++ )
-		{
-			nLocalTr = aoLocal[i].nTr;
-	
-			/* All cells are going to be replaced, so empty out the row */
-			if ( nLocalTr )
-			{
-				while( (n = nLocalTr.firstChild) )
-				{
-					nLocalTr.removeChild( n );
-				}
-			}
-	
-			for ( j=0, jLen=aoLocal[i].length ; j<jLen ; j++ )
-			{
-				iRowspan = 1;
-				iColspan = 1;
-	
-				/* Check to see if there is already a cell (row/colspan) covering our target
-				 * insert point. If there is, then there is nothing to do.
-				 */
-				if ( aApplied[i][j] === undefined )
-				{
-					nLocalTr.appendChild( aoLocal[i][j].cell );
-					aApplied[i][j] = 1;
-	
-					/* Expand the cell to cover as many rows as needed */
-					while ( aoLocal[i+iRowspan] !== undefined &&
-					        aoLocal[i][j].cell == aoLocal[i+iRowspan][j].cell )
-					{
-						aApplied[i+iRowspan][j] = 1;
-						iRowspan++;
-					}
-	
-					/* Expand the cell to cover as many columns as needed */
-					while ( aoLocal[i][j+iColspan] !== undefined &&
-					        aoLocal[i][j].cell == aoLocal[i][j+iColspan].cell )
-					{
-						/* Must update the applied array over the rows for the columns */
-						for ( k=0 ; k<iRowspan ; k++ )
-						{
-							aApplied[i+k][j+iColspan] = 1;
-						}
-						iColspan++;
-					}
-	
-					/* Do the actual expansion in the DOM */
-					$(aoLocal[i][j].cell)
-						.attr('rowspan', iRowspan)
-						.attr('colspan', iColspan);
-				}
-			}
-		}
-	}
-	
-	
-	/**
-	 * Insert the required TR nodes into the table for display
-	 *  @param {object} oSettings dataTables settings object
-	 *  @memberof DataTable#oApi
-	 */
-	function _fnDraw( oSettings )
-	{
-		/* Provide a pre-callback function which can be used to cancel the draw is false is returned */
-		var aPreDraw = _fnCallbackFire( oSettings, 'aoPreDrawCallback', 'preDraw', [oSettings] );
-		if ( $.inArray( false, aPreDraw ) !== -1 )
-		{
-			_fnProcessingDisplay( oSettings, false );
-			return;
-		}
-	
-		var i, iLen, n;
-		var anRows = [];
-		var iRowCount = 0;
-		var asStripeClasses = oSettings.asStripeClasses;
-		var iStripes = asStripeClasses.length;
-		var iOpenRows = oSettings.aoOpenRows.length;
-		var oLang = oSettings.oLanguage;
-		var iInitDisplayStart = oSettings.iInitDisplayStart;
-		var bServerSide = _fnDataSource( oSettings ) == 'ssp';
-		var aiDisplay = oSettings.aiDisplay;
-	
-		oSettings.bDrawing = true;
-	
-		/* Check and see if we have an initial draw position from state saving */
-		if ( iInitDisplayStart !== undefined && iInitDisplayStart !== -1 )
-		{
-			oSettings._iDisplayStart = bServerSide ?
-				iInitDisplayStart :
-				iInitDisplayStart >= oSettings.fnRecordsDisplay() ?
-					0 :
-					iInitDisplayStart;
-	
-			oSettings.iInitDisplayStart = -1;
-		}
-	
-		var iDisplayStart = oSettings._iDisplayStart;
-		var iDisplayEnd = oSettings.fnDisplayEnd();
-	
-		/* Server-side processing draw intercept */
-		if ( oSettings.bDeferLoading )
-		{
-			oSettings.bDeferLoading = false;
-			oSettings.iDraw++;
-			_fnProcessingDisplay( oSettings, false );
-		}
-		else if ( !bServerSide )
-		{
-			oSettings.iDraw++;
-		}
-		else if ( !oSettings.bDestroying && !_fnAjaxUpdate( oSettings ) )
-		{
-			return;
-		}
-	
-		if ( aiDisplay.length !== 0 )
-		{
-			var iStart = bServerSide ? 0 : iDisplayStart;
-			var iEnd = bServerSide ? oSettings.aoData.length : iDisplayEnd;
-	
-			for ( var j=iStart ; j<iEnd ; j++ )
-			{
-				var iDataIndex = aiDisplay[j];
-				var aoData = oSettings.aoData[ iDataIndex ];
-				if ( aoData.nTr === null )
-				{
-					_fnCreateTr( oSettings, iDataIndex );
-				}
-	
-				var nRow = aoData.nTr;
-	
-				/* Remove the old striping classes and then add the new one */
-				if ( iStripes !== 0 )
-				{
-					var sStripe = asStripeClasses[ iRowCount % iStripes ];
-					if ( aoData._sRowStripe != sStripe )
-					{
-						$(nRow).removeClass( aoData._sRowStripe ).addClass( sStripe );
-						aoData._sRowStripe = sStripe;
-					}
-				}
-	
-				// Row callback functions - might want to manipulate the row
-				// iRowCount and j are not currently documented. Are they at all
-				// useful?
-				_fnCallbackFire( oSettings, 'aoRowCallback', null,
-					[nRow, aoData._aData, iRowCount, j, iDataIndex] );
-	
-				anRows.push( nRow );
-				iRowCount++;
-			}
-		}
-		else
-		{
-			/* Table is empty - create a row with an empty message in it */
-			var sZero = oLang.sZeroRecords;
-			if ( oSettings.iDraw == 1 &&  _fnDataSource( oSettings ) == 'ajax' )
-			{
-				sZero = oLang.sLoadingRecords;
-			}
-			else if ( oLang.sEmptyTable && oSettings.fnRecordsTotal() === 0 )
-			{
-				sZero = oLang.sEmptyTable;
-			}
-	
-			anRows[ 0 ] = $( '<tr/>', { 'class': iStripes ? asStripeClasses[0] : '' } )
-				.append( $('<td />', {
-					'valign':  'top',
-					'colSpan': _fnVisbleColumns( oSettings ),
-					'class':   oSettings.oClasses.sRowEmpty
-				} ).html( sZero ) )[0];
-		}
-	
-		/* Header and footer callbacks */
-		_fnCallbackFire( oSettings, 'aoHeaderCallback', 'header', [ $(oSettings.nTHead).children('tr')[0],
-			_fnGetDataMaster( oSettings ), iDisplayStart, iDisplayEnd, aiDisplay ] );
-	
-		_fnCallbackFire( oSettings, 'aoFooterCallback', 'footer', [ $(oSettings.nTFoot).children('tr')[0],
-			_fnGetDataMaster( oSettings ), iDisplayStart, iDisplayEnd, aiDisplay ] );
-	
-		var body = $(oSettings.nTBody);
-	
-		body.children().detach();
-		body.append( $(anRows) );
-	
-		/* Call all required callback functions for the end of a draw */
-		_fnCallbackFire( oSettings, 'aoDrawCallback', 'draw', [oSettings] );
-	
-		/* Draw is complete, sorting and filtering must be as well */
-		oSettings.bSorted = false;
-		oSettings.bFiltered = false;
-		oSettings.bDrawing = false;
-	}
-	
-	
-	/**
-	 * Redraw the table - taking account of the various features which are enabled
-	 *  @param {object} oSettings dataTables settings object
-	 *  @param {boolean} [holdPosition] Keep the current paging position. By default
-	 *    the paging is reset to the first page
-	 *  @memberof DataTable#oApi
-	 */
-	function _fnReDraw( settings, holdPosition )
-	{
-		var
-			features = settings.oFeatures,
-			sort     = features.bSort,
-			filter   = features.bFilter;
-	
-		if ( sort ) {
-			_fnSort( settings );
-		}
-	
-		if ( filter ) {
-			_fnFilterComplete( settings, settings.oPreviousSearch );
-		}
-		else {
-			// No filtering, so we want to just use the display master
-			settings.aiDisplay = settings.aiDisplayMaster.slice();
-		}
-	
-		if ( holdPosition !== true ) {
-			settings._iDisplayStart = 0;
-		}
-	
-		// Let any modules know about the draw hold position state (used by
-		// scrolling internally)
-		settings._drawHold = holdPosition;
-	
-		_fnDraw( settings );
-	
-		settings._drawHold = false;
-	}
-	
-	
-	/**
-	 * Add the options to the page HTML for the table
-	 *  @param {object} oSettings dataTables settings object
-	 *  @memberof DataTable#oApi
-	 */
-	function _fnAddOptionsHtml ( oSettings )
-	{
-		var classes = oSettings.oClasses;
-		var table = $(oSettings.nTable);
-		var holding = $('<div/>').insertBefore( table ); // Holding element for speed
-		var features = oSettings.oFeatures;
-	
-		// All DataTables are wrapped in a div
-		var insert = $('<div/>', {
-			id:      oSettings.sTableId+'_wrapper',
-			'class': classes.sWrapper + (oSettings.nTFoot ? '' : ' '+classes.sNoFooter)
-		} );
-	
-		oSettings.nHolding = holding[0];
-		oSettings.nTableWrapper = insert[0];
-		oSettings.nTableReinsertBefore = oSettings.nTable.nextSibling;
-	
-		/* Loop over the user set positioning and place the elements as needed */
-		var aDom = oSettings.sDom.split('');
-		var featureNode, cOption, nNewNode, cNext, sAttr, j;
-		for ( var i=0 ; i<aDom.length ; i++ )
-		{
-			featureNode = null;
-			cOption = aDom[i];
-	
-			if ( cOption == '<' )
-			{
-				/* New container div */
-				nNewNode = $('<div/>')[0];
-	
-				/* Check to see if we should append an id and/or a class name to the container */
-				cNext = aDom[i+1];
-				if ( cNext == "'" || cNext == '"' )
-				{
-					sAttr = "";
-					j = 2;
-					while ( aDom[i+j] != cNext )
-					{
-						sAttr += aDom[i+j];
-						j++;
-					}
-	
-					/* Replace jQuery UI constants @todo depreciated */
-					if ( sAttr == "H" )
-					{
-						sAttr = classes.sJUIHeader;
-					}
-					else if ( sAttr == "F" )
-					{
-						sAttr = classes.sJUIFooter;
-					}
-	
-					/* The attribute can be in the format of "#id.class", "#id" or "class" This logic
-					 * breaks the string into parts and applies them as needed
-					 */
-					if ( sAttr.indexOf('.') != -1 )
-					{
-						var aSplit = sAttr.split('.');
-						nNewNode.id = aSplit[0].substr(1, aSplit[0].length-1);
-						nNewNode.className = aSplit[1];
-					}
-					else if ( sAttr.charAt(0) == "#" )
-					{
-						nNewNode.id = sAttr.substr(1, sAttr.length-1);
-					}
-					else
-					{
-						nNewNode.className = sAttr;
-					}
-	
-					i += j; /* Move along the position array */
-				}
-	
-				insert.append( nNewNode );
-				insert = $(nNewNode);
-			}
-			else if ( cOption == '>' )
-			{
-				/* End container div */
-				insert = insert.parent();
-			}
-			// @todo Move options into their own plugins?
-			else if ( cOption == 'l' && features.bPaginate && features.bLengthChange )
-			{
-				/* Length */
-				featureNode = _fnFeatureHtmlLength( oSettings );
-			}
-			else if ( cOption == 'f' && features.bFilter )
-			{
-				/* Filter */
-				featureNode = _fnFeatureHtmlFilter( oSettings );
-			}
-			else if ( cOption == 'r' && features.bProcessing )
-			{
-				/* pRocessing */
-				featureNode = _fnFeatureHtmlProcessing( oSettings );
-			}
-			else if ( cOption == 't' )
-			{
-				/* Table */
-				featureNode = _fnFeatureHtmlTable( oSettings );
-			}
-			else if ( cOption ==  'i' && features.bInfo )
-			{
-				/* Info */
-				featureNode = _fnFeatureHtmlInfo( oSettings );
-			}
-			else if ( cOption == 'p' && features.bPaginate )
-			{
-				/* Pagination */
-				featureNode = _fnFeatureHtmlPaginate( oSettings );
-			}
-			else if ( DataTable.ext.feature.length !== 0 )
-			{
-				/* Plug-in features */
-				var aoFeatures = DataTable.ext.feature;
-				for ( var k=0, kLen=aoFeatures.length ; k<kLen ; k++ )
-				{
-					if ( cOption == aoFeatures[k].cFeature )
-					{
-						featureNode = aoFeatures[k].fnInit( oSettings );
-						break;
-					}
-				}
-			}
-	
-			/* Add to the 2D features array */
-			if ( featureNode )
-			{
-				var aanFeatures = oSettings.aanFeatures;
-	
-				if ( ! aanFeatures[cOption] )
-				{
-					aanFeatures[cOption] = [];
-				}
-	
-				aanFeatures[cOption].push( featureNode );
-				insert.append( featureNode );
-			}
-		}
-	
-		/* Built our DOM structure - replace the holding div with what we want */
-		holding.replaceWith( insert );
-		oSettings.nHolding = null;
-	}
-	
-	
-	/**
-	 * Use the DOM source to create up an array of header cells. The idea here is to
-	 * create a layout grid (array) of rows x columns, which contains a reference
-	 * to the cell that that point in the grid (regardless of col/rowspan), such that
-	 * any column / row could be removed and the new grid constructed
-	 *  @param array {object} aLayout Array to store the calculated layout in
-	 *  @param {node} nThead The header/footer element for the table
-	 *  @memberof DataTable#oApi
-	 */
-	function _fnDetectHeader ( aLayout, nThead )
-	{
-		var nTrs = $(nThead).children('tr');
-		var nTr, nCell;
-		var i, k, l, iLen, jLen, iColShifted, iColumn, iColspan, iRowspan;
-		var bUnique;
-		var fnShiftCol = function ( a, i, j ) {
-			var k = a[i];
-	                while ( k[j] ) {
-				j++;
-			}
-			return j;
-		};
-	
-		aLayout.splice( 0, aLayout.length );
-	
-		/* We know how many rows there are in the layout - so prep it */
-		for ( i=0, iLen=nTrs.length ; i<iLen ; i++ )
-		{
-			aLayout.push( [] );
-		}
-	
-		/* Calculate a layout array */
-		for ( i=0, iLen=nTrs.length ; i<iLen ; i++ )
-		{
-			nTr = nTrs[i];
-			iColumn = 0;
-	
-			/* For every cell in the row... */
-			nCell = nTr.firstChild;
-			while ( nCell ) {
-				if ( nCell.nodeName.toUpperCase() == "TD" ||
-				     nCell.nodeName.toUpperCase() == "TH" )
-				{
-					/* Get the col and rowspan attributes from the DOM and sanitise them */
-					iColspan = nCell.getAttribute('colspan') * 1;
-					iRowspan = nCell.getAttribute('rowspan') * 1;
-					iColspan = (!iColspan || iColspan===0 || iColspan===1) ? 1 : iColspan;
-					iRowspan = (!iRowspan || iRowspan===0 || iRowspan===1) ? 1 : iRowspan;
-	
-					/* There might be colspan cells already in this row, so shift our target
-					 * accordingly
-					 */
-					iColShifted = fnShiftCol( aLayout, i, iColumn );
-	
-					/* Cache calculation for unique columns */
-					bUnique = iColspan === 1 ? true : false;
-	
-					/* If there is col / rowspan, copy the information into the layout grid */
-					for ( l=0 ; l<iColspan ; l++ )
-					{
-						for ( k=0 ; k<iRowspan ; k++ )
-						{
-							aLayout[i+k][iColShifted+l] = {
-								"cell": nCell,
-								"unique": bUnique
-							};
-							aLayout[i+k].nTr = nTr;
-						}
-					}
-				}
-				nCell = nCell.nextSibling;
-			}
-		}
-	}
-	
-	
-	/**
-	 * Get an array of unique th elements, one for each column
-	 *  @param {object} oSettings dataTables settings object
-	 *  @param {node} nHeader automatically detect the layout from this node - optional
-	 *  @param {array} aLayout thead/tfoot layout from _fnDetectHeader - optional
-	 *  @returns array {node} aReturn list of unique th's
-	 *  @memberof DataTable#oApi
-	 */
-	function _fnGetUniqueThs ( oSettings, nHeader, aLayout )
-	{
-		var aReturn = [];
-		if ( !aLayout )
-		{
-			aLayout = oSettings.aoHeader;
-			if ( nHeader )
-			{
-				aLayout = [];
-				_fnDetectHeader( aLayout, nHeader );
-			}
-		}
-	
-		for ( var i=0, iLen=aLayout.length ; i<iLen ; i++ )
-		{
-			for ( var j=0, jLen=aLayout[i].length ; j<jLen ; j++ )
-			{
-				if ( aLayout[i][j].unique &&
-					 (!aReturn[j] || !oSettings.bSortCellsTop) )
-				{
-					aReturn[j] = aLayout[i][j].cell;
-				}
-			}
-		}
-	
-		return aReturn;
-	}
-	
-	/**
-	 * Create an Ajax call based on the table's settings, taking into account that
-	 * parameters can have multiple forms, and backwards compatibility.
-	 *
-	 * @param {object} oSettings dataTables settings object
-	 * @param {array} data Data to send to the server, required by
-	 *     DataTables - may be augmented by developer callbacks
-	 * @param {function} fn Callback function to run when data is obtained
-	 */
-	function _fnBuildAjax( oSettings, data, fn )
-	{
-		// Compatibility with 1.9-, allow fnServerData and event to manipulate
-		_fnCallbackFire( oSettings, 'aoServerParams', 'serverParams', [data] );
-	
-		// Convert to object based for 1.10+ if using the old array scheme which can
-		// come from server-side processing or serverParams
-		if ( data && $.isArray(data) ) {
-			var tmp = {};
-			var rbracket = /(.*?)\[\]$/;
-	
-			$.each( data, function (key, val) {
-				var match = val.name.match(rbracket);
-	
-				if ( match ) {
-					// Support for arrays
-					var name = match[0];
-	
-					if ( ! tmp[ name ] ) {
-						tmp[ name ] = [];
-					}
-					tmp[ name ].push( val.value );
-				}
-				else {
-					tmp[val.name] = val.value;
-				}
-			} );
-			data = tmp;
-		}
-	
-		var ajaxData;
-		var ajax = oSettings.ajax;
-		var instance = oSettings.oInstance;
-		var callback = function ( json ) {
-			_fnCallbackFire( oSettings, null, 'xhr', [oSettings, json, oSettings.jqXHR] );
-			fn( json );
-		};
-	
-		if ( $.isPlainObject( ajax ) && ajax.data )
-		{
-			ajaxData = ajax.data;
-	
-			var newData = typeof ajaxData === 'function' ?
-				ajaxData( data, oSettings ) :  // fn can manipulate data or return
-				ajaxData;                      // an object object or array to merge
-	
-			// If the function returned something, use that alone
-			data = typeof ajaxData === 'function' && newData ?
-				newData :
-				$.extend( true, data, newData );
-	
-			// Remove the data property as we've resolved it already and don't want
-			// jQuery to do it again (it is restored at the end of the function)
-			delete ajax.data;
-		}
-	
-		var baseAjax = {
-			"data": data,
-			"success": function (json) {
-				var error = json.error || json.sError;
-				if ( error ) {
-					_fnLog( oSettings, 0, error );
-				}
-	
-				oSettings.json = json;
-				callback( json );
-			},
-			"dataType": "json",
-			"cache": false,
-			"type": oSettings.sServerMethod,
-			"error": function (xhr, error, thrown) {
-				var ret = _fnCallbackFire( oSettings, null, 'xhr', [oSettings, null, oSettings.jqXHR] );
-	
-				if ( $.inArray( true, ret ) === -1 ) {
-					if ( error == "parsererror" ) {
-						_fnLog( oSettings, 0, 'Invalid JSON response', 1 );
-					}
-					else if ( xhr.readyState === 4 ) {
-						_fnLog( oSettings, 0, 'Ajax error', 7 );
-					}
-				}
-	
-				_fnProcessingDisplay( oSettings, false );
-			}
-		};
-	
-		// Store the data submitted for the API
-		oSettings.oAjaxData = data;
-	
-		// Allow plug-ins and external processes to modify the data
-		_fnCallbackFire( oSettings, null, 'preXhr', [oSettings, data] );
-	
-		if ( oSettings.fnServerData )
-		{
-			// DataTables 1.9- compatibility
-			oSettings.fnServerData.call( instance,
-				oSettings.sAjaxSource,
-				$.map( data, function (val, key) { // Need to convert back to 1.9 trad format
-					return { name: key, value: val };
-				} ),
-				callback,
-				oSettings
-			);
-		}
-		else if ( oSettings.sAjaxSource || typeof ajax === 'string' )
-		{
-			// DataTables 1.9- compatibility
-			oSettings.jqXHR = $.ajax( $.extend( baseAjax, {
-				url: ajax || oSettings.sAjaxSource
-			} ) );
-		}
-		else if ( typeof ajax === 'function' )
-		{
-			// Is a function - let the caller define what needs to be done
-			oSettings.jqXHR = ajax.call( instance, data, callback, oSettings );
-		}
-		else
-		{
-			// Object to extend the base settings
-			oSettings.jqXHR = $.ajax( $.extend( baseAjax, ajax ) );
-	
-			// Restore for next time around
-			ajax.data = ajaxData;
-		}
-	}
-	
-	
-	/**
-	 * Update the table using an Ajax call
-	 *  @param {object} settings dataTables settings object
-	 *  @returns {boolean} Block the table drawing or not
-	 *  @memberof DataTable#oApi
-	 */
-	function _fnAjaxUpdate( settings )
-	{
-		if ( settings.bAjaxDataGet ) {
-			settings.iDraw++;
-			_fnProcessingDisplay( settings, true );
-	
-			_fnBuildAjax(
-				settings,
-				_fnAjaxParameters( settings ),
-				function(json) {
-					_fnAjaxUpdateDraw( settings, json );
-				}
-			);
-	
-			return false;
-		}
-		return true;
-	}
-	
-	
-	/**
-	 * Build up the parameters in an object needed for a server-side processing
-	 * request. Note that this is basically done twice, is different ways - a modern
-	 * method which is used by default in DataTables 1.10 which uses objects and
-	 * arrays, or the 1.9- method with is name / value pairs. 1.9 method is used if
-	 * the sAjaxSource option is used in the initialisation, or the legacyAjax
-	 * option is set.
-	 *  @param {object} oSettings dataTables settings object
-	 *  @returns {bool} block the table drawing or not
-	 *  @memberof DataTable#oApi
-	 */
-	function _fnAjaxParameters( settings )
-	{
-		var
-			columns = settings.aoColumns,
-			columnCount = columns.length,
-			features = settings.oFeatures,
-			preSearch = settings.oPreviousSearch,
-			preColSearch = settings.aoPreSearchCols,
-			i, data = [], dataProp, column, columnSearch,
-			sort = _fnSortFlatten( settings ),
-			displayStart = settings._iDisplayStart,
-			displayLength = features.bPaginate !== false ?
-				settings._iDisplayLength :
-				-1;
-	
-		var param = function ( name, value ) {
-			data.push( { 'name': name, 'value': value } );
-		};
-	
-		// DataTables 1.9- compatible method
-		param( 'sEcho',          settings.iDraw );
-		param( 'iColumns',       columnCount );
-		param( 'sColumns',       _pluck( columns, 'sName' ).join(',') );
-		param( 'iDisplayStart',  displayStart );
-		param( 'iDisplayLength', displayLength );
-	
-		// DataTables 1.10+ method
-		var d = {
-			draw:    settings.iDraw,
-			columns: [],
-			order:   [],
-			start:   displayStart,
-			length:  displayLength,
-			search:  {
-				value: preSearch.sSearch,
-				regex: preSearch.bRegex
-			}
-		};
-	
-		for ( i=0 ; i<columnCount ; i++ ) {
-			column = columns[i];
-			columnSearch = preColSearch[i];
-			dataProp = typeof column.mData=="function" ? 'function' : column.mData ;
-	
-			d.columns.push( {
-				data:       dataProp,
-				name:       column.sName,
-				searchable: column.bSearchable,
-				orderable:  column.bSortable,
-				search:     {
-					value: columnSearch.sSearch,
-					regex: columnSearch.bRegex
-				}
-			} );
-	
-			param( "mDataProp_"+i, dataProp );
-	
-			if ( features.bFilter ) {
-				param( 'sSearch_'+i,     columnSearch.sSearch );
-				param( 'bRegex_'+i,      columnSearch.bRegex );
-				param( 'bSearchable_'+i, column.bSearchable );
-			}
-	
-			if ( features.bSort ) {
-				param( 'bSortable_'+i, column.bSortable );
-			}
-		}
-	
-		if ( features.bFilter ) {
-			param( 'sSearch', preSearch.sSearch );
-			param( 'bRegex', preSearch.bRegex );
-		}
-	
-		if ( features.bSort ) {
-			$.each( sort, function ( i, val ) {
-				d.order.push( { column: val.col, dir: val.dir } );
-	
-				param( 'iSortCol_'+i, val.col );
-				param( 'sSortDir_'+i, val.dir );
-			} );
-	
-			param( 'iSortingCols', sort.length );
-		}
-	
-		// If the legacy.ajax parameter is null, then we automatically decide which
-		// form to use, based on sAjaxSource
-		var legacy = DataTable.ext.legacy.ajax;
-		if ( legacy === null ) {
-			return settings.sAjaxSource ? data : d;
-		}
-	
-		// Otherwise, if legacy has been specified then we use that to decide on the
-		// form
-		return legacy ? data : d;
-	}
-	
-	
-	/**
-	 * Data the data from the server (nuking the old) and redraw the table
-	 *  @param {object} oSettings dataTables settings object
-	 *  @param {object} json json data return from the server.
-	 *  @param {string} json.sEcho Tracking flag for DataTables to match requests
-	 *  @param {int} json.iTotalRecords Number of records in the data set, not accounting for filtering
-	 *  @param {int} json.iTotalDisplayRecords Number of records in the data set, accounting for filtering
-	 *  @param {array} json.aaData The data to display on this page
-	 *  @param {string} [json.sColumns] Column ordering (sName, comma separated)
-	 *  @memberof DataTable#oApi
-	 */
-	function _fnAjaxUpdateDraw ( settings, json )
-	{
-		// v1.10 uses camelCase variables, while 1.9 uses Hungarian notation.
-		// Support both
-		var compat = function ( old, modern ) {
-			return json[old] !== undefined ? json[old] : json[modern];
-		};
-	
-		var data = _fnAjaxDataSrc( settings, json );
-		var draw            = compat( 'sEcho',                'draw' );
-		var recordsTotal    = compat( 'iTotalRecords',        'recordsTotal' );
-		var recordsFiltered = compat( 'iTotalDisplayRecords', 'recordsFiltered' );
-	
-		if ( draw !== undefined ) {
-			// Protect against out of sequence returns
-			if ( draw*1 < settings.iDraw ) {
-				return;
-			}
-			settings.iDraw = draw * 1;
-		}
-	
-		_fnClearTable( settings );
-		settings._iRecordsTotal   = parseInt(recordsTotal, 10);
-		settings._iRecordsDisplay = parseInt(recordsFiltered, 10);
-	
-		for ( var i=0, ien=data.length ; i<ien ; i++ ) {
-			_fnAddData( settings, data[i] );
-		}
-		settings.aiDisplay = settings.aiDisplayMaster.slice();
-	
-		settings.bAjaxDataGet = false;
-		_fnDraw( settings );
-	
-		if ( ! settings._bInitComplete ) {
-			_fnInitComplete( settings, json );
-		}
-	
-		settings.bAjaxDataGet = true;
-		_fnProcessingDisplay( settings, false );
-	}
-	
-	
-	/**
-	 * Get the data from the JSON data source to use for drawing a table. Using
-	 * `_fnGetObjectDataFn` allows the data to be sourced from a property of the
-	 * source object, or from a processing function.
-	 *  @param {object} oSettings dataTables settings object
-	 *  @param  {object} json Data source object / array from the server
-	 *  @return {array} Array of data to use
-	 */
-	function _fnAjaxDataSrc ( oSettings, json )
-	{
-		var dataSrc = $.isPlainObject( oSettings.ajax ) && oSettings.ajax.dataSrc !== undefined ?
-			oSettings.ajax.dataSrc :
-			oSettings.sAjaxDataProp; // Compatibility with 1.9-.
-	
-		// Compatibility with 1.9-. In order to read from aaData, check if the
-		// default has been changed, if not, check for aaData
-		if ( dataSrc === 'data' ) {
-			return json.aaData || json[dataSrc];
-		}
-	
-		return dataSrc !== "" ?
-			_fnGetObjectDataFn( dataSrc )( json ) :
-			json;
-	}
-	
-	/**
-	 * Generate the node required for filtering text
-	 *  @returns {node} Filter control element
-	 *  @param {object} oSettings dataTables settings object
-	 *  @memberof DataTable#oApi
-	 */
-	function _fnFeatureHtmlFilter ( settings )
-	{
-		var classes = settings.oClasses;
-		var tableId = settings.sTableId;
-		var language = settings.oLanguage;
-		var previousSearch = settings.oPreviousSearch;
-		var features = settings.aanFeatures;
-		var input = '<input type="search" class="'+classes.sFilterInput+'"/>';
-	
-		var str = language.sSearch;
-		str = str.match(/_INPUT_/) ?
-			str.replace('_INPUT_', input) :
-			str+input;
-	
-		var filter = $('<div/>', {
-				'id': ! features.f ? tableId+'_filter' : null,
-				'class': classes.sFilter
-			} )
-			.append( $('<label/>' ).append( str ) );
-	
-		var searchFn = function() {
-			/* Update all other filter input elements for the new display */
-			var n = features.f;
-			var val = !this.value ? "" : this.value; // mental IE8 fix :-(
-	
-			/* Now do the filter */
-			if ( val != previousSearch.sSearch ) {
-				_fnFilterComplete( settings, {
-					"sSearch": val,
-					"bRegex": previousSearch.bRegex,
-					"bSmart": previousSearch.bSmart ,
-					"bCaseInsensitive": previousSearch.bCaseInsensitive
-				} );
-	
-				// Need to redraw, without resorting
-				settings._iDisplayStart = 0;
-				_fnDraw( settings );
-			}
-		};
-	
-		var searchDelay = settings.searchDelay !== null ?
-			settings.searchDelay :
-			_fnDataSource( settings ) === 'ssp' ?
-				400 :
-				0;
-	
-		var jqFilter = $('input', filter)
-			.val( previousSearch.sSearch )
-			.attr( 'placeholder', language.sSearchPlaceholder )
-			.on(
-				'keyup.DT search.DT input.DT paste.DT cut.DT',
-				searchDelay ?
-					_fnThrottle( searchFn, searchDelay ) :
-					searchFn
-			)
-			.on( 'mouseup', function(e) {
-				// Edge fix! Edge 17 does not trigger anything other than mouse events when clicking
-				// on the clear icon (Edge bug 17584515). This is safe in other browsers as `searchFn`
-				// checks the value to see if it has changed. In other browsers it won't have.
-				setTimeout( function () {
-					searchFn.call(jqFilter[0]);
-				}, 10);
-			} )
-			.on( 'keypress.DT', function(e) {
-				/* Prevent form submission */
-				if ( e.keyCode == 13 ) {
-					return false;
-				}
-			} )
-			.attr('aria-controls', tableId);
-	
-		// Update the input elements whenever the table is filtered
-		$(settings.nTable).on( 'search.dt.DT', function ( ev, s ) {
-			if ( settings === s ) {
-				// IE9 throws an 'unknown error' if document.activeElement is used
-				// inside an iframe or frame...
-				try {
-					if ( jqFilter[0] !== document.activeElement ) {
-						jqFilter.val( previousSearch.sSearch );
-					}
-				}
-				catch ( e ) {}
-			}
-		} );
-	
-		return filter[0];
-	}
-	
-	
-	/**
-	 * Filter the table using both the global filter and column based filtering
-	 *  @param {object} oSettings dataTables settings object
-	 *  @param {object} oSearch search information
-	 *  @param {int} [iForce] force a research of the master array (1) or not (undefined or 0)
-	 *  @memberof DataTable#oApi
-	 */
-	function _fnFilterComplete ( oSettings, oInput, iForce )
-	{
-		var oPrevSearch = oSettings.oPreviousSearch;
-		var aoPrevSearch = oSettings.aoPreSearchCols;
-		var fnSaveFilter = function ( oFilter ) {
-			/* Save the filtering values */
-			oPrevSearch.sSearch = oFilter.sSearch;
-			oPrevSearch.bRegex = oFilter.bRegex;
-			oPrevSearch.bSmart = oFilter.bSmart;
-			oPrevSearch.bCaseInsensitive = oFilter.bCaseInsensitive;
-		};
-		var fnRegex = function ( o ) {
-			// Backwards compatibility with the bEscapeRegex option
-			return o.bEscapeRegex !== undefined ? !o.bEscapeRegex : o.bRegex;
-		};
-	
-		// Resolve any column types that are unknown due to addition or invalidation
-		// @todo As per sort - can this be moved into an event handler?
-		_fnColumnTypes( oSettings );
-	
-		/* In server-side processing all filtering is done by the server, so no point hanging around here */
-		if ( _fnDataSource( oSettings ) != 'ssp' )
-		{
-			/* Global filter */
-			_fnFilter( oSettings, oInput.sSearch, iForce, fnRegex(oInput), oInput.bSmart, oInput.bCaseInsensitive );
-			fnSaveFilter( oInput );
-	
-			/* Now do the individual column filter */
-			for ( var i=0 ; i<aoPrevSearch.length ; i++ )
-			{
-				_fnFilterColumn( oSettings, aoPrevSearch[i].sSearch, i, fnRegex(aoPrevSearch[i]),
-					aoPrevSearch[i].bSmart, aoPrevSearch[i].bCaseInsensitive );
-			}
-	
-			/* Custom filtering */
-			_fnFilterCustom( oSettings );
-		}
-		else
-		{
-			fnSaveFilter( oInput );
-		}
-	
-		/* Tell the draw function we have been filtering */
-		oSettings.bFiltered = true;
-		_fnCallbackFire( oSettings, null, 'search', [oSettings] );
-	}
-	
-	
-	/**
-	 * Apply custom filtering functions
-	 *  @param {object} oSettings dataTables settings object
-	 *  @memberof DataTable#oApi
-	 */
-	function _fnFilterCustom( settings )
-	{
-		var filters = DataTable.ext.search;
-		var displayRows = settings.aiDisplay;
-		var row, rowIdx;
-	
-		for ( var i=0, ien=filters.length ; i<ien ; i++ ) {
-			var rows = [];
-	
-			// Loop over each row and see if it should be included
-			for ( var j=0, jen=displayRows.length ; j<jen ; j++ ) {
-				rowIdx = displayRows[ j ];
-				row = settings.aoData[ rowIdx ];
-	
-				if ( filters[i]( settings, row._aFilterData, rowIdx, row._aData, j ) ) {
-					rows.push( rowIdx );
-				}
-			}
-	
-			// So the array reference doesn't break set the results into the
-			// existing array
-			displayRows.length = 0;
-			$.merge( displayRows, rows );
-		}
-	}
-	
-	
-	/**
-	 * Filter the table on a per-column basis
-	 *  @param {object} oSettings dataTables settings object
-	 *  @param {string} sInput string to filter on
-	 *  @param {int} iColumn column to filter
-	 *  @param {bool} bRegex treat search string as a regular expression or not
-	 *  @param {bool} bSmart use smart filtering or not
-	 *  @param {bool} bCaseInsensitive Do case insenstive matching or not
-	 *  @memberof DataTable#oApi
-	 */
-	function _fnFilterColumn ( settings, searchStr, colIdx, regex, smart, caseInsensitive )
-	{
-		if ( searchStr === '' ) {
-			return;
-		}
-	
-		var data;
-		var out = [];
-		var display = settings.aiDisplay;
-		var rpSearch = _fnFilterCreateSearch( searchStr, regex, smart, caseInsensitive );
-	
-		for ( var i=0 ; i<display.length ; i++ ) {
-			data = settings.aoData[ display[i] ]._aFilterData[ colIdx ];
-	
-			if ( rpSearch.test( data ) ) {
-				out.push( display[i] );
-			}
-		}
-	
-		settings.aiDisplay = out;
-	}
-	
-	
-	/**
-	 * Filter the data table based on user input and draw the table
-	 *  @param {object} settings dataTables settings object
-	 *  @param {string} input string to filter on
-	 *  @param {int} force optional - force a research of the master array (1) or not (undefined or 0)
-	 *  @param {bool} regex treat as a regular expression or not
-	 *  @param {bool} smart perform smart filtering or not
-	 *  @param {bool} caseInsensitive Do case insenstive matching or not
-	 *  @memberof DataTable#oApi
-	 */
-	function _fnFilter( settings, input, force, regex, smart, caseInsensitive )
-	{
-		var rpSearch = _fnFilterCreateSearch( input, regex, smart, caseInsensitive );
-		var prevSearch = settings.oPreviousSearch.sSearch;
-		var displayMaster = settings.aiDisplayMaster;
-		var display, invalidated, i;
-		var filtered = [];
-	
-		// Need to take account of custom filtering functions - always filter
-		if ( DataTable.ext.search.length !== 0 ) {
-			force = true;
-		}
-	
-		// Check if any of the rows were invalidated
-		invalidated = _fnFilterData( settings );
-	
-		// If the input is blank - we just want the full data set
-		if ( input.length <= 0 ) {
-			settings.aiDisplay = displayMaster.slice();
-		}
-		else {
-			// New search - start from the master array
-			if ( invalidated ||
-				 force ||
-				 regex ||
-				 prevSearch.length > input.length ||
-				 input.indexOf(prevSearch) !== 0 ||
-				 settings.bSorted // On resort, the display master needs to be
-				                  // re-filtered since indexes will have changed
-			) {
-				settings.aiDisplay = displayMaster.slice();
-			}
-	
-			// Search the display array
-			display = settings.aiDisplay;
-	
-			for ( i=0 ; i<display.length ; i++ ) {
-				if ( rpSearch.test( settings.aoData[ display[i] ]._sFilterRow ) ) {
-					filtered.push( display[i] );
-				}
-			}
-	
-			settings.aiDisplay = filtered;
-		}
-	}
-	
-	
-	/**
-	 * Build a regular expression object suitable for searching a table
-	 *  @param {string} sSearch string to search for
-	 *  @param {bool} bRegex treat as a regular expression or not
-	 *  @param {bool} bSmart perform smart filtering or not
-	 *  @param {bool} bCaseInsensitive Do case insensitive matching or not
-	 *  @returns {RegExp} constructed object
-	 *  @memberof DataTable#oApi
-	 */
-	function _fnFilterCreateSearch( search, regex, smart, caseInsensitive )
-	{
-		search = regex ?
-			search :
-			_fnEscapeRegex( search );
-		
-		if ( smart ) {
-			/* For smart filtering we want to allow the search to work regardless of
-			 * word order. We also want double quoted text to be preserved, so word
-			 * order is important - a la google. So this is what we want to
-			 * generate:
-			 * 
-			 * ^(?=.*?\bone\b)(?=.*?\btwo three\b)(?=.*?\bfour\b).*$
-			 */
-			var a = $.map( search.match( /"[^"]+"|[^ ]+/g ) || [''], function ( word ) {
-				if ( word.charAt(0) === '"' ) {
-					var m = word.match( /^"(.*)"$/ );
-					word = m ? m[1] : word;
-				}
-	
-				return word.replace('"', '');
-			} );
-	
-			search = '^(?=.*?'+a.join( ')(?=.*?' )+').*$';
-		}
-	
-		return new RegExp( search, caseInsensitive ? 'i' : '' );
-	}
-	
-	
-	/**
-	 * Escape a string such that it can be used in a regular expression
-	 *  @param {string} sVal string to escape
-	 *  @returns {string} escaped string
-	 *  @memberof DataTable#oApi
-	 */
-	var _fnEscapeRegex = DataTable.util.escapeRegex;
-	
-	var __filter_div = $('<div>')[0];
-	var __filter_div_textContent = __filter_div.textContent !== undefined;
-	
-	// Update the filtering data for each row if needed (by invalidation or first run)
-	function _fnFilterData ( settings )
-	{
-		var columns = settings.aoColumns;
-		var column;
-		var i, j, ien, jen, filterData, cellData, row;
-		var fomatters = DataTable.ext.type.search;
-		var wasInvalidated = false;
-	
-		for ( i=0, ien=settings.aoData.length ; i<ien ; i++ ) {
-			row = settings.aoData[i];
-	
-			if ( ! row._aFilterData ) {
-				filterData = [];
-	
-				for ( j=0, jen=columns.length ; j<jen ; j++ ) {
-					column = columns[j];
-	
-					if ( column.bSearchable ) {
-						cellData = _fnGetCellData( settings, i, j, 'filter' );
-	
-						if ( fomatters[ column.sType ] ) {
-							cellData = fomatters[ column.sType ]( cellData );
-						}
-	
-						// Search in DataTables 1.10 is string based. In 1.11 this
-						// should be altered to also allow strict type checking.
-						if ( cellData === null ) {
-							cellData = '';
-						}
-	
-						if ( typeof cellData !== 'string' && cellData.toString ) {
-							cellData = cellData.toString();
-						}
-					}
-					else {
-						cellData = '';
-					}
-	
-					// If it looks like there is an HTML entity in the string,
-					// attempt to decode it so sorting works as expected. Note that
-					// we could use a single line of jQuery to do this, but the DOM
-					// method used here is much faster http://jsperf.com/html-decode
-					if ( cellData.indexOf && cellData.indexOf('&') !== -1 ) {
-						__filter_div.innerHTML = cellData;
-						cellData = __filter_div_textContent ?
-							__filter_div.textContent :
-							__filter_div.innerText;
-					}
-	
-					if ( cellData.replace ) {
-						cellData = cellData.replace(/[\r\n\u2028]/g, '');
-					}
-	
-					filterData.push( cellData );
-				}
-	
-				row._aFilterData = filterData;
-				row._sFilterRow = filterData.join('  ');
-				wasInvalidated = true;
-			}
-		}
-	
-		return wasInvalidated;
-	}
-	
-	
-	/**
-	 * Convert from the internal Hungarian notation to camelCase for external
-	 * interaction
-	 *  @param {object} obj Object to convert
-	 *  @returns {object} Inverted object
-	 *  @memberof DataTable#oApi
-	 */
-	function _fnSearchToCamel ( obj )
-	{
-		return {
-			search:          obj.sSearch,
-			smart:           obj.bSmart,
-			regex:           obj.bRegex,
-			caseInsensitive: obj.bCaseInsensitive
-		};
-	}
-	
-	
-	
-	/**
-	 * Convert from camelCase notation to the internal Hungarian. We could use the
-	 * Hungarian convert function here, but this is cleaner
-	 *  @param {object} obj Object to convert
-	 *  @returns {object} Inverted object
-	 *  @memberof DataTable#oApi
-	 */
-	function _fnSearchToHung ( obj )
-	{
-		return {
-			sSearch:          obj.search,
-			bSmart:           obj.smart,
-			bRegex:           obj.regex,
-			bCaseInsensitive: obj.caseInsensitive
-		};
-	}
-	
-	/**
-	 * Generate the node required for the info display
-	 *  @param {object} oSettings dataTables settings object
-	 *  @returns {node} Information element
-	 *  @memberof DataTable#oApi
-	 */
-	function _fnFeatureHtmlInfo ( settings )
-	{
-		var
-			tid = settings.sTableId,
-			nodes = settings.aanFeatures.i,
-			n = $('<div/>', {
-				'class': settings.oClasses.sInfo,
-				'id': ! nodes ? tid+'_info' : null
-			} );
-	
-		if ( ! nodes ) {
-			// Update display on each draw
-			settings.aoDrawCallback.push( {
-				"fn": _fnUpdateInfo,
-				"sName": "information"
-			} );
-	
-			n
-				.attr( 'role', 'status' )
-				.attr( 'aria-live', 'polite' );
-	
-			// Table is described by our info div
-			$(settings.nTable).attr( 'aria-describedby', tid+'_info' );
-		}
-	
-		return n[0];
-	}
-	
-	
-	/**
-	 * Update the information elements in the display
-	 *  @param {object} settings dataTables settings object
-	 *  @memberof DataTable#oApi
-	 */
-	function _fnUpdateInfo ( settings )
-	{
-		/* Show information about the table */
-		var nodes = settings.aanFeatures.i;
-		if ( nodes.length === 0 ) {
-			return;
-		}
-	
-		var
-			lang  = settings.oLanguage,
-			start = settings._iDisplayStart+1,
-			end   = settings.fnDisplayEnd(),
-			max   = settings.fnRecordsTotal(),
-			total = settings.fnRecordsDisplay(),
-			out   = total ?
-				lang.sInfo :
-				lang.sInfoEmpty;
-	
-		if ( total !== max ) {
-			/* Record set after filtering */
-			out += ' ' + lang.sInfoFiltered;
-		}
-	
-		// Convert the macros
-		out += lang.sInfoPostFix;
-		out = _fnInfoMacros( settings, out );
-	
-		var callback = lang.fnInfoCallback;
-		if ( callback !== null ) {
-			out = callback.call( settings.oInstance,
-				settings, start, end, max, total, out
-			);
-		}
-	
-		$(nodes).html( out );
-	}
-	
-	
-	function _fnInfoMacros ( settings, str )
-	{
-		// When infinite scrolling, we are always starting at 1. _iDisplayStart is used only
-		// internally
-		var
-			formatter  = settings.fnFormatNumber,
-			start      = settings._iDisplayStart+1,
-			len        = settings._iDisplayLength,
-			vis        = settings.fnRecordsDisplay(),
-			all        = len === -1;
-	
-		return str.
-			replace(/_START_/g, formatter.call( settings, start ) ).
-			replace(/_END_/g,   formatter.call( settings, settings.fnDisplayEnd() ) ).
-			replace(/_MAX_/g,   formatter.call( settings, settings.fnRecordsTotal() ) ).
-			replace(/_TOTAL_/g, formatter.call( settings, vis ) ).
-			replace(/_PAGE_/g,  formatter.call( settings, all ? 1 : Math.ceil( start / len ) ) ).
-			replace(/_PAGES_/g, formatter.call( settings, all ? 1 : Math.ceil( vis / len ) ) );
-	}
-	
-	
-	
-	/**
-	 * Draw the table for the first time, adding all required features
-	 *  @param {object} settings dataTables settings object
-	 *  @memberof DataTable#oApi
-	 */
-	function _fnInitialise ( settings )
-	{
-		var i, iLen, iAjaxStart=settings.iInitDisplayStart;
-		var columns = settings.aoColumns, column;
-		var features = settings.oFeatures;
-		var deferLoading = settings.bDeferLoading; // value modified by the draw
-	
-		/* Ensure that the table data is fully initialised */
-		if ( ! settings.bInitialised ) {
-			setTimeout( function(){ _fnInitialise( settings ); }, 200 );
-			return;
-		}
-	
-		/* Show the display HTML options */
-		_fnAddOptionsHtml( settings );
-	
-		/* Build and draw the header / footer for the table */
-		_fnBuildHead( settings );
-		_fnDrawHead( settings, settings.aoHeader );
-		_fnDrawHead( settings, settings.aoFooter );
-	
-		/* Okay to show that something is going on now */
-		_fnProcessingDisplay( settings, true );
-	
-		/* Calculate sizes for columns */
-		if ( features.bAutoWidth ) {
-			_fnCalculateColumnWidths( settings );
-		}
-	
-		for ( i=0, iLen=columns.length ; i<iLen ; i++ ) {
-			column = columns[i];
-	
-			if ( column.sWidth ) {
-				column.nTh.style.width = _fnStringToCss( column.sWidth );
-			}
-		}
-	
-		_fnCallbackFire( settings, null, 'preInit', [settings] );
-	
-		// If there is default sorting required - let's do it. The sort function
-		// will do the drawing for us. Otherwise we draw the table regardless of the
-		// Ajax source - this allows the table to look initialised for Ajax sourcing
-		// data (show 'loading' message possibly)
-		_fnReDraw( settings );
-	
-		// Server-side processing init complete is done by _fnAjaxUpdateDraw
-		var dataSrc = _fnDataSource( settings );
-		if ( dataSrc != 'ssp' || deferLoading ) {
-			// if there is an ajax source load the data
-			if ( dataSrc == 'ajax' ) {
-				_fnBuildAjax( settings, [], function(json) {
-					var aData = _fnAjaxDataSrc( settings, json );
-	
-					// Got the data - add it to the table
-					for ( i=0 ; i<aData.length ; i++ ) {
-						_fnAddData( settings, aData[i] );
-					}
-	
-					// Reset the init display for cookie saving. We've already done
-					// a filter, and therefore cleared it before. So we need to make
-					// it appear 'fresh'
-					settings.iInitDisplayStart = iAjaxStart;
-	
-					_fnReDraw( settings );
-	
-					_fnProcessingDisplay( settings, false );
-					_fnInitComplete( settings, json );
-				}, settings );
-			}
-			else {
-				_fnProcessingDisplay( settings, false );
-				_fnInitComplete( settings );
-			}
-		}
-	}
-	
-	
-	/**
-	 * Draw the table for the first time, adding all required features
-	 *  @param {object} oSettings dataTables settings object
-	 *  @param {object} [json] JSON from the server that completed the table, if using Ajax source
-	 *    with client-side processing (optional)
-	 *  @memberof DataTable#oApi
-	 */
-	function _fnInitComplete ( settings, json )
-	{
-		settings._bInitComplete = true;
-	
-		// When data was added after the initialisation (data or Ajax) we need to
-		// calculate the column sizing
-		if ( json || settings.oInit.aaData ) {
-			_fnAdjustColumnSizing( settings );
-		}
-	
-		_fnCallbackFire( settings, null, 'plugin-init', [settings, json] );
-		_fnCallbackFire( settings, 'aoInitComplete', 'init', [settings, json] );
-	}
-	
-	
-	function _fnLengthChange ( settings, val )
-	{
-		var len = parseInt( val, 10 );
-		settings._iDisplayLength = len;
-	
-		_fnLengthOverflow( settings );
-	
-		// Fire length change event
-		_fnCallbackFire( settings, null, 'length', [settings, len] );
-	}
-	
-	
-	/**
-	 * Generate the node required for user display length changing
-	 *  @param {object} settings dataTables settings object
-	 *  @returns {node} Display length feature node
-	 *  @memberof DataTable#oApi
-	 */
-	function _fnFeatureHtmlLength ( settings )
-	{
-		var
-			classes  = settings.oClasses,
-			tableId  = settings.sTableId,
-			menu     = settings.aLengthMenu,
-			d2       = $.isArray( menu[0] ),
-			lengths  = d2 ? menu[0] : menu,
-			language = d2 ? menu[1] : menu;
-	
-		var select = $('<select/>', {
-			'name':          tableId+'_length',
-			'aria-controls': tableId,
-			'class':         classes.sLengthSelect
-		} );
-	
-		for ( var i=0, ien=lengths.length ; i<ien ; i++ ) {
-			select[0][ i ] = new Option(
-				typeof language[i] === 'number' ?
-					settings.fnFormatNumber( language[i] ) :
-					language[i],
-				lengths[i]
-			);
-		}
-	
-		var div = $('<div><label/></div>').addClass( classes.sLength );
-		if ( ! settings.aanFeatures.l ) {
-			div[0].id = tableId+'_length';
-		}
-	
-		div.children().append(
-			settings.oLanguage.sLengthMenu.replace( '_MENU_', select[0].outerHTML )
-		);
-	
-		// Can't use `select` variable as user might provide their own and the
-		// reference is broken by the use of outerHTML
-		$('select', div)
-			.val( settings._iDisplayLength )
-			.on( 'change.DT', function(e) {
-				_fnLengthChange( settings, $(this).val() );
-				_fnDraw( settings );
-			} );
-	
-		// Update node value whenever anything changes the table's length
-		$(settings.nTable).on( 'length.dt.DT', function (e, s, len) {
-			if ( settings === s ) {
-				$('select', div).val( len );
-			}
-		} );
-	
-		return div[0];
-	}
-	
-	
-	
-	/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
-	 * Note that most of the paging logic is done in
-	 * DataTable.ext.pager
-	 */
-	
-	/**
-	 * Generate the node required for default pagination
-	 *  @param {object} oSettings dataTables settings object
-	 *  @returns {node} Pagination feature node
-	 *  @memberof DataTable#oApi
-	 */
-	function _fnFeatureHtmlPaginate ( settings )
-	{
-		var
-			type   = settings.sPaginationType,
-			plugin = DataTable.ext.pager[ type ],
-			modern = typeof plugin === 'function',
-			redraw = function( settings ) {
-				_fnDraw( settings );
-			},
-			node = $('<div/>').addClass( settings.oClasses.sPaging + type )[0],
-			features = settings.aanFeatures;
-	
-		if ( ! modern ) {
-			plugin.fnInit( settings, node, redraw );
-		}
-	
-		/* Add a draw callback for the pagination on first instance, to update the paging display */
-		if ( ! features.p )
-		{
-			node.id = settings.sTableId+'_paginate';
-	
-			settings.aoDrawCallback.push( {
-				"fn": function( settings ) {
-					if ( modern ) {
-						var
-							start      = settings._iDisplayStart,
-							len        = settings._iDisplayLength,
-							visRecords = settings.fnRecordsDisplay(),
-							all        = len === -1,
-							page = all ? 0 : Math.ceil( start / len ),
-							pages = all ? 1 : Math.ceil( visRecords / len ),
-							buttons = plugin(page, pages),
-							i, ien;
-	
-						for ( i=0, ien=features.p.length ; i<ien ; i++ ) {
-							_fnRenderer( settings, 'pageButton' )(
-								settings, features.p[i], i, buttons, page, pages
-							);
-						}
-					}
-					else {
-						plugin.fnUpdate( settings, redraw );
-					}
-				},
-				"sName": "pagination"
-			} );
-		}
-	
-		return node;
-	}
-	
-	
-	/**
-	 * Alter the display settings to change the page
-	 *  @param {object} settings DataTables settings object
-	 *  @param {string|int} action Paging action to take: "first", "previous",
-	 *    "next" or "last" or page number to jump to (integer)
-	 *  @param [bool] redraw Automatically draw the update or not
-	 *  @returns {bool} true page has changed, false - no change
-	 *  @memberof DataTable#oApi
-	 */
-	function _fnPageChange ( settings, action, redraw )
-	{
-		var
-			start     = settings._iDisplayStart,
-			len       = settings._iDisplayLength,
-			records   = settings.fnRecordsDisplay();
-	
-		if ( records === 0 || len === -1 )
-		{
-			start = 0;
-		}
-		else if ( typeof action === "number" )
-		{
-			start = action * len;
-	
-			if ( start > records )
-			{
-				start = 0;
-			}
-		}
-		else if ( action == "first" )
-		{
-			start = 0;
-		}
-		else if ( action == "previous" )
-		{
-			start = len >= 0 ?
-				start - len :
-				0;
-	
-			if ( start < 0 )
-			{
-			  start = 0;
-			}
-		}
-		else if ( action == "next" )
-		{
-			if ( start + len < records )
-			{
-				start += len;
-			}
-		}
-		else if ( action == "last" )
-		{
-			start = Math.floor( (records-1) / len) * len;
-		}
-		else
-		{
-			_fnLog( settings, 0, "Unknown paging action: "+action, 5 );
-		}
-	
-		var changed = settings._iDisplayStart !== start;
-		settings._iDisplayStart = start;
-	
-		if ( changed ) {
-			_fnCallbackFire( settings, null, 'page', [settings] );
-	
-			if ( redraw ) {
-				_fnDraw( settings );
-			}
-		}
-	
-		return changed;
-	}
-	
-	
-	
-	/**
-	 * Generate the node required for the processing node
-	 *  @param {object} settings dataTables settings object
-	 *  @returns {node} Processing element
-	 *  @memberof DataTable#oApi
-	 */
-	function _fnFeatureHtmlProcessing ( settings )
-	{
-		return $('<div/>', {
-				'id': ! settings.aanFeatures.r ? settings.sTableId+'_processing' : null,
-				'class': settings.oClasses.sProcessing
-			} )
-			.html( settings.oLanguage.sProcessing )
-			.insertBefore( settings.nTable )[0];
-	}
-	
-	
-	/**
-	 * Display or hide the processing indicator
-	 *  @param {object} settings dataTables settings object
-	 *  @param {bool} show Show the processing indicator (true) or not (false)
-	 *  @memberof DataTable#oApi
-	 */
-	function _fnProcessingDisplay ( settings, show )
-	{
-		if ( settings.oFeatures.bProcessing ) {
-			$(settings.aanFeatures.r).css( 'display', show ? 'block' : 'none' );
-		}
-	
-		_fnCallbackFire( settings, null, 'processing', [settings, show] );
-	}
-	
-	/**
-	 * Add any control elements for the table - specifically scrolling
-	 *  @param {object} settings dataTables settings object
-	 *  @returns {node} Node to add to the DOM
-	 *  @memberof DataTable#oApi
-	 */
-	function _fnFeatureHtmlTable ( settings )
-	{
-		var table = $(settings.nTable);
-	
-		// Add the ARIA grid role to the table
-		table.attr( 'role', 'grid' );
-	
-		// Scrolling from here on in
-		var scroll = settings.oScroll;
-	
-		if ( scroll.sX === '' && scroll.sY === '' ) {
-			return settings.nTable;
-		}
-	
-		var scrollX = scroll.sX;
-		var scrollY = scroll.sY;
-		var classes = settings.oClasses;
-		var caption = table.children('caption');
-		var captionSide = caption.length ? caption[0]._captionSide : null;
-		var headerClone = $( table[0].cloneNode(false) );
-		var footerClone = $( table[0].cloneNode(false) );
-		var footer = table.children('tfoot');
-		var _div = '<div/>';
-		var size = function ( s ) {
-			return !s ? null : _fnStringToCss( s );
-		};
-	
-		if ( ! footer.length ) {
-			footer = null;
-		}
-	
-		/*
-		 * The HTML structure that we want to generate in this function is:
-		 *  div - scroller
-		 *    div - scroll head
-		 *      div - scroll head inner
-		 *        table - scroll head table
-		 *          thead - thead
-		 *    div - scroll body
-		 *      table - table (master table)
-		 *        thead - thead clone for sizing
-		 *        tbody - tbody
-		 *    div - scroll foot
-		 *      div - scroll foot inner
-		 *        table - scroll foot table
-		 *          tfoot - tfoot
-		 */
-		var scroller = $( _div, { 'class': classes.sScrollWrapper } )
-			.append(
-				$(_div, { 'class': classes.sScrollHead } )
-					.css( {
-						overflow: 'hidden',
-						position: 'relative',
-						border: 0,
-						width: scrollX ? size(scrollX) : '100%'
-					} )
-					.append(
-						$(_div, { 'class': classes.sScrollHeadInner } )
-							.css( {
-								'box-sizing': 'content-box',
-								width: scroll.sXInner || '100%'
-							} )
-							.append(
-								headerClone
-									.removeAttr('id')
-									.css( 'margin-left', 0 )
-									.append( captionSide === 'top' ? caption : null )
-									.append(
-										table.children('thead')
-									)
-							)
-					)
-			)
-			.append(
-				$(_div, { 'class': classes.sScrollBody } )
-					.css( {
-						position: 'relative',
-						overflow: 'auto',
-						width: size( scrollX )
-					} )
-					.append( table )
-			);
-	
-		if ( footer ) {
-			scroller.append(
-				$(_div, { 'class': classes.sScrollFoot } )
-					.css( {
-						overflow: 'hidden',
-						border: 0,
-						width: scrollX ? size(scrollX) : '100%'
-					} )
-					.append(
-						$(_div, { 'class': classes.sScrollFootInner } )
-							.append(
-								footerClone
-									.removeAttr('id')
-									.css( 'margin-left', 0 )
-									.append( captionSide === 'bottom' ? caption : null )
-									.append(
-										table.children('tfoot')
-									)
-							)
-					)
-			);
-		}
-	
-		var children = scroller.children();
-		var scrollHead = children[0];
-		var scrollBody = children[1];
-		var scrollFoot = footer ? children[2] : null;
-	
-		// When the body is scrolled, then we also want to scroll the headers
-		if ( scrollX ) {
-			$(scrollBody).on( 'scroll.DT', function (e) {
-				var scrollLeft = this.scrollLeft;
-	
-				scrollHead.scrollLeft = scrollLeft;
-	
-				if ( footer ) {
-					scrollFoot.scrollLeft = scrollLeft;
-				}
-			} );
-		}
-	
-		$(scrollBody).css('max-height', scrollY);
-		if (! scroll.bCollapse) {
-			$(scrollBody).css('height', scrollY);
-		}
-	
-		settings.nScrollHead = scrollHead;
-		settings.nScrollBody = scrollBody;
-		settings.nScrollFoot = scrollFoot;
-	
-		// On redraw - align columns
-		settings.aoDrawCallback.push( {
-			"fn": _fnScrollDraw,
-			"sName": "scrolling"
-		} );
-	
-		return scroller[0];
-	}
-	
-	
-	
-	/**
-	 * Update the header, footer and body tables for resizing - i.e. column
-	 * alignment.
-	 *
-	 * Welcome to the most horrible function DataTables. The process that this
-	 * function follows is basically:
-	 *   1. Re-create the table inside the scrolling div
-	 *   2. Take live measurements from the DOM
-	 *   3. Apply the measurements to align the columns
-	 *   4. Clean up
-	 *
-	 *  @param {object} settings dataTables settings object
-	 *  @memberof DataTable#oApi
-	 */
-	function _fnScrollDraw ( settings )
-	{
-		// Given that this is such a monster function, a lot of variables are use
-		// to try and keep the minimised size as small as possible
-		var
-			scroll         = settings.oScroll,
-			scrollX        = scroll.sX,
-			scrollXInner   = scroll.sXInner,
-			scrollY        = scroll.sY,
-			barWidth       = scroll.iBarWidth,
-			divHeader      = $(settings.nScrollHead),
-			divHeaderStyle = divHeader[0].style,
-			divHeaderInner = divHeader.children('div'),
-			divHeaderInnerStyle = divHeaderInner[0].style,
-			divHeaderTable = divHeaderInner.children('table'),
-			divBodyEl      = settings.nScrollBody,
-			divBody        = $(divBodyEl),
-			divBodyStyle   = divBodyEl.style,
-			divFooter      = $(settings.nScrollFoot),
-			divFooterInner = divFooter.children('div'),
-			divFooterTable = divFooterInner.children('table'),
-			header         = $(settings.nTHead),
-			table          = $(settings.nTable),
-			tableEl        = table[0],
-			tableStyle     = tableEl.style,
-			footer         = settings.nTFoot ? $(settings.nTFoot) : null,
-			browser        = settings.oBrowser,
-			ie67           = browser.bScrollOversize,
-			dtHeaderCells  = _pluck( settings.aoColumns, 'nTh' ),
-			headerTrgEls, footerTrgEls,
-			headerSrcEls, footerSrcEls,
-			headerCopy, footerCopy,
-			headerWidths=[], footerWidths=[],
-			headerContent=[], footerContent=[],
-			idx, correction, sanityWidth,
-			zeroOut = function(nSizer) {
-				var style = nSizer.style;
-				style.paddingTop = "0";
-				style.paddingBottom = "0";
-				style.borderTopWidth = "0";
-				style.borderBottomWidth = "0";
-				style.height = 0;
-			};
-	
-		// If the scrollbar visibility has changed from the last draw, we need to
-		// adjust the column sizes as the table width will have changed to account
-		// for the scrollbar
-		var scrollBarVis = divBodyEl.scrollHeight > divBodyEl.clientHeight;
-		
-		if ( settings.scrollBarVis !== scrollBarVis && settings.scrollBarVis !== undefined ) {
-			settings.scrollBarVis = scrollBarVis;
-			_fnAdjustColumnSizing( settings );
-			return; // adjust column sizing will call this function again
-		}
-		else {
-			settings.scrollBarVis = scrollBarVis;
-		}
-	
-		/*
-		 * 1. Re-create the table inside the scrolling div
-		 */
-	
-		// Remove the old minimised thead and tfoot elements in the inner table
-		table.children('thead, tfoot').remove();
-	
-		if ( footer ) {
-			footerCopy = footer.clone().prependTo( table );
-			footerTrgEls = footer.find('tr'); // the original tfoot is in its own table and must be sized
-			footerSrcEls = footerCopy.find('tr');
-		}
-	
-		// Clone the current header and footer elements and then place it into the inner table
-		headerCopy = header.clone().prependTo( table );
-		headerTrgEls = header.find('tr'); // original header is in its own table
-		headerSrcEls = headerCopy.find('tr');
-		headerCopy.find('th, td').removeAttr('tabindex');
-	
-	
-		/*
-		 * 2. Take live measurements from the DOM - do not alter the DOM itself!
-		 */
-	
-		// Remove old sizing and apply the calculated column widths
-		// Get the unique column headers in the newly created (cloned) header. We want to apply the
-		// calculated sizes to this header
-		if ( ! scrollX )
-		{
-			divBodyStyle.width = '100%';
-			divHeader[0].style.width = '100%';
-		}
-	
-		$.each( _fnGetUniqueThs( settings, headerCopy ), function ( i, el ) {
-			idx = _fnVisibleToColumnIndex( settings, i );
-			el.style.width = settings.aoColumns[idx].sWidth;
-		} );
-	
-		if ( footer ) {
-			_fnApplyToChildren( function(n) {
-				n.style.width = "";
-			}, footerSrcEls );
-		}
-	
-		// Size the table as a whole
-		sanityWidth = table.outerWidth();
-		if ( scrollX === "" ) {
-			// No x scrolling
-			tableStyle.width = "100%";
-	
-			// IE7 will make the width of the table when 100% include the scrollbar
-			// - which is shouldn't. When there is a scrollbar we need to take this
-			// into account.
-			if ( ie67 && (table.find('tbody').height() > divBodyEl.offsetHeight ||
-				divBody.css('overflow-y') == "scroll")
-			) {
-				tableStyle.width = _fnStringToCss( table.outerWidth() - barWidth);
-			}
-	
-			// Recalculate the sanity width
-			sanityWidth = table.outerWidth();
-		}
-		else if ( scrollXInner !== "" ) {
-			// legacy x scroll inner has been given - use it
-			tableStyle.width = _fnStringToCss(scrollXInner);
-	
-			// Recalculate the sanity width
-			sanityWidth = table.outerWidth();
-		}
-	
-		// Hidden header should have zero height, so remove padding and borders. Then
-		// set the width based on the real headers
-	
-		// Apply all styles in one pass
-		_fnApplyToChildren( zeroOut, headerSrcEls );
-	
-		// Read all widths in next pass
-		_fnApplyToChildren( function(nSizer) {
-			headerContent.push( nSizer.innerHTML );
-			headerWidths.push( _fnStringToCss( $(nSizer).css('width') ) );
-		}, headerSrcEls );
-	
-		// Apply all widths in final pass
-		_fnApplyToChildren( function(nToSize, i) {
-			// Only apply widths to the DataTables detected header cells - this
-			// prevents complex headers from having contradictory sizes applied
-			if ( $.inArray( nToSize, dtHeaderCells ) !== -1 ) {
-				nToSize.style.width = headerWidths[i];
-			}
-		}, headerTrgEls );
-	
-		$(headerSrcEls).height(0);
-	
-		/* Same again with the footer if we have one */
-		if ( footer )
-		{
-			_fnApplyToChildren( zeroOut, footerSrcEls );
-	
-			_fnApplyToChildren( function(nSizer) {
-				footerContent.push( nSizer.innerHTML );
-				footerWidths.push( _fnStringToCss( $(nSizer).css('width') ) );
-			}, footerSrcEls );
-	
-			_fnApplyToChildren( function(nToSize, i) {
-				nToSize.style.width = footerWidths[i];
-			}, footerTrgEls );
-	
-			$(footerSrcEls).height(0);
-		}
-	
-	
-		/*
-		 * 3. Apply the measurements
-		 */
-	
-		// "Hide" the header and footer that we used for the sizing. We need to keep
-		// the content of the cell so that the width applied to the header and body
-		// both match, but we want to hide it completely. We want to also fix their
-		// width to what they currently are
-		_fnApplyToChildren( function(nSizer, i) {
-			nSizer.innerHTML = '<div class="dataTables_sizing">'+headerContent[i]+'</div>';
-			nSizer.childNodes[0].style.height = "0";
-			nSizer.childNodes[0].style.overflow = "hidden";
-			nSizer.style.width = headerWidths[i];
-		}, headerSrcEls );
-	
-		if ( footer )
-		{
-			_fnApplyToChildren( function(nSizer, i) {
-				nSizer.innerHTML = '<div class="dataTables_sizing">'+footerContent[i]+'</div>';
-				nSizer.childNodes[0].style.height = "0";
-				nSizer.childNodes[0].style.overflow = "hidden";
-				nSizer.style.width = footerWidths[i];
-			}, footerSrcEls );
-		}
-	
-		// Sanity check that the table is of a sensible width. If not then we are going to get
-		// misalignment - try to prevent this by not allowing the table to shrink below its min width
-		if ( table.outerWidth() < sanityWidth )
-		{
-			// The min width depends upon if we have a vertical scrollbar visible or not */
-			correction = ((divBodyEl.scrollHeight > divBodyEl.offsetHeight ||
-				divBody.css('overflow-y') == "scroll")) ?
-					sanityWidth+barWidth :
-					sanityWidth;
-	
-			// IE6/7 are a law unto themselves...
-			if ( ie67 && (divBodyEl.scrollHeight >
-				divBodyEl.offsetHeight || divBody.css('overflow-y') == "scroll")
-			) {
-				tableStyle.width = _fnStringToCss( correction-barWidth );
-			}
-	
-			// And give the user a warning that we've stopped the table getting too small
-			if ( scrollX === "" || scrollXInner !== "" ) {
-				_fnLog( settings, 1, 'Possible column misalignment', 6 );
-			}
-		}
-		else
-		{
-			correction = '100%';
-		}
-	
-		// Apply to the container elements
-		divBodyStyle.width = _fnStringToCss( correction );
-		divHeaderStyle.width = _fnStringToCss( correction );
-	
-		if ( footer ) {
-			settings.nScrollFoot.style.width = _fnStringToCss( correction );
-		}
-	
-	
-		/*
-		 * 4. Clean up
-		 */
-		if ( ! scrollY ) {
-			/* IE7< puts a vertical scrollbar in place (when it shouldn't be) due to subtracting
-			 * the scrollbar height from the visible display, rather than adding it on. We need to
-			 * set the height in order to sort this. Don't want to do it in any other browsers.
-			 */
-			if ( ie67 ) {
-				divBodyStyle.height = _fnStringToCss( tableEl.offsetHeight+barWidth );
-			}
-		}
-	
-		/* Finally set the width's of the header and footer tables */
-		var iOuterWidth = table.outerWidth();
-		divHeaderTable[0].style.width = _fnStringToCss( iOuterWidth );
-		divHeaderInnerStyle.width = _fnStringToCss( iOuterWidth );
-	
-		// Figure out if there are scrollbar present - if so then we need a the header and footer to
-		// provide a bit more space to allow "overflow" scrolling (i.e. past the scrollbar)
-		var bScrolling = table.height() > divBodyEl.clientHeight || divBody.css('overflow-y') == "scroll";
-		var padding = 'padding' + (browser.bScrollbarLeft ? 'Left' : 'Right' );
-		divHeaderInnerStyle[ padding ] = bScrolling ? barWidth+"px" : "0px";
-	
-		if ( footer ) {
-			divFooterTable[0].style.width = _fnStringToCss( iOuterWidth );
-			divFooterInner[0].style.width = _fnStringToCss( iOuterWidth );
-			divFooterInner[0].style[padding] = bScrolling ? barWidth+"px" : "0px";
-		}
-	
-		// Correct DOM ordering for colgroup - comes before the thead
-		table.children('colgroup').insertBefore( table.children('thead') );
-	
-		/* Adjust the position of the header in case we loose the y-scrollbar */
-		divBody.trigger('scroll');
-	
-		// If sorting or filtering has occurred, jump the scrolling back to the top
-		// only if we aren't holding the position
-		if ( (settings.bSorted || settings.bFiltered) && ! settings._drawHold ) {
-			divBodyEl.scrollTop = 0;
-		}
-	}
-	
-	
-	
-	/**
-	 * Apply a given function to the display child nodes of an element array (typically
-	 * TD children of TR rows
-	 *  @param {function} fn Method to apply to the objects
-	 *  @param array {nodes} an1 List of elements to look through for display children
-	 *  @param array {nodes} an2 Another list (identical structure to the first) - optional
-	 *  @memberof DataTable#oApi
-	 */
-	function _fnApplyToChildren( fn, an1, an2 )
-	{
-		var index=0, i=0, iLen=an1.length;
-		var nNode1, nNode2;
-	
-		while ( i < iLen ) {
-			nNode1 = an1[i].firstChild;
-			nNode2 = an2 ? an2[i].firstChild : null;
-	
-			while ( nNode1 ) {
-				if ( nNode1.nodeType === 1 ) {
-					if ( an2 ) {
-						fn( nNode1, nNode2, index );
-					}
-					else {
-						fn( nNode1, index );
-					}
-	
-					index++;
-				}
-	
-				nNode1 = nNode1.nextSibling;
-				nNode2 = an2 ? nNode2.nextSibling : null;
-			}
-	
-			i++;
-		}
-	}
-	
-	
-	
-	var __re_html_remove = /<.*?>/g;
-	
-	
-	/**
-	 * Calculate the width of columns for the table
-	 *  @param {object} oSettings dataTables settings object
-	 *  @memberof DataTable#oApi
-	 */
-	function _fnCalculateColumnWidths ( oSettings )
-	{
-		var
-			table = oSettings.nTable,
-			columns = oSettings.aoColumns,
-			scroll = oSettings.oScroll,
-			scrollY = scroll.sY,
-			scrollX = scroll.sX,
-			scrollXInner = scroll.sXInner,
-			columnCount = columns.length,
-			visibleColumns = _fnGetColumns( oSettings, 'bVisible' ),
-			headerCells = $('th', oSettings.nTHead),
-			tableWidthAttr = table.getAttribute('width'), // from DOM element
-			tableContainer = table.parentNode,
-			userInputs = false,
-			i, column, columnIdx, width, outerWidth,
-			browser = oSettings.oBrowser,
-			ie67 = browser.bScrollOversize;
-	
-		var styleWidth = table.style.width;
-		if ( styleWidth && styleWidth.indexOf('%') !== -1 ) {
-			tableWidthAttr = styleWidth;
-		}
-	
-		/* Convert any user input sizes into pixel sizes */
-		for ( i=0 ; i<visibleColumns.length ; i++ ) {
-			column = columns[ visibleColumns[i] ];
-	
-			if ( column.sWidth !== null ) {
-				column.sWidth = _fnConvertToWidth( column.sWidthOrig, tableContainer );
-	
-				userInputs = true;
-			}
-		}
-	
-		/* If the number of columns in the DOM equals the number that we have to
-		 * process in DataTables, then we can use the offsets that are created by
-		 * the web- browser. No custom sizes can be set in order for this to happen,
-		 * nor scrolling used
-		 */
-		if ( ie67 || ! userInputs && ! scrollX && ! scrollY &&
-		     columnCount == _fnVisbleColumns( oSettings ) &&
-		     columnCount == headerCells.length
-		) {
-			for ( i=0 ; i<columnCount ; i++ ) {
-				var colIdx = _fnVisibleToColumnIndex( oSettings, i );
-	
-				if ( colIdx !== null ) {
-					columns[ colIdx ].sWidth = _fnStringToCss( headerCells.eq(i).width() );
-				}
-			}
-		}
-		else
-		{
-			// Otherwise construct a single row, worst case, table with the widest
-			// node in the data, assign any user defined widths, then insert it into
-			// the DOM and allow the browser to do all the hard work of calculating
-			// table widths
-			var tmpTable = $(table).clone() // don't use cloneNode - IE8 will remove events on the main table
-				.css( 'visibility', 'hidden' )
-				.removeAttr( 'id' );
-	
-			// Clean up the table body
-			tmpTable.find('tbody tr').remove();
-			var tr = $('<tr/>').appendTo( tmpTable.find('tbody') );
-	
-			// Clone the table header and footer - we can't use the header / footer
-			// from the cloned table, since if scrolling is active, the table's
-			// real header and footer are contained in different table tags
-			tmpTable.find('thead, tfoot').remove();
-			tmpTable
-				.append( $(oSettings.nTHead).clone() )
-				.append( $(oSettings.nTFoot).clone() );
-	
-			// Remove any assigned widths from the footer (from scrolling)
-			tmpTable.find('tfoot th, tfoot td').css('width', '');
-	
-			// Apply custom sizing to the cloned header
-			headerCells = _fnGetUniqueThs( oSettings, tmpTable.find('thead')[0] );
-	
-			for ( i=0 ; i<visibleColumns.length ; i++ ) {
-				column = columns[ visibleColumns[i] ];
-	
-				headerCells[i].style.width = column.sWidthOrig !== null && column.sWidthOrig !== '' ?
-					_fnStringToCss( column.sWidthOrig ) :
-					'';
-	
-				// For scrollX we need to force the column width otherwise the
-				// browser will collapse it. If this width is smaller than the
-				// width the column requires, then it will have no effect
-				if ( column.sWidthOrig && scrollX ) {
-					$( headerCells[i] ).append( $('<div/>').css( {
-						width: column.sWidthOrig,
-						margin: 0,
-						padding: 0,
-						border: 0,
-						height: 1
-					} ) );
-				}
-			}
-	
-			// Find the widest cell for each column and put it into the table
-			if ( oSettings.aoData.length ) {
-				for ( i=0 ; i<visibleColumns.length ; i++ ) {
-					columnIdx = visibleColumns[i];
-					column = columns[ columnIdx ];
-	
-					$( _fnGetWidestNode( oSettings, columnIdx ) )
-						.clone( false )
-						.append( column.sContentPadding )
-						.appendTo( tr );
-				}
-			}
-	
-			// Tidy the temporary table - remove name attributes so there aren't
-			// duplicated in the dom (radio elements for example)
-			$('[name]', tmpTable).removeAttr('name');
-	
-			// Table has been built, attach to the document so we can work with it.
-			// A holding element is used, positioned at the top of the container
-			// with minimal height, so it has no effect on if the container scrolls
-			// or not. Otherwise it might trigger scrolling when it actually isn't
-			// needed
-			var holder = $('<div/>').css( scrollX || scrollY ?
-					{
-						position: 'absolute',
-						top: 0,
-						left: 0,
-						height: 1,
-						right: 0,
-						overflow: 'hidden'
-					} :
-					{}
-				)
-				.append( tmpTable )
-				.appendTo( tableContainer );
-	
-			// When scrolling (X or Y) we want to set the width of the table as 
-			// appropriate. However, when not scrolling leave the table width as it
-			// is. This results in slightly different, but I think correct behaviour
-			if ( scrollX && scrollXInner ) {
-				tmpTable.width( scrollXInner );
-			}
-			else if ( scrollX ) {
-				tmpTable.css( 'width', 'auto' );
-				tmpTable.removeAttr('width');
-	
-				// If there is no width attribute or style, then allow the table to
-				// collapse
-				if ( tmpTable.width() < tableContainer.clientWidth && tableWidthAttr ) {
-					tmpTable.width( tableContainer.clientWidth );
-				}
-			}
-			else if ( scrollY ) {
-				tmpTable.width( tableContainer.clientWidth );
-			}
-			else if ( tableWidthAttr ) {
-				tmpTable.width( tableWidthAttr );
-			}
-	
-			// Get the width of each column in the constructed table - we need to
-			// know the inner width (so it can be assigned to the other table's
-			// cells) and the outer width so we can calculate the full width of the
-			// table. This is safe since DataTables requires a unique cell for each
-			// column, but if ever a header can span multiple columns, this will
-			// need to be modified.
-			var total = 0;
-			for ( i=0 ; i<visibleColumns.length ; i++ ) {
-				var cell = $(headerCells[i]);
-				var border = cell.outerWidth() - cell.width();
-	
-				// Use getBounding... where possible (not IE8-) because it can give
-				// sub-pixel accuracy, which we then want to round up!
-				var bounding = browser.bBounding ?
-					Math.ceil( headerCells[i].getBoundingClientRect().width ) :
-					cell.outerWidth();
-	
-				// Total is tracked to remove any sub-pixel errors as the outerWidth
-				// of the table might not equal the total given here (IE!).
-				total += bounding;
-	
-				// Width for each column to use
-				columns[ visibleColumns[i] ].sWidth = _fnStringToCss( bounding - border );
-			}
-	
-			table.style.width = _fnStringToCss( total );
-	
-			// Finished with the table - ditch it
-			holder.remove();
-		}
-	
-		// If there is a width attr, we want to attach an event listener which
-		// allows the table sizing to automatically adjust when the window is
-		// resized. Use the width attr rather than CSS, since we can't know if the
-		// CSS is a relative value or absolute - DOM read is always px.
-		if ( tableWidthAttr ) {
-			table.style.width = _fnStringToCss( tableWidthAttr );
-		}
-	
-		if ( (tableWidthAttr || scrollX) && ! oSettings._reszEvt ) {
-			var bindResize = function () {
-				$(window).on('resize.DT-'+oSettings.sInstance, _fnThrottle( function () {
-					_fnAdjustColumnSizing( oSettings );
-				} ) );
-			};
-	
-			// IE6/7 will crash if we bind a resize event handler on page load.
-			// To be removed in 1.11 which drops IE6/7 support
-			if ( ie67 ) {
-				setTimeout( bindResize, 1000 );
-			}
-			else {
-				bindResize();
-			}
-	
-			oSettings._reszEvt = true;
-		}
-	}
-	
-	
-	/**
-	 * Throttle the calls to a function. Arguments and context are maintained for
-	 * the throttled function
-	 *  @param {function} fn Function to be called
-	 *  @param {int} [freq=200] call frequency in mS
-	 *  @returns {function} wrapped function
-	 *  @memberof DataTable#oApi
-	 */
-	var _fnThrottle = DataTable.util.throttle;
-	
-	
-	/**
-	 * Convert a CSS unit width to pixels (e.g. 2em)
-	 *  @param {string} width width to be converted
-	 *  @param {node} parent parent to get the with for (required for relative widths) - optional
-	 *  @returns {int} width in pixels
-	 *  @memberof DataTable#oApi
-	 */
-	function _fnConvertToWidth ( width, parent )
-	{
-		if ( ! width ) {
-			return 0;
-		}
-	
-		var n = $('<div/>')
-			.css( 'width', _fnStringToCss( width ) )
-			.appendTo( parent || document.body );
-	
-		var val = n[0].offsetWidth;
-		n.remove();
-	
-		return val;
-	}
-	
-	
-	/**
-	 * Get the widest node
-	 *  @param {object} settings dataTables settings object
-	 *  @param {int} colIdx column of interest
-	 *  @returns {node} widest table node
-	 *  @memberof DataTable#oApi
-	 */
-	function _fnGetWidestNode( settings, colIdx )
-	{
-		var idx = _fnGetMaxLenString( settings, colIdx );
-		if ( idx < 0 ) {
-			return null;
-		}
-	
-		var data = settings.aoData[ idx ];
-		return ! data.nTr ? // Might not have been created when deferred rendering
-			$('<td/>').html( _fnGetCellData( settings, idx, colIdx, 'display' ) )[0] :
-			data.anCells[ colIdx ];
-	}
-	
-	
-	/**
-	 * Get the maximum strlen for each data column
-	 *  @param {object} settings dataTables settings object
-	 *  @param {int} colIdx column of interest
-	 *  @returns {string} max string length for each column
-	 *  @memberof DataTable#oApi
-	 */
-	function _fnGetMaxLenString( settings, colIdx )
-	{
-		var s, max=-1, maxIdx = -1;
-	
-		for ( var i=0, ien=settings.aoData.length ; i<ien ; i++ ) {
-			s = _fnGetCellData( settings, i, colIdx, 'display' )+'';
-			s = s.replace( __re_html_remove, '' );
-			s = s.replace( /&nbsp;/g, ' ' );
-	
-			if ( s.length > max ) {
-				max = s.length;
-				maxIdx = i;
-			}
-		}
-	
-		return maxIdx;
-	}
-	
-	
-	/**
-	 * Append a CSS unit (only if required) to a string
-	 *  @param {string} value to css-ify
-	 *  @returns {string} value with css unit
-	 *  @memberof DataTable#oApi
-	 */
-	function _fnStringToCss( s )
-	{
-		if ( s === null ) {
-			return '0px';
-		}
-	
-		if ( typeof s == 'number' ) {
-			return s < 0 ?
-				'0px' :
-				s+'px';
-		}
-	
-		// Check it has a unit character already
-		return s.match(/\d$/) ?
-			s+'px' :
-			s;
-	}
-	
-	
-	
-	function _fnSortFlatten ( settings )
-	{
-		var
-			i, iLen, k, kLen,
-			aSort = [],
-			aiOrig = [],
-			aoColumns = settings.aoColumns,
-			aDataSort, iCol, sType, srcCol,
-			fixed = settings.aaSortingFixed,
-			fixedObj = $.isPlainObject( fixed ),
-			nestedSort = [],
-			add = function ( a ) {
-				if ( a.length && ! $.isArray( a[0] ) ) {
-					// 1D array
-					nestedSort.push( a );
-				}
-				else {
-					// 2D array
-					$.merge( nestedSort, a );
-				}
-			};
-	
-		// Build the sort array, with pre-fix and post-fix options if they have been
-		// specified
-		if ( $.isArray( fixed ) ) {
-			add( fixed );
-		}
-	
-		if ( fixedObj && fixed.pre ) {
-			add( fixed.pre );
-		}
-	
-		add( settings.aaSorting );
-	
-		if (fixedObj && fixed.post ) {
-			add( fixed.post );
-		}
-	
-		for ( i=0 ; i<nestedSort.length ; i++ )
-		{
-			srcCol = nestedSort[i][0];
-			aDataSort = aoColumns[ srcCol ].aDataSort;
-	
-			for ( k=0, kLen=aDataSort.length ; k<kLen ; k++ )
-			{
-				iCol = aDataSort[k];
-				sType = aoColumns[ iCol ].sType || 'string';
-	
-				if ( nestedSort[i]._idx === undefined ) {
-					nestedSort[i]._idx = $.inArray( nestedSort[i][1], aoColumns[iCol].asSorting );
-				}
-	
-				aSort.push( {
-					src:       srcCol,
-					col:       iCol,
-					dir:       nestedSort[i][1],
-					index:     nestedSort[i]._idx,
-					type:      sType,
-					formatter: DataTable.ext.type.order[ sType+"-pre" ]
-				} );
-			}
-		}
-	
-		return aSort;
-	}
-	
-	/**
-	 * Change the order of the table
-	 *  @param {object} oSettings dataTables settings object
-	 *  @memberof DataTable#oApi
-	 *  @todo This really needs split up!
-	 */
-	function _fnSort ( oSettings )
-	{
-		var
-			i, ien, iLen, j, jLen, k, kLen,
-			sDataType, nTh,
-			aiOrig = [],
-			oExtSort = DataTable.ext.type.order,
-			aoData = oSettings.aoData,
-			aoColumns = oSettings.aoColumns,
-			aDataSort, data, iCol, sType, oSort,
-			formatters = 0,
-			sortCol,
-			displayMaster = oSettings.aiDisplayMaster,
-			aSort;
-	
-		// Resolve any column types that are unknown due to addition or invalidation
-		// @todo Can this be moved into a 'data-ready' handler which is called when
-		//   data is going to be used in the table?
-		_fnColumnTypes( oSettings );
-	
-		aSort = _fnSortFlatten( oSettings );
-	
-		for ( i=0, ien=aSort.length ; i<ien ; i++ ) {
-			sortCol = aSort[i];
-	
-			// Track if we can use the fast sort algorithm
-			if ( sortCol.formatter ) {
-				formatters++;
-			}
-	
-			// Load the data needed for the sort, for each cell
-			_fnSortData( oSettings, sortCol.col );
-		}
-	
-		/* No sorting required if server-side or no sorting array */
-		if ( _fnDataSource( oSettings ) != 'ssp' && aSort.length !== 0 )
-		{
-			// Create a value - key array of the current row positions such that we can use their
-			// current position during the sort, if values match, in order to perform stable sorting
-			for ( i=0, iLen=displayMaster.length ; i<iLen ; i++ ) {
-				aiOrig[ displayMaster[i] ] = i;
-			}
-	
-			/* Do the sort - here we want multi-column sorting based on a given data source (column)
-			 * and sorting function (from oSort) in a certain direction. It's reasonably complex to
-			 * follow on it's own, but this is what we want (example two column sorting):
-			 *  fnLocalSorting = function(a,b){
-			 *    var iTest;
-			 *    iTest = oSort['string-asc']('data11', 'data12');
-			 *      if (iTest !== 0)
-			 *        return iTest;
-			 *    iTest = oSort['numeric-desc']('data21', 'data22');
-			 *    if (iTest !== 0)
-			 *      return iTest;
-			 *    return oSort['numeric-asc']( aiOrig[a], aiOrig[b] );
-			 *  }
-			 * Basically we have a test for each sorting column, if the data in that column is equal,
-			 * test the next column. If all columns match, then we use a numeric sort on the row
-			 * positions in the original data array to provide a stable sort.
-			 *
-			 * Note - I know it seems excessive to have two sorting methods, but the first is around
-			 * 15% faster, so the second is only maintained for backwards compatibility with sorting
-			 * methods which do not have a pre-sort formatting function.
-			 */
-			if ( formatters === aSort.length ) {
-				// All sort types have formatting functions
-				displayMaster.sort( function ( a, b ) {
-					var
-						x, y, k, test, sort,
-						len=aSort.length,
-						dataA = aoData[a]._aSortData,
-						dataB = aoData[b]._aSortData;
-	
-					for ( k=0 ; k<len ; k++ ) {
-						sort = aSort[k];
-	
-						x = dataA[ sort.col ];
-						y = dataB[ sort.col ];
-	
-						test = x<y ? -1 : x>y ? 1 : 0;
-						if ( test !== 0 ) {
-							return sort.dir === 'asc' ? test : -test;
-						}
-					}
-	
-					x = aiOrig[a];
-					y = aiOrig[b];
-					return x<y ? -1 : x>y ? 1 : 0;
-				} );
-			}
-			else {
-				// Depreciated - remove in 1.11 (providing a plug-in option)
-				// Not all sort types have formatting methods, so we have to call their sorting
-				// methods.
-				displayMaster.sort( function ( a, b ) {
-					var
-						x, y, k, l, test, sort, fn,
-						len=aSort.length,
-						dataA = aoData[a]._aSortData,
-						dataB = aoData[b]._aSortData;
-	
-					for ( k=0 ; k<len ; k++ ) {
-						sort = aSort[k];
-	
-						x = dataA[ sort.col ];
-						y = dataB[ sort.col ];
-	
-						fn = oExtSort[ sort.type+"-"+sort.dir ] || oExtSort[ "string-"+sort.dir ];
-						test = fn( x, y );
-						if ( test !== 0 ) {
-							return test;
-						}
-					}
-	
-					x = aiOrig[a];
-					y = aiOrig[b];
-					return x<y ? -1 : x>y ? 1 : 0;
-				} );
-			}
-		}
-	
-		/* Tell the draw function that we have sorted the data */
-		oSettings.bSorted = true;
-	}
-	
-	
-	function _fnSortAria ( settings )
-	{
-		var label;
-		var nextSort;
-		var columns = settings.aoColumns;
-		var aSort = _fnSortFlatten( settings );
-		var oAria = settings.oLanguage.oAria;
-	
-		// ARIA attributes - need to loop all columns, to update all (removing old
-		// attributes as needed)
-		for ( var i=0, iLen=columns.length ; i<iLen ; i++ )
-		{
-			var col = columns[i];
-			var asSorting = col.asSorting;
-			var sTitle = col.sTitle.replace( /<.*?>/g, "" );
-			var th = col.nTh;
-	
-			// IE7 is throwing an error when setting these properties with jQuery's
-			// attr() and removeAttr() methods...
-			th.removeAttribute('aria-sort');
-	
-			/* In ARIA only the first sorting column can be marked as sorting - no multi-sort option */
-			if ( col.bSortable ) {
-				if ( aSort.length > 0 && aSort[0].col == i ) {
-					th.setAttribute('aria-sort', aSort[0].dir=="asc" ? "ascending" : "descending" );
-					nextSort = asSorting[ aSort[0].index+1 ] || asSorting[0];
-				}
-				else {
-					nextSort = asSorting[0];
-				}
-	
-				label = sTitle + ( nextSort === "asc" ?
-					oAria.sSortAscending :
-					oAria.sSortDescending
-				);
-			}
-			else {
-				label = sTitle;
-			}
-	
-			th.setAttribute('aria-label', label);
-		}
-	}
-	
-	
-	/**
-	 * Function to run on user sort request
-	 *  @param {object} settings dataTables settings object
-	 *  @param {node} attachTo node to attach the handler to
-	 *  @param {int} colIdx column sorting index
-	 *  @param {boolean} [append=false] Append the requested sort to the existing
-	 *    sort if true (i.e. multi-column sort)
-	 *  @param {function} [callback] callback function
-	 *  @memberof DataTable#oApi
-	 */
-	function _fnSortListener ( settings, colIdx, append, callback )
-	{
-		var col = settings.aoColumns[ colIdx ];
-		var sorting = settings.aaSorting;
-		var asSorting = col.asSorting;
-		var nextSortIdx;
-		var next = function ( a, overflow ) {
-			var idx = a._idx;
-			if ( idx === undefined ) {
-				idx = $.inArray( a[1], asSorting );
-			}
-	
-			return idx+1 < asSorting.length ?
-				idx+1 :
-				overflow ?
-					null :
-					0;
-		};
-	
-		// Convert to 2D array if needed
-		if ( typeof sorting[0] === 'number' ) {
-			sorting = settings.aaSorting = [ sorting ];
-		}
-	
-		// If appending the sort then we are multi-column sorting
-		if ( append && settings.oFeatures.bSortMulti ) {
-			// Are we already doing some kind of sort on this column?
-			var sortIdx = $.inArray( colIdx, _pluck(sorting, '0') );
-	
-			if ( sortIdx !== -1 ) {
-				// Yes, modify the sort
-				nextSortIdx = next( sorting[sortIdx], true );
-	
-				if ( nextSortIdx === null && sorting.length === 1 ) {
-					nextSortIdx = 0; // can't remove sorting completely
-				}
-	
-				if ( nextSortIdx === null ) {
-					sorting.splice( sortIdx, 1 );
-				}
-				else {
-					sorting[sortIdx][1] = asSorting[ nextSortIdx ];
-					sorting[sortIdx]._idx = nextSortIdx;
-				}
-			}
-			else {
-				// No sort on this column yet
-				sorting.push( [ colIdx, asSorting[0], 0 ] );
-				sorting[sorting.length-1]._idx = 0;
-			}
-		}
-		else if ( sorting.length && sorting[0][0] == colIdx ) {
-			// Single column - already sorting on this column, modify the sort
-			nextSortIdx = next( sorting[0] );
-	
-			sorting.length = 1;
-			sorting[0][1] = asSorting[ nextSortIdx ];
-			sorting[0]._idx = nextSortIdx;
-		}
-		else {
-			// Single column - sort only on this column
-			sorting.length = 0;
-			sorting.push( [ colIdx, asSorting[0] ] );
-			sorting[0]._idx = 0;
-		}
-	
-		// Run the sort by calling a full redraw
-		_fnReDraw( settings );
-	
-		// callback used for async user interaction
-		if ( typeof callback == 'function' ) {
-			callback( settings );
-		}
-	}
-	
-	
-	/**
-	 * Attach a sort handler (click) to a node
-	 *  @param {object} settings dataTables settings object
-	 *  @param {node} attachTo node to attach the handler to
-	 *  @param {int} colIdx column sorting index
-	 *  @param {function} [callback] callback function
-	 *  @memberof DataTable#oApi
-	 */
-	function _fnSortAttachListener ( settings, attachTo, colIdx, callback )
-	{
-		var col = settings.aoColumns[ colIdx ];
-	
-		_fnBindAction( attachTo, {}, function (e) {
-			/* If the column is not sortable - don't to anything */
-			if ( col.bSortable === false ) {
-				return;
-			}
-	
-			// If processing is enabled use a timeout to allow the processing
-			// display to be shown - otherwise to it synchronously
-			if ( settings.oFeatures.bProcessing ) {
-				_fnProcessingDisplay( settings, true );
-	
-				setTimeout( function() {
-					_fnSortListener( settings, colIdx, e.shiftKey, callback );
-	
-					// In server-side processing, the draw callback will remove the
-					// processing display
-					if ( _fnDataSource( settings ) !== 'ssp' ) {
-						_fnProcessingDisplay( settings, false );
-					}
-				}, 0 );
-			}
-			else {
-				_fnSortListener( settings, colIdx, e.shiftKey, callback );
-			}
-		} );
-	}
-	
-	
-	/**
-	 * Set the sorting classes on table's body, Note: it is safe to call this function
-	 * when bSort and bSortClasses are false
-	 *  @param {object} oSettings dataTables settings object
-	 *  @memberof DataTable#oApi
-	 */
-	function _fnSortingClasses( settings )
-	{
-		var oldSort = settings.aLastSort;
-		var sortClass = settings.oClasses.sSortColumn;
-		var sort = _fnSortFlatten( settings );
-		var features = settings.oFeatures;
-		var i, ien, colIdx;
-	
-		if ( features.bSort && features.bSortClasses ) {
-			// Remove old sorting classes
-			for ( i=0, ien=oldSort.length ; i<ien ; i++ ) {
-				colIdx = oldSort[i].src;
-	
-				// Remove column sorting
-				$( _pluck( settings.aoData, 'anCells', colIdx ) )
-					.removeClass( sortClass + (i<2 ? i+1 : 3) );
-			}
-	
-			// Add new column sorting
-			for ( i=0, ien=sort.length ; i<ien ; i++ ) {
-				colIdx = sort[i].src;
-	
-				$( _pluck( settings.aoData, 'anCells', colIdx ) )
-					.addClass( sortClass + (i<2 ? i+1 : 3) );
-			}
-		}
-	
-		settings.aLastSort = sort;
-	}
-	
-	
-	// Get the data to sort a column, be it from cache, fresh (populating the
-	// cache), or from a sort formatter
-	function _fnSortData( settings, idx )
-	{
-		// Custom sorting function - provided by the sort data type
-		var column = settings.aoColumns[ idx ];
-		var customSort = DataTable.ext.order[ column.sSortDataType ];
-		var customData;
-	
-		if ( customSort ) {
-			customData = customSort.call( settings.oInstance, settings, idx,
-				_fnColumnIndexToVisible( settings, idx )
-			);
-		}
-	
-		// Use / populate cache
-		var row, cellData;
-		var formatter = DataTable.ext.type.order[ column.sType+"-pre" ];
-	
-		for ( var i=0, ien=settings.aoData.length ; i<ien ; i++ ) {
-			row = settings.aoData[i];
-	
-			if ( ! row._aSortData ) {
-				row._aSortData = [];
-			}
-	
-			if ( ! row._aSortData[idx] || customSort ) {
-				cellData = customSort ?
-					customData[i] : // If there was a custom sort function, use data from there
-					_fnGetCellData( settings, i, idx, 'sort' );
-	
-				row._aSortData[ idx ] = formatter ?
-					formatter( cellData ) :
-					cellData;
-			}
-		}
-	}
-	
-	
-	
-	/**
-	 * Save the state of a table
-	 *  @param {object} oSettings dataTables settings object
-	 *  @memberof DataTable#oApi
-	 */
-	function _fnSaveState ( settings )
-	{
-		if ( !settings.oFeatures.bStateSave || settings.bDestroying )
-		{
-			return;
-		}
-	
-		/* Store the interesting variables */
-		var state = {
-			time:    +new Date(),
-			start:   settings._iDisplayStart,
-			length:  settings._iDisplayLength,
-			order:   $.extend( true, [], settings.aaSorting ),
-			search:  _fnSearchToCamel( settings.oPreviousSearch ),
-			columns: $.map( settings.aoColumns, function ( col, i ) {
-				return {
-					visible: col.bVisible,
-					search: _fnSearchToCamel( settings.aoPreSearchCols[i] )
-				};
-			} )
-		};
-	
-		_fnCallbackFire( settings, "aoStateSaveParams", 'stateSaveParams', [settings, state] );
-	
-		settings.oSavedState = state;
-		settings.fnStateSaveCallback.call( settings.oInstance, settings, state );
-	}
-	
-	
-	/**
-	 * Attempt to load a saved table state
-	 *  @param {object} oSettings dataTables settings object
-	 *  @param {object} oInit DataTables init object so we can override settings
-	 *  @param {function} callback Callback to execute when the state has been loaded
-	 *  @memberof DataTable#oApi
-	 */
-	function _fnLoadState ( settings, oInit, callback )
-	{
-		var i, ien;
-		var columns = settings.aoColumns;
-		var loaded = function ( s ) {
-			if ( ! s || ! s.time ) {
-				callback();
-				return;
-			}
-	
-			// Allow custom and plug-in manipulation functions to alter the saved data set and
-			// cancelling of loading by returning false
-			var abStateLoad = _fnCallbackFire( settings, 'aoStateLoadParams', 'stateLoadParams', [settings, s] );
-			if ( $.inArray( false, abStateLoad ) !== -1 ) {
-				callback();
-				return;
-			}
-	
-			// Reject old data
-			var duration = settings.iStateDuration;
-			if ( duration > 0 && s.time < +new Date() - (duration*1000) ) {
-				callback();
-				return;
-			}
-	
-			// Number of columns have changed - all bets are off, no restore of settings
-			if ( s.columns && columns.length !== s.columns.length ) {
-				callback();
-				return;
-			}
-	
-			// Store the saved state so it might be accessed at any time
-			settings.oLoadedState = $.extend( true, {}, s );
-	
-			// Restore key features - todo - for 1.11 this needs to be done by
-			// subscribed events
-			if ( s.start !== undefined ) {
-				settings._iDisplayStart    = s.start;
-				settings.iInitDisplayStart = s.start;
-			}
-			if ( s.length !== undefined ) {
-				settings._iDisplayLength   = s.length;
-			}
-	
-			// Order
-			if ( s.order !== undefined ) {
-				settings.aaSorting = [];
-				$.each( s.order, function ( i, col ) {
-					settings.aaSorting.push( col[0] >= columns.length ?
-						[ 0, col[1] ] :
-						col
-					);
-				} );
-			}
-	
-			// Search
-			if ( s.search !== undefined ) {
-				$.extend( settings.oPreviousSearch, _fnSearchToHung( s.search ) );
-			}
-	
-			// Columns
-			//
-			if ( s.columns ) {
-				for ( i=0, ien=s.columns.length ; i<ien ; i++ ) {
-					var col = s.columns[i];
-	
-					// Visibility
-					if ( col.visible !== undefined ) {
-						columns[i].bVisible = col.visible;
-					}
-	
-					// Search
-					if ( col.search !== undefined ) {
-						$.extend( settings.aoPreSearchCols[i], _fnSearchToHung( col.search ) );
-					}
-				}
-			}
-	
-			_fnCallbackFire( settings, 'aoStateLoaded', 'stateLoaded', [settings, s] );
-			callback();
-		};
-	
-		if ( ! settings.oFeatures.bStateSave ) {
-			callback();
-			return;
-		}
-	
-		var state = settings.fnStateLoadCallback.call( settings.oInstance, settings, loaded );
-	
-		if ( state !== undefined ) {
-			loaded( state );
-		}
-		// otherwise, wait for the loaded callback to be executed
-	}
-	
-	
-	/**
-	 * Return the settings object for a particular table
-	 *  @param {node} table table we are using as a dataTable
-	 *  @returns {object} Settings object - or null if not found
-	 *  @memberof DataTable#oApi
-	 */
-	function _fnSettingsFromNode ( table )
-	{
-		var settings = DataTable.settings;
-		var idx = $.inArray( table, _pluck( settings, 'nTable' ) );
-	
-		return idx !== -1 ?
-			settings[ idx ] :
-			null;
-	}
-	
-	
-	/**
-	 * Log an error message
-	 *  @param {object} settings dataTables settings object
-	 *  @param {int} level log error messages, or display them to the user
-	 *  @param {string} msg error message
-	 *  @param {int} tn Technical note id to get more information about the error.
-	 *  @memberof DataTable#oApi
-	 */
-	function _fnLog( settings, level, msg, tn )
-	{
-		msg = 'DataTables warning: '+
-			(settings ? 'table id='+settings.sTableId+' - ' : '')+msg;
-	
-		if ( tn ) {
-			msg += '. For more information about this error, please see '+
-			'http://datatables.net/tn/'+tn;
-		}
-	
-		if ( ! level  ) {
-			// Backwards compatibility pre 1.10
-			var ext = DataTable.ext;
-			var type = ext.sErrMode || ext.errMode;
-	
-			if ( settings ) {
-				_fnCallbackFire( settings, null, 'error', [ settings, tn, msg ] );
-			}
-	
-			if ( type == 'alert' ) {
-				alert( msg );
-			}
-			else if ( type == 'throw' ) {
-				throw new Error(msg);
-			}
-			else if ( typeof type == 'function' ) {
-				type( settings, tn, msg );
-			}
-		}
-		else if ( window.console && console.log ) {
-			console.log( msg );
-		}
-	}
-	
-	
-	/**
-	 * See if a property is defined on one object, if so assign it to the other object
-	 *  @param {object} ret target object
-	 *  @param {object} src source object
-	 *  @param {string} name property
-	 *  @param {string} [mappedName] name to map too - optional, name used if not given
-	 *  @memberof DataTable#oApi
-	 */
-	function _fnMap( ret, src, name, mappedName )
-	{
-		if ( $.isArray( name ) ) {
-			$.each( name, function (i, val) {
-				if ( $.isArray( val ) ) {
-					_fnMap( ret, src, val[0], val[1] );
-				}
-				else {
-					_fnMap( ret, src, val );
-				}
-			} );
-	
-			return;
-		}
-	
-		if ( mappedName === undefined ) {
-			mappedName = name;
-		}
-	
-		if ( src[name] !== undefined ) {
-			ret[mappedName] = src[name];
-		}
-	}
-	
-	
-	/**
-	 * Extend objects - very similar to jQuery.extend, but deep copy objects, and
-	 * shallow copy arrays. The reason we need to do this, is that we don't want to
-	 * deep copy array init values (such as aaSorting) since the dev wouldn't be
-	 * able to override them, but we do want to deep copy arrays.
-	 *  @param {object} out Object to extend
-	 *  @param {object} extender Object from which the properties will be applied to
-	 *      out
-	 *  @param {boolean} breakRefs If true, then arrays will be sliced to take an
-	 *      independent copy with the exception of the `data` or `aaData` parameters
-	 *      if they are present. This is so you can pass in a collection to
-	 *      DataTables and have that used as your data source without breaking the
-	 *      references
-	 *  @returns {object} out Reference, just for convenience - out === the return.
-	 *  @memberof DataTable#oApi
-	 *  @todo This doesn't take account of arrays inside the deep copied objects.
-	 */
-	function _fnExtend( out, extender, breakRefs )
-	{
-		var val;
-	
-		for ( var prop in extender ) {
-			if ( extender.hasOwnProperty(prop) ) {
-				val = extender[prop];
-	
-				if ( $.isPlainObject( val ) ) {
-					if ( ! $.isPlainObject( out[prop] ) ) {
-						out[prop] = {};
-					}
-					$.extend( true, out[prop], val );
-				}
-				else if ( breakRefs && prop !== 'data' && prop !== 'aaData' && $.isArray(val) ) {
-					out[prop] = val.slice();
-				}
-				else {
-					out[prop] = val;
-				}
-			}
-		}
-	
-		return out;
-	}
-	
-	
-	/**
-	 * Bind an event handers to allow a click or return key to activate the callback.
-	 * This is good for accessibility since a return on the keyboard will have the
-	 * same effect as a click, if the element has focus.
-	 *  @param {element} n Element to bind the action to
-	 *  @param {object} oData Data object to pass to the triggered function
-	 *  @param {function} fn Callback function for when the event is triggered
-	 *  @memberof DataTable#oApi
-	 */
-	function _fnBindAction( n, oData, fn )
-	{
-		$(n)
-			.on( 'click.DT', oData, function (e) {
-					$(n).trigger('blur'); // Remove focus outline for mouse users
-					fn(e);
-				} )
-			.on( 'keypress.DT', oData, function (e){
-					if ( e.which === 13 ) {
-						e.preventDefault();
-						fn(e);
-					}
-				} )
-			.on( 'selectstart.DT', function () {
-					/* Take the brutal approach to cancelling text selection */
-					return false;
-				} );
-	}
-	
-	
-	/**
-	 * Register a callback function. Easily allows a callback function to be added to
-	 * an array store of callback functions that can then all be called together.
-	 *  @param {object} oSettings dataTables settings object
-	 *  @param {string} sStore Name of the array storage for the callbacks in oSettings
-	 *  @param {function} fn Function to be called back
-	 *  @param {string} sName Identifying name for the callback (i.e. a label)
-	 *  @memberof DataTable#oApi
-	 */
-	function _fnCallbackReg( oSettings, sStore, fn, sName )
-	{
-		if ( fn )
-		{
-			oSettings[sStore].push( {
-				"fn": fn,
-				"sName": sName
-			} );
-		}
-	}
-	
-	
-	/**
-	 * Fire callback functions and trigger events. Note that the loop over the
-	 * callback array store is done backwards! Further note that you do not want to
-	 * fire off triggers in time sensitive applications (for example cell creation)
-	 * as its slow.
-	 *  @param {object} settings dataTables settings object
-	 *  @param {string} callbackArr Name of the array storage for the callbacks in
-	 *      oSettings
-	 *  @param {string} eventName Name of the jQuery custom event to trigger. If
-	 *      null no trigger is fired
-	 *  @param {array} args Array of arguments to pass to the callback function /
-	 *      trigger
-	 *  @memberof DataTable#oApi
-	 */
-	function _fnCallbackFire( settings, callbackArr, eventName, args )
-	{
-		var ret = [];
-	
-		if ( callbackArr ) {
-			ret = $.map( settings[callbackArr].slice().reverse(), function (val, i) {
-				return val.fn.apply( settings.oInstance, args );
-			} );
-		}
-	
-		if ( eventName !== null ) {
-			var e = $.Event( eventName+'.dt' );
-	
-			$(settings.nTable).trigger( e, args );
-	
-			ret.push( e.result );
-		}
-	
-		return ret;
-	}
-	
-	
-	function _fnLengthOverflow ( settings )
-	{
-		var
-			start = settings._iDisplayStart,
-			end = settings.fnDisplayEnd(),
-			len = settings._iDisplayLength;
-	
-		/* If we have space to show extra rows (backing up from the end point - then do so */
-		if ( start >= end )
-		{
-			start = end - len;
-		}
-	
-		// Keep the start record on the current page
-		start -= (start % len);
-	
-		if ( len === -1 || start < 0 )
-		{
-			start = 0;
-		}
-	
-		settings._iDisplayStart = start;
-	}
-	
-	
-	function _fnRenderer( settings, type )
-	{
-		var renderer = settings.renderer;
-		var host = DataTable.ext.renderer[type];
-	
-		if ( $.isPlainObject( renderer ) && renderer[type] ) {
-			// Specific renderer for this type. If available use it, otherwise use
-			// the default.
-			return host[renderer[type]] || host._;
-		}
-		else if ( typeof renderer === 'string' ) {
-			// Common renderer - if there is one available for this type use it,
-			// otherwise use the default
-			return host[renderer] || host._;
-		}
-	
-		// Use the default
-		return host._;
-	}
-	
-	
-	/**
-	 * Detect the data source being used for the table. Used to simplify the code
-	 * a little (ajax) and to make it compress a little smaller.
-	 *
-	 *  @param {object} settings dataTables settings object
-	 *  @returns {string} Data source
-	 *  @memberof DataTable#oApi
-	 */
-	function _fnDataSource ( settings )
-	{
-		if ( settings.oFeatures.bServerSide ) {
-			return 'ssp';
-		}
-		else if ( settings.ajax || settings.sAjaxSource ) {
-			return 'ajax';
-		}
-		return 'dom';
-	}
-	
-
-	
-	
-	/**
-	 * Computed structure of the DataTables API, defined by the options passed to
-	 * `DataTable.Api.register()` when building the API.
-	 *
-	 * The structure is built in order to speed creation and extension of the Api
-	 * objects since the extensions are effectively pre-parsed.
-	 *
-	 * The array is an array of objects with the following structure, where this
-	 * base array represents the Api prototype base:
-	 *
-	 *     [
-	 *       {
-	 *         name:      'data'                -- string   - Property name
-	 *         val:       function () {},       -- function - Api method (or undefined if just an object
-	 *         methodExt: [ ... ],              -- array    - Array of Api object definitions to extend the method result
-	 *         propExt:   [ ... ]               -- array    - Array of Api object definitions to extend the property
-	 *       },
-	 *       {
-	 *         name:     'row'
-	 *         val:       {},
-	 *         methodExt: [ ... ],
-	 *         propExt:   [
-	 *           {
-	 *             name:      'data'
-	 *             val:       function () {},
-	 *             methodExt: [ ... ],
-	 *             propExt:   [ ... ]
-	 *           },
-	 *           ...
-	 *         ]
-	 *       }
-	 *     ]
-	 *
-	 * @type {Array}
-	 * @ignore
-	 */
-	var __apiStruct = [];
-	
-	
-	/**
-	 * `Array.prototype` reference.
-	 *
-	 * @type object
-	 * @ignore
-	 */
-	var __arrayProto = Array.prototype;
-	
-	
-	/**
-	 * Abstraction for `context` parameter of the `Api` constructor to allow it to
-	 * take several different forms for ease of use.
-	 *
-	 * Each of the input parameter types will be converted to a DataTables settings
-	 * object where possible.
-	 *
-	 * @param  {string|node|jQuery|object} mixed DataTable identifier. Can be one
-	 *   of:
-	 *
-	 *   * `string` - jQuery selector. Any DataTables' matching the given selector
-	 *     with be found and used.
-	 *   * `node` - `TABLE` node which has already been formed into a DataTable.
-	 *   * `jQuery` - A jQuery object of `TABLE` nodes.
-	 *   * `object` - DataTables settings object
-	 *   * `DataTables.Api` - API instance
-	 * @return {array|null} Matching DataTables settings objects. `null` or
-	 *   `undefined` is returned if no matching DataTable is found.
-	 * @ignore
-	 */
-	var _toSettings = function ( mixed )
-	{
-		var idx, jq;
-		var settings = DataTable.settings;
-		var tables = $.map( settings, function (el, i) {
-			return el.nTable;
-		} );
-	
-		if ( ! mixed ) {
-			return [];
-		}
-		else if ( mixed.nTable && mixed.oApi ) {
-			// DataTables settings object
-			return [ mixed ];
-		}
-		else if ( mixed.nodeName && mixed.nodeName.toLowerCase() === 'table' ) {
-			// Table node
-			idx = $.inArray( mixed, tables );
-			return idx !== -1 ? [ settings[idx] ] : null;
-		}
-		else if ( mixed && typeof mixed.settings === 'function' ) {
-			return mixed.settings().toArray();
-		}
-		else if ( typeof mixed === 'string' ) {
-			// jQuery selector
-			jq = $(mixed);
-		}
-		else if ( mixed instanceof $ ) {
-			// jQuery object (also DataTables instance)
-			jq = mixed;
-		}
-	
-		if ( jq ) {
-			return jq.map( function(i) {
-				idx = $.inArray( this, tables );
-				return idx !== -1 ? settings[idx] : null;
-			} ).toArray();
-		}
-	};
-	
-	
-	/**
-	 * DataTables API class - used to control and interface with  one or more
-	 * DataTables enhanced tables.
-	 *
-	 * The API class is heavily based on jQuery, presenting a chainable interface
-	 * that you can use to interact with tables. Each instance of the API class has
-	 * a "context" - i.e. the tables that it will operate on. This could be a single
-	 * table, all tables on a page or a sub-set thereof.
-	 *
-	 * Additionally the API is designed to allow you to easily work with the data in
-	 * the tables, retrieving and manipulating it as required. This is done by
-	 * presenting the API class as an array like interface. The contents of the
-	 * array depend upon the actions requested by each method (for example
-	 * `rows().nodes()` will return an array of nodes, while `rows().data()` will
-	 * return an array of objects or arrays depending upon your table's
-	 * configuration). The API object has a number of array like methods (`push`,
-	 * `pop`, `reverse` etc) as well as additional helper methods (`each`, `pluck`,
-	 * `unique` etc) to assist your working with the data held in a table.
-	 *
-	 * Most methods (those which return an Api instance) are chainable, which means
-	 * the return from a method call also has all of the methods available that the
-	 * top level object had. For example, these two calls are equivalent:
-	 *
-	 *     // Not chained
-	 *     api.row.add( {...} );
-	 *     api.draw();
-	 *
-	 *     // Chained
-	 *     api.row.add( {...} ).draw();
-	 *
-	 * @class DataTable.Api
-	 * @param {array|object|string|jQuery} context DataTable identifier. This is
-	 *   used to define which DataTables enhanced tables this API will operate on.
-	 *   Can be one of:
-	 *
-	 *   * `string` - jQuery selector. Any DataTables' matching the given selector
-	 *     with be found and used.
-	 *   * `node` - `TABLE` node which has already been formed into a DataTable.
-	 *   * `jQuery` - A jQuery object of `TABLE` nodes.
-	 *   * `object` - DataTables settings object
-	 * @param {array} [data] Data to initialise the Api instance with.
-	 *
-	 * @example
-	 *   // Direct initialisation during DataTables construction
-	 *   var api = $('#example').DataTable();
-	 *
-	 * @example
-	 *   // Initialisation using a DataTables jQuery object
-	 *   var api = $('#example').dataTable().api();
-	 *
-	 * @example
-	 *   // Initialisation as a constructor
-	 *   var api = new $.fn.DataTable.Api( 'table.dataTable' );
-	 */
-	_Api = function ( context, data )
-	{
-		if ( ! (this instanceof _Api) ) {
-			return new _Api( context, data );
-		}
-	
-		var settings = [];
-		var ctxSettings = function ( o ) {
-			var a = _toSettings( o );
-			if ( a ) {
-				settings.push.apply( settings, a );
-			}
-		};
-	
-		if ( $.isArray( context ) ) {
-			for ( var i=0, ien=context.length ; i<ien ; i++ ) {
-				ctxSettings( context[i] );
-			}
-		}
-		else {
-			ctxSettings( context );
-		}
-	
-		// Remove duplicates
-		this.context = _unique( settings );
-	
-		// Initial data
-		if ( data ) {
-			$.merge( this, data );
-		}
-	
-		// selector
-		this.selector = {
-			rows: null,
-			cols: null,
-			opts: null
-		};
-	
-		_Api.extend( this, this, __apiStruct );
-	};
-	
-	DataTable.Api = _Api;
-	
-	// Don't destroy the existing prototype, just extend it. Required for jQuery 2's
-	// isPlainObject.
-	$.extend( _Api.prototype, {
-		any: function ()
-		{
-			return this.count() !== 0;
-		},
-	
-	
-		concat:  __arrayProto.concat,
-	
-	
-		context: [], // array of table settings objects
-	
-	
-		count: function ()
-		{
-			return this.flatten().length;
-		},
-	
-	
-		each: function ( fn )
-		{
-			for ( var i=0, ien=this.length ; i<ien; i++ ) {
-				fn.call( this, this[i], i, this );
-			}
-	
-			return this;
-		},
-	
-	
-		eq: function ( idx )
-		{
-			var ctx = this.context;
-	
-			return ctx.length > idx ?
-				new _Api( ctx[idx], this[idx] ) :
-				null;
-		},
-	
-	
-		filter: function ( fn )
-		{
-			var a = [];
-	
-			if ( __arrayProto.filter ) {
-				a = __arrayProto.filter.call( this, fn, this );
-			}
-			else {
-				// Compatibility for browsers without EMCA-252-5 (JS 1.6)
-				for ( var i=0, ien=this.length ; i<ien ; i++ ) {
-					if ( fn.call( this, this[i], i, this ) ) {
-						a.push( this[i] );
-					}
-				}
-			}
-	
-			return new _Api( this.context, a );
-		},
-	
-	
-		flatten: function ()
-		{
-			var a = [];
-			return new _Api( this.context, a.concat.apply( a, this.toArray() ) );
-		},
-	
-	
-		join:    __arrayProto.join,
-	
-	
-		indexOf: __arrayProto.indexOf || function (obj, start)
-		{
-			for ( var i=(start || 0), ien=this.length ; i<ien ; i++ ) {
-				if ( this[i] === obj ) {
-					return i;
-				}
-			}
-			return -1;
-		},
-	
-		iterator: function ( flatten, type, fn, alwaysNew ) {
-			var
-				a = [], ret,
-				i, ien, j, jen,
-				context = this.context,
-				rows, items, item,
-				selector = this.selector;
-	
-			// Argument shifting
-			if ( typeof flatten === 'string' ) {
-				alwaysNew = fn;
-				fn = type;
-				type = flatten;
-				flatten = false;
-			}
-	
-			for ( i=0, ien=context.length ; i<ien ; i++ ) {
-				var apiInst = new _Api( context[i] );
-	
-				if ( type === 'table' ) {
-					ret = fn.call( apiInst, context[i], i );
-	
-					if ( ret !== undefined ) {
-						a.push( ret );
-					}
-				}
-				else if ( type === 'columns' || type === 'rows' ) {
-					// this has same length as context - one entry for each table
-					ret = fn.call( apiInst, context[i], this[i], i );
-	
-					if ( ret !== undefined ) {
-						a.push( ret );
-					}
-				}
-				else if ( type === 'column' || type === 'column-rows' || type === 'row' || type === 'cell' ) {
-					// columns and rows share the same structure.
-					// 'this' is an array of column indexes for each context
-					items = this[i];
-	
-					if ( type === 'column-rows' ) {
-						rows = _selector_row_indexes( context[i], selector.opts );
-					}
-	
-					for ( j=0, jen=items.length ; j<jen ; j++ ) {
-						item = items[j];
-	
-						if ( type === 'cell' ) {
-							ret = fn.call( apiInst, context[i], item.row, item.column, i, j );
-						}
-						else {
-							ret = fn.call( apiInst, context[i], item, i, j, rows );
-						}
-	
-						if ( ret !== undefined ) {
-							a.push( ret );
-						}
-					}
-				}
-			}
-	
-			if ( a.length || alwaysNew ) {
-				var api = new _Api( context, flatten ? a.concat.apply( [], a ) : a );
-				var apiSelector = api.selector;
-				apiSelector.rows = selector.rows;
-				apiSelector.cols = selector.cols;
-				apiSelector.opts = selector.opts;
-				return api;
-			}
-			return this;
-		},
-	
-	
-		lastIndexOf: __arrayProto.lastIndexOf || function (obj, start)
-		{
-			// Bit cheeky...
-			return this.indexOf.apply( this.toArray.reverse(), arguments );
-		},
-	
-	
-		length:  0,
-	
-	
-		map: function ( fn )
-		{
-			var a = [];
-	
-			if ( __arrayProto.map ) {
-				a = __arrayProto.map.call( this, fn, this );
-			}
-			else {
-				// Compatibility for browsers without EMCA-252-5 (JS 1.6)
-				for ( var i=0, ien=this.length ; i<ien ; i++ ) {
-					a.push( fn.call( this, this[i], i ) );
-				}
-			}
-	
-			return new _Api( this.context, a );
-		},
-	
-	
-		pluck: function ( prop )
-		{
-			return this.map( function ( el ) {
-				return el[ prop ];
-			} );
-		},
-	
-		pop:     __arrayProto.pop,
-	
-	
-		push:    __arrayProto.push,
-	
-	
-		// Does not return an API instance
-		reduce: __arrayProto.reduce || function ( fn, init )
-		{
-			return _fnReduce( this, fn, init, 0, this.length, 1 );
-		},
-	
-	
-		reduceRight: __arrayProto.reduceRight || function ( fn, init )
-		{
-			return _fnReduce( this, fn, init, this.length-1, -1, -1 );
-		},
-	
-	
-		reverse: __arrayProto.reverse,
-	
-	
-		// Object with rows, columns and opts
-		selector: null,
-	
-	
-		shift:   __arrayProto.shift,
-	
-	
-		slice: function () {
-			return new _Api( this.context, this );
-		},
-	
-	
-		sort:    __arrayProto.sort, // ? name - order?
-	
-	
-		splice:  __arrayProto.splice,
-	
-	
-		toArray: function ()
-		{
-			return __arrayProto.slice.call( this );
-		},
-	
-	
-		to$: function ()
-		{
-			return $( this );
-		},
-	
-	
-		toJQuery: function ()
-		{
-			return $( this );
-		},
-	
-	
-		unique: function ()
-		{
-			return new _Api( this.context, _unique(this) );
-		},
-	
-	
-		unshift: __arrayProto.unshift
-	} );
-	
-	
-	_Api.extend = function ( scope, obj, ext )
-	{
-		// Only extend API instances and static properties of the API
-		if ( ! ext.length || ! obj || ( ! (obj instanceof _Api) && ! obj.__dt_wrapper ) ) {
-			return;
-		}
-	
-		var
-			i, ien,
-			struct,
-			methodScoping = function ( scope, fn, struc ) {
-				return function () {
-					var ret = fn.apply( scope, arguments );
-	
-					// Method extension
-					_Api.extend( ret, ret, struc.methodExt );
-					return ret;
-				};
-			};
-	
-		for ( i=0, ien=ext.length ; i<ien ; i++ ) {
-			struct = ext[i];
-	
-			// Value
-			obj[ struct.name ] = struct.type === 'function' ?
-				methodScoping( scope, struct.val, struct ) :
-				struct.type === 'object' ?
-					{} :
-					struct.val;
-	
-			obj[ struct.name ].__dt_wrapper = true;
-	
-			// Property extension
-			_Api.extend( scope, obj[ struct.name ], struct.propExt );
-		}
-	};
-	
-	
-	// @todo - Is there need for an augment function?
-	// _Api.augment = function ( inst, name )
-	// {
-	// 	// Find src object in the structure from the name
-	// 	var parts = name.split('.');
-	
-	// 	_Api.extend( inst, obj );
-	// };
-	
-	
-	//     [
-	//       {
-	//         name:      'data'                -- string   - Property name
-	//         val:       function () {},       -- function - Api method (or undefined if just an object
-	//         methodExt: [ ... ],              -- array    - Array of Api object definitions to extend the method result
-	//         propExt:   [ ... ]               -- array    - Array of Api object definitions to extend the property
-	//       },
-	//       {
-	//         name:     'row'
-	//         val:       {},
-	//         methodExt: [ ... ],
-	//         propExt:   [
-	//           {
-	//             name:      'data'
-	//             val:       function () {},
-	//             methodExt: [ ... ],
-	//             propExt:   [ ... ]
-	//           },
-	//           ...
-	//         ]
-	//       }
-	//     ]
-	
-	_Api.register = _api_register = function ( name, val )
-	{
-		if ( $.isArray( name ) ) {
-			for ( var j=0, jen=name.length ; j<jen ; j++ ) {
-				_Api.register( name[j], val );
-			}
-			return;
-		}
-	
-		var
-			i, ien,
-			heir = name.split('.'),
-			struct = __apiStruct,
-			key, method;
-	
-		var find = function ( src, name ) {
-			for ( var i=0, ien=src.length ; i<ien ; i++ ) {
-				if ( src[i].name === name ) {
-					return src[i];
-				}
-			}
-			return null;
-		};
-	
-		for ( i=0, ien=heir.length ; i<ien ; i++ ) {
-			method = heir[i].indexOf('()') !== -1;
-			key = method ?
-				heir[i].replace('()', '') :
-				heir[i];
-	
-			var src = find( struct, key );
-			if ( ! src ) {
-				src = {
-					name:      key,
-					val:       {},
-					methodExt: [],
-					propExt:   [],
-					type:      'object'
-				};
-				struct.push( src );
-			}
-	
-			if ( i === ien-1 ) {
-				src.val = val;
-				src.type = typeof val === 'function' ?
-					'function' :
-					$.isPlainObject( val ) ?
-						'object' :
-						'other';
-			}
-			else {
-				struct = method ?
-					src.methodExt :
-					src.propExt;
-			}
-		}
-	};
-	
-	_Api.registerPlural = _api_registerPlural = function ( pluralName, singularName, val ) {
-		_Api.register( pluralName, val );
-	
-		_Api.register( singularName, function () {
-			var ret = val.apply( this, arguments );
-	
-			if ( ret === this ) {
-				// Returned item is the API instance that was passed in, return it
-				return this;
-			}
-			else if ( ret instanceof _Api ) {
-				// New API instance returned, want the value from the first item
-				// in the returned array for the singular result.
-				return ret.length ?
-					$.isArray( ret[0] ) ?
-						new _Api( ret.context, ret[0] ) : // Array results are 'enhanced'
-						ret[0] :
-					undefined;
-			}
-	
-			// Non-API return - just fire it back
-			return ret;
-		} );
-	};
-	
-	
-	/**
-	 * Selector for HTML tables. Apply the given selector to the give array of
-	 * DataTables settings objects.
-	 *
-	 * @param {string|integer} [selector] jQuery selector string or integer
-	 * @param  {array} Array of DataTables settings objects to be filtered
-	 * @return {array}
-	 * @ignore
-	 */
-	var __table_selector = function ( selector, a )
-	{
-		if ( $.isArray(selector) ) {
-			return $.map( selector, function (item) {
-				return __table_selector(item, a);
-			} );
-		}
-	
-		// Integer is used to pick out a table by index
-		if ( typeof selector === 'number' ) {
-			return [ a[ selector ] ];
-		}
-	
-		// Perform a jQuery selector on the table nodes
-		var nodes = $.map( a, function (el, i) {
-			return el.nTable;
-		} );
-	
-		return $(nodes)
-			.filter( selector )
-			.map( function (i) {
-				// Need to translate back from the table node to the settings
-				var idx = $.inArray( this, nodes );
-				return a[ idx ];
-			} )
-			.toArray();
-	};
-	
-	
-	
-	/**
-	 * Context selector for the API's context (i.e. the tables the API instance
-	 * refers to.
-	 *
-	 * @name    DataTable.Api#tables
-	 * @param {string|integer} [selector] Selector to pick which tables the iterator
-	 *   should operate on. If not given, all tables in the current context are
-	 *   used. This can be given as a jQuery selector (for example `':gt(0)'`) to
-	 *   select multiple tables or as an integer to select a single table.
-	 * @returns {DataTable.Api} Returns a new API instance if a selector is given.
-	 */
-	_api_register( 'tables()', function ( selector ) {
-		// A new instance is created if there was a selector specified
-		return selector !== undefined && selector !== null ?
-			new _Api( __table_selector( selector, this.context ) ) :
-			this;
-	} );
-	
-	
-	_api_register( 'table()', function ( selector ) {
-		var tables = this.tables( selector );
-		var ctx = tables.context;
-	
-		// Truncate to the first matched table
-		return ctx.length ?
-			new _Api( ctx[0] ) :
-			tables;
-	} );
-	
-	
-	_api_registerPlural( 'tables().nodes()', 'table().node()' , function () {
-		return this.iterator( 'table', function ( ctx ) {
-			return ctx.nTable;
-		}, 1 );
-	} );
-	
-	
-	_api_registerPlural( 'tables().body()', 'table().body()' , function () {
-		return this.iterator( 'table', function ( ctx ) {
-			return ctx.nTBody;
-		}, 1 );
-	} );
-	
-	
-	_api_registerPlural( 'tables().header()', 'table().header()' , function () {
-		return this.iterator( 'table', function ( ctx ) {
-			return ctx.nTHead;
-		}, 1 );
-	} );
-	
-	
-	_api_registerPlural( 'tables().footer()', 'table().footer()' , function () {
-		return this.iterator( 'table', function ( ctx ) {
-			return ctx.nTFoot;
-		}, 1 );
-	} );
-	
-	
-	_api_registerPlural( 'tables().containers()', 'table().container()' , function () {
-		return this.iterator( 'table', function ( ctx ) {
-			return ctx.nTableWrapper;
-		}, 1 );
-	} );
-	
-	
-	
-	/**
-	 * Redraw the tables in the current context.
-	 */
-	_api_register( 'draw()', function ( paging ) {
-		return this.iterator( 'table', function ( settings ) {
-			if ( paging === 'page' ) {
-				_fnDraw( settings );
-			}
-			else {
-				if ( typeof paging === 'string' ) {
-					paging = paging === 'full-hold' ?
-						false :
-						true;
-				}
-	
-				_fnReDraw( settings, paging===false );
-			}
-		} );
-	} );
-	
-	
-	
-	/**
-	 * Get the current page index.
-	 *
-	 * @return {integer} Current page index (zero based)
-	 *//**
-	 * Set the current page.
-	 *
-	 * Note that if you attempt to show a page which does not exist, DataTables will
-	 * not throw an error, but rather reset the paging.
-	 *
-	 * @param {integer|string} action The paging action to take. This can be one of:
-	 *  * `integer` - The page index to jump to
-	 *  * `string` - An action to take:
-	 *    * `first` - Jump to first page.
-	 *    * `next` - Jump to the next page
-	 *    * `previous` - Jump to previous page
-	 *    * `last` - Jump to the last page.
-	 * @returns {DataTables.Api} this
-	 */
-	_api_register( 'page()', function ( action ) {
-		if ( action === undefined ) {
-			return this.page.info().page; // not an expensive call
-		}
-	
-		// else, have an action to take on all tables
-		return this.iterator( 'table', function ( settings ) {
-			_fnPageChange( settings, action );
-		} );
-	} );
-	
-	
-	/**
-	 * Paging information for the first table in the current context.
-	 *
-	 * If you require paging information for another table, use the `table()` method
-	 * with a suitable selector.
-	 *
-	 * @return {object} Object with the following properties set:
-	 *  * `page` - Current page index (zero based - i.e. the first page is `0`)
-	 *  * `pages` - Total number of pages
-	 *  * `start` - Display index for the first record shown on the current page
-	 *  * `end` - Display index for the last record shown on the current page
-	 *  * `length` - Display length (number of records). Note that generally `start
-	 *    + length = end`, but this is not always true, for example if there are
-	 *    only 2 records to show on the final page, with a length of 10.
-	 *  * `recordsTotal` - Full data set length
-	 *  * `recordsDisplay` - Data set length once the current filtering criterion
-	 *    are applied.
-	 */
-	_api_register( 'page.info()', function ( action ) {
-		if ( this.context.length === 0 ) {
-			return undefined;
-		}
-	
-		var
-			settings   = this.context[0],
-			start      = settings._iDisplayStart,
-			len        = settings.oFeatures.bPaginate ? settings._iDisplayLength : -1,
-			visRecords = settings.fnRecordsDisplay(),
-			all        = len === -1;
-	
-		return {
-			"page":           all ? 0 : Math.floor( start / len ),
-			"pages":          all ? 1 : Math.ceil( visRecords / len ),
-			"start":          start,
-			"end":            settings.fnDisplayEnd(),
-			"length":         len,
-			"recordsTotal":   settings.fnRecordsTotal(),
-			"recordsDisplay": visRecords,
-			"serverSide":     _fnDataSource( settings ) === 'ssp'
-		};
-	} );
-	
-	
-	/**
-	 * Get the current page length.
-	 *
-	 * @return {integer} Current page length. Note `-1` indicates that all records
-	 *   are to be shown.
-	 *//**
-	 * Set the current page length.
-	 *
-	 * @param {integer} Page length to set. Use `-1` to show all records.
-	 * @returns {DataTables.Api} this
-	 */
-	_api_register( 'page.len()', function ( len ) {
-		// Note that we can't call this function 'length()' because `length`
-		// is a Javascript property of functions which defines how many arguments
-		// the function expects.
-		if ( len === undefined ) {
-			return this.context.length !== 0 ?
-				this.context[0]._iDisplayLength :
-				undefined;
-		}
-	
-		// else, set the page length
-		return this.iterator( 'table', function ( settings ) {
-			_fnLengthChange( settings, len );
-		} );
-	} );
-	
-	
-	
-	var __reload = function ( settings, holdPosition, callback ) {
-		// Use the draw event to trigger a callback
-		if ( callback ) {
-			var api = new _Api( settings );
-	
-			api.one( 'draw', function () {
-				callback( api.ajax.json() );
-			} );
-		}
-	
-		if ( _fnDataSource( settings ) == 'ssp' ) {
-			_fnReDraw( settings, holdPosition );
-		}
-		else {
-			_fnProcessingDisplay( settings, true );
-	
-			// Cancel an existing request
-			var xhr = settings.jqXHR;
-			if ( xhr && xhr.readyState !== 4 ) {
-				xhr.abort();
-			}
-	
-			// Trigger xhr
-			_fnBuildAjax( settings, [], function( json ) {
-				_fnClearTable( settings );
-	
-				var data = _fnAjaxDataSrc( settings, json );
-				for ( var i=0, ien=data.length ; i<ien ; i++ ) {
-					_fnAddData( settings, data[i] );
-				}
-	
-				_fnReDraw( settings, holdPosition );
-				_fnProcessingDisplay( settings, false );
-			} );
-		}
-	};
-	
-	
-	/**
-	 * Get the JSON response from the last Ajax request that DataTables made to the
-	 * server. Note that this returns the JSON from the first table in the current
-	 * context.
-	 *
-	 * @return {object} JSON received from the server.
-	 */
-	_api_register( 'ajax.json()', function () {
-		var ctx = this.context;
-	
-		if ( ctx.length > 0 ) {
-			return ctx[0].json;
-		}
-	
-		// else return undefined;
-	} );
-	
-	
-	/**
-	 * Get the data submitted in the last Ajax request
-	 */
-	_api_register( 'ajax.params()', function () {
-		var ctx = this.context;
-	
-		if ( ctx.length > 0 ) {
-			return ctx[0].oAjaxData;
-		}
-	
-		// else return undefined;
-	} );
-	
-	
-	/**
-	 * Reload tables from the Ajax data source. Note that this function will
-	 * automatically re-draw the table when the remote data has been loaded.
-	 *
-	 * @param {boolean} [reset=true] Reset (default) or hold the current paging
-	 *   position. A full re-sort and re-filter is performed when this method is
-	 *   called, which is why the pagination reset is the default action.
-	 * @returns {DataTables.Api} this
-	 */
-	_api_register( 'ajax.reload()', function ( callback, resetPaging ) {
-		return this.iterator( 'table', function (settings) {
-			__reload( settings, resetPaging===false, callback );
-		} );
-	} );
-	
-	
-	/**
-	 * Get the current Ajax URL. Note that this returns the URL from the first
-	 * table in the current context.
-	 *
-	 * @return {string} Current Ajax source URL
-	 *//**
-	 * Set the Ajax URL. Note that this will set the URL for all tables in the
-	 * current context.
-	 *
-	 * @param {string} url URL to set.
-	 * @returns {DataTables.Api} this
-	 */
-	_api_register( 'ajax.url()', function ( url ) {
-		var ctx = this.context;
-	
-		if ( url === undefined ) {
-			// get
-			if ( ctx.length === 0 ) {
-				return undefined;
-			}
-			ctx = ctx[0];
-	
-			return ctx.ajax ?
-				$.isPlainObject( ctx.ajax ) ?
-					ctx.ajax.url :
-					ctx.ajax :
-				ctx.sAjaxSource;
-		}
-	
-		// set
-		return this.iterator( 'table', function ( settings ) {
-			if ( $.isPlainObject( settings.ajax ) ) {
-				settings.ajax.url = url;
-			}
-			else {
-				settings.ajax = url;
-			}
-			// No need to consider sAjaxSource here since DataTables gives priority
-			// to `ajax` over `sAjaxSource`. So setting `ajax` here, renders any
-			// value of `sAjaxSource` redundant.
-		} );
-	} );
-	
-	
-	/**
-	 * Load data from the newly set Ajax URL. Note that this method is only
-	 * available when `ajax.url()` is used to set a URL. Additionally, this method
-	 * has the same effect as calling `ajax.reload()` but is provided for
-	 * convenience when setting a new URL. Like `ajax.reload()` it will
-	 * automatically redraw the table once the remote data has been loaded.
-	 *
-	 * @returns {DataTables.Api} this
-	 */
-	_api_register( 'ajax.url().load()', function ( callback, resetPaging ) {
-		// Same as a reload, but makes sense to present it for easy access after a
-		// url change
-		return this.iterator( 'table', function ( ctx ) {
-			__reload( ctx, resetPaging===false, callback );
-		} );
-	} );
-	
-	
-	
-	
-	var _selector_run = function ( type, selector, selectFn, settings, opts )
-	{
-		var
-			out = [], res,
-			a, i, ien, j, jen,
-			selectorType = typeof selector;
-	
-		// Can't just check for isArray here, as an API or jQuery instance might be
-		// given with their array like look
-		if ( ! selector || selectorType === 'string' || selectorType === 'function' || selector.length === undefined ) {
-			selector = [ selector ];
-		}
-	
-		for ( i=0, ien=selector.length ; i<ien ; i++ ) {
-			// Only split on simple strings - complex expressions will be jQuery selectors
-			a = selector[i] && selector[i].split && ! selector[i].match(/[\[\(:]/) ?
-				selector[i].split(',') :
-				[ selector[i] ];
-	
-			for ( j=0, jen=a.length ; j<jen ; j++ ) {
-				res = selectFn( typeof a[j] === 'string' ? $.trim(a[j]) : a[j] );
-	
-				if ( res && res.length ) {
-					out = out.concat( res );
-				}
-			}
-		}
-	
-		// selector extensions
-		var ext = _ext.selector[ type ];
-		if ( ext.length ) {
-			for ( i=0, ien=ext.length ; i<ien ; i++ ) {
-				out = ext[i]( settings, opts, out );
-			}
-		}
-	
-		return _unique( out );
-	};
-	
-	
-	var _selector_opts = function ( opts )
-	{
-		if ( ! opts ) {
-			opts = {};
-		}
-	
-		// Backwards compatibility for 1.9- which used the terminology filter rather
-		// than search
-		if ( opts.filter && opts.search === undefined ) {
-			opts.search = opts.filter;
-		}
-	
-		return $.extend( {
-			search: 'none',
-			order: 'current',
-			page: 'all'
-		}, opts );
-	};
-	
-	
-	var _selector_first = function ( inst )
-	{
-		// Reduce the API instance to the first item found
-		for ( var i=0, ien=inst.length ; i<ien ; i++ ) {
-			if ( inst[i].length > 0 ) {
-				// Assign the first element to the first item in the instance
-				// and truncate the instance and context
-				inst[0] = inst[i];
-				inst[0].length = 1;
-				inst.length = 1;
-				inst.context = [ inst.context[i] ];
-	
-				return inst;
-			}
-		}
-	
-		// Not found - return an empty instance
-		inst.length = 0;
-		return inst;
-	};
-	
-	
-	var _selector_row_indexes = function ( settings, opts )
-	{
-		var
-			i, ien, tmp, a=[],
-			displayFiltered = settings.aiDisplay,
-			displayMaster = settings.aiDisplayMaster;
-	
-		var
-			search = opts.search,  // none, applied, removed
-			order  = opts.order,   // applied, current, index (original - compatibility with 1.9)
-			page   = opts.page;    // all, current
-	
-		if ( _fnDataSource( settings ) == 'ssp' ) {
-			// In server-side processing mode, most options are irrelevant since
-			// rows not shown don't exist and the index order is the applied order
-			// Removed is a special case - for consistency just return an empty
-			// array
-			return search === 'removed' ?
-				[] :
-				_range( 0, displayMaster.length );
-		}
-		else if ( page == 'current' ) {
-			// Current page implies that order=current and fitler=applied, since it is
-			// fairly senseless otherwise, regardless of what order and search actually
-			// are
-			for ( i=settings._iDisplayStart, ien=settings.fnDisplayEnd() ; i<ien ; i++ ) {
-				a.push( displayFiltered[i] );
-			}
-		}
-		else if ( order == 'current' || order == 'applied' ) {
-			if ( search == 'none') {
-				a = displayMaster.slice();
-			}
-			else if ( search == 'applied' ) {
-				a = displayFiltered.slice();
-			}
-			else if ( search == 'removed' ) {
-				// O(n+m) solution by creating a hash map
-				var displayFilteredMap = {};
-	
-				for ( var i=0, ien=displayFiltered.length ; i<ien ; i++ ) {
-					displayFilteredMap[displayFiltered[i]] = null;
-				}
-	
-				a = $.map( displayMaster, function (el) {
-					return ! displayFilteredMap.hasOwnProperty(el) ?
-						el :
-						null;
-				} );
-			}
-		}
-		else if ( order == 'index' || order == 'original' ) {
-			for ( i=0, ien=settings.aoData.length ; i<ien ; i++ ) {
-				if ( search == 'none' ) {
-					a.push( i );
-				}
-				else { // applied | removed
-					tmp = $.inArray( i, displayFiltered );
-	
-					if ((tmp === -1 && search == 'removed') ||
-						(tmp >= 0   && search == 'applied') )
-					{
-						a.push( i );
-					}
-				}
-			}
-		}
-	
-		return a;
-	};
-	
-	
-	/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
-	 * Rows
-	 *
-	 * {}          - no selector - use all available rows
-	 * {integer}   - row aoData index
-	 * {node}      - TR node
-	 * {string}    - jQuery selector to apply to the TR elements
-	 * {array}     - jQuery array of nodes, or simply an array of TR nodes
-	 *
-	 */
-	var __row_selector = function ( settings, selector, opts )
-	{
-		var rows;
-		var run = function ( sel ) {
-			var selInt = _intVal( sel );
-			var i, ien;
-			var aoData = settings.aoData;
-	
-			// Short cut - selector is a number and no options provided (default is
-			// all records, so no need to check if the index is in there, since it
-			// must be - dev error if the index doesn't exist).
-			if ( selInt !== null && ! opts ) {
-				return [ selInt ];
-			}
-	
-			if ( ! rows ) {
-				rows = _selector_row_indexes( settings, opts );
-			}
-	
-			if ( selInt !== null && $.inArray( selInt, rows ) !== -1 ) {
-				// Selector - integer
-				return [ selInt ];
-			}
-			else if ( sel === null || sel === undefined || sel === '' ) {
-				// Selector - none
-				return rows;
-			}
-	
-			// Selector - function
-			if ( typeof sel === 'function' ) {
-				return $.map( rows, function (idx) {
-					var row = aoData[ idx ];
-					return sel( idx, row._aData, row.nTr ) ? idx : null;
-				} );
-			}
-	
-			// Selector - node
-			if ( sel.nodeName ) {
-				var rowIdx = sel._DT_RowIndex;  // Property added by DT for fast lookup
-				var cellIdx = sel._DT_CellIndex;
-	
-				if ( rowIdx !== undefined ) {
-					// Make sure that the row is actually still present in the table
-					return aoData[ rowIdx ] && aoData[ rowIdx ].nTr === sel ?
-						[ rowIdx ] :
-						[];
-				}
-				else if ( cellIdx ) {
-					return aoData[ cellIdx.row ] && aoData[ cellIdx.row ].nTr === sel.parentNode ?
-						[ cellIdx.row ] :
-						[];
-				}
-				else {
-					var host = $(sel).closest('*[data-dt-row]');
-					return host.length ?
-						[ host.data('dt-row') ] :
-						[];
-				}
-			}
-	
-			// ID selector. Want to always be able to select rows by id, regardless
-			// of if the tr element has been created or not, so can't rely upon
-			// jQuery here - hence a custom implementation. This does not match
-			// Sizzle's fast selector or HTML4 - in HTML5 the ID can be anything,
-			// but to select it using a CSS selector engine (like Sizzle or
-			// querySelect) it would need to need to be escaped for some characters.
-			// DataTables simplifies this for row selectors since you can select
-			// only a row. A # indicates an id any anything that follows is the id -
-			// unescaped.
-			if ( typeof sel === 'string' && sel.charAt(0) === '#' ) {
-				// get row index from id
-				var rowObj = settings.aIds[ sel.replace( /^#/, '' ) ];
-				if ( rowObj !== undefined ) {
-					return [ rowObj.idx ];
-				}
-	
-				// need to fall through to jQuery in case there is DOM id that
-				// matches
-			}
-			
-			// Get nodes in the order from the `rows` array with null values removed
-			var nodes = _removeEmpty(
-				_pluck_order( settings.aoData, rows, 'nTr' )
-			);
-	
-			// Selector - jQuery selector string, array of nodes or jQuery object/
-			// As jQuery's .filter() allows jQuery objects to be passed in filter,
-			// it also allows arrays, so this will cope with all three options
-			return $(nodes)
-				.filter( sel )
-				.map( function () {
-					return this._DT_RowIndex;
-				} )
-				.toArray();
-		};
-	
-		return _selector_run( 'row', selector, run, settings, opts );
-	};
-	
-	
-	_api_register( 'rows()', function ( selector, opts ) {
-		// argument shifting
-		if ( selector === undefined ) {
-			selector = '';
-		}
-		else if ( $.isPlainObject( selector ) ) {
-			opts = selector;
-			selector = '';
-		}
-	
-		opts = _selector_opts( opts );
-	
-		var inst = this.iterator( 'table', function ( settings ) {
-			return __row_selector( settings, selector, opts );
-		}, 1 );
-	
-		// Want argument shifting here and in __row_selector?
-		inst.selector.rows = selector;
-		inst.selector.opts = opts;
-	
-		return inst;
-	} );
-	
-	_api_register( 'rows().nodes()', function () {
-		return this.iterator( 'row', function ( settings, row ) {
-			return settings.aoData[ row ].nTr || undefined;
-		}, 1 );
-	} );
-	
-	_api_register( 'rows().data()', function () {
-		return this.iterator( true, 'rows', function ( settings, rows ) {
-			return _pluck_order( settings.aoData, rows, '_aData' );
-		}, 1 );
-	} );
-	
-	_api_registerPlural( 'rows().cache()', 'row().cache()', function ( type ) {
-		return this.iterator( 'row', function ( settings, row ) {
-			var r = settings.aoData[ row ];
-			return type === 'search' ? r._aFilterData : r._aSortData;
-		}, 1 );
-	} );
-	
-	_api_registerPlural( 'rows().invalidate()', 'row().invalidate()', function ( src ) {
-		return this.iterator( 'row', function ( settings, row ) {
-			_fnInvalidate( settings, row, src );
-		} );
-	} );
-	
-	_api_registerPlural( 'rows().indexes()', 'row().index()', function () {
-		return this.iterator( 'row', function ( settings, row ) {
-			return row;
-		}, 1 );
-	} );
-	
-	_api_registerPlural( 'rows().ids()', 'row().id()', function ( hash ) {
-		var a = [];
-		var context = this.context;
-	
-		// `iterator` will drop undefined values, but in this case we want them
-		for ( var i=0, ien=context.length ; i<ien ; i++ ) {
-			for ( var j=0, jen=this[i].length ; j<jen ; j++ ) {
-				var id = context[i].rowIdFn( context[i].aoData[ this[i][j] ]._aData );
-				a.push( (hash === true ? '#' : '' )+ id );
-			}
-		}
-	
-		return new _Api( context, a );
-	} );
-	
-	_api_registerPlural( 'rows().remove()', 'row().remove()', function () {
-		var that = this;
-	
-		this.iterator( 'row', function ( settings, row, thatIdx ) {
-			var data = settings.aoData;
-			var rowData = data[ row ];
-			var i, ien, j, jen;
-			var loopRow, loopCells;
-	
-			data.splice( row, 1 );
-	
-			// Update the cached indexes
-			for ( i=0, ien=data.length ; i<ien ; i++ ) {
-				loopRow = data[i];
-				loopCells = loopRow.anCells;
-	
-				// Rows
-				if ( loopRow.nTr !== null ) {
-					loopRow.nTr._DT_RowIndex = i;
-				}
-	
-				// Cells
-				if ( loopCells !== null ) {
-					for ( j=0, jen=loopCells.length ; j<jen ; j++ ) {
-						loopCells[j]._DT_CellIndex.row = i;
-					}
-				}
-			}
-	
-			// Delete from the display arrays
-			_fnDeleteIndex( settings.aiDisplayMaster, row );
-			_fnDeleteIndex( settings.aiDisplay, row );
-			_fnDeleteIndex( that[ thatIdx ], row, false ); // maintain local indexes
-	
-			// For server-side processing tables - subtract the deleted row from the count
-			if ( settings._iRecordsDisplay > 0 ) {
-				settings._iRecordsDisplay--;
-			}
-	
-			// Check for an 'overflow' they case for displaying the table
-			_fnLengthOverflow( settings );
-	
-			// Remove the row's ID reference if there is one
-			var id = settings.rowIdFn( rowData._aData );
-			if ( id !== undefined ) {
-				delete settings.aIds[ id ];
-			}
-		} );
-	
-		this.iterator( 'table', function ( settings ) {
-			for ( var i=0, ien=settings.aoData.length ; i<ien ; i++ ) {
-				settings.aoData[i].idx = i;
-			}
-		} );
-	
-		return this;
-	} );
-	
-	
-	_api_register( 'rows.add()', function ( rows ) {
-		var newRows = this.iterator( 'table', function ( settings ) {
-				var row, i, ien;
-				var out = [];
-	
-				for ( i=0, ien=rows.length ; i<ien ; i++ ) {
-					row = rows[i];
-	
-					if ( row.nodeName && row.nodeName.toUpperCase() === 'TR' ) {
-						out.push( _fnAddTr( settings, row )[0] );
-					}
-					else {
-						out.push( _fnAddData( settings, row ) );
-					}
-				}
-	
-				return out;
-			}, 1 );
-	
-		// Return an Api.rows() extended instance, so rows().nodes() etc can be used
-		var modRows = this.rows( -1 );
-		modRows.pop();
-		$.merge( modRows, newRows );
-	
-		return modRows;
-	} );
-	
-	
-	
-	
-	
-	/**
-	 *
-	 */
-	_api_register( 'row()', function ( selector, opts ) {
-		return _selector_first( this.rows( selector, opts ) );
-	} );
-	
-	
-	_api_register( 'row().data()', function ( data ) {
-		var ctx = this.context;
-	
-		if ( data === undefined ) {
-			// Get
-			return ctx.length && this.length ?
-				ctx[0].aoData[ this[0] ]._aData :
-				undefined;
-		}
-	
-		// Set
-		var row = ctx[0].aoData[ this[0] ];
-		row._aData = data;
-	
-		// If the DOM has an id, and the data source is an array
-		if ( $.isArray( data ) && row.nTr && row.nTr.id ) {
-			_fnSetObjectDataFn( ctx[0].rowId )( data, row.nTr.id );
-		}
-	
-		// Automatically invalidate
-		_fnInvalidate( ctx[0], this[0], 'data' );
-	
-		return this;
-	} );
-	
-	
-	_api_register( 'row().node()', function () {
-		var ctx = this.context;
-	
-		return ctx.length && this.length ?
-			ctx[0].aoData[ this[0] ].nTr || null :
-			null;
-	} );
-	
-	
-	_api_register( 'row.add()', function ( row ) {
-		// Allow a jQuery object to be passed in - only a single row is added from
-		// it though - the first element in the set
-		if ( row instanceof $ && row.length ) {
-			row = row[0];
-		}
-	
-		var rows = this.iterator( 'table', function ( settings ) {
-			if ( row.nodeName && row.nodeName.toUpperCase() === 'TR' ) {
-				return _fnAddTr( settings, row )[0];
-			}
-			return _fnAddData( settings, row );
-		} );
-	
-		// Return an Api.rows() extended instance, with the newly added row selected
-		return this.row( rows[0] );
-	} );
-	
-	
-	
-	var __details_add = function ( ctx, row, data, klass )
-	{
-		// Convert to array of TR elements
-		var rows = [];
-		var addRow = function ( r, k ) {
-			// Recursion to allow for arrays of jQuery objects
-			if ( $.isArray( r ) || r instanceof $ ) {
-				for ( var i=0, ien=r.length ; i<ien ; i++ ) {
-					addRow( r[i], k );
-				}
-				return;
-			}
-	
-			// If we get a TR element, then just add it directly - up to the dev
-			// to add the correct number of columns etc
-			if ( r.nodeName && r.nodeName.toLowerCase() === 'tr' ) {
-				rows.push( r );
-			}
-			else {
-				// Otherwise create a row with a wrapper
-				var created = $('<tr><td/></tr>').addClass( k );
-				$('td', created)
-					.addClass( k )
-					.html( r )
-					[0].colSpan = _fnVisbleColumns( ctx );
-	
-				rows.push( created[0] );
-			}
-		};
-	
-		addRow( data, klass );
-	
-		if ( row._details ) {
-			row._details.detach();
-		}
-	
-		row._details = $(rows);
-	
-		// If the children were already shown, that state should be retained
-		if ( row._detailsShow ) {
-			row._details.insertAfter( row.nTr );
-		}
-	};
-	
-	
-	var __details_remove = function ( api, idx )
-	{
-		var ctx = api.context;
-	
-		if ( ctx.length ) {
-			var row = ctx[0].aoData[ idx !== undefined ? idx : api[0] ];
-	
-			if ( row && row._details ) {
-				row._details.remove();
-	
-				row._detailsShow = undefined;
-				row._details = undefined;
-			}
-		}
-	};
-	
-	
-	var __details_display = function ( api, show ) {
-		var ctx = api.context;
-	
-		if ( ctx.length && api.length ) {
-			var row = ctx[0].aoData[ api[0] ];
-	
-			if ( row._details ) {
-				row._detailsShow = show;
-	
-				if ( show ) {
-					row._details.insertAfter( row.nTr );
-				}
-				else {
-					row._details.detach();
-				}
-	
-				__details_events( ctx[0] );
-			}
-		}
-	};
-	
-	
-	var __details_events = function ( settings )
-	{
-		var api = new _Api( settings );
-		var namespace = '.dt.DT_details';
-		var drawEvent = 'draw'+namespace;
-		var colvisEvent = 'column-visibility'+namespace;
-		var destroyEvent = 'destroy'+namespace;
-		var data = settings.aoData;
-	
-		api.off( drawEvent +' '+ colvisEvent +' '+ destroyEvent );
-	
-		if ( _pluck( data, '_details' ).length > 0 ) {
-			// On each draw, insert the required elements into the document
-			api.on( drawEvent, function ( e, ctx ) {
-				if ( settings !== ctx ) {
-					return;
-				}
-	
-				api.rows( {page:'current'} ).eq(0).each( function (idx) {
-					// Internal data grab
-					var row = data[ idx ];
-	
-					if ( row._detailsShow ) {
-						row._details.insertAfter( row.nTr );
-					}
-				} );
-			} );
-	
-			// Column visibility change - update the colspan
-			api.on( colvisEvent, function ( e, ctx, idx, vis ) {
-				if ( settings !== ctx ) {
-					return;
-				}
-	
-				// Update the colspan for the details rows (note, only if it already has
-				// a colspan)
-				var row, visible = _fnVisbleColumns( ctx );
-	
-				for ( var i=0, ien=data.length ; i<ien ; i++ ) {
-					row = data[i];
-	
-					if ( row._details ) {
-						row._details.children('td[colspan]').attr('colspan', visible );
-					}
-				}
-			} );
-	
-			// Table destroyed - nuke any child rows
-			api.on( destroyEvent, function ( e, ctx ) {
-				if ( settings !== ctx ) {
-					return;
-				}
-	
-				for ( var i=0, ien=data.length ; i<ien ; i++ ) {
-					if ( data[i]._details ) {
-						__details_remove( api, i );
-					}
-				}
-			} );
-		}
-	};
-	
-	// Strings for the method names to help minification
-	var _emp = '';
-	var _child_obj = _emp+'row().child';
-	var _child_mth = _child_obj+'()';
-	
-	// data can be:
-	//  tr
-	//  string
-	//  jQuery or array of any of the above
-	_api_register( _child_mth, function ( data, klass ) {
-		var ctx = this.context;
-	
-		if ( data === undefined ) {
-			// get
-			return ctx.length && this.length ?
-				ctx[0].aoData[ this[0] ]._details :
-				undefined;
-		}
-		else if ( data === true ) {
-			// show
-			this.child.show();
-		}
-		else if ( data === false ) {
-			// remove
-			__details_remove( this );
-		}
-		else if ( ctx.length && this.length ) {
-			// set
-			__details_add( ctx[0], ctx[0].aoData[ this[0] ], data, klass );
-		}
-	
-		return this;
-	} );
-	
-	
-	_api_register( [
-		_child_obj+'.show()',
-		_child_mth+'.show()' // only when `child()` was called with parameters (without
-	], function ( show ) {   // it returns an object and this method is not executed)
-		__details_display( this, true );
-		return this;
-	} );
-	
-	
-	_api_register( [
-		_child_obj+'.hide()',
-		_child_mth+'.hide()' // only when `child()` was called with parameters (without
-	], function () {         // it returns an object and this method is not executed)
-		__details_display( this, false );
-		return this;
-	} );
-	
-	
-	_api_register( [
-		_child_obj+'.remove()',
-		_child_mth+'.remove()' // only when `child()` was called with parameters (without
-	], function () {           // it returns an object and this method is not executed)
-		__details_remove( this );
-		return this;
-	} );
-	
-	
-	_api_register( _child_obj+'.isShown()', function () {
-		var ctx = this.context;
-	
-		if ( ctx.length && this.length ) {
-			// _detailsShown as false or undefined will fall through to return false
-			return ctx[0].aoData[ this[0] ]._detailsShow || false;
-		}
-		return false;
-	} );
-	
-	
-	
-	/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
-	 * Columns
-	 *
-	 * {integer}           - column index (>=0 count from left, <0 count from right)
-	 * "{integer}:visIdx"  - visible column index (i.e. translate to column index)  (>=0 count from left, <0 count from right)
-	 * "{integer}:visible" - alias for {integer}:visIdx  (>=0 count from left, <0 count from right)
-	 * "{string}:name"     - column name
-	 * "{string}"          - jQuery selector on column header nodes
-	 *
-	 */
-	
-	// can be an array of these items, comma separated list, or an array of comma
-	// separated lists
-	
-	var __re_column_selector = /^([^:]+):(name|visIdx|visible)$/;
-	
-	
-	// r1 and r2 are redundant - but it means that the parameters match for the
-	// iterator callback in columns().data()
-	var __columnData = function ( settings, column, r1, r2, rows ) {
-		var a = [];
-		for ( var row=0, ien=rows.length ; row<ien ; row++ ) {
-			a.push( _fnGetCellData( settings, rows[row], column ) );
-		}
-		return a;
-	};
-	
-	
-	var __column_selector = function ( settings, selector, opts )
-	{
-		var
-			columns = settings.aoColumns,
-			names = _pluck( columns, 'sName' ),
-			nodes = _pluck( columns, 'nTh' );
-	
-		var run = function ( s ) {
-			var selInt = _intVal( s );
-	
-			// Selector - all
-			if ( s === '' ) {
-				return _range( columns.length );
-			}
-	
-			// Selector - index
-			if ( selInt !== null ) {
-				return [ selInt >= 0 ?
-					selInt : // Count from left
-					columns.length + selInt // Count from right (+ because its a negative value)
-				];
-			}
-	
-			// Selector = function
-			if ( typeof s === 'function' ) {
-				var rows = _selector_row_indexes( settings, opts );
-	
-				return $.map( columns, function (col, idx) {
-					return s(
-							idx,
-							__columnData( settings, idx, 0, 0, rows ),
-							nodes[ idx ]
-						) ? idx : null;
-				} );
-			}
-	
-			// jQuery or string selector
-			var match = typeof s === 'string' ?
-				s.match( __re_column_selector ) :
-				'';
-	
-			if ( match ) {
-				switch( match[2] ) {
-					case 'visIdx':
-					case 'visible':
-						var idx = parseInt( match[1], 10 );
-						// Visible index given, convert to column index
-						if ( idx < 0 ) {
-							// Counting from the right
-							var visColumns = $.map( columns, function (col,i) {
-								return col.bVisible ? i : null;
-							} );
-							return [ visColumns[ visColumns.length + idx ] ];
-						}
-						// Counting from the left
-						return [ _fnVisibleToColumnIndex( settings, idx ) ];
-	
-					case 'name':
-						// match by name. `names` is column index complete and in order
-						return $.map( names, function (name, i) {
-							return name === match[1] ? i : null;
-						} );
-	
-					default:
-						return [];
-				}
-			}
-	
-			// Cell in the table body
-			if ( s.nodeName && s._DT_CellIndex ) {
-				return [ s._DT_CellIndex.column ];
-			}
-	
-			// jQuery selector on the TH elements for the columns
-			var jqResult = $( nodes )
-				.filter( s )
-				.map( function () {
-					return $.inArray( this, nodes ); // `nodes` is column index complete and in order
-				} )
-				.toArray();
-	
-			if ( jqResult.length || ! s.nodeName ) {
-				return jqResult;
-			}
-	
-			// Otherwise a node which might have a `dt-column` data attribute, or be
-			// a child or such an element
-			var host = $(s).closest('*[data-dt-column]');
-			return host.length ?
-				[ host.data('dt-column') ] :
-				[];
-		};
-	
-		return _selector_run( 'column', selector, run, settings, opts );
-	};
-	
-	
-	var __setColumnVis = function ( settings, column, vis ) {
-		var
-			cols = settings.aoColumns,
-			col  = cols[ column ],
-			data = settings.aoData,
-			row, cells, i, ien, tr;
-	
-		// Get
-		if ( vis === undefined ) {
-			return col.bVisible;
-		}
-	
-		// Set
-		// No change
-		if ( col.bVisible === vis ) {
-			return;
-		}
-	
-		if ( vis ) {
-			// Insert column
-			// Need to decide if we should use appendChild or insertBefore
-			var insertBefore = $.inArray( true, _pluck(cols, 'bVisible'), column+1 );
-	
-			for ( i=0, ien=data.length ; i<ien ; i++ ) {
-				tr = data[i].nTr;
-				cells = data[i].anCells;
-	
-				if ( tr ) {
-					// insertBefore can act like appendChild if 2nd arg is null
-					tr.insertBefore( cells[ column ], cells[ insertBefore ] || null );
-				}
-			}
-		}
-		else {
-			// Remove column
-			$( _pluck( settings.aoData, 'anCells', column ) ).detach();
-		}
-	
-		// Common actions
-		col.bVisible = vis;
-	};
-	
-	
-	_api_register( 'columns()', function ( selector, opts ) {
-		// argument shifting
-		if ( selector === undefined ) {
-			selector = '';
-		}
-		else if ( $.isPlainObject( selector ) ) {
-			opts = selector;
-			selector = '';
-		}
-	
-		opts = _selector_opts( opts );
-	
-		var inst = this.iterator( 'table', function ( settings ) {
-			return __column_selector( settings, selector, opts );
-		}, 1 );
-	
-		// Want argument shifting here and in _row_selector?
-		inst.selector.cols = selector;
-		inst.selector.opts = opts;
-	
-		return inst;
-	} );
-	
-	_api_registerPlural( 'columns().header()', 'column().header()', function ( selector, opts ) {
-		return this.iterator( 'column', function ( settings, column ) {
-			return settings.aoColumns[column].nTh;
-		}, 1 );
-	} );
-	
-	_api_registerPlural( 'columns().footer()', 'column().footer()', function ( selector, opts ) {
-		return this.iterator( 'column', function ( settings, column ) {
-			return settings.aoColumns[column].nTf;
-		}, 1 );
-	} );
-	
-	_api_registerPlural( 'columns().data()', 'column().data()', function () {
-		return this.iterator( 'column-rows', __columnData, 1 );
-	} );
-	
-	_api_registerPlural( 'columns().dataSrc()', 'column().dataSrc()', function () {
-		return this.iterator( 'column', function ( settings, column ) {
-			return settings.aoColumns[column].mData;
-		}, 1 );
-	} );
-	
-	_api_registerPlural( 'columns().cache()', 'column().cache()', function ( type ) {
-		return this.iterator( 'column-rows', function ( settings, column, i, j, rows ) {
-			return _pluck_order( settings.aoData, rows,
-				type === 'search' ? '_aFilterData' : '_aSortData', column
-			);
-		}, 1 );
-	} );
-	
-	_api_registerPlural( 'columns().nodes()', 'column().nodes()', function () {
-		return this.iterator( 'column-rows', function ( settings, column, i, j, rows ) {
-			return _pluck_order( settings.aoData, rows, 'anCells', column ) ;
-		}, 1 );
-	} );
-	
-	_api_registerPlural( 'columns().visible()', 'column().visible()', function ( vis, calc ) {
-		var that = this;
-		var ret = this.iterator( 'column', function ( settings, column ) {
-			if ( vis === undefined ) {
-				return settings.aoColumns[ column ].bVisible;
-			} // else
-			__setColumnVis( settings, column, vis );
-		} );
-	
-		// Group the column visibility changes
-		if ( vis !== undefined ) {
-			this.iterator( 'table', function ( settings ) {
-				// Redraw the header after changes
-				_fnDrawHead( settings, settings.aoHeader );
-				_fnDrawHead( settings, settings.aoFooter );
-		
-				// Update colspan for no records display. Child rows and extensions will use their own
-				// listeners to do this - only need to update the empty table item here
-				if ( ! settings.aiDisplay.length ) {
-					$(settings.nTBody).find('td[colspan]').attr('colspan', _fnVisbleColumns(settings));
-				}
-		
-				_fnSaveState( settings );
-	
-				// Second loop once the first is done for events
-				that.iterator( 'column', function ( settings, column ) {
-					_fnCallbackFire( settings, null, 'column-visibility', [settings, column, vis, calc] );
-				} );
-	
-				if ( calc === undefined || calc ) {
-					that.columns.adjust();
-				}
-			});
-		}
-	
-		return ret;
-	} );
-	
-	_api_registerPlural( 'columns().indexes()', 'column().index()', function ( type ) {
-		return this.iterator( 'column', function ( settings, column ) {
-			return type === 'visible' ?
-				_fnColumnIndexToVisible( settings, column ) :
-				column;
-		}, 1 );
-	} );
-	
-	_api_register( 'columns.adjust()', function () {
-		return this.iterator( 'table', function ( settings ) {
-			_fnAdjustColumnSizing( settings );
-		}, 1 );
-	} );
-	
-	_api_register( 'column.index()', function ( type, idx ) {
-		if ( this.context.length !== 0 ) {
-			var ctx = this.context[0];
-	
-			if ( type === 'fromVisible' || type === 'toData' ) {
-				return _fnVisibleToColumnIndex( ctx, idx );
-			}
-			else if ( type === 'fromData' || type === 'toVisible' ) {
-				return _fnColumnIndexToVisible( ctx, idx );
-			}
-		}
-	} );
-	
-	_api_register( 'column()', function ( selector, opts ) {
-		return _selector_first( this.columns( selector, opts ) );
-	} );
-	
-	
-	
-	var __cell_selector = function ( settings, selector, opts )
-	{
-		var data = settings.aoData;
-		var rows = _selector_row_indexes( settings, opts );
-		var cells = _removeEmpty( _pluck_order( data, rows, 'anCells' ) );
-		var allCells = $( [].concat.apply([], cells) );
-		var row;
-		var columns = settings.aoColumns.length;
-		var a, i, ien, j, o, host;
-	
-		var run = function ( s ) {
-			var fnSelector = typeof s === 'function';
-	
-			if ( s === null || s === undefined || fnSelector ) {
-				// All cells and function selectors
-				a = [];
-	
-				for ( i=0, ien=rows.length ; i<ien ; i++ ) {
-					row = rows[i];
-	
-					for ( j=0 ; j<columns ; j++ ) {
-						o = {
-							row: row,
-							column: j
-						};
-	
-						if ( fnSelector ) {
-							// Selector - function
-							host = data[ row ];
-	
-							if ( s( o, _fnGetCellData(settings, row, j), host.anCells ? host.anCells[j] : null ) ) {
-								a.push( o );
-							}
-						}
-						else {
-							// Selector - all
-							a.push( o );
-						}
-					}
-				}
-	
-				return a;
-			}
-			
-			// Selector - index
-			if ( $.isPlainObject( s ) ) {
-				// Valid cell index and its in the array of selectable rows
-				return s.column !== undefined && s.row !== undefined && $.inArray( s.row, rows ) !== -1 ?
-					[s] :
-					[];
-			}
-	
-			// Selector - jQuery filtered cells
-			var jqResult = allCells
-				.filter( s )
-				.map( function (i, el) {
-					return { // use a new object, in case someone changes the values
-						row:    el._DT_CellIndex.row,
-						column: el._DT_CellIndex.column
-	 				};
-				} )
-				.toArray();
-	
-			if ( jqResult.length || ! s.nodeName ) {
-				return jqResult;
-			}
-	
-			// Otherwise the selector is a node, and there is one last option - the
-			// element might be a child of an element which has dt-row and dt-column
-			// data attributes
-			host = $(s).closest('*[data-dt-row]');
-			return host.length ?
-				[ {
-					row: host.data('dt-row'),
-					column: host.data('dt-column')
-				} ] :
-				[];
-		};
-	
-		return _selector_run( 'cell', selector, run, settings, opts );
-	};
-	
-	
-	
-	
-	_api_register( 'cells()', function ( rowSelector, columnSelector, opts ) {
-		// Argument shifting
-		if ( $.isPlainObject( rowSelector ) ) {
-			// Indexes
-			if ( rowSelector.row === undefined ) {
-				// Selector options in first parameter
-				opts = rowSelector;
-				rowSelector = null;
-			}
-			else {
-				// Cell index objects in first parameter
-				opts = columnSelector;
-				columnSelector = null;
-			}
-		}
-		if ( $.isPlainObject( columnSelector ) ) {
-			opts = columnSelector;
-			columnSelector = null;
-		}
-	
-		// Cell selector
-		if ( columnSelector === null || columnSelector === undefined ) {
-			return this.iterator( 'table', function ( settings ) {
-				return __cell_selector( settings, rowSelector, _selector_opts( opts ) );
-			} );
-		}
-	
-		// The default built in options need to apply to row and columns
-		var internalOpts = opts ? {
-			page: opts.page,
-			order: opts.order,
-			search: opts.search
-		} : {};
-	
-		// Row + column selector
-		var columns = this.columns( columnSelector, internalOpts );
-		var rows = this.rows( rowSelector, internalOpts );
-		var i, ien, j, jen;
-	
-		var cellsNoOpts = this.iterator( 'table', function ( settings, idx ) {
-			var a = [];
-	
-			for ( i=0, ien=rows[idx].length ; i<ien ; i++ ) {
-				for ( j=0, jen=columns[idx].length ; j<jen ; j++ ) {
-					a.push( {
-						row:    rows[idx][i],
-						column: columns[idx][j]
-					} );
-				}
-			}
-	
-			return a;
-		}, 1 );
-	
-		// There is currently only one extension which uses a cell selector extension
-		// It is a _major_ performance drag to run this if it isn't needed, so this is
-		// an extension specific check at the moment
-		var cells = opts && opts.selected ?
-			this.cells( cellsNoOpts, opts ) :
-			cellsNoOpts;
-	
-		$.extend( cells.selector, {
-			cols: columnSelector,
-			rows: rowSelector,
-			opts: opts
-		} );
-	
-		return cells;
-	} );
-	
-	
-	_api_registerPlural( 'cells().nodes()', 'cell().node()', function () {
-		return this.iterator( 'cell', function ( settings, row, column ) {
-			var data = settings.aoData[ row ];
-	
-			return data && data.anCells ?
-				data.anCells[ column ] :
-				undefined;
-		}, 1 );
-	} );
-	
-	
-	_api_register( 'cells().data()', function () {
-		return this.iterator( 'cell', function ( settings, row, column ) {
-			return _fnGetCellData( settings, row, column );
-		}, 1 );
-	} );
-	
-	
-	_api_registerPlural( 'cells().cache()', 'cell().cache()', function ( type ) {
-		type = type === 'search' ? '_aFilterData' : '_aSortData';
-	
-		return this.iterator( 'cell', function ( settings, row, column ) {
-			return settings.aoData[ row ][ type ][ column ];
-		}, 1 );
-	} );
-	
-	
-	_api_registerPlural( 'cells().render()', 'cell().render()', function ( type ) {
-		return this.iterator( 'cell', function ( settings, row, column ) {
-			return _fnGetCellData( settings, row, column, type );
-		}, 1 );
-	} );
-	
-	
-	_api_registerPlural( 'cells().indexes()', 'cell().index()', function () {
-		return this.iterator( 'cell', function ( settings, row, column ) {
-			return {
-				row: row,
-				column: column,
-				columnVisible: _fnColumnIndexToVisible( settings, column )
-			};
-		}, 1 );
-	} );
-	
-	
-	_api_registerPlural( 'cells().invalidate()', 'cell().invalidate()', function ( src ) {
-		return this.iterator( 'cell', function ( settings, row, column ) {
-			_fnInvalidate( settings, row, src, column );
-		} );
-	} );
-	
-	
-	
-	_api_register( 'cell()', function ( rowSelector, columnSelector, opts ) {
-		return _selector_first( this.cells( rowSelector, columnSelector, opts ) );
-	} );
-	
-	
-	_api_register( 'cell().data()', function ( data ) {
-		var ctx = this.context;
-		var cell = this[0];
-	
-		if ( data === undefined ) {
-			// Get
-			return ctx.length && cell.length ?
-				_fnGetCellData( ctx[0], cell[0].row, cell[0].column ) :
-				undefined;
-		}
-	
-		// Set
-		_fnSetCellData( ctx[0], cell[0].row, cell[0].column, data );
-		_fnInvalidate( ctx[0], cell[0].row, 'data', cell[0].column );
-	
-		return this;
-	} );
-	
-	
-	
-	/**
-	 * Get current ordering (sorting) that has been applied to the table.
-	 *
-	 * @returns {array} 2D array containing the sorting information for the first
-	 *   table in the current context. Each element in the parent array represents
-	 *   a column being sorted upon (i.e. multi-sorting with two columns would have
-	 *   2 inner arrays). The inner arrays may have 2 or 3 elements. The first is
-	 *   the column index that the sorting condition applies to, the second is the
-	 *   direction of the sort (`desc` or `asc`) and, optionally, the third is the
-	 *   index of the sorting order from the `column.sorting` initialisation array.
-	 *//**
-	 * Set the ordering for the table.
-	 *
-	 * @param {integer} order Column index to sort upon.
-	 * @param {string} direction Direction of the sort to be applied (`asc` or `desc`)
-	 * @returns {DataTables.Api} this
-	 *//**
-	 * Set the ordering for the table.
-	 *
-	 * @param {array} order 1D array of sorting information to be applied.
-	 * @param {array} [...] Optional additional sorting conditions
-	 * @returns {DataTables.Api} this
-	 *//**
-	 * Set the ordering for the table.
-	 *
-	 * @param {array} order 2D array of sorting information to be applied.
-	 * @returns {DataTables.Api} this
-	 */
-	_api_register( 'order()', function ( order, dir ) {
-		var ctx = this.context;
-	
-		if ( order === undefined ) {
-			// get
-			return ctx.length !== 0 ?
-				ctx[0].aaSorting :
-				undefined;
-		}
-	
-		// set
-		if ( typeof order === 'number' ) {
-			// Simple column / direction passed in
-			order = [ [ order, dir ] ];
-		}
-		else if ( order.length && ! $.isArray( order[0] ) ) {
-			// Arguments passed in (list of 1D arrays)
-			order = Array.prototype.slice.call( arguments );
-		}
-		// otherwise a 2D array was passed in
-	
-		return this.iterator( 'table', function ( settings ) {
-			settings.aaSorting = order.slice();
-		} );
-	} );
-	
-	
-	/**
-	 * Attach a sort listener to an element for a given column
-	 *
-	 * @param {node|jQuery|string} node Identifier for the element(s) to attach the
-	 *   listener to. This can take the form of a single DOM node, a jQuery
-	 *   collection of nodes or a jQuery selector which will identify the node(s).
-	 * @param {integer} column the column that a click on this node will sort on
-	 * @param {function} [callback] callback function when sort is run
-	 * @returns {DataTables.Api} this
-	 */
-	_api_register( 'order.listener()', function ( node, column, callback ) {
-		return this.iterator( 'table', function ( settings ) {
-			_fnSortAttachListener( settings, node, column, callback );
-		} );
-	} );
-	
-	
-	_api_register( 'order.fixed()', function ( set ) {
-		if ( ! set ) {
-			var ctx = this.context;
-			var fixed = ctx.length ?
-				ctx[0].aaSortingFixed :
-				undefined;
-	
-			return $.isArray( fixed ) ?
-				{ pre: fixed } :
-				fixed;
-		}
-	
-		return this.iterator( 'table', function ( settings ) {
-			settings.aaSortingFixed = $.extend( true, {}, set );
-		} );
-	} );
-	
-	
-	// Order by the selected column(s)
-	_api_register( [
-		'columns().order()',
-		'column().order()'
-	], function ( dir ) {
-		var that = this;
-	
-		return this.iterator( 'table', function ( settings, i ) {
-			var sort = [];
-	
-			$.each( that[i], function (j, col) {
-				sort.push( [ col, dir ] );
-			} );
-	
-			settings.aaSorting = sort;
-		} );
-	} );
-	
-	
-	
-	_api_register( 'search()', function ( input, regex, smart, caseInsen ) {
-		var ctx = this.context;
-	
-		if ( input === undefined ) {
-			// get
-			return ctx.length !== 0 ?
-				ctx[0].oPreviousSearch.sSearch :
-				undefined;
-		}
-	
-		// set
-		return this.iterator( 'table', function ( settings ) {
-			if ( ! settings.oFeatures.bFilter ) {
-				return;
-			}
-	
-			_fnFilterComplete( settings, $.extend( {}, settings.oPreviousSearch, {
-				"sSearch": input+"",
-				"bRegex":  regex === null ? false : regex,
-				"bSmart":  smart === null ? true  : smart,
-				"bCaseInsensitive": caseInsen === null ? true : caseInsen
-			} ), 1 );
-		} );
-	} );
-	
-	
-	_api_registerPlural(
-		'columns().search()',
-		'column().search()',
-		function ( input, regex, smart, caseInsen ) {
-			return this.iterator( 'column', function ( settings, column ) {
-				var preSearch = settings.aoPreSearchCols;
-	
-				if ( input === undefined ) {
-					// get
-					return preSearch[ column ].sSearch;
-				}
-	
-				// set
-				if ( ! settings.oFeatures.bFilter ) {
-					return;
-				}
-	
-				$.extend( preSearch[ column ], {
-					"sSearch": input+"",
-					"bRegex":  regex === null ? false : regex,
-					"bSmart":  smart === null ? true  : smart,
-					"bCaseInsensitive": caseInsen === null ? true : caseInsen
-				} );
-	
-				_fnFilterComplete( settings, settings.oPreviousSearch, 1 );
-			} );
-		}
-	);
-	
-	/*
-	 * State API methods
-	 */
-	
-	_api_register( 'state()', function () {
-		return this.context.length ?
-			this.context[0].oSavedState :
-			null;
-	} );
-	
-	
-	_api_register( 'state.clear()', function () {
-		return this.iterator( 'table', function ( settings ) {
-			// Save an empty object
-			settings.fnStateSaveCallback.call( settings.oInstance, settings, {} );
-		} );
-	} );
-	
-	
-	_api_register( 'state.loaded()', function () {
-		return this.context.length ?
-			this.context[0].oLoadedState :
-			null;
-	} );
-	
-	
-	_api_register( 'state.save()', function () {
-		return this.iterator( 'table', function ( settings ) {
-			_fnSaveState( settings );
-		} );
-	} );
-	
-	
-	
-	/**
-	 * Provide a common method for plug-ins to check the version of DataTables being
-	 * used, in order to ensure compatibility.
-	 *
-	 *  @param {string} version Version string to check for, in the format "X.Y.Z".
-	 *    Note that the formats "X" and "X.Y" are also acceptable.
-	 *  @returns {boolean} true if this version of DataTables is greater or equal to
-	 *    the required version, or false if this version of DataTales is not
-	 *    suitable
-	 *  @static
-	 *  @dtopt API-Static
-	 *
-	 *  @example
-	 *    alert( $.fn.dataTable.versionCheck( '1.9.0' ) );
-	 */
-	DataTable.versionCheck = DataTable.fnVersionCheck = function( version )
-	{
-		var aThis = DataTable.version.split('.');
-		var aThat = version.split('.');
-		var iThis, iThat;
-	
-		for ( var i=0, iLen=aThat.length ; i<iLen ; i++ ) {
-			iThis = parseInt( aThis[i], 10 ) || 0;
-			iThat = parseInt( aThat[i], 10 ) || 0;
-	
-			// Parts are the same, keep comparing
-			if (iThis === iThat) {
-				continue;
-			}
-	
-			// Parts are different, return immediately
-			return iThis > iThat;
-		}
-	
-		return true;
-	};
-	
-	
-	/**
-	 * Check if a `<table>` node is a DataTable table already or not.
-	 *
-	 *  @param {node|jquery|string} table Table node, jQuery object or jQuery
-	 *      selector for the table to test. Note that if more than more than one
-	 *      table is passed on, only the first will be checked
-	 *  @returns {boolean} true the table given is a DataTable, or false otherwise
-	 *  @static
-	 *  @dtopt API-Static
-	 *
-	 *  @example
-	 *    if ( ! $.fn.DataTable.isDataTable( '#example' ) ) {
-	 *      $('#example').dataTable();
-	 *    }
-	 */
-	DataTable.isDataTable = DataTable.fnIsDataTable = function ( table )
-	{
-		var t = $(table).get(0);
-		var is = false;
-	
-		if ( table instanceof DataTable.Api ) {
-			return true;
-		}
-	
-		$.each( DataTable.settings, function (i, o) {
-			var head = o.nScrollHead ? $('table', o.nScrollHead)[0] : null;
-			var foot = o.nScrollFoot ? $('table', o.nScrollFoot)[0] : null;
-	
-			if ( o.nTable === t || head === t || foot === t ) {
-				is = true;
-			}
-		} );
-	
-		return is;
-	};
-	
-	
-	/**
-	 * Get all DataTable tables that have been initialised - optionally you can
-	 * select to get only currently visible tables.
-	 *
-	 *  @param {boolean} [visible=false] Flag to indicate if you want all (default)
-	 *    or visible tables only.
-	 *  @returns {array} Array of `table` nodes (not DataTable instances) which are
-	 *    DataTables
-	 *  @static
-	 *  @dtopt API-Static
-	 *
-	 *  @example
-	 *    $.each( $.fn.dataTable.tables(true), function () {
-	 *      $(table).DataTable().columns.adjust();
-	 *    } );
-	 */
-	DataTable.tables = DataTable.fnTables = function ( visible )
-	{
-		var api = false;
-	
-		if ( $.isPlainObject( visible ) ) {
-			api = visible.api;
-			visible = visible.visible;
-		}
-	
-		var a = $.map( DataTable.settings, function (o) {
-			if ( !visible || (visible && $(o.nTable).is(':visible')) ) {
-				return o.nTable;
-			}
-		} );
-	
-		return api ?
-			new _Api( a ) :
-			a;
-	};
-	
-	
-	/**
-	 * Convert from camel case parameters to Hungarian notation. This is made public
-	 * for the extensions to provide the same ability as DataTables core to accept
-	 * either the 1.9 style Hungarian notation, or the 1.10+ style camelCase
-	 * parameters.
-	 *
-	 *  @param {object} src The model object which holds all parameters that can be
-	 *    mapped.
-	 *  @param {object} user The object to convert from camel case to Hungarian.
-	 *  @param {boolean} force When set to `true`, properties which already have a
-	 *    Hungarian value in the `user` object will be overwritten. Otherwise they
-	 *    won't be.
-	 */
-	DataTable.camelToHungarian = _fnCamelToHungarian;
-	
-	
-	
-	/**
-	 *
-	 */
-	_api_register( '$()', function ( selector, opts ) {
-		var
-			rows   = this.rows( opts ).nodes(), // Get all rows
-			jqRows = $(rows);
-	
-		return $( [].concat(
-			jqRows.filter( selector ).toArray(),
-			jqRows.find( selector ).toArray()
-		) );
-	} );
-	
-	
-	// jQuery functions to operate on the tables
-	$.each( [ 'on', 'one', 'off' ], function (i, key) {
-		_api_register( key+'()', function ( /* event, handler */ ) {
-			var args = Array.prototype.slice.call(arguments);
-	
-			// Add the `dt` namespace automatically if it isn't already present
-			args[0] = $.map( args[0].split( /\s/ ), function ( e ) {
-				return ! e.match(/\.dt\b/) ?
-					e+'.dt' :
-					e;
-				} ).join( ' ' );
-	
-			var inst = $( this.tables().nodes() );
-			inst[key].apply( inst, args );
-			return this;
-		} );
-	} );
-	
-	
-	_api_register( 'clear()', function () {
-		return this.iterator( 'table', function ( settings ) {
-			_fnClearTable( settings );
-		} );
-	} );
-	
-	
-	_api_register( 'settings()', function () {
-		return new _Api( this.context, this.context );
-	} );
-	
-	
-	_api_register( 'init()', function () {
-		var ctx = this.context;
-		return ctx.length ? ctx[0].oInit : null;
-	} );
-	
-	
-	_api_register( 'data()', function () {
-		return this.iterator( 'table', function ( settings ) {
-			return _pluck( settings.aoData, '_aData' );
-		} ).flatten();
-	} );
-	
-	
-	_api_register( 'destroy()', function ( remove ) {
-		remove = remove || false;
-	
-		return this.iterator( 'table', function ( settings ) {
-			var orig      = settings.nTableWrapper.parentNode;
-			var classes   = settings.oClasses;
-			var table     = settings.nTable;
-			var tbody     = settings.nTBody;
-			var thead     = settings.nTHead;
-			var tfoot     = settings.nTFoot;
-			var jqTable   = $(table);
-			var jqTbody   = $(tbody);
-			var jqWrapper = $(settings.nTableWrapper);
-			var rows      = $.map( settings.aoData, function (r) { return r.nTr; } );
-			var i, ien;
-	
-			// Flag to note that the table is currently being destroyed - no action
-			// should be taken
-			settings.bDestroying = true;
-	
-			// Fire off the destroy callbacks for plug-ins etc
-			_fnCallbackFire( settings, "aoDestroyCallback", "destroy", [settings] );
-	
-			// If not being removed from the document, make all columns visible
-			if ( ! remove ) {
-				new _Api( settings ).columns().visible( true );
-			}
-	
-			// Blitz all `DT` namespaced events (these are internal events, the
-			// lowercase, `dt` events are user subscribed and they are responsible
-			// for removing them
-			jqWrapper.off('.DT').find(':not(tbody *)').off('.DT');
-			$(window).off('.DT-'+settings.sInstance);
-	
-			// When scrolling we had to break the table up - restore it
-			if ( table != thead.parentNode ) {
-				jqTable.children('thead').detach();
-				jqTable.append( thead );
-			}
-	
-			if ( tfoot && table != tfoot.parentNode ) {
-				jqTable.children('tfoot').detach();
-				jqTable.append( tfoot );
-			}
-	
-			settings.aaSorting = [];
-			settings.aaSortingFixed = [];
-			_fnSortingClasses( settings );
-	
-			$( rows ).removeClass( settings.asStripeClasses.join(' ') );
-	
-			$('th, td', thead).removeClass( classes.sSortable+' '+
-				classes.sSortableAsc+' '+classes.sSortableDesc+' '+classes.sSortableNone
-			);
-	
-			// Add the TR elements back into the table in their original order
-			jqTbody.children().detach();
-			jqTbody.append( rows );
-	
-			// Remove the DataTables generated nodes, events and classes
-			var removedMethod = remove ? 'remove' : 'detach';
-			jqTable[ removedMethod ]();
-			jqWrapper[ removedMethod ]();
-	
-			// If we need to reattach the table to the document
-			if ( ! remove && orig ) {
-				// insertBefore acts like appendChild if !arg[1]
-				orig.insertBefore( table, settings.nTableReinsertBefore );
-	
-				// Restore the width of the original table - was read from the style property,
-				// so we can restore directly to that
-				jqTable
-					.css( 'width', settings.sDestroyWidth )
-					.removeClass( classes.sTable );
-	
-				// If the were originally stripe classes - then we add them back here.
-				// Note this is not fool proof (for example if not all rows had stripe
-				// classes - but it's a good effort without getting carried away
-				ien = settings.asDestroyStripes.length;
-	
-				if ( ien ) {
-					jqTbody.children().each( function (i) {
-						$(this).addClass( settings.asDestroyStripes[i % ien] );
-					} );
-				}
-			}
-	
-			/* Remove the settings object from the settings array */
-			var idx = $.inArray( settings, DataTable.settings );
-			if ( idx !== -1 ) {
-				DataTable.settings.splice( idx, 1 );
-			}
-		} );
-	} );
-	
-	
-	// Add the `every()` method for rows, columns and cells in a compact form
-	$.each( [ 'column', 'row', 'cell' ], function ( i, type ) {
-		_api_register( type+'s().every()', function ( fn ) {
-			var opts = this.selector.opts;
-			var api = this;
-	
-			return this.iterator( type, function ( settings, arg1, arg2, arg3, arg4 ) {
-				// Rows and columns:
-				//  arg1 - index
-				//  arg2 - table counter
-				//  arg3 - loop counter
-				//  arg4 - undefined
-				// Cells:
-				//  arg1 - row index
-				//  arg2 - column index
-				//  arg3 - table counter
-				//  arg4 - loop counter
-				fn.call(
-					api[ type ](
-						arg1,
-						type==='cell' ? arg2 : opts,
-						type==='cell' ? opts : undefined
-					),
-					arg1, arg2, arg3, arg4
-				);
-			} );
-		} );
-	} );
-	
-	
-	// i18n method for extensions to be able to use the language object from the
-	// DataTable
-	_api_register( 'i18n()', function ( token, def, plural ) {
-		var ctx = this.context[0];
-		var resolved = _fnGetObjectDataFn( token )( ctx.oLanguage );
-	
-		if ( resolved === undefined ) {
-			resolved = def;
-		}
-	
-		if ( plural !== undefined && $.isPlainObject( resolved ) ) {
-			resolved = resolved[ plural ] !== undefined ?
-				resolved[ plural ] :
-				resolved._;
-		}
-	
-		return resolved.replace( '%d', plural ); // nb: plural might be undefined,
-	} );
-	/**
-	 * Version string for plug-ins to check compatibility. Allowed format is
-	 * `a.b.c-d` where: a:int, b:int, c:int, d:string(dev|beta|alpha). `d` is used
-	 * only for non-release builds. See http://semver.org/ for more information.
-	 *  @member
-	 *  @type string
-	 *  @default Version number
-	 */
-	DataTable.version = "1.10.21";
-
-	/**
-	 * Private data store, containing all of the settings objects that are
-	 * created for the tables on a given page.
-	 *
-	 * Note that the `DataTable.settings` object is aliased to
-	 * `jQuery.fn.dataTableExt` through which it may be accessed and
-	 * manipulated, or `jQuery.fn.dataTable.settings`.
-	 *  @member
-	 *  @type array
-	 *  @default []
-	 *  @private
-	 */
-	DataTable.settings = [];
-
-	/**
-	 * Object models container, for the various models that DataTables has
-	 * available to it. These models define the objects that are used to hold
-	 * the active state and configuration of the table.
-	 *  @namespace
-	 */
-	DataTable.models = {};
-	
-	
-	
-	/**
-	 * Template object for the way in which DataTables holds information about
-	 * search information for the global filter and individual column filters.
-	 *  @namespace
-	 */
-	DataTable.models.oSearch = {
-		/**
-		 * Flag to indicate if the filtering should be case insensitive or not
-		 *  @type boolean
-		 *  @default true
-		 */
-		"bCaseInsensitive": true,
-	
-		/**
-		 * Applied search term
-		 *  @type string
-		 *  @default <i>Empty string</i>
-		 */
-		"sSearch": "",
-	
-		/**
-		 * Flag to indicate if the search term should be interpreted as a
-		 * regular expression (true) or not (false) and therefore and special
-		 * regex characters escaped.
-		 *  @type boolean
-		 *  @default false
-		 */
-		"bRegex": false,
-	
-		/**
-		 * Flag to indicate if DataTables is to use its smart filtering or not.
-		 *  @type boolean
-		 *  @default true
-		 */
-		"bSmart": true
-	};
-	
-	
-	
-	
-	/**
-	 * Template object for the way in which DataTables holds information about
-	 * each individual row. This is the object format used for the settings
-	 * aoData array.
-	 *  @namespace
-	 */
-	DataTable.models.oRow = {
-		/**
-		 * TR element for the row
-		 *  @type node
-		 *  @default null
-		 */
-		"nTr": null,
-	
-		/**
-		 * Array of TD elements for each row. This is null until the row has been
-		 * created.
-		 *  @type array nodes
-		 *  @default []
-		 */
-		"anCells": null,
-	
-		/**
-		 * Data object from the original data source for the row. This is either
-		 * an array if using the traditional form of DataTables, or an object if
-		 * using mData options. The exact type will depend on the passed in
-		 * data from the data source, or will be an array if using DOM a data
-		 * source.
-		 *  @type array|object
-		 *  @default []
-		 */
-		"_aData": [],
-	
-		/**
-		 * Sorting data cache - this array is ostensibly the same length as the
-		 * number of columns (although each index is generated only as it is
-		 * needed), and holds the data that is used for sorting each column in the
-		 * row. We do this cache generation at the start of the sort in order that
-		 * the formatting of the sort data need be done only once for each cell
-		 * per sort. This array should not be read from or written to by anything
-		 * other than the master sorting methods.
-		 *  @type array
-		 *  @default null
-		 *  @private
-		 */
-		"_aSortData": null,
-	
-		/**
-		 * Per cell filtering data cache. As per the sort data cache, used to
-		 * increase the performance of the filtering in DataTables
-		 *  @type array
-		 *  @default null
-		 *  @private
-		 */
-		"_aFilterData": null,
-	
-		/**
-		 * Filtering data cache. This is the same as the cell filtering cache, but
-		 * in this case a string rather than an array. This is easily computed with
-		 * a join on `_aFilterData`, but is provided as a cache so the join isn't
-		 * needed on every search (memory traded for performance)
-		 *  @type array
-		 *  @default null
-		 *  @private
-		 */
-		"_sFilterRow": null,
-	
-		/**
-		 * Cache of the class name that DataTables has applied to the row, so we
-		 * can quickly look at this variable rather than needing to do a DOM check
-		 * on className for the nTr property.
-		 *  @type string
-		 *  @default <i>Empty string</i>
-		 *  @private
-		 */
-		"_sRowStripe": "",
-	
-		/**
-		 * Denote if the original data source was from the DOM, or the data source
-		 * object. This is used for invalidating data, so DataTables can
-		 * automatically read data from the original source, unless uninstructed
-		 * otherwise.
-		 *  @type string
-		 *  @default null
-		 *  @private
-		 */
-		"src": null,
-	
-		/**
-		 * Index in the aoData array. This saves an indexOf lookup when we have the
-		 * object, but want to know the index
-		 *  @type integer
-		 *  @default -1
-		 *  @private
-		 */
-		"idx": -1
-	};
-	
-	
-	/**
-	 * Template object for the column information object in DataTables. This object
-	 * is held in the settings aoColumns array and contains all the information that
-	 * DataTables needs about each individual column.
-	 *
-	 * Note that this object is related to {@link DataTable.defaults.column}
-	 * but this one is the internal data store for DataTables's cache of columns.
-	 * It should NOT be manipulated outside of DataTables. Any configuration should
-	 * be done through the initialisation options.
-	 *  @namespace
-	 */
-	DataTable.models.oColumn = {
-		/**
-		 * Column index. This could be worked out on-the-fly with $.inArray, but it
-		 * is faster to just hold it as a variable
-		 *  @type integer
-		 *  @default null
-		 */
-		"idx": null,
-	
-		/**
-		 * A list of the columns that sorting should occur on when this column
-		 * is sorted. That this property is an array allows multi-column sorting
-		 * to be defined for a column (for example first name / last name columns
-		 * would benefit from this). The values are integers pointing to the
-		 * columns to be sorted on (typically it will be a single integer pointing
-		 * at itself, but that doesn't need to be the case).
-		 *  @type array
-		 */
-		"aDataSort": null,
-	
-		/**
-		 * Define the sorting directions that are applied to the column, in sequence
-		 * as the column is repeatedly sorted upon - i.e. the first value is used
-		 * as the sorting direction when the column if first sorted (clicked on).
-		 * Sort it again (click again) and it will move on to the next index.
-		 * Repeat until loop.
-		 *  @type array
-		 */
-		"asSorting": null,
-	
-		/**
-		 * Flag to indicate if the column is searchable, and thus should be included
-		 * in the filtering or not.
-		 *  @type boolean
-		 */
-		"bSearchable": null,
-	
-		/**
-		 * Flag to indicate if the column is sortable or not.
-		 *  @type boolean
-		 */
-		"bSortable": null,
-	
-		/**
-		 * Flag to indicate if the column is currently visible in the table or not
-		 *  @type boolean
-		 */
-		"bVisible": null,
-	
-		/**
-		 * Store for manual type assignment using the `column.type` option. This
-		 * is held in store so we can manipulate the column's `sType` property.
-		 *  @type string
-		 *  @default null
-		 *  @private
-		 */
-		"_sManualType": null,
-	
-		/**
-		 * Flag to indicate if HTML5 data attributes should be used as the data
-		 * source for filtering or sorting. True is either are.
-		 *  @type boolean
-		 *  @default false
-		 *  @private
-		 */
-		"_bAttrSrc": false,
-	
-		/**
-		 * Developer definable function that is called whenever a cell is created (Ajax source,
-		 * etc) or processed for input (DOM source). This can be used as a compliment to mRender
-		 * allowing you to modify the DOM element (add background colour for example) when the
-		 * element is available.
-		 *  @type function
-		 *  @param {element} nTd The TD node that has been created
-		 *  @param {*} sData The Data for the cell
-		 *  @param {array|object} oData The data for the whole row
-		 *  @param {int} iRow The row index for the aoData data store
-		 *  @default null
-		 */
-		"fnCreatedCell": null,
-	
-		/**
-		 * Function to get data from a cell in a column. You should <b>never</b>
-		 * access data directly through _aData internally in DataTables - always use
-		 * the method attached to this property. It allows mData to function as
-		 * required. This function is automatically assigned by the column
-		 * initialisation method
-		 *  @type function
-		 *  @param {array|object} oData The data array/object for the array
-		 *    (i.e. aoData[]._aData)
-		 *  @param {string} sSpecific The specific data type you want to get -
-		 *    'display', 'type' 'filter' 'sort'
-		 *  @returns {*} The data for the cell from the given row's data
-		 *  @default null
-		 */
-		"fnGetData": null,
-	
-		/**
-		 * Function to set data for a cell in the column. You should <b>never</b>
-		 * set the data directly to _aData internally in DataTables - always use
-		 * this method. It allows mData to function as required. This function
-		 * is automatically assigned by the column initialisation method
-		 *  @type function
-		 *  @param {array|object} oData The data array/object for the array
-		 *    (i.e. aoData[]._aData)
-		 *  @param {*} sValue Value to set
-		 *  @default null
-		 */
-		"fnSetData": null,
-	
-		/**
-		 * Property to read the value for the cells in the column from the data
-		 * source array / object. If null, then the default content is used, if a
-		 * function is given then the return from the function is used.
-		 *  @type function|int|string|null
-		 *  @default null
-		 */
-		"mData": null,
-	
-		/**
-		 * Partner property to mData which is used (only when defined) to get
-		 * the data - i.e. it is basically the same as mData, but without the
-		 * 'set' option, and also the data fed to it is the result from mData.
-		 * This is the rendering method to match the data method of mData.
-		 *  @type function|int|string|null
-		 *  @default null
-		 */
-		"mRender": null,
-	
-		/**
-		 * Unique header TH/TD element for this column - this is what the sorting
-		 * listener is attached to (if sorting is enabled.)
-		 *  @type node
-		 *  @default null
-		 */
-		"nTh": null,
-	
-		/**
-		 * Unique footer TH/TD element for this column (if there is one). Not used
-		 * in DataTables as such, but can be used for plug-ins to reference the
-		 * footer for each column.
-		 *  @type node
-		 *  @default null
-		 */
-		"nTf": null,
-	
-		/**
-		 * The class to apply to all TD elements in the table's TBODY for the column
-		 *  @type string
-		 *  @default null
-		 */
-		"sClass": null,
-	
-		/**
-		 * When DataTables calculates the column widths to assign to each column,
-		 * it finds the longest string in each column and then constructs a
-		 * temporary table and reads the widths from that. The problem with this
-		 * is that "mmm" is much wider then "iiii", but the latter is a longer
-		 * string - thus the calculation can go wrong (doing it properly and putting
-		 * it into an DOM object and measuring that is horribly(!) slow). Thus as
-		 * a "work around" we provide this option. It will append its value to the
-		 * text that is found to be the longest string for the column - i.e. padding.
-		 *  @type string
-		 */
-		"sContentPadding": null,
-	
-		/**
-		 * Allows a default value to be given for a column's data, and will be used
-		 * whenever a null data source is encountered (this can be because mData
-		 * is set to null, or because the data source itself is null).
-		 *  @type string
-		 *  @default null
-		 */
-		"sDefaultContent": null,
-	
-		/**
-		 * Name for the column, allowing reference to the column by name as well as
-		 * by index (needs a lookup to work by name).
-		 *  @type string
-		 */
-		"sName": null,
-	
-		/**
-		 * Custom sorting data type - defines which of the available plug-ins in
-		 * afnSortData the custom sorting will use - if any is defined.
-		 *  @type string
-		 *  @default std
-		 */
-		"sSortDataType": 'std',
-	
-		/**
-		 * Class to be applied to the header element when sorting on this column
-		 *  @type string
-		 *  @default null
-		 */
-		"sSortingClass": null,
-	
-		/**
-		 * Class to be applied to the header element when sorting on this column -
-		 * when jQuery UI theming is used.
-		 *  @type string
-		 *  @default null
-		 */
-		"sSortingClassJUI": null,
-	
-		/**
-		 * Title of the column - what is seen in the TH element (nTh).
-		 *  @type string
-		 */
-		"sTitle": null,
-	
-		/**
-		 * Column sorting and filtering type
-		 *  @type string
-		 *  @default null
-		 */
-		"sType": null,
-	
-		/**
-		 * Width of the column
-		 *  @type string
-		 *  @default null
-		 */
-		"sWidth": null,
-	
-		/**
-		 * Width of the column when it was first "encountered"
-		 *  @type string
-		 *  @default null
-		 */
-		"sWidthOrig": null
-	};
-	
-	
-	/*
-	 * Developer note: The properties of the object below are given in Hungarian
-	 * notation, that was used as the interface for DataTables prior to v1.10, however
-	 * from v1.10 onwards the primary interface is camel case. In order to avoid
-	 * breaking backwards compatibility utterly with this change, the Hungarian
-	 * version is still, internally the primary interface, but is is not documented
-	 * - hence the @name tags in each doc comment. This allows a Javascript function
-	 * to create a map from Hungarian notation to camel case (going the other direction
-	 * would require each property to be listed, which would at around 3K to the size
-	 * of DataTables, while this method is about a 0.5K hit.
-	 *
-	 * Ultimately this does pave the way for Hungarian notation to be dropped
-	 * completely, but that is a massive amount of work and will break current
-	 * installs (therefore is on-hold until v2).
-	 */
-	
-	/**
-	 * Initialisation options that can be given to DataTables at initialisation
-	 * time.
-	 *  @namespace
-	 */
-	DataTable.defaults = {
-		/**
-		 * An array of data to use for the table, passed in at initialisation which
-		 * will be used in preference to any data which is already in the DOM. This is
-		 * particularly useful for constructing tables purely in Javascript, for
-		 * example with a custom Ajax call.
-		 *  @type array
-		 *  @default null
-		 *
-		 *  @dtopt Option
-		 *  @name DataTable.defaults.data
-		 *
-		 *  @example
-		 *    // Using a 2D array data source
-		 *    $(document).ready( function () {
-		 *      $('#example').dataTable( {
-		 *        "data": [
-		 *          ['Trident', 'Internet Explorer 4.0', 'Win 95+', 4, 'X'],
-		 *          ['Trident', 'Internet Explorer 5.0', 'Win 95+', 5, 'C'],
-		 *        ],
-		 *        "columns": [
-		 *          { "title": "Engine" },
-		 *          { "title": "Browser" },
-		 *          { "title": "Platform" },
-		 *          { "title": "Version" },
-		 *          { "title": "Grade" }
-		 *        ]
-		 *      } );
-		 *    } );
-		 *
-		 *  @example
-		 *    // Using an array of objects as a data source (`data`)
-		 *    $(document).ready( function () {
-		 *      $('#example').dataTable( {
-		 *        "data": [
-		 *          {
-		 *            "engine":   "Trident",
-		 *            "browser":  "Internet Explorer 4.0",
-		 *            "platform": "Win 95+",
-		 *            "version":  4,
-		 *            "grade":    "X"
-		 *          },
-		 *          {
-		 *            "engine":   "Trident",
-		 *            "browser":  "Internet Explorer 5.0",
-		 *            "platform": "Win 95+",
-		 *            "version":  5,
-		 *            "grade":    "C"
-		 *          }
-		 *        ],
-		 *        "columns": [
-		 *          { "title": "Engine",   "data": "engine" },
-		 *          { "title": "Browser",  "data": "browser" },
-		 *          { "title": "Platform", "data": "platform" },
-		 *          { "title": "Version",  "data": "version" },
-		 *          { "title": "Grade",    "data": "grade" }
-		 *        ]
-		 *      } );
-		 *    } );
-		 */
-		"aaData": null,
-	
-	
-		/**
-		 * If ordering is enabled, then DataTables will perform a first pass sort on
-		 * initialisation. You can define which column(s) the sort is performed
-		 * upon, and the sorting direction, with this variable. The `sorting` array
-		 * should contain an array for each column to be sorted initially containing
-		 * the column's index and a direction string ('asc' or 'desc').
-		 *  @type array
-		 *  @default [[0,'asc']]
-		 *
-		 *  @dtopt Option
-		 *  @name DataTable.defaults.order
-		 *
-		 *  @example
-		 *    // Sort by 3rd column first, and then 4th column
-		 *    $(document).ready( function() {
-		 *      $('#example').dataTable( {
-		 *        "order": [[2,'asc'], [3,'desc']]
-		 *      } );
-		 *    } );
-		 *
-		 *    // No initial sorting
-		 *    $(document).ready( function() {
-		 *      $('#example').dataTable( {
-		 *        "order": []
-		 *      } );
-		 *    } );
-		 */
-		"aaSorting": [[0,'asc']],
-	
-	
-		/**
-		 * This parameter is basically identical to the `sorting` parameter, but
-		 * cannot be overridden by user interaction with the table. What this means
-		 * is that you could have a column (visible or hidden) which the sorting
-		 * will always be forced on first - any sorting after that (from the user)
-		 * will then be performed as required. This can be useful for grouping rows
-		 * together.
-		 *  @type array
-		 *  @default null
-		 *
-		 *  @dtopt Option
-		 *  @name DataTable.defaults.orderFixed
-		 *
-		 *  @example
-		 *    $(document).ready( function() {
-		 *      $('#example').dataTable( {
-		 *        "orderFixed": [[0,'asc']]
-		 *      } );
-		 *    } )
-		 */
-		"aaSortingFixed": [],
-	
-	
-		/**
-		 * DataTables can be instructed to load data to display in the table from a
-		 * Ajax source. This option defines how that Ajax call is made and where to.
-		 *
-		 * The `ajax` property has three different modes of operation, depending on
-		 * how it is defined. These are:
-		 *
-		 * * `string` - Set the URL from where the data should be loaded from.
-		 * * `object` - Define properties for `jQuery.ajax`.
-		 * * `function` - Custom data get function
-		 *
-		 * `string`
-		 * --------
-		 *
-		 * As a string, the `ajax` property simply defines the URL from which
-		 * DataTables will load data.
-		 *
-		 * `object`
-		 * --------
-		 *
-		 * As an object, the parameters in the object are passed to
-		 * [jQuery.ajax](http://api.jquery.com/jQuery.ajax/) allowing fine control
-		 * of the Ajax request. DataTables has a number of default parameters which
-		 * you can override using this option. Please refer to the jQuery
-		 * documentation for a full description of the options available, although
-		 * the following parameters provide additional options in DataTables or
-		 * require special consideration:
-		 *
-		 * * `data` - As with jQuery, `data` can be provided as an object, but it
-		 *   can also be used as a function to manipulate the data DataTables sends
-		 *   to the server. The function takes a single parameter, an object of
-		 *   parameters with the values that DataTables has readied for sending. An
-		 *   object may be returned which will be merged into the DataTables
-		 *   defaults, or you can add the items to the object that was passed in and
-		 *   not return anything from the function. This supersedes `fnServerParams`
-		 *   from DataTables 1.9-.
-		 *
-		 * * `dataSrc` - By default DataTables will look for the property `data` (or
-		 *   `aaData` for compatibility with DataTables 1.9-) when obtaining data
-		 *   from an Ajax source or for server-side processing - this parameter
-		 *   allows that property to be changed. You can use Javascript dotted
-		 *   object notation to get a data source for multiple levels of nesting, or
-		 *   it my be used as a function. As a function it takes a single parameter,
-		 *   the JSON returned from the server, which can be manipulated as
-		 *   required, with the returned value being that used by DataTables as the
-		 *   data source for the table. This supersedes `sAjaxDataProp` from
-		 *   DataTables 1.9-.
-		 *
-		 * * `success` - Should not be overridden it is used internally in
-		 *   DataTables. To manipulate / transform the data returned by the server
-		 *   use `ajax.dataSrc`, or use `ajax` as a function (see below).
-		 *
-		 * `function`
-		 * ----------
-		 *
-		 * As a function, making the Ajax call is left up to yourself allowing
-		 * complete control of the Ajax request. Indeed, if desired, a method other
-		 * than Ajax could be used to obtain the required data, such as Web storage
-		 * or an AIR database.
-		 *
-		 * The function is given four parameters and no return is required. The
-		 * parameters are:
-		 *
-		 * 1. _object_ - Data to send to the server
-		 * 2. _function_ - Callback function that must be executed when the required
-		 *    data has been obtained. That data should be passed into the callback
-		 *    as the only parameter
-		 * 3. _object_ - DataTables settings object for the table
-		 *
-		 * Note that this supersedes `fnServerData` from DataTables 1.9-.
-		 *
-		 *  @type string|object|function
-		 *  @default null
-		 *
-		 *  @dtopt Option
-		 *  @name DataTable.defaults.ajax
-		 *  @since 1.10.0
-		 *
-		 * @example
-		 *   // Get JSON data from a file via Ajax.
-		 *   // Note DataTables expects data in the form `{ data: [ ...data... ] }` by default).
-		 *   $('#example').dataTable( {
-		 *     "ajax": "data.json"
-		 *   } );
-		 *
-		 * @example
-		 *   // Get JSON data from a file via Ajax, using `dataSrc` to change
-		 *   // `data` to `tableData` (i.e. `{ tableData: [ ...data... ] }`)
-		 *   $('#example').dataTable( {
-		 *     "ajax": {
-		 *       "url": "data.json",
-		 *       "dataSrc": "tableData"
-		 *     }
-		 *   } );
-		 *
-		 * @example
-		 *   // Get JSON data from a file via Ajax, using `dataSrc` to read data
-		 *   // from a plain array rather than an array in an object
-		 *   $('#example').dataTable( {
-		 *     "ajax": {
-		 *       "url": "data.json",
-		 *       "dataSrc": ""
-		 *     }
-		 *   } );
-		 *
-		 * @example
-		 *   // Manipulate the data returned from the server - add a link to data
-		 *   // (note this can, should, be done using `render` for the column - this
-		 *   // is just a simple example of how the data can be manipulated).
-		 *   $('#example').dataTable( {
-		 *     "ajax": {
-		 *       "url": "data.json",
-		 *       "dataSrc": function ( json ) {
-		 *         for ( var i=0, ien=json.length ; i<ien ; i++ ) {
-		 *           json[i][0] = '<a href="/message/'+json[i][0]+'>View message</a>';
-		 *         }
-		 *         return json;
-		 *       }
-		 *     }
-		 *   } );
-		 *
-		 * @example
-		 *   // Add data to the request
-		 *   $('#example').dataTable( {
-		 *     "ajax": {
-		 *       "url": "data.json",
-		 *       "data": function ( d ) {
-		 *         return {
-		 *           "extra_search": $('#extra').val()
-		 *         };
-		 *       }
-		 *     }
-		 *   } );
-		 *
-		 * @example
-		 *   // Send request as POST
-		 *   $('#example').dataTable( {
-		 *     "ajax": {
-		 *       "url": "data.json",
-		 *       "type": "POST"
-		 *     }
-		 *   } );
-		 *
-		 * @example
-		 *   // Get the data from localStorage (could interface with a form for
-		 *   // adding, editing and removing rows).
-		 *   $('#example').dataTable( {
-		 *     "ajax": function (data, callback, settings) {
-		 *       callback(
-		 *         JSON.parse( localStorage.getItem('dataTablesData') )
-		 *       );
-		 *     }
-		 *   } );
-		 */
-		"ajax": null,
-	
-	
-		/**
-		 * This parameter allows you to readily specify the entries in the length drop
-		 * down menu that DataTables shows when pagination is enabled. It can be
-		 * either a 1D array of options which will be used for both the displayed
-		 * option and the value, or a 2D array which will use the array in the first
-		 * position as the value, and the array in the second position as the
-		 * displayed options (useful for language strings such as 'All').
-		 *
-		 * Note that the `pageLength` property will be automatically set to the
-		 * first value given in this array, unless `pageLength` is also provided.
-		 *  @type array
-		 *  @default [ 10, 25, 50, 100 ]
-		 *
-		 *  @dtopt Option
-		 *  @name DataTable.defaults.lengthMenu
-		 *
-		 *  @example
-		 *    $(document).ready( function() {
-		 *      $('#example').dataTable( {
-		 *        "lengthMenu": [[10, 25, 50, -1], [10, 25, 50, "All"]]
-		 *      } );
-		 *    } );
-		 */
-		"aLengthMenu": [ 10, 25, 50, 100 ],
-	
-	
-		/**
-		 * The `columns` option in the initialisation parameter allows you to define
-		 * details about the way individual columns behave. For a full list of
-		 * column options that can be set, please see
-		 * {@link DataTable.defaults.column}. Note that if you use `columns` to
-		 * define your columns, you must have an entry in the array for every single
-		 * column that you have in your table (these can be null if you don't which
-		 * to specify any options).
-		 *  @member
-		 *
-		 *  @name DataTable.defaults.column
-		 */
-		"aoColumns": null,
-	
-		/**
-		 * Very similar to `columns`, `columnDefs` allows you to target a specific
-		 * column, multiple columns, or all columns, using the `targets` property of
-		 * each object in the array. This allows great flexibility when creating
-		 * tables, as the `columnDefs` arrays can be of any length, targeting the
-		 * columns you specifically want. `columnDefs` may use any of the column
-		 * options available: {@link DataTable.defaults.column}, but it _must_
-		 * have `targets` defined in each object in the array. Values in the `targets`
-		 * array may be:
-		 *   <ul>
-		 *     <li>a string - class name will be matched on the TH for the column</li>
-		 *     <li>0 or a positive integer - column index counting from the left</li>
-		 *     <li>a negative integer - column index counting from the right</li>
-		 *     <li>the string "_all" - all columns (i.e. assign a default)</li>
-		 *   </ul>
-		 *  @member
-		 *
-		 *  @name DataTable.defaults.columnDefs
-		 */
-		"aoColumnDefs": null,
-	
-	
-		/**
-		 * Basically the same as `search`, this parameter defines the individual column
-		 * filtering state at initialisation time. The array must be of the same size
-		 * as the number of columns, and each element be an object with the parameters
-		 * `search` and `escapeRegex` (the latter is optional). 'null' is also
-		 * accepted and the default will be used.
-		 *  @type array
-		 *  @default []
-		 *
-		 *  @dtopt Option
-		 *  @name DataTable.defaults.searchCols
-		 *
-		 *  @example
-		 *    $(document).ready( function() {
-		 *      $('#example').dataTable( {
-		 *        "searchCols": [
-		 *          null,
-		 *          { "search": "My filter" },
-		 *          null,
-		 *          { "search": "^[0-9]", "escapeRegex": false }
-		 *        ]
-		 *      } );
-		 *    } )
-		 */
-		"aoSearchCols": [],
-	
-	
-		/**
-		 * An array of CSS classes that should be applied to displayed rows. This
-		 * array may be of any length, and DataTables will apply each class
-		 * sequentially, looping when required.
-		 *  @type array
-		 *  @default null <i>Will take the values determined by the `oClasses.stripe*`
-		 *    options</i>
-		 *
-		 *  @dtopt Option
-		 *  @name DataTable.defaults.stripeClasses
-		 *
-		 *  @example
-		 *    $(document).ready( function() {
-		 *      $('#example').dataTable( {
-		 *        "stripeClasses": [ 'strip1', 'strip2', 'strip3' ]
-		 *      } );
-		 *    } )
-		 */
-		"asStripeClasses": null,
-	
-	
-		/**
-		 * Enable or disable automatic column width calculation. This can be disabled
-		 * as an optimisation (it takes some time to calculate the widths) if the
-		 * tables widths are passed in using `columns`.
-		 *  @type boolean
-		 *  @default true
-		 *
-		 *  @dtopt Features
-		 *  @name DataTable.defaults.autoWidth
-		 *
-		 *  @example
-		 *    $(document).ready( function () {
-		 *      $('#example').dataTable( {
-		 *        "autoWidth": false
-		 *      } );
-		 *    } );
-		 */
-		"bAutoWidth": true,
-	
-	
-		/**
-		 * Deferred rendering can provide DataTables with a huge speed boost when you
-		 * are using an Ajax or JS data source for the table. This option, when set to
-		 * true, will cause DataTables to defer the creation of the table elements for
-		 * each row until they are needed for a draw - saving a significant amount of
-		 * time.
-		 *  @type boolean
-		 *  @default false
-		 *
-		 *  @dtopt Features
-		 *  @name DataTable.defaults.deferRender
-		 *
-		 *  @example
-		 *    $(document).ready( function() {
-		 *      $('#example').dataTable( {
-		 *        "ajax": "sources/arrays.txt",
-		 *        "deferRender": true
-		 *      } );
-		 *    } );
-		 */
-		"bDeferRender": false,
-	
-	
-		/**
-		 * Replace a DataTable which matches the given selector and replace it with
-		 * one which has the properties of the new initialisation object passed. If no
-		 * table matches the selector, then the new DataTable will be constructed as
-		 * per normal.
-		 *  @type boolean
-		 *  @default false
-		 *
-		 *  @dtopt Options
-		 *  @name DataTable.defaults.destroy
-		 *
-		 *  @example
-		 *    $(document).ready( function() {
-		 *      $('#example').dataTable( {
-		 *        "srollY": "200px",
-		 *        "paginate": false
-		 *      } );
-		 *
-		 *      // Some time later....
-		 *      $('#example').dataTable( {
-		 *        "filter": false,
-		 *        "destroy": true
-		 *      } );
-		 *    } );
-		 */
-		"bDestroy": false,
-	
-	
-		/**
-		 * Enable or disable filtering of data. Filtering in DataTables is "smart" in
-		 * that it allows the end user to input multiple words (space separated) and
-		 * will match a row containing those words, even if not in the order that was
-		 * specified (this allow matching across multiple columns). Note that if you
-		 * wish to use filtering in DataTables this must remain 'true' - to remove the
-		 * default filtering input box and retain filtering abilities, please use
-		 * {@link DataTable.defaults.dom}.
-		 *  @type boolean
-		 *  @default true
-		 *
-		 *  @dtopt Features
-		 *  @name DataTable.defaults.searching
-		 *
-		 *  @example
-		 *    $(document).ready( function () {
-		 *      $('#example').dataTable( {
-		 *        "searching": false
-		 *      } );
-		 *    } );
-		 */
-		"bFilter": true,
-	
-	
-		/**
-		 * Enable or disable the table information display. This shows information
-		 * about the data that is currently visible on the page, including information
-		 * about filtered data if that action is being performed.
-		 *  @type boolean
-		 *  @default true
-		 *
-		 *  @dtopt Features
-		 *  @name DataTable.defaults.info
-		 *
-		 *  @example
-		 *    $(document).ready( function () {
-		 *      $('#example').dataTable( {
-		 *        "info": false
-		 *      } );
-		 *    } );
-		 */
-		"bInfo": true,
-	
-	
-		/**
-		 * Allows the end user to select the size of a formatted page from a select
-		 * menu (sizes are 10, 25, 50 and 100). Requires pagination (`paginate`).
-		 *  @type boolean
-		 *  @default true
-		 *
-		 *  @dtopt Features
-		 *  @name DataTable.defaults.lengthChange
-		 *
-		 *  @example
-		 *    $(document).ready( function () {
-		 *      $('#example').dataTable( {
-		 *        "lengthChange": false
-		 *      } );
-		 *    } );
-		 */
-		"bLengthChange": true,
-	
-	
-		/**
-		 * Enable or disable pagination.
-		 *  @type boolean
-		 *  @default true
-		 *
-		 *  @dtopt Features
-		 *  @name DataTable.defaults.paging
-		 *
-		 *  @example
-		 *    $(document).ready( function () {
-		 *      $('#example').dataTable( {
-		 *        "paging": false
-		 *      } );
-		 *    } );
-		 */
-		"bPaginate": true,
-	
-	
-		/**
-		 * Enable or disable the display of a 'processing' indicator when the table is
-		 * being processed (e.g. a sort). This is particularly useful for tables with
-		 * large amounts of data where it can take a noticeable amount of time to sort
-		 * the entries.
-		 *  @type boolean
-		 *  @default false
-		 *
-		 *  @dtopt Features
-		 *  @name DataTable.defaults.processing
-		 *
-		 *  @example
-		 *    $(document).ready( function () {
-		 *      $('#example').dataTable( {
-		 *        "processing": true
-		 *      } );
-		 *    } );
-		 */
-		"bProcessing": false,
-	
-	
-		/**
-		 * Retrieve the DataTables object for the given selector. Note that if the
-		 * table has already been initialised, this parameter will cause DataTables
-		 * to simply return the object that has already been set up - it will not take
-		 * account of any changes you might have made to the initialisation object
-		 * passed to DataTables (setting this parameter to true is an acknowledgement
-		 * that you understand this). `destroy` can be used to reinitialise a table if
-		 * you need.
-		 *  @type boolean
-		 *  @default false
-		 *
-		 *  @dtopt Options
-		 *  @name DataTable.defaults.retrieve
-		 *
-		 *  @example
-		 *    $(document).ready( function() {
-		 *      initTable();
-		 *      tableActions();
-		 *    } );
-		 *
-		 *    function initTable ()
-		 *    {
-		 *      return $('#example').dataTable( {
-		 *        "scrollY": "200px",
-		 *        "paginate": false,
-		 *        "retrieve": true
-		 *      } );
-		 *    }
-		 *
-		 *    function tableActions ()
-		 *    {
-		 *      var table = initTable();
-		 *      // perform API operations with oTable
-		 *    }
-		 */
-		"bRetrieve": false,
-	
-	
-		/**
-		 * When vertical (y) scrolling is enabled, DataTables will force the height of
-		 * the table's viewport to the given height at all times (useful for layout).
-		 * However, this can look odd when filtering data down to a small data set,
-		 * and the footer is left "floating" further down. This parameter (when
-		 * enabled) will cause DataTables to collapse the table's viewport down when
-		 * the result set will fit within the given Y height.
-		 *  @type boolean
-		 *  @default false
-		 *
-		 *  @dtopt Options
-		 *  @name DataTable.defaults.scrollCollapse
-		 *
-		 *  @example
-		 *    $(document).ready( function() {
-		 *      $('#example').dataTable( {
-		 *        "scrollY": "200",
-		 *        "scrollCollapse": true
-		 *      } );
-		 *    } );
-		 */
-		"bScrollCollapse": false,
-	
-	
-		/**
-		 * Configure DataTables to use server-side processing. Note that the
-		 * `ajax` parameter must also be given in order to give DataTables a
-		 * source to obtain the required data for each draw.
-		 *  @type boolean
-		 *  @default false
-		 *
-		 *  @dtopt Features
-		 *  @dtopt Server-side
-		 *  @name DataTable.defaults.serverSide
-		 *
-		 *  @example
-		 *    $(document).ready( function () {
-		 *      $('#example').dataTable( {
-		 *        "serverSide": true,
-		 *        "ajax": "xhr.php"
-		 *      } );
-		 *    } );
-		 */
-		"bServerSide": false,
-	
-	
-		/**
-		 * Enable or disable sorting of columns. Sorting of individual columns can be
-		 * disabled by the `sortable` option for each column.
-		 *  @type boolean
-		 *  @default true
-		 *
-		 *  @dtopt Features
-		 *  @name DataTable.defaults.ordering
-		 *
-		 *  @example
-		 *    $(document).ready( function () {
-		 *      $('#example').dataTable( {
-		 *        "ordering": false
-		 *      } );
-		 *    } );
-		 */
-		"bSort": true,
-	
-	
-		/**
-		 * Enable or display DataTables' ability to sort multiple columns at the
-		 * same time (activated by shift-click by the user).
-		 *  @type boolean
-		 *  @default true
-		 *
-		 *  @dtopt Options
-		 *  @name DataTable.defaults.orderMulti
-		 *
-		 *  @example
-		 *    // Disable multiple column sorting ability
-		 *    $(document).ready( function () {
-		 *      $('#example').dataTable( {
-		 *        "orderMulti": false
-		 *      } );
-		 *    } );
-		 */
-		"bSortMulti": true,
-	
-	
-		/**
-		 * Allows control over whether DataTables should use the top (true) unique
-		 * cell that is found for a single column, or the bottom (false - default).
-		 * This is useful when using complex headers.
-		 *  @type boolean
-		 *  @default false
-		 *
-		 *  @dtopt Options
-		 *  @name DataTable.defaults.orderCellsTop
-		 *
-		 *  @example
-		 *    $(document).ready( function() {
-		 *      $('#example').dataTable( {
-		 *        "orderCellsTop": true
-		 *      } );
-		 *    } );
-		 */
-		"bSortCellsTop": false,
-	
-	
-		/**
-		 * Enable or disable the addition of the classes `sorting\_1`, `sorting\_2` and
-		 * `sorting\_3` to the columns which are currently being sorted on. This is
-		 * presented as a feature switch as it can increase processing time (while
-		 * classes are removed and added) so for large data sets you might want to
-		 * turn this off.
-		 *  @type boolean
-		 *  @default true
-		 *
-		 *  @dtopt Features
-		 *  @name DataTable.defaults.orderClasses
-		 *
-		 *  @example
-		 *    $(document).ready( function () {
-		 *      $('#example').dataTable( {
-		 *        "orderClasses": false
-		 *      } );
-		 *    } );
-		 */
-		"bSortClasses": true,
-	
-	
-		/**
-		 * Enable or disable state saving. When enabled HTML5 `localStorage` will be
-		 * used to save table display information such as pagination information,
-		 * display length, filtering and sorting. As such when the end user reloads
-		 * the page the display display will match what thy had previously set up.
-		 *
-		 * Due to the use of `localStorage` the default state saving is not supported
-		 * in IE6 or 7. If state saving is required in those browsers, use
-		 * `stateSaveCallback` to provide a storage solution such as cookies.
-		 *  @type boolean
-		 *  @default false
-		 *
-		 *  @dtopt Features
-		 *  @name DataTable.defaults.stateSave
-		 *
-		 *  @example
-		 *    $(document).ready( function () {
-		 *      $('#example').dataTable( {
-		 *        "stateSave": true
-		 *      } );
-		 *    } );
-		 */
-		"bStateSave": false,
-	
-	
-		/**
-		 * This function is called when a TR element is created (and all TD child
-		 * elements have been inserted), or registered if using a DOM source, allowing
-		 * manipulation of the TR element (adding classes etc).
-		 *  @type function
-		 *  @param {node} row "TR" element for the current row
-		 *  @param {array} data Raw data array for this row
-		 *  @param {int} dataIndex The index of this row in the internal aoData array
-		 *
-		 *  @dtopt Callbacks
-		 *  @name DataTable.defaults.createdRow
-		 *
-		 *  @example
-		 *    $(document).ready( function() {
-		 *      $('#example').dataTable( {
-		 *        "createdRow": function( row, data, dataIndex ) {
-		 *          // Bold the grade for all 'A' grade browsers
-		 *          if ( data[4] == "A" )
-		 *          {
-		 *            $('td:eq(4)', row).html( '<b>A</b>' );
-		 *          }
-		 *        }
-		 *      } );
-		 *    } );
-		 */
-		"fnCreatedRow": null,
-	
-	
-		/**
-		 * This function is called on every 'draw' event, and allows you to
-		 * dynamically modify any aspect you want about the created DOM.
-		 *  @type function
-		 *  @param {object} settings DataTables settings object
-		 *
-		 *  @dtopt Callbacks
-		 *  @name DataTable.defaults.drawCallback
-		 *
-		 *  @example
-		 *    $(document).ready( function() {
-		 *      $('#example').dataTable( {
-		 *        "drawCallback": function( settings ) {
-		 *          alert( 'DataTables has redrawn the table' );
-		 *        }
-		 *      } );
-		 *    } );
-		 */
-		"fnDrawCallback": null,
-	
-	
-		/**
-		 * Identical to fnHeaderCallback() but for the table footer this function
-		 * allows you to modify the table footer on every 'draw' event.
-		 *  @type function
-		 *  @param {node} foot "TR" element for the footer
-		 *  @param {array} data Full table data (as derived from the original HTML)
-		 *  @param {int} start Index for the current display starting point in the
-		 *    display array
-		 *  @param {int} end Index for the current display ending point in the
-		 *    display array
-		 *  @param {array int} display Index array to translate the visual position
-		 *    to the full data array
-		 *
-		 *  @dtopt Callbacks
-		 *  @name DataTable.defaults.footerCallback
-		 *
-		 *  @example
-		 *    $(document).ready( function() {
-		 *      $('#example').dataTable( {
-		 *        "footerCallback": function( tfoot, data, start, end, display ) {
-		 *          tfoot.getElementsByTagName('th')[0].innerHTML = "Starting index is "+start;
-		 *        }
-		 *      } );
-		 *    } )
-		 */
-		"fnFooterCallback": null,
-	
-	
-		/**
-		 * When rendering large numbers in the information element for the table
-		 * (i.e. "Showing 1 to 10 of 57 entries") DataTables will render large numbers
-		 * to have a comma separator for the 'thousands' units (e.g. 1 million is
-		 * rendered as "1,000,000") to help readability for the end user. This
-		 * function will override the default method DataTables uses.
-		 *  @type function
-		 *  @member
-		 *  @param {int} toFormat number to be formatted
-		 *  @returns {string} formatted string for DataTables to show the number
-		 *
-		 *  @dtopt Callbacks
-		 *  @name DataTable.defaults.formatNumber
-		 *
-		 *  @example
-		 *    // Format a number using a single quote for the separator (note that
-		 *    // this can also be done with the language.thousands option)
-		 *    $(document).ready( function() {
-		 *      $('#example').dataTable( {
-		 *        "formatNumber": function ( toFormat ) {
-		 *          return toFormat.toString().replace(
-		 *            /\B(?=(\d{3})+(?!\d))/g, "'"
-		 *          );
-		 *        };
-		 *      } );
-		 *    } );
-		 */
-		"fnFormatNumber": function ( toFormat ) {
-			return toFormat.toString().replace(
-				/\B(?=(\d{3})+(?!\d))/g,
-				this.oLanguage.sThousands
-			);
-		},
-	
-	
-		/**
-		 * This function is called on every 'draw' event, and allows you to
-		 * dynamically modify the header row. This can be used to calculate and
-		 * display useful information about the table.
-		 *  @type function
-		 *  @param {node} head "TR" element for the header
-		 *  @param {array} data Full table data (as derived from the original HTML)
-		 *  @param {int} start Index for the current display starting point in the
-		 *    display array
-		 *  @param {int} end Index for the current display ending point in the
-		 *    display array
-		 *  @param {array int} display Index array to translate the visual position
-		 *    to the full data array
-		 *
-		 *  @dtopt Callbacks
-		 *  @name DataTable.defaults.headerCallback
-		 *
-		 *  @example
-		 *    $(document).ready( function() {
-		 *      $('#example').dataTable( {
-		 *        "fheaderCallback": function( head, data, start, end, display ) {
-		 *          head.getElementsByTagName('th')[0].innerHTML = "Displaying "+(end-start)+" records";
-		 *        }
-		 *      } );
-		 *    } )
-		 */
-		"fnHeaderCallback": null,
-	
-	
-		/**
-		 * The information element can be used to convey information about the current
-		 * state of the table. Although the internationalisation options presented by
-		 * DataTables are quite capable of dealing with most customisations, there may
-		 * be times where you wish to customise the string further. This callback
-		 * allows you to do exactly that.
-		 *  @type function
-		 *  @param {object} oSettings DataTables settings object
-		 *  @param {int} start Starting position in data for the draw
-		 *  @param {int} end End position in data for the draw
-		 *  @param {int} max Total number of rows in the table (regardless of
-		 *    filtering)
-		 *  @param {int} total Total number of rows in the data set, after filtering
-		 *  @param {string} pre The string that DataTables has formatted using it's
-		 *    own rules
-		 *  @returns {string} The string to be displayed in the information element.
-		 *
-		 *  @dtopt Callbacks
-		 *  @name DataTable.defaults.infoCallback
-		 *
-		 *  @example
-		 *    $('#example').dataTable( {
-		 *      "infoCallback": function( settings, start, end, max, total, pre ) {
-		 *        return start +" to "+ end;
-		 *      }
-		 *    } );
-		 */
-		"fnInfoCallback": null,
-	
-	
-		/**
-		 * Called when the table has been initialised. Normally DataTables will
-		 * initialise sequentially and there will be no need for this function,
-		 * however, this does not hold true when using external language information
-		 * since that is obtained using an async XHR call.
-		 *  @type function
-		 *  @param {object} settings DataTables settings object
-		 *  @param {object} json The JSON object request from the server - only
-		 *    present if client-side Ajax sourced data is used
-		 *
-		 *  @dtopt Callbacks
-		 *  @name DataTable.defaults.initComplete
-		 *
-		 *  @example
-		 *    $(document).ready( function() {
-		 *      $('#example').dataTable( {
-		 *        "initComplete": function(settings, json) {
-		 *          alert( 'DataTables has finished its initialisation.' );
-		 *        }
-		 *      } );
-		 *    } )
-		 */
-		"fnInitComplete": null,
-	
-	
-		/**
-		 * Called at the very start of each table draw and can be used to cancel the
-		 * draw by returning false, any other return (including undefined) results in
-		 * the full draw occurring).
-		 *  @type function
-		 *  @param {object} settings DataTables settings object
-		 *  @returns {boolean} False will cancel the draw, anything else (including no
-		 *    return) will allow it to complete.
-		 *
-		 *  @dtopt Callbacks
-		 *  @name DataTable.defaults.preDrawCallback
-		 *
-		 *  @example
-		 *    $(document).ready( function() {
-		 *      $('#example').dataTable( {
-		 *        "preDrawCallback": function( settings ) {
-		 *          if ( $('#test').val() == 1 ) {
-		 *            return false;
-		 *          }
-		 *        }
-		 *      } );
-		 *    } );
-		 */
-		"fnPreDrawCallback": null,
-	
-	
-		/**
-		 * This function allows you to 'post process' each row after it have been
-		 * generated for each table draw, but before it is rendered on screen. This
-		 * function might be used for setting the row class name etc.
-		 *  @type function
-		 *  @param {node} row "TR" element for the current row
-		 *  @param {array} data Raw data array for this row
-		 *  @param {int} displayIndex The display index for the current table draw
-		 *  @param {int} displayIndexFull The index of the data in the full list of
-		 *    rows (after filtering)
-		 *
-		 *  @dtopt Callbacks
-		 *  @name DataTable.defaults.rowCallback
-		 *
-		 *  @example
-		 *    $(document).ready( function() {
-		 *      $('#example').dataTable( {
-		 *        "rowCallback": function( row, data, displayIndex, displayIndexFull ) {
-		 *          // Bold the grade for all 'A' grade browsers
-		 *          if ( data[4] == "A" ) {
-		 *            $('td:eq(4)', row).html( '<b>A</b>' );
-		 *          }
-		 *        }
-		 *      } );
-		 *    } );
-		 */
-		"fnRowCallback": null,
-	
-	
-		/**
-		 * __Deprecated__ The functionality provided by this parameter has now been
-		 * superseded by that provided through `ajax`, which should be used instead.
-		 *
-		 * This parameter allows you to override the default function which obtains
-		 * the data from the server so something more suitable for your application.
-		 * For example you could use POST data, or pull information from a Gears or
-		 * AIR database.
-		 *  @type function
-		 *  @member
-		 *  @param {string} source HTTP source to obtain the data from (`ajax`)
-		 *  @param {array} data A key/value pair object containing the data to send
-		 *    to the server
-		 *  @param {function} callback to be called on completion of the data get
-		 *    process that will draw the data on the page.
-		 *  @param {object} settings DataTables settings object
-		 *
-		 *  @dtopt Callbacks
-		 *  @dtopt Server-side
-		 *  @name DataTable.defaults.serverData
-		 *
-		 *  @deprecated 1.10. Please use `ajax` for this functionality now.
-		 */
-		"fnServerData": null,
-	
-	
-		/**
-		 * __Deprecated__ The functionality provided by this parameter has now been
-		 * superseded by that provided through `ajax`, which should be used instead.
-		 *
-		 *  It is often useful to send extra data to the server when making an Ajax
-		 * request - for example custom filtering information, and this callback
-		 * function makes it trivial to send extra information to the server. The
-		 * passed in parameter is the data set that has been constructed by
-		 * DataTables, and you can add to this or modify it as you require.
-		 *  @type function
-		 *  @param {array} data Data array (array of objects which are name/value
-		 *    pairs) that has been constructed by DataTables and will be sent to the
-		 *    server. In the case of Ajax sourced data with server-side processing
-		 *    this will be an empty array, for server-side processing there will be a
-		 *    significant number of parameters!
-		 *  @returns {undefined} Ensure that you modify the data array passed in,
-		 *    as this is passed by reference.
-		 *
-		 *  @dtopt Callbacks
-		 *  @dtopt Server-side
-		 *  @name DataTable.defaults.serverParams
-		 *
-		 *  @deprecated 1.10. Please use `ajax` for this functionality now.
-		 */
-		"fnServerParams": null,
-	
-	
-		/**
-		 * Load the table state. With this function you can define from where, and how, the
-		 * state of a table is loaded. By default DataTables will load from `localStorage`
-		 * but you might wish to use a server-side database or cookies.
-		 *  @type function
-		 *  @member
-		 *  @param {object} settings DataTables settings object
-		 *  @param {object} callback Callback that can be executed when done. It
-		 *    should be passed the loaded state object.
-		 *  @return {object} The DataTables state object to be loaded
-		 *
-		 *  @dtopt Callbacks
-		 *  @name DataTable.defaults.stateLoadCallback
-		 *
-		 *  @example
-		 *    $(document).ready( function() {
-		 *      $('#example').dataTable( {
-		 *        "stateSave": true,
-		 *        "stateLoadCallback": function (settings, callback) {
-		 *          $.ajax( {
-		 *            "url": "/state_load",
-		 *            "dataType": "json",
-		 *            "success": function (json) {
-		 *              callback( json );
-		 *            }
-		 *          } );
-		 *        }
-		 *      } );
-		 *    } );
-		 */
-		"fnStateLoadCallback": function ( settings ) {
-			try {
-				return JSON.parse(
-					(settings.iStateDuration === -1 ? sessionStorage : localStorage).getItem(
-						'DataTables_'+settings.sInstance+'_'+location.pathname
-					)
-				);
-			} catch (e) {
-				return {};
-			}
-		},
-	
-	
-		/**
-		 * Callback which allows modification of the saved state prior to loading that state.
-		 * This callback is called when the table is loading state from the stored data, but
-		 * prior to the settings object being modified by the saved state. Note that for
-		 * plug-in authors, you should use the `stateLoadParams` event to load parameters for
-		 * a plug-in.
-		 *  @type function
-		 *  @param {object} settings DataTables settings object
-		 *  @param {object} data The state object that is to be loaded
-		 *
-		 *  @dtopt Callbacks
-		 *  @name DataTable.defaults.stateLoadParams
-		 *
-		 *  @example
-		 *    // Remove a saved filter, so filtering is never loaded
-		 *    $(document).ready( function() {
-		 *      $('#example').dataTable( {
-		 *        "stateSave": true,
-		 *        "stateLoadParams": function (settings, data) {
-		 *          data.oSearch.sSearch = "";
-		 *        }
-		 *      } );
-		 *    } );
-		 *
-		 *  @example
-		 *    // Disallow state loading by returning false
-		 *    $(document).ready( function() {
-		 *      $('#example').dataTable( {
-		 *        "stateSave": true,
-		 *        "stateLoadParams": function (settings, data) {
-		 *          return false;
-		 *        }
-		 *      } );
-		 *    } );
-		 */
-		"fnStateLoadParams": null,
-	
-	
-		/**
-		 * Callback that is called when the state has been loaded from the state saving method
-		 * and the DataTables settings object has been modified as a result of the loaded state.
-		 *  @type function
-		 *  @param {object} settings DataTables settings object
-		 *  @param {object} data The state object that was loaded
-		 *
-		 *  @dtopt Callbacks
-		 *  @name DataTable.defaults.stateLoaded
-		 *
-		 *  @example
-		 *    // Show an alert with the filtering value that was saved
-		 *    $(document).ready( function() {
-		 *      $('#example').dataTable( {
-		 *        "stateSave": true,
-		 *        "stateLoaded": function (settings, data) {
-		 *          alert( 'Saved filter was: '+data.oSearch.sSearch );
-		 *        }
-		 *      } );
-		 *    } );
-		 */
-		"fnStateLoaded": null,
-	
-	
-		/**
-		 * Save the table state. This function allows you to define where and how the state
-		 * information for the table is stored By default DataTables will use `localStorage`
-		 * but you might wish to use a server-side database or cookies.
-		 *  @type function
-		 *  @member
-		 *  @param {object} settings DataTables settings object
-		 *  @param {object} data The state object to be saved
-		 *
-		 *  @dtopt Callbacks
-		 *  @name DataTable.defaults.stateSaveCallback
-		 *
-		 *  @example
-		 *    $(document).ready( function() {
-		 *      $('#example').dataTable( {
-		 *        "stateSave": true,
-		 *        "stateSaveCallback": function (settings, data) {
-		 *          // Send an Ajax request to the server with the state object
-		 *          $.ajax( {
-		 *            "url": "/state_save",
-		 *            "data": data,
-		 *            "dataType": "json",
-		 *            "method": "POST"
-		 *            "success": function () {}
-		 *          } );
-		 *        }
-		 *      } );
-		 *    } );
-		 */
-		"fnStateSaveCallback": function ( settings, data ) {
-			try {
-				(settings.iStateDuration === -1 ? sessionStorage : localStorage).setItem(
-					'DataTables_'+settings.sInstance+'_'+location.pathname,
-					JSON.stringify( data )
-				);
-			} catch (e) {}
-		},
-	
-	
-		/**
-		 * Callback which allows modification of the state to be saved. Called when the table
-		 * has changed state a new state save is required. This method allows modification of
-		 * the state saving object prior to actually doing the save, including addition or
-		 * other state properties or modification. Note that for plug-in authors, you should
-		 * use the `stateSaveParams` event to save parameters for a plug-in.
-		 *  @type function
-		 *  @param {object} settings DataTables settings object
-		 *  @param {object} data The state object to be saved
-		 *
-		 *  @dtopt Callbacks
-		 *  @name DataTable.defaults.stateSaveParams
-		 *
-		 *  @example
-		 *    // Remove a saved filter, so filtering is never saved
-		 *    $(document).ready( function() {
-		 *      $('#example').dataTable( {
-		 *        "stateSave": true,
-		 *        "stateSaveParams": function (settings, data) {
-		 *          data.oSearch.sSearch = "";
-		 *        }
-		 *      } );
-		 *    } );
-		 */
-		"fnStateSaveParams": null,
-	
-	
-		/**
-		 * Duration for which the saved state information is considered valid. After this period
-		 * has elapsed the state will be returned to the default.
-		 * Value is given in seconds.
-		 *  @type int
-		 *  @default 7200 <i>(2 hours)</i>
-		 *
-		 *  @dtopt Options
-		 *  @name DataTable.defaults.stateDuration
-		 *
-		 *  @example
-		 *    $(document).ready( function() {
-		 *      $('#example').dataTable( {
-		 *        "stateDuration": 60*60*24; // 1 day
-		 *      } );
-		 *    } )
-		 */
-		"iStateDuration": 7200,
-	
-	
-		/**
-		 * When enabled DataTables will not make a request to the server for the first
-		 * page draw - rather it will use the data already on the page (no sorting etc
-		 * will be applied to it), thus saving on an XHR at load time. `deferLoading`
-		 * is used to indicate that deferred loading is required, but it is also used
-		 * to tell DataTables how many records there are in the full table (allowing
-		 * the information element and pagination to be displayed correctly). In the case
-		 * where a filtering is applied to the table on initial load, this can be
-		 * indicated by giving the parameter as an array, where the first element is
-		 * the number of records available after filtering and the second element is the
-		 * number of records without filtering (allowing the table information element
-		 * to be shown correctly).
-		 *  @type int | array
-		 *  @default null
-		 *
-		 *  @dtopt Options
-		 *  @name DataTable.defaults.deferLoading
-		 *
-		 *  @example
-		 *    // 57 records available in the table, no filtering applied
-		 *    $(document).ready( function() {
-		 *      $('#example').dataTable( {
-		 *        "serverSide": true,
-		 *        "ajax": "scripts/server_processing.php",
-		 *        "deferLoading": 57
-		 *      } );
-		 *    } );
-		 *
-		 *  @example
-		 *    // 57 records after filtering, 100 without filtering (an initial filter applied)
-		 *    $(document).ready( function() {
-		 *      $('#example').dataTable( {
-		 *        "serverSide": true,
-		 *        "ajax": "scripts/server_processing.php",
-		 *        "deferLoading": [ 57, 100 ],
-		 *        "search": {
-		 *          "search": "my_filter"
-		 *        }
-		 *      } );
-		 *    } );
-		 */
-		"iDeferLoading": null,
-	
-	
-		/**
-		 * Number of rows to display on a single page when using pagination. If
-		 * feature enabled (`lengthChange`) then the end user will be able to override
-		 * this to a custom setting using a pop-up menu.
-		 *  @type int
-		 *  @default 10
-		 *
-		 *  @dtopt Options
-		 *  @name DataTable.defaults.pageLength
-		 *
-		 *  @example
-		 *    $(document).ready( function() {
-		 *      $('#example').dataTable( {
-		 *        "pageLength": 50
-		 *      } );
-		 *    } )
-		 */
-		"iDisplayLength": 10,
-	
-	
-		/**
-		 * Define the starting point for data display when using DataTables with
-		 * pagination. Note that this parameter is the number of records, rather than
-		 * the page number, so if you have 10 records per page and want to start on
-		 * the third page, it should be "20".
-		 *  @type int
-		 *  @default 0
-		 *
-		 *  @dtopt Options
-		 *  @name DataTable.defaults.displayStart
-		 *
-		 *  @example
-		 *    $(document).ready( function() {
-		 *      $('#example').dataTable( {
-		 *        "displayStart": 20
-		 *      } );
-		 *    } )
-		 */
-		"iDisplayStart": 0,
-	
-	
-		/**
-		 * By default DataTables allows keyboard navigation of the table (sorting, paging,
-		 * and filtering) by adding a `tabindex` attribute to the required elements. This
-		 * allows you to tab through the controls and press the enter key to activate them.
-		 * The tabindex is default 0, meaning that the tab follows the flow of the document.
-		 * You can overrule this using this parameter if you wish. Use a value of -1 to
-		 * disable built-in keyboard navigation.
-		 *  @type int
-		 *  @default 0
-		 *
-		 *  @dtopt Options
-		 *  @name DataTable.defaults.tabIndex
-		 *
-		 *  @example
-		 *    $(document).ready( function() {
-		 *      $('#example').dataTable( {
-		 *        "tabIndex": 1
-		 *      } );
-		 *    } );
-		 */
-		"iTabIndex": 0,
-	
-	
-		/**
-		 * Classes that DataTables assigns to the various components and features
-		 * that it adds to the HTML table. This allows classes to be configured
-		 * during initialisation in addition to through the static
-		 * {@link DataTable.ext.oStdClasses} object).
-		 *  @namespace
-		 *  @name DataTable.defaults.classes
-		 */
-		"oClasses": {},
-	
-	
-		/**
-		 * All strings that DataTables uses in the user interface that it creates
-		 * are defined in this object, allowing you to modified them individually or
-		 * completely replace them all as required.
-		 *  @namespace
-		 *  @name DataTable.defaults.language
-		 */
-		"oLanguage": {
-			/**
-			 * Strings that are used for WAI-ARIA labels and controls only (these are not
-			 * actually visible on the page, but will be read by screenreaders, and thus
-			 * must be internationalised as well).
-			 *  @namespace
-			 *  @name DataTable.defaults.language.aria
-			 */
-			"oAria": {
-				/**
-				 * ARIA label that is added to the table headers when the column may be
-				 * sorted ascending by activing the column (click or return when focused).
-				 * Note that the column header is prefixed to this string.
-				 *  @type string
-				 *  @default : activate to sort column ascending
-				 *
-				 *  @dtopt Language
-				 *  @name DataTable.defaults.language.aria.sortAscending
-				 *
-				 *  @example
-				 *    $(document).ready( function() {
-				 *      $('#example').dataTable( {
-				 *        "language": {
-				 *          "aria": {
-				 *            "sortAscending": " - click/return to sort ascending"
-				 *          }
-				 *        }
-				 *      } );
-				 *    } );
-				 */
-				"sSortAscending": ": activate to sort column ascending",
-	
-				/**
-				 * ARIA label that is added to the table headers when the column may be
-				 * sorted descending by activing the column (click or return when focused).
-				 * Note that the column header is prefixed to this string.
-				 *  @type string
-				 *  @default : activate to sort column ascending
-				 *
-				 *  @dtopt Language
-				 *  @name DataTable.defaults.language.aria.sortDescending
-				 *
-				 *  @example
-				 *    $(document).ready( function() {
-				 *      $('#example').dataTable( {
-				 *        "language": {
-				 *          "aria": {
-				 *            "sortDescending": " - click/return to sort descending"
-				 *          }
-				 *        }
-				 *      } );
-				 *    } );
-				 */
-				"sSortDescending": ": activate to sort column descending"
-			},
-	
-			/**
-			 * Pagination string used by DataTables for the built-in pagination
-			 * control types.
-			 *  @namespace
-			 *  @name DataTable.defaults.language.paginate
-			 */
-			"oPaginate": {
-				/**
-				 * Text to use when using the 'full_numbers' type of pagination for the
-				 * button to take the user to the first page.
-				 *  @type string
-				 *  @default First
-				 *
-				 *  @dtopt Language
-				 *  @name DataTable.defaults.language.paginate.first
-				 *
-				 *  @example
-				 *    $(document).ready( function() {
-				 *      $('#example').dataTable( {
-				 *        "language": {
-				 *          "paginate": {
-				 *            "first": "First page"
-				 *          }
-				 *        }
-				 *      } );
-				 *    } );
-				 */
-				"sFirst": "First",
-	
-	
-				/**
-				 * Text to use when using the 'full_numbers' type of pagination for the
-				 * button to take the user to the last page.
-				 *  @type string
-				 *  @default Last
-				 *
-				 *  @dtopt Language
-				 *  @name DataTable.defaults.language.paginate.last
-				 *
-				 *  @example
-				 *    $(document).ready( function() {
-				 *      $('#example').dataTable( {
-				 *        "language": {
-				 *          "paginate": {
-				 *            "last": "Last page"
-				 *          }
-				 *        }
-				 *      } );
-				 *    } );
-				 */
-				"sLast": "Last",
-	
-	
-				/**
-				 * Text to use for the 'next' pagination button (to take the user to the
-				 * next page).
-				 *  @type string
-				 *  @default Next
-				 *
-				 *  @dtopt Language
-				 *  @name DataTable.defaults.language.paginate.next
-				 *
-				 *  @example
-				 *    $(document).ready( function() {
-				 *      $('#example').dataTable( {
-				 *        "language": {
-				 *          "paginate": {
-				 *            "next": "Next page"
-				 *          }
-				 *        }
-				 *      } );
-				 *    } );
-				 */
-				"sNext": "Next",
-	
-	
-				/**
-				 * Text to use for the 'previous' pagination button (to take the user to
-				 * the previous page).
-				 *  @type string
-				 *  @default Previous
-				 *
-				 *  @dtopt Language
-				 *  @name DataTable.defaults.language.paginate.previous
-				 *
-				 *  @example
-				 *    $(document).ready( function() {
-				 *      $('#example').dataTable( {
-				 *        "language": {
-				 *          "paginate": {
-				 *            "previous": "Previous page"
-				 *          }
-				 *        }
-				 *      } );
-				 *    } );
-				 */
-				"sPrevious": "Previous"
-			},
-	
-			/**
-			 * This string is shown in preference to `zeroRecords` when the table is
-			 * empty of data (regardless of filtering). Note that this is an optional
-			 * parameter - if it is not given, the value of `zeroRecords` will be used
-			 * instead (either the default or given value).
-			 *  @type string
-			 *  @default No data available in table
-			 *
-			 *  @dtopt Language
-			 *  @name DataTable.defaults.language.emptyTable
-			 *
-			 *  @example
-			 *    $(document).ready( function() {
-			 *      $('#example').dataTable( {
-			 *        "language": {
-			 *          "emptyTable": "No data available in table"
-			 *        }
-			 *      } );
-			 *    } );
-			 */
-			"sEmptyTable": "No data available in table",
-	
-	
-			/**
-			 * This string gives information to the end user about the information
-			 * that is current on display on the page. The following tokens can be
-			 * used in the string and will be dynamically replaced as the table
-			 * display updates. This tokens can be placed anywhere in the string, or
-			 * removed as needed by the language requires:
-			 *
-			 * * `\_START\_` - Display index of the first record on the current page
-			 * * `\_END\_` - Display index of the last record on the current page
-			 * * `\_TOTAL\_` - Number of records in the table after filtering
-			 * * `\_MAX\_` - Number of records in the table without filtering
-			 * * `\_PAGE\_` - Current page number
-			 * * `\_PAGES\_` - Total number of pages of data in the table
-			 *
-			 *  @type string
-			 *  @default Showing _START_ to _END_ of _TOTAL_ entries
-			 *
-			 *  @dtopt Language
-			 *  @name DataTable.defaults.language.info
-			 *
-			 *  @example
-			 *    $(document).ready( function() {
-			 *      $('#example').dataTable( {
-			 *        "language": {
-			 *          "info": "Showing page _PAGE_ of _PAGES_"
-			 *        }
-			 *      } );
-			 *    } );
-			 */
-			"sInfo": "Showing _START_ to _END_ of _TOTAL_ entries",
-	
-	
-			/**
-			 * Display information string for when the table is empty. Typically the
-			 * format of this string should match `info`.
-			 *  @type string
-			 *  @default Showing 0 to 0 of 0 entries
-			 *
-			 *  @dtopt Language
-			 *  @name DataTable.defaults.language.infoEmpty
-			 *
-			 *  @example
-			 *    $(document).ready( function() {
-			 *      $('#example').dataTable( {
-			 *        "language": {
-			 *          "infoEmpty": "No entries to show"
-			 *        }
-			 *      } );
-			 *    } );
-			 */
-			"sInfoEmpty": "Showing 0 to 0 of 0 entries",
-	
-	
-			/**
-			 * When a user filters the information in a table, this string is appended
-			 * to the information (`info`) to give an idea of how strong the filtering
-			 * is. The variable _MAX_ is dynamically updated.
-			 *  @type string
-			 *  @default (filtered from _MAX_ total entries)
-			 *
-			 *  @dtopt Language
-			 *  @name DataTable.defaults.language.infoFiltered
-			 *
-			 *  @example
-			 *    $(document).ready( function() {
-			 *      $('#example').dataTable( {
-			 *        "language": {
-			 *          "infoFiltered": " - filtering from _MAX_ records"
-			 *        }
-			 *      } );
-			 *    } );
-			 */
-			"sInfoFiltered": "(filtered from _MAX_ total entries)",
-	
-	
-			/**
-			 * If can be useful to append extra information to the info string at times,
-			 * and this variable does exactly that. This information will be appended to
-			 * the `info` (`infoEmpty` and `infoFiltered` in whatever combination they are
-			 * being used) at all times.
-			 *  @type string
-			 *  @default <i>Empty string</i>
-			 *
-			 *  @dtopt Language
-			 *  @name DataTable.defaults.language.infoPostFix
-			 *
-			 *  @example
-			 *    $(document).ready( function() {
-			 *      $('#example').dataTable( {
-			 *        "language": {
-			 *          "infoPostFix": "All records shown are derived from real information."
-			 *        }
-			 *      } );
-			 *    } );
-			 */
-			"sInfoPostFix": "",
-	
-	
-			/**
-			 * This decimal place operator is a little different from the other
-			 * language options since DataTables doesn't output floating point
-			 * numbers, so it won't ever use this for display of a number. Rather,
-			 * what this parameter does is modify the sort methods of the table so
-			 * that numbers which are in a format which has a character other than
-			 * a period (`.`) as a decimal place will be sorted numerically.
-			 *
-			 * Note that numbers with different decimal places cannot be shown in
-			 * the same table and still be sortable, the table must be consistent.
-			 * However, multiple different tables on the page can use different
-			 * decimal place characters.
-			 *  @type string
-			 *  @default 
-			 *
-			 *  @dtopt Language
-			 *  @name DataTable.defaults.language.decimal
-			 *
-			 *  @example
-			 *    $(document).ready( function() {
-			 *      $('#example').dataTable( {
-			 *        "language": {
-			 *          "decimal": ","
-			 *          "thousands": "."
-			 *        }
-			 *      } );
-			 *    } );
-			 */
-			"sDecimal": "",
-	
-	
-			/**
-			 * DataTables has a build in number formatter (`formatNumber`) which is
-			 * used to format large numbers that are used in the table information.
-			 * By default a comma is used, but this can be trivially changed to any
-			 * character you wish with this parameter.
-			 *  @type string
-			 *  @default ,
-			 *
-			 *  @dtopt Language
-			 *  @name DataTable.defaults.language.thousands
-			 *
-			 *  @example
-			 *    $(document).ready( function() {
-			 *      $('#example').dataTable( {
-			 *        "language": {
-			 *          "thousands": "'"
-			 *        }
-			 *      } );
-			 *    } );
-			 */
-			"sThousands": ",",
-	
-	
-			/**
-			 * Detail the action that will be taken when the drop down menu for the
-			 * pagination length option is changed. The '_MENU_' variable is replaced
-			 * with a default select list of 10, 25, 50 and 100, and can be replaced
-			 * with a custom select box if required.
-			 *  @type string
-			 *  @default Show _MENU_ entries
-			 *
-			 *  @dtopt Language
-			 *  @name DataTable.defaults.language.lengthMenu
-			 *
-			 *  @example
-			 *    // Language change only
-			 *    $(document).ready( function() {
-			 *      $('#example').dataTable( {
-			 *        "language": {
-			 *          "lengthMenu": "Display _MENU_ records"
-			 *        }
-			 *      } );
-			 *    } );
-			 *
-			 *  @example
-			 *    // Language and options change
-			 *    $(document).ready( function() {
-			 *      $('#example').dataTable( {
-			 *        "language": {
-			 *          "lengthMenu": 'Display <select>'+
-			 *            '<option value="10">10</option>'+
-			 *            '<option value="20">20</option>'+
-			 *            '<option value="30">30</option>'+
-			 *            '<option value="40">40</option>'+
-			 *            '<option value="50">50</option>'+
-			 *            '<option value="-1">All</option>'+
-			 *            '</select> records'
-			 *        }
-			 *      } );
-			 *    } );
-			 */
-			"sLengthMenu": "Show _MENU_ entries",
-	
-	
-			/**
-			 * When using Ajax sourced data and during the first draw when DataTables is
-			 * gathering the data, this message is shown in an empty row in the table to
-			 * indicate to the end user the the data is being loaded. Note that this
-			 * parameter is not used when loading data by server-side processing, just
-			 * Ajax sourced data with client-side processing.
-			 *  @type string
-			 *  @default Loading...
-			 *
-			 *  @dtopt Language
-			 *  @name DataTable.defaults.language.loadingRecords
-			 *
-			 *  @example
-			 *    $(document).ready( function() {
-			 *      $('#example').dataTable( {
-			 *        "language": {
-			 *          "loadingRecords": "Please wait - loading..."
-			 *        }
-			 *      } );
-			 *    } );
-			 */
-			"sLoadingRecords": "Loading...",
-	
-	
-			/**
-			 * Text which is displayed when the table is processing a user action
-			 * (usually a sort command or similar).
-			 *  @type string
-			 *  @default Processing...
-			 *
-			 *  @dtopt Language
-			 *  @name DataTable.defaults.language.processing
-			 *
-			 *  @example
-			 *    $(document).ready( function() {
-			 *      $('#example').dataTable( {
-			 *        "language": {
-			 *          "processing": "DataTables is currently busy"
-			 *        }
-			 *      } );
-			 *    } );
-			 */
-			"sProcessing": "Processing...",
-	
-	
-			/**
-			 * Details the actions that will be taken when the user types into the
-			 * filtering input text box. The variable "_INPUT_", if used in the string,
-			 * is replaced with the HTML text box for the filtering input allowing
-			 * control over where it appears in the string. If "_INPUT_" is not given
-			 * then the input box is appended to the string automatically.
-			 *  @type string
-			 *  @default Search:
-			 *
-			 *  @dtopt Language
-			 *  @name DataTable.defaults.language.search
-			 *
-			 *  @example
-			 *    // Input text box will be appended at the end automatically
-			 *    $(document).ready( function() {
-			 *      $('#example').dataTable( {
-			 *        "language": {
-			 *          "search": "Filter records:"
-			 *        }
-			 *      } );
-			 *    } );
-			 *
-			 *  @example
-			 *    // Specify where the filter should appear
-			 *    $(document).ready( function() {
-			 *      $('#example').dataTable( {
-			 *        "language": {
-			 *          "search": "Apply filter _INPUT_ to table"
-			 *        }
-			 *      } );
-			 *    } );
-			 */
-			"sSearch": "Search:",
-	
-	
-			/**
-			 * Assign a `placeholder` attribute to the search `input` element
-			 *  @type string
-			 *  @default 
-			 *
-			 *  @dtopt Language
-			 *  @name DataTable.defaults.language.searchPlaceholder
-			 */
-			"sSearchPlaceholder": "",
-	
-	
-			/**
-			 * All of the language information can be stored in a file on the
-			 * server-side, which DataTables will look up if this parameter is passed.
-			 * It must store the URL of the language file, which is in a JSON format,
-			 * and the object has the same properties as the oLanguage object in the
-			 * initialiser object (i.e. the above parameters). Please refer to one of
-			 * the example language files to see how this works in action.
-			 *  @type string
-			 *  @default <i>Empty string - i.e. disabled</i>
-			 *
-			 *  @dtopt Language
-			 *  @name DataTable.defaults.language.url
-			 *
-			 *  @example
-			 *    $(document).ready( function() {
-			 *      $('#example').dataTable( {
-			 *        "language": {
-			 *          "url": "http://www.sprymedia.co.uk/dataTables/lang.txt"
-			 *        }
-			 *      } );
-			 *    } );
-			 */
-			"sUrl": "",
-	
-	
-			/**
-			 * Text shown inside the table records when the is no information to be
-			 * displayed after filtering. `emptyTable` is shown when there is simply no
-			 * information in the table at all (regardless of filtering).
-			 *  @type string
-			 *  @default No matching records found
-			 *
-			 *  @dtopt Language
-			 *  @name DataTable.defaults.language.zeroRecords
-			 *
-			 *  @example
-			 *    $(document).ready( function() {
-			 *      $('#example').dataTable( {
-			 *        "language": {
-			 *          "zeroRecords": "No records to display"
-			 *        }
-			 *      } );
-			 *    } );
-			 */
-			"sZeroRecords": "No matching records found"
-		},
-	
-	
-		/**
-		 * This parameter allows you to have define the global filtering state at
-		 * initialisation time. As an object the `search` parameter must be
-		 * defined, but all other parameters are optional. When `regex` is true,
-		 * the search string will be treated as a regular expression, when false
-		 * (default) it will be treated as a straight string. When `smart`
-		 * DataTables will use it's smart filtering methods (to word match at
-		 * any point in the data), when false this will not be done.
-		 *  @namespace
-		 *  @extends DataTable.models.oSearch
-		 *
-		 *  @dtopt Options
-		 *  @name DataTable.defaults.search
-		 *
-		 *  @example
-		 *    $(document).ready( function() {
-		 *      $('#example').dataTable( {
-		 *        "search": {"search": "Initial search"}
-		 *      } );
-		 *    } )
-		 */
-		"oSearch": $.extend( {}, DataTable.models.oSearch ),
-	
-	
-		/**
-		 * __Deprecated__ The functionality provided by this parameter has now been
-		 * superseded by that provided through `ajax`, which should be used instead.
-		 *
-		 * By default DataTables will look for the property `data` (or `aaData` for
-		 * compatibility with DataTables 1.9-) when obtaining data from an Ajax
-		 * source or for server-side processing - this parameter allows that
-		 * property to be changed. You can use Javascript dotted object notation to
-		 * get a data source for multiple levels of nesting.
-		 *  @type string
-		 *  @default data
-		 *
-		 *  @dtopt Options
-		 *  @dtopt Server-side
-		 *  @name DataTable.defaults.ajaxDataProp
-		 *
-		 *  @deprecated 1.10. Please use `ajax` for this functionality now.
-		 */
-		"sAjaxDataProp": "data",
-	
-	
-		/**
-		 * __Deprecated__ The functionality provided by this parameter has now been
-		 * superseded by that provided through `ajax`, which should be used instead.
-		 *
-		 * You can instruct DataTables to load data from an external
-		 * source using this parameter (use aData if you want to pass data in you
-		 * already have). Simply provide a url a JSON object can be obtained from.
-		 *  @type string
-		 *  @default null
-		 *
-		 *  @dtopt Options
-		 *  @dtopt Server-side
-		 *  @name DataTable.defaults.ajaxSource
-		 *
-		 *  @deprecated 1.10. Please use `ajax` for this functionality now.
-		 */
-		"sAjaxSource": null,
-	
-	
-		/**
-		 * This initialisation variable allows you to specify exactly where in the
-		 * DOM you want DataTables to inject the various controls it adds to the page
-		 * (for example you might want the pagination controls at the top of the
-		 * table). DIV elements (with or without a custom class) can also be added to
-		 * aid styling. The follow syntax is used:
-		 *   <ul>
-		 *     <li>The following options are allowed:
-		 *       <ul>
-		 *         <li>'l' - Length changing</li>
-		 *         <li>'f' - Filtering input</li>
-		 *         <li>'t' - The table!</li>
-		 *         <li>'i' - Information</li>
-		 *         <li>'p' - Pagination</li>
-		 *         <li>'r' - pRocessing</li>
-		 *       </ul>
-		 *     </li>
-		 *     <li>The following constants are allowed:
-		 *       <ul>
-		 *         <li>'H' - jQueryUI theme "header" classes ('fg-toolbar ui-widget-header ui-corner-tl ui-corner-tr ui-helper-clearfix')</li>
-		 *         <li>'F' - jQueryUI theme "footer" classes ('fg-toolbar ui-widget-header ui-corner-bl ui-corner-br ui-helper-clearfix')</li>
-		 *       </ul>
-		 *     </li>
-		 *     <li>The following syntax is expected:
-		 *       <ul>
-		 *         <li>'&lt;' and '&gt;' - div elements</li>
-		 *         <li>'&lt;"class" and '&gt;' - div with a class</li>
-		 *         <li>'&lt;"#id" and '&gt;' - div with an ID</li>
-		 *       </ul>
-		 *     </li>
-		 *     <li>Examples:
-		 *       <ul>
-		 *         <li>'&lt;"wrapper"flipt&gt;'</li>
-		 *         <li>'&lt;lf&lt;t&gt;ip&gt;'</li>
-		 *       </ul>
-		 *     </li>
-		 *   </ul>
-		 *  @type string
-		 *  @default lfrtip <i>(when `jQueryUI` is false)</i> <b>or</b>
-		 *    <"H"lfr>t<"F"ip> <i>(when `jQueryUI` is true)</i>
-		 *
-		 *  @dtopt Options
-		 *  @name DataTable.defaults.dom
-		 *
-		 *  @example
-		 *    $(document).ready( function() {
-		 *      $('#example').dataTable( {
-		 *        "dom": '&lt;"top"i&gt;rt&lt;"bottom"flp&gt;&lt;"clear"&gt;'
-		 *      } );
-		 *    } );
-		 */
-		"sDom": "lfrtip",
-	
-	
-		/**
-		 * Search delay option. This will throttle full table searches that use the
-		 * DataTables provided search input element (it does not effect calls to
-		 * `dt-api search()`, providing a delay before the search is made.
-		 *  @type integer
-		 *  @default 0
-		 *
-		 *  @dtopt Options
-		 *  @name DataTable.defaults.searchDelay
-		 *
-		 *  @example
-		 *    $(document).ready( function() {
-		 *      $('#example').dataTable( {
-		 *        "searchDelay": 200
-		 *      } );
-		 *    } )
-		 */
-		"searchDelay": null,
-	
-	
-		/**
-		 * DataTables features six different built-in options for the buttons to
-		 * display for pagination control:
-		 *
-		 * * `numbers` - Page number buttons only
-		 * * `simple` - 'Previous' and 'Next' buttons only
-		 * * 'simple_numbers` - 'Previous' and 'Next' buttons, plus page numbers
-		 * * `full` - 'First', 'Previous', 'Next' and 'Last' buttons
-		 * * `full_numbers` - 'First', 'Previous', 'Next' and 'Last' buttons, plus page numbers
-		 * * `first_last_numbers` - 'First' and 'Last' buttons, plus page numbers
-		 *  
-		 * Further methods can be added using {@link DataTable.ext.oPagination}.
-		 *  @type string
-		 *  @default simple_numbers
-		 *
-		 *  @dtopt Options
-		 *  @name DataTable.defaults.pagingType
-		 *
-		 *  @example
-		 *    $(document).ready( function() {
-		 *      $('#example').dataTable( {
-		 *        "pagingType": "full_numbers"
-		 *      } );
-		 *    } )
-		 */
-		"sPaginationType": "simple_numbers",
-	
-	
-		/**
-		 * Enable horizontal scrolling. When a table is too wide to fit into a
-		 * certain layout, or you have a large number of columns in the table, you
-		 * can enable x-scrolling to show the table in a viewport, which can be
-		 * scrolled. This property can be `true` which will allow the table to
-		 * scroll horizontally when needed, or any CSS unit, or a number (in which
-		 * case it will be treated as a pixel measurement). Setting as simply `true`
-		 * is recommended.
-		 *  @type boolean|string
-		 *  @default <i>blank string - i.e. disabled</i>
-		 *
-		 *  @dtopt Features
-		 *  @name DataTable.defaults.scrollX
-		 *
-		 *  @example
-		 *    $(document).ready( function() {
-		 *      $('#example').dataTable( {
-		 *        "scrollX": true,
-		 *        "scrollCollapse": true
-		 *      } );
-		 *    } );
-		 */
-		"sScrollX": "",
-	
-	
-		/**
-		 * This property can be used to force a DataTable to use more width than it
-		 * might otherwise do when x-scrolling is enabled. For example if you have a
-		 * table which requires to be well spaced, this parameter is useful for
-		 * "over-sizing" the table, and thus forcing scrolling. This property can by
-		 * any CSS unit, or a number (in which case it will be treated as a pixel
-		 * measurement).
-		 *  @type string
-		 *  @default <i>blank string - i.e. disabled</i>
-		 *
-		 *  @dtopt Options
-		 *  @name DataTable.defaults.scrollXInner
-		 *
-		 *  @example
-		 *    $(document).ready( function() {
-		 *      $('#example').dataTable( {
-		 *        "scrollX": "100%",
-		 *        "scrollXInner": "110%"
-		 *      } );
-		 *    } );
-		 */
-		"sScrollXInner": "",
-	
-	
-		/**
-		 * Enable vertical scrolling. Vertical scrolling will constrain the DataTable
-		 * to the given height, and enable scrolling for any data which overflows the
-		 * current viewport. This can be used as an alternative to paging to display
-		 * a lot of data in a small area (although paging and scrolling can both be
-		 * enabled at the same time). This property can be any CSS unit, or a number
-		 * (in which case it will be treated as a pixel measurement).
-		 *  @type string
-		 *  @default <i>blank string - i.e. disabled</i>
-		 *
-		 *  @dtopt Features
-		 *  @name DataTable.defaults.scrollY
-		 *
-		 *  @example
-		 *    $(document).ready( function() {
-		 *      $('#example').dataTable( {
-		 *        "scrollY": "200px",
-		 *        "paginate": false
-		 *      } );
-		 *    } );
-		 */
-		"sScrollY": "",
-	
-	
-		/**
-		 * __Deprecated__ The functionality provided by this parameter has now been
-		 * superseded by that provided through `ajax`, which should be used instead.
-		 *
-		 * Set the HTTP method that is used to make the Ajax call for server-side
-		 * processing or Ajax sourced data.
-		 *  @type string
-		 *  @default GET
-		 *
-		 *  @dtopt Options
-		 *  @dtopt Server-side
-		 *  @name DataTable.defaults.serverMethod
-		 *
-		 *  @deprecated 1.10. Please use `ajax` for this functionality now.
-		 */
-		"sServerMethod": "GET",
-	
-	
-		/**
-		 * DataTables makes use of renderers when displaying HTML elements for
-		 * a table. These renderers can be added or modified by plug-ins to
-		 * generate suitable mark-up for a site. For example the Bootstrap
-		 * integration plug-in for DataTables uses a paging button renderer to
-		 * display pagination buttons in the mark-up required by Bootstrap.
-		 *
-		 * For further information about the renderers available see
-		 * DataTable.ext.renderer
-		 *  @type string|object
-		 *  @default null
-		 *
-		 *  @name DataTable.defaults.renderer
-		 *
-		 */
-		"renderer": null,
-	
-	
-		/**
-		 * Set the data property name that DataTables should use to get a row's id
-		 * to set as the `id` property in the node.
-		 *  @type string
-		 *  @default DT_RowId
-		 *
-		 *  @name DataTable.defaults.rowId
-		 */
-		"rowId": "DT_RowId"
-	};
-	
-	_fnHungarianMap( DataTable.defaults );
-	
-	
-	
-	/*
-	 * Developer note - See note in model.defaults.js about the use of Hungarian
-	 * notation and camel case.
-	 */
-	
-	/**
-	 * Column options that can be given to DataTables at initialisation time.
-	 *  @namespace
-	 */
-	DataTable.defaults.column = {
-		/**
-		 * Define which column(s) an order will occur on for this column. This
-		 * allows a column's ordering to take multiple columns into account when
-		 * doing a sort or use the data from a different column. For example first
-		 * name / last name columns make sense to do a multi-column sort over the
-		 * two columns.
-		 *  @type array|int
-		 *  @default null <i>Takes the value of the column index automatically</i>
-		 *
-		 *  @name DataTable.defaults.column.orderData
-		 *  @dtopt Columns
-		 *
-		 *  @example
-		 *    // Using `columnDefs`
-		 *    $(document).ready( function() {
-		 *      $('#example').dataTable( {
-		 *        "columnDefs": [
-		 *          { "orderData": [ 0, 1 ], "targets": [ 0 ] },
-		 *          { "orderData": [ 1, 0 ], "targets": [ 1 ] },
-		 *          { "orderData": 2, "targets": [ 2 ] }
-		 *        ]
-		 *      } );
-		 *    } );
-		 *
-		 *  @example
-		 *    // Using `columns`
-		 *    $(document).ready( function() {
-		 *      $('#example').dataTable( {
-		 *        "columns": [
-		 *          { "orderData": [ 0, 1 ] },
-		 *          { "orderData": [ 1, 0 ] },
-		 *          { "orderData": 2 },
-		 *          null,
-		 *          null
-		 *        ]
-		 *      } );
-		 *    } );
-		 */
-		"aDataSort": null,
-		"iDataSort": -1,
-	
-	
-		/**
-		 * You can control the default ordering direction, and even alter the
-		 * behaviour of the sort handler (i.e. only allow ascending ordering etc)
-		 * using this parameter.
-		 *  @type array
-		 *  @default [ 'asc', 'desc' ]
-		 *
-		 *  @name DataTable.defaults.column.orderSequence
-		 *  @dtopt Columns
-		 *
-		 *  @example
-		 *    // Using `columnDefs`
-		 *    $(document).ready( function() {
-		 *      $('#example').dataTable( {
-		 *        "columnDefs": [
-		 *          { "orderSequence": [ "asc" ], "targets": [ 1 ] },
-		 *          { "orderSequence": [ "desc", "asc", "asc" ], "targets": [ 2 ] },
-		 *          { "orderSequence": [ "desc" ], "targets": [ 3 ] }
-		 *        ]
-		 *      } );
-		 *    } );
-		 *
-		 *  @example
-		 *    // Using `columns`
-		 *    $(document).ready( function() {
-		 *      $('#example').dataTable( {
-		 *        "columns": [
-		 *          null,
-		 *          { "orderSequence": [ "asc" ] },
-		 *          { "orderSequence": [ "desc", "asc", "asc" ] },
-		 *          { "orderSequence": [ "desc" ] },
-		 *          null
-		 *        ]
-		 *      } );
-		 *    } );
-		 */
-		"asSorting": [ 'asc', 'desc' ],
-	
-	
-		/**
-		 * Enable or disable filtering on the data in this column.
-		 *  @type boolean
-		 *  @default true
-		 *
-		 *  @name DataTable.defaults.column.searchable
-		 *  @dtopt Columns
-		 *
-		 *  @example
-		 *    // Using `columnDefs`
-		 *    $(document).ready( function() {
-		 *      $('#example').dataTable( {
-		 *        "columnDefs": [
-		 *          { "searchable": false, "targets": [ 0 ] }
-		 *        ] } );
-		 *    } );
-		 *
-		 *  @example
-		 *    // Using `columns`
-		 *    $(document).ready( function() {
-		 *      $('#example').dataTable( {
-		 *        "columns": [
-		 *          { "searchable": false },
-		 *          null,
-		 *          null,
-		 *          null,
-		 *          null
-		 *        ] } );
-		 *    } );
-		 */
-		"bSearchable": true,
-	
-	
-		/**
-		 * Enable or disable ordering on this column.
-		 *  @type boolean
-		 *  @default true
-		 *
-		 *  @name DataTable.defaults.column.orderable
-		 *  @dtopt Columns
-		 *
-		 *  @example
-		 *    // Using `columnDefs`
-		 *    $(document).ready( function() {
-		 *      $('#example').dataTable( {
-		 *        "columnDefs": [
-		 *          { "orderable": false, "targets": [ 0 ] }
-		 *        ] } );
-		 *    } );
-		 *
-		 *  @example
-		 *    // Using `columns`
-		 *    $(document).ready( function() {
-		 *      $('#example').dataTable( {
-		 *        "columns": [
-		 *          { "orderable": false },
-		 *          null,
-		 *          null,
-		 *          null,
-		 *          null
-		 *        ] } );
-		 *    } );
-		 */
-		"bSortable": true,
-	
-	
-		/**
-		 * Enable or disable the display of this column.
-		 *  @type boolean
-		 *  @default true
-		 *
-		 *  @name DataTable.defaults.column.visible
-		 *  @dtopt Columns
-		 *
-		 *  @example
-		 *    // Using `columnDefs`
-		 *    $(document).ready( function() {
-		 *      $('#example').dataTable( {
-		 *        "columnDefs": [
-		 *          { "visible": false, "targets": [ 0 ] }
-		 *        ] } );
-		 *    } );
-		 *
-		 *  @example
-		 *    // Using `columns`
-		 *    $(document).ready( function() {
-		 *      $('#example').dataTable( {
-		 *        "columns": [
-		 *          { "visible": false },
-		 *          null,
-		 *          null,
-		 *          null,
-		 *          null
-		 *        ] } );
-		 *    } );
-		 */
-		"bVisible": true,
-	
-	
-		/**
-		 * Developer definable function that is called whenever a cell is created (Ajax source,
-		 * etc) or processed for input (DOM source). This can be used as a compliment to mRender
-		 * allowing you to modify the DOM element (add background colour for example) when the
-		 * element is available.
-		 *  @type function
-		 *  @param {element} td The TD node that has been created
-		 *  @param {*} cellData The Data for the cell
-		 *  @param {array|object} rowData The data for the whole row
-		 *  @param {int} row The row index for the aoData data store
-		 *  @param {int} col The column index for aoColumns
-		 *
-		 *  @name DataTable.defaults.column.createdCell
-		 *  @dtopt Columns
-		 *
-		 *  @example
-		 *    $(document).ready( function() {
-		 *      $('#example').dataTable( {
-		 *        "columnDefs": [ {
-		 *          "targets": [3],
-		 *          "createdCell": function (td, cellData, rowData, row, col) {
-		 *            if ( cellData == "1.7" ) {
-		 *              $(td).css('color', 'blue')
-		 *            }
-		 *          }
-		 *        } ]
-		 *      });
-		 *    } );
-		 */
-		"fnCreatedCell": null,
-	
-	
-		/**
-		 * This parameter has been replaced by `data` in DataTables to ensure naming
-		 * consistency. `dataProp` can still be used, as there is backwards
-		 * compatibility in DataTables for this option, but it is strongly
-		 * recommended that you use `data` in preference to `dataProp`.
-		 *  @name DataTable.defaults.column.dataProp
-		 */
-	
-	
-		/**
-		 * This property can be used to read data from any data source property,
-		 * including deeply nested objects / properties. `data` can be given in a
-		 * number of different ways which effect its behaviour:
-		 *
-		 * * `integer` - treated as an array index for the data source. This is the
-		 *   default that DataTables uses (incrementally increased for each column).
-		 * * `string` - read an object property from the data source. There are
-		 *   three 'special' options that can be used in the string to alter how
-		 *   DataTables reads the data from the source object:
-		 *    * `.` - Dotted Javascript notation. Just as you use a `.` in
-		 *      Javascript to read from nested objects, so to can the options
-		 *      specified in `data`. For example: `browser.version` or
-		 *      `browser.name`. If your object parameter name contains a period, use
-		 *      `\\` to escape it - i.e. `first\\.name`.
-		 *    * `[]` - Array notation. DataTables can automatically combine data
-		 *      from and array source, joining the data with the characters provided
-		 *      between the two brackets. For example: `name[, ]` would provide a
-		 *      comma-space separated list from the source array. If no characters
-		 *      are provided between the brackets, the original array source is
-		 *      returned.
-		 *    * `()` - Function notation. Adding `()` to the end of a parameter will
-		 *      execute a function of the name given. For example: `browser()` for a
-		 *      simple function on the data source, `browser.version()` for a
-		 *      function in a nested property or even `browser().version` to get an
-		 *      object property if the function called returns an object. Note that
-		 *      function notation is recommended for use in `render` rather than
-		 *      `data` as it is much simpler to use as a renderer.
-		 * * `null` - use the original data source for the row rather than plucking
-		 *   data directly from it. This action has effects on two other
-		 *   initialisation options:
-		 *    * `defaultContent` - When null is given as the `data` option and
-		 *      `defaultContent` is specified for the column, the value defined by
-		 *      `defaultContent` will be used for the cell.
-		 *    * `render` - When null is used for the `data` option and the `render`
-		 *      option is specified for the column, the whole data source for the
-		 *      row is used for the renderer.
-		 * * `function` - the function given will be executed whenever DataTables
-		 *   needs to set or get the data for a cell in the column. The function
-		 *   takes three parameters:
-		 *    * Parameters:
-		 *      * `{array|object}` The data source for the row
-		 *      * `{string}` The type call data requested - this will be 'set' when
-		 *        setting data or 'filter', 'display', 'type', 'sort' or undefined
-		 *        when gathering data. Note that when `undefined` is given for the
-		 *        type DataTables expects to get the raw data for the object back<
-		 *      * `{*}` Data to set when the second parameter is 'set'.
-		 *    * Return:
-		 *      * The return value from the function is not required when 'set' is
-		 *        the type of call, but otherwise the return is what will be used
-		 *        for the data requested.
-		 *
-		 * Note that `data` is a getter and setter option. If you just require
-		 * formatting of data for output, you will likely want to use `render` which
-		 * is simply a getter and thus simpler to use.
-		 *
-		 * Note that prior to DataTables 1.9.2 `data` was called `mDataProp`. The
-		 * name change reflects the flexibility of this property and is consistent
-		 * with the naming of mRender. If 'mDataProp' is given, then it will still
-		 * be used by DataTables, as it automatically maps the old name to the new
-		 * if required.
-		 *
-		 *  @type string|int|function|null
-		 *  @default null <i>Use automatically calculated column index</i>
-		 *
-		 *  @name DataTable.defaults.column.data
-		 *  @dtopt Columns
-		 *
-		 *  @example
-		 *    // Read table data from objects
-		 *    // JSON structure for each row:
-		 *    //   {
-		 *    //      "engine": {value},
-		 *    //      "browser": {value},
-		 *    //      "platform": {value},
-		 *    //      "version": {value},
-		 *    //      "grade": {value}
-		 *    //   }
-		 *    $(document).ready( function() {
-		 *      $('#example').dataTable( {
-		 *        "ajaxSource": "sources/objects.txt",
-		 *        "columns": [
-		 *          { "data": "engine" },
-		 *          { "data": "browser" },
-		 *          { "data": "platform" },
-		 *          { "data": "version" },
-		 *          { "data": "grade" }
-		 *        ]
-		 *      } );
-		 *    } );
-		 *
-		 *  @example
-		 *    // Read information from deeply nested objects
-		 *    // JSON structure for each row:
-		 *    //   {
-		 *    //      "engine": {value},
-		 *    //      "browser": {value},
-		 *    //      "platform": {
-		 *    //         "inner": {value}
-		 *    //      },
-		 *    //      "details": [
-		 *    //         {value}, {value}
-		 *    //      ]
-		 *    //   }
-		 *    $(document).ready( function() {
-		 *      $('#example').dataTable( {
-		 *        "ajaxSource": "sources/deep.txt",
-		 *        "columns": [
-		 *          { "data": "engine" },
-		 *          { "data": "browser" },
-		 *          { "data": "platform.inner" },
-		 *          { "data": "details.0" },
-		 *          { "data": "details.1" }
-		 *        ]
-		 *      } );
-		 *    } );
-		 *
-		 *  @example
-		 *    // Using `data` as a function to provide different information for
-		 *    // sorting, filtering and display. In this case, currency (price)
-		 *    $(document).ready( function() {
-		 *      $('#example').dataTable( {
-		 *        "columnDefs": [ {
-		 *          "targets": [ 0 ],
-		 *          "data": function ( source, type, val ) {
-		 *            if (type === 'set') {
-		 *              source.price = val;
-		 *              // Store the computed dislay and filter values for efficiency
-		 *              source.price_display = val=="" ? "" : "$"+numberFormat(val);
-		 *              source.price_filter  = val=="" ? "" : "$"+numberFormat(val)+" "+val;
-		 *              return;
-		 *            }
-		 *            else if (type === 'display') {
-		 *              return source.price_display;
-		 *            }
-		 *            else if (type === 'filter') {
-		 *              return source.price_filter;
-		 *            }
-		 *            // 'sort', 'type' and undefined all just use the integer
-		 *            return source.price;
-		 *          }
-		 *        } ]
-		 *      } );
-		 *    } );
-		 *
-		 *  @example
-		 *    // Using default content
-		 *    $(document).ready( function() {
-		 *      $('#example').dataTable( {
-		 *        "columnDefs": [ {
-		 *          "targets": [ 0 ],
-		 *          "data": null,
-		 *          "defaultContent": "Click to edit"
-		 *        } ]
-		 *      } );
-		 *    } );
-		 *
-		 *  @example
-		 *    // Using array notation - outputting a list from an array
-		 *    $(document).ready( function() {
-		 *      $('#example').dataTable( {
-		 *        "columnDefs": [ {
-		 *          "targets": [ 0 ],
-		 *          "data": "name[, ]"
-		 *        } ]
-		 *      } );
-		 *    } );
-		 *
-		 */
-		"mData": null,
-	
-	
-		/**
-		 * This property is the rendering partner to `data` and it is suggested that
-		 * when you want to manipulate data for display (including filtering,
-		 * sorting etc) without altering the underlying data for the table, use this
-		 * property. `render` can be considered to be the the read only companion to
-		 * `data` which is read / write (then as such more complex). Like `data`
-		 * this option can be given in a number of different ways to effect its
-		 * behaviour:
-		 *
-		 * * `integer` - treated as an array index for the data source. This is the
-		 *   default that DataTables uses (incrementally increased for each column).
-		 * * `string` - read an object property from the data source. There are
-		 *   three 'special' options that can be used in the string to alter how
-		 *   DataTables reads the data from the source object:
-		 *    * `.` - Dotted Javascript notation. Just as you use a `.` in
-		 *      Javascript to read from nested objects, so to can the options
-		 *      specified in `data`. For example: `browser.version` or
-		 *      `browser.name`. If your object parameter name contains a period, use
-		 *      `\\` to escape it - i.e. `first\\.name`.
-		 *    * `[]` - Array notation. DataTables can automatically combine data
-		 *      from and array source, joining the data with the characters provided
-		 *      between the two brackets. For example: `name[, ]` would provide a
-		 *      comma-space separated list from the source array. If no characters
-		 *      are provided between the brackets, the original array source is
-		 *      returned.
-		 *    * `()` - Function notation. Adding `()` to the end of a parameter will
-		 *      execute a function of the name given. For example: `browser()` for a
-		 *      simple function on the data source, `browser.version()` for a
-		 *      function in a nested property or even `browser().version` to get an
-		 *      object property if the function called returns an object.
-		 * * `object` - use different data for the different data types requested by
-		 *   DataTables ('filter', 'display', 'type' or 'sort'). The property names
-		 *   of the object is the data type the property refers to and the value can
-		 *   defined using an integer, string or function using the same rules as
-		 *   `render` normally does. Note that an `_` option _must_ be specified.
-		 *   This is the default value to use if you haven't specified a value for
-		 *   the data type requested by DataTables.
-		 * * `function` - the function given will be executed whenever DataTables
-		 *   needs to set or get the data for a cell in the column. The function
-		 *   takes three parameters:
-		 *    * Parameters:
-		 *      * {array|object} The data source for the row (based on `data`)
-		 *      * {string} The type call data requested - this will be 'filter',
-		 *        'display', 'type' or 'sort'.
-		 *      * {array|object} The full data source for the row (not based on
-		 *        `data`)
-		 *    * Return:
-		 *      * The return value from the function is what will be used for the
-		 *        data requested.
-		 *
-		 *  @type string|int|function|object|null
-		 *  @default null Use the data source value.
-		 *
-		 *  @name DataTable.defaults.column.render
-		 *  @dtopt Columns
-		 *
-		 *  @example
-		 *    // Create a comma separated list from an array of objects
-		 *    $(document).ready( function() {
-		 *      $('#example').dataTable( {
-		 *        "ajaxSource": "sources/deep.txt",
-		 *        "columns": [
-		 *          { "data": "engine" },
-		 *          { "data": "browser" },
-		 *          {
-		 *            "data": "platform",
-		 *            "render": "[, ].name"
-		 *          }
-		 *        ]
-		 *      } );
-		 *    } );
-		 *
-		 *  @example
-		 *    // Execute a function to obtain data
-		 *    $(document).ready( function() {
-		 *      $('#example').dataTable( {
-		 *        "columnDefs": [ {
-		 *          "targets": [ 0 ],
-		 *          "data": null, // Use the full data source object for the renderer's source
-		 *          "render": "browserName()"
-		 *        } ]
-		 *      } );
-		 *    } );
-		 *
-		 *  @example
-		 *    // As an object, extracting different data for the different types
-		 *    // This would be used with a data source such as:
-		 *    //   { "phone": 5552368, "phone_filter": "5552368 555-2368", "phone_display": "555-2368" }
-		 *    // Here the `phone` integer is used for sorting and type detection, while `phone_filter`
-		 *    // (which has both forms) is used for filtering for if a user inputs either format, while
-		 *    // the formatted phone number is the one that is shown in the table.
-		 *    $(document).ready( function() {
-		 *      $('#example').dataTable( {
-		 *        "columnDefs": [ {
-		 *          "targets": [ 0 ],
-		 *          "data": null, // Use the full data source object for the renderer's source
-		 *          "render": {
-		 *            "_": "phone",
-		 *            "filter": "phone_filter",
-		 *            "display": "phone_display"
-		 *          }
-		 *        } ]
-		 *      } );
-		 *    } );
-		 *
-		 *  @example
-		 *    // Use as a function to create a link from the data source
-		 *    $(document).ready( function() {
-		 *      $('#example').dataTable( {
-		 *        "columnDefs": [ {
-		 *          "targets": [ 0 ],
-		 *          "data": "download_link",
-		 *          "render": function ( data, type, full ) {
-		 *            return '<a href="'+data+'">Download</a>';
-		 *          }
-		 *        } ]
-		 *      } );
-		 *    } );
-		 */
-		"mRender": null,
-	
-	
-		/**
-		 * Change the cell type created for the column - either TD cells or TH cells. This
-		 * can be useful as TH cells have semantic meaning in the table body, allowing them
-		 * to act as a header for a row (you may wish to add scope='row' to the TH elements).
-		 *  @type string
-		 *  @default td
-		 *
-		 *  @name DataTable.defaults.column.cellType
-		 *  @dtopt Columns
-		 *
-		 *  @example
-		 *    // Make the first column use TH cells
-		 *    $(document).ready( function() {
-		 *      $('#example').dataTable( {
-		 *        "columnDefs": [ {
-		 *          "targets": [ 0 ],
-		 *          "cellType": "th"
-		 *        } ]
-		 *      } );
-		 *    } );
-		 */
-		"sCellType": "td",
-	
-	
-		/**
-		 * Class to give to each cell in this column.
-		 *  @type string
-		 *  @default <i>Empty string</i>
-		 *
-		 *  @name DataTable.defaults.column.class
-		 *  @dtopt Columns
-		 *
-		 *  @example
-		 *    // Using `columnDefs`
-		 *    $(document).ready( function() {
-		 *      $('#example').dataTable( {
-		 *        "columnDefs": [
-		 *          { "class": "my_class", "targets": [ 0 ] }
-		 *        ]
-		 *      } );
-		 *    } );
-		 *
-		 *  @example
-		 *    // Using `columns`
-		 *    $(document).ready( function() {
-		 *      $('#example').dataTable( {
-		 *        "columns": [
-		 *          { "class": "my_class" },
-		 *          null,
-		 *          null,
-		 *          null,
-		 *          null
-		 *        ]
-		 *      } );
-		 *    } );
-		 */
-		"sClass": "",
-	
-		/**
-		 * When DataTables calculates the column widths to assign to each column,
-		 * it finds the longest string in each column and then constructs a
-		 * temporary table and reads the widths from that. The problem with this
-		 * is that "mmm" is much wider then "iiii", but the latter is a longer
-		 * string - thus the calculation can go wrong (doing it properly and putting
-		 * it into an DOM object and measuring that is horribly(!) slow). Thus as
-		 * a "work around" we provide this option. It will append its value to the
-		 * text that is found to be the longest string for the column - i.e. padding.
-		 * Generally you shouldn't need this!
-		 *  @type string
-		 *  @default <i>Empty string<i>
-		 *
-		 *  @name DataTable.defaults.column.contentPadding
-		 *  @dtopt Columns
-		 *
-		 *  @example
-		 *    // Using `columns`
-		 *    $(document).ready( function() {
-		 *      $('#example').dataTable( {
-		 *        "columns": [
-		 *          null,
-		 *          null,
-		 *          null,
-		 *          {
-		 *            "contentPadding": "mmm"
-		 *          }
-		 *        ]
-		 *      } );
-		 *    } );
-		 */
-		"sContentPadding": "",
-	
-	
-		/**
-		 * Allows a default value to be given for a column's data, and will be used
-		 * whenever a null data source is encountered (this can be because `data`
-		 * is set to null, or because the data source itself is null).
-		 *  @type string
-		 *  @default null
-		 *
-		 *  @name DataTable.defaults.column.defaultContent
-		 *  @dtopt Columns
-		 *
-		 *  @example
-		 *    // Using `columnDefs`
-		 *    $(document).ready( function() {
-		 *      $('#example').dataTable( {
-		 *        "columnDefs": [
-		 *          {
-		 *            "data": null,
-		 *            "defaultContent": "Edit",
-		 *            "targets": [ -1 ]
-		 *          }
-		 *        ]
-		 *      } );
-		 *    } );
-		 *
-		 *  @example
-		 *    // Using `columns`
-		 *    $(document).ready( function() {
-		 *      $('#example').dataTable( {
-		 *        "columns": [
-		 *          null,
-		 *          null,
-		 *          null,
-		 *          {
-		 *            "data": null,
-		 *            "defaultContent": "Edit"
-		 *          }
-		 *        ]
-		 *      } );
-		 *    } );
-		 */
-		"sDefaultContent": null,
-	
-	
-		/**
-		 * This parameter is only used in DataTables' server-side processing. It can
-		 * be exceptionally useful to know what columns are being displayed on the
-		 * client side, and to map these to database fields. When defined, the names
-		 * also allow DataTables to reorder information from the server if it comes
-		 * back in an unexpected order (i.e. if you switch your columns around on the
-		 * client-side, your server-side code does not also need updating).
-		 *  @type string
-		 *  @default <i>Empty string</i>
-		 *
-		 *  @name DataTable.defaults.column.name
-		 *  @dtopt Columns
-		 *
-		 *  @example
-		 *    // Using `columnDefs`
-		 *    $(document).ready( function() {
-		 *      $('#example').dataTable( {
-		 *        "columnDefs": [
-		 *          { "name": "engine", "targets": [ 0 ] },
-		 *          { "name": "browser", "targets": [ 1 ] },
-		 *          { "name": "platform", "targets": [ 2 ] },
-		 *          { "name": "version", "targets": [ 3 ] },
-		 *          { "name": "grade", "targets": [ 4 ] }
-		 *        ]
-		 *      } );
-		 *    } );
-		 *
-		 *  @example
-		 *    // Using `columns`
-		 *    $(document).ready( function() {
-		 *      $('#example').dataTable( {
-		 *        "columns": [
-		 *          { "name": "engine" },
-		 *          { "name": "browser" },
-		 *          { "name": "platform" },
-		 *          { "name": "version" },
-		 *          { "name": "grade" }
-		 *        ]
-		 *      } );
-		 *    } );
-		 */
-		"sName": "",
-	
-	
-		/**
-		 * Defines a data source type for the ordering which can be used to read
-		 * real-time information from the table (updating the internally cached
-		 * version) prior to ordering. This allows ordering to occur on user
-		 * editable elements such as form inputs.
-		 *  @type string
-		 *  @default std
-		 *
-		 *  @name DataTable.defaults.column.orderDataType
-		 *  @dtopt Columns
-		 *
-		 *  @example
-		 *    // Using `columnDefs`
-		 *    $(document).ready( function() {
-		 *      $('#example').dataTable( {
-		 *        "columnDefs": [
-		 *          { "orderDataType": "dom-text", "targets": [ 2, 3 ] },
-		 *          { "type": "numeric", "targets": [ 3 ] },
-		 *          { "orderDataType": "dom-select", "targets": [ 4 ] },
-		 *          { "orderDataType": "dom-checkbox", "targets": [ 5 ] }
-		 *        ]
-		 *      } );
-		 *    } );
-		 *
-		 *  @example
-		 *    // Using `columns`
-		 *    $(document).ready( function() {
-		 *      $('#example').dataTable( {
-		 *        "columns": [
-		 *          null,
-		 *          null,
-		 *          { "orderDataType": "dom-text" },
-		 *          { "orderDataType": "dom-text", "type": "numeric" },
-		 *          { "orderDataType": "dom-select" },
-		 *          { "orderDataType": "dom-checkbox" }
-		 *        ]
-		 *      } );
-		 *    } );
-		 */
-		"sSortDataType": "std",
-	
-	
-		/**
-		 * The title of this column.
-		 *  @type string
-		 *  @default null <i>Derived from the 'TH' value for this column in the
-		 *    original HTML table.</i>
-		 *
-		 *  @name DataTable.defaults.column.title
-		 *  @dtopt Columns
-		 *
-		 *  @example
-		 *    // Using `columnDefs`
-		 *    $(document).ready( function() {
-		 *      $('#example').dataTable( {
-		 *        "columnDefs": [
-		 *          { "title": "My column title", "targets": [ 0 ] }
-		 *        ]
-		 *      } );
-		 *    } );
-		 *
-		 *  @example
-		 *    // Using `columns`
-		 *    $(document).ready( function() {
-		 *      $('#example').dataTable( {
-		 *        "columns": [
-		 *          { "title": "My column title" },
-		 *          null,
-		 *          null,
-		 *          null,
-		 *          null
-		 *        ]
-		 *      } );
-		 *    } );
-		 */
-		"sTitle": null,
-	
-	
-		/**
-		 * The type allows you to specify how the data for this column will be
-		 * ordered. Four types (string, numeric, date and html (which will strip
-		 * HTML tags before ordering)) are currently available. Note that only date
-		 * formats understood by Javascript's Date() object will be accepted as type
-		 * date. For example: "Mar 26, 2008 5:03 PM". May take the values: 'string',
-		 * 'numeric', 'date' or 'html' (by default). Further types can be adding
-		 * through plug-ins.
-		 *  @type string
-		 *  @default null <i>Auto-detected from raw data</i>
-		 *
-		 *  @name DataTable.defaults.column.type
-		 *  @dtopt Columns
-		 *
-		 *  @example
-		 *    // Using `columnDefs`
-		 *    $(document).ready( function() {
-		 *      $('#example').dataTable( {
-		 *        "columnDefs": [
-		 *          { "type": "html", "targets": [ 0 ] }
-		 *        ]
-		 *      } );
-		 *    } );
-		 *
-		 *  @example
-		 *    // Using `columns`
-		 *    $(document).ready( function() {
-		 *      $('#example').dataTable( {
-		 *        "columns": [
-		 *          { "type": "html" },
-		 *          null,
-		 *          null,
-		 *          null,
-		 *          null
-		 *        ]
-		 *      } );
-		 *    } );
-		 */
-		"sType": null,
-	
-	
-		/**
-		 * Defining the width of the column, this parameter may take any CSS value
-		 * (3em, 20px etc). DataTables applies 'smart' widths to columns which have not
-		 * been given a specific width through this interface ensuring that the table
-		 * remains readable.
-		 *  @type string
-		 *  @default null <i>Automatic</i>
-		 *
-		 *  @name DataTable.defaults.column.width
-		 *  @dtopt Columns
-		 *
-		 *  @example
-		 *    // Using `columnDefs`
-		 *    $(document).ready( function() {
-		 *      $('#example').dataTable( {
-		 *        "columnDefs": [
-		 *          { "width": "20%", "targets": [ 0 ] }
-		 *        ]
-		 *      } );
-		 *    } );
-		 *
-		 *  @example
-		 *    // Using `columns`
-		 *    $(document).ready( function() {
-		 *      $('#example').dataTable( {
-		 *        "columns": [
-		 *          { "width": "20%" },
-		 *          null,
-		 *          null,
-		 *          null,
-		 *          null
-		 *        ]
-		 *      } );
-		 *    } );
-		 */
-		"sWidth": null
-	};
-	
-	_fnHungarianMap( DataTable.defaults.column );
-	
-	
-	
-	/**
-	 * DataTables settings object - this holds all the information needed for a
-	 * given table, including configuration, data and current application of the
-	 * table options. DataTables does not have a single instance for each DataTable
-	 * with the settings attached to that instance, but rather instances of the
-	 * DataTable "class" are created on-the-fly as needed (typically by a
-	 * $().dataTable() call) and the settings object is then applied to that
-	 * instance.
-	 *
-	 * Note that this object is related to {@link DataTable.defaults} but this
-	 * one is the internal data store for DataTables's cache of columns. It should
-	 * NOT be manipulated outside of DataTables. Any configuration should be done
-	 * through the initialisation options.
-	 *  @namespace
-	 *  @todo Really should attach the settings object to individual instances so we
-	 *    don't need to create new instances on each $().dataTable() call (if the
-	 *    table already exists). It would also save passing oSettings around and
-	 *    into every single function. However, this is a very significant
-	 *    architecture change for DataTables and will almost certainly break
-	 *    backwards compatibility with older installations. This is something that
-	 *    will be done in 2.0.
-	 */
-	DataTable.models.oSettings = {
-		/**
-		 * Primary features of DataTables and their enablement state.
-		 *  @namespace
-		 */
-		"oFeatures": {
-	
-			/**
-			 * Flag to say if DataTables should automatically try to calculate the
-			 * optimum table and columns widths (true) or not (false).
-			 * Note that this parameter will be set by the initialisation routine. To
-			 * set a default use {@link DataTable.defaults}.
-			 *  @type boolean
-			 */
-			"bAutoWidth": null,
-	
-			/**
-			 * Delay the creation of TR and TD elements until they are actually
-			 * needed by a driven page draw. This can give a significant speed
-			 * increase for Ajax source and Javascript source data, but makes no
-			 * difference at all fro DOM and server-side processing tables.
-			 * Note that this parameter will be set by the initialisation routine. To
-			 * set a default use {@link DataTable.defaults}.
-			 *  @type boolean
-			 */
-			"bDeferRender": null,
-	
-			/**
-			 * Enable filtering on the table or not. Note that if this is disabled
-			 * then there is no filtering at all on the table, including fnFilter.
-			 * To just remove the filtering input use sDom and remove the 'f' option.
-			 * Note that this parameter will be set by the initialisation routine. To
-			 * set a default use {@link DataTable.defaults}.
-			 *  @type boolean
-			 */
-			"bFilter": null,
-	
-			/**
-			 * Table information element (the 'Showing x of y records' div) enable
-			 * flag.
-			 * Note that this parameter will be set by the initialisation routine. To
-			 * set a default use {@link DataTable.defaults}.
-			 *  @type boolean
-			 */
-			"bInfo": null,
-	
-			/**
-			 * Present a user control allowing the end user to change the page size
-			 * when pagination is enabled.
-			 * Note that this parameter will be set by the initialisation routine. To
-			 * set a default use {@link DataTable.defaults}.
-			 *  @type boolean
-			 */
-			"bLengthChange": null,
-	
-			/**
-			 * Pagination enabled or not. Note that if this is disabled then length
-			 * changing must also be disabled.
-			 * Note that this parameter will be set by the initialisation routine. To
-			 * set a default use {@link DataTable.defaults}.
-			 *  @type boolean
-			 */
-			"bPaginate": null,
-	
-			/**
-			 * Processing indicator enable flag whenever DataTables is enacting a
-			 * user request - typically an Ajax request for server-side processing.
-			 * Note that this parameter will be set by the initialisation routine. To
-			 * set a default use {@link DataTable.defaults}.
-			 *  @type boolean
-			 */
-			"bProcessing": null,
-	
-			/**
-			 * Server-side processing enabled flag - when enabled DataTables will
-			 * get all data from the server for every draw - there is no filtering,
-			 * sorting or paging done on the client-side.
-			 * Note that this parameter will be set by the initialisation routine. To
-			 * set a default use {@link DataTable.defaults}.
-			 *  @type boolean
-			 */
-			"bServerSide": null,
-	
-			/**
-			 * Sorting enablement flag.
-			 * Note that this parameter will be set by the initialisation routine. To
-			 * set a default use {@link DataTable.defaults}.
-			 *  @type boolean
-			 */
-			"bSort": null,
-	
-			/**
-			 * Multi-column sorting
-			 * Note that this parameter will be set by the initialisation routine. To
-			 * set a default use {@link DataTable.defaults}.
-			 *  @type boolean
-			 */
-			"bSortMulti": null,
-	
-			/**
-			 * Apply a class to the columns which are being sorted to provide a
-			 * visual highlight or not. This can slow things down when enabled since
-			 * there is a lot of DOM interaction.
-			 * Note that this parameter will be set by the initialisation routine. To
-			 * set a default use {@link DataTable.defaults}.
-			 *  @type boolean
-			 */
-			"bSortClasses": null,
-	
-			/**
-			 * State saving enablement flag.
-			 * Note that this parameter will be set by the initialisation routine. To
-			 * set a default use {@link DataTable.defaults}.
-			 *  @type boolean
-			 */
-			"bStateSave": null
-		},
-	
-	
-		/**
-		 * Scrolling settings for a table.
-		 *  @namespace
-		 */
-		"oScroll": {
-			/**
-			 * When the table is shorter in height than sScrollY, collapse the
-			 * table container down to the height of the table (when true).
-			 * Note that this parameter will be set by the initialisation routine. To
-			 * set a default use {@link DataTable.defaults}.
-			 *  @type boolean
-			 */
-			"bCollapse": null,
-	
-			/**
-			 * Width of the scrollbar for the web-browser's platform. Calculated
-			 * during table initialisation.
-			 *  @type int
-			 *  @default 0
-			 */
-			"iBarWidth": 0,
-	
-			/**
-			 * Viewport width for horizontal scrolling. Horizontal scrolling is
-			 * disabled if an empty string.
-			 * Note that this parameter will be set by the initialisation routine. To
-			 * set a default use {@link DataTable.defaults}.
-			 *  @type string
-			 */
-			"sX": null,
-	
-			/**
-			 * Width to expand the table to when using x-scrolling. Typically you
-			 * should not need to use this.
-			 * Note that this parameter will be set by the initialisation routine. To
-			 * set a default use {@link DataTable.defaults}.
-			 *  @type string
-			 *  @deprecated
-			 */
-			"sXInner": null,
-	
-			/**
-			 * Viewport height for vertical scrolling. Vertical scrolling is disabled
-			 * if an empty string.
-			 * Note that this parameter will be set by the initialisation routine. To
-			 * set a default use {@link DataTable.defaults}.
-			 *  @type string
-			 */
-			"sY": null
-		},
-	
-		/**
-		 * Language information for the table.
-		 *  @namespace
-		 *  @extends DataTable.defaults.oLanguage
-		 */
-		"oLanguage": {
-			/**
-			 * Information callback function. See
-			 * {@link DataTable.defaults.fnInfoCallback}
-			 *  @type function
-			 *  @default null
-			 */
-			"fnInfoCallback": null
-		},
-	
-		/**
-		 * Browser support parameters
-		 *  @namespace
-		 */
-		"oBrowser": {
-			/**
-			 * Indicate if the browser incorrectly calculates width:100% inside a
-			 * scrolling element (IE6/7)
-			 *  @type boolean
-			 *  @default false
-			 */
-			"bScrollOversize": false,
-	
-			/**
-			 * Determine if the vertical scrollbar is on the right or left of the
-			 * scrolling container - needed for rtl language layout, although not
-			 * all browsers move the scrollbar (Safari).
-			 *  @type boolean
-			 *  @default false
-			 */
-			"bScrollbarLeft": false,
-	
-			/**
-			 * Flag for if `getBoundingClientRect` is fully supported or not
-			 *  @type boolean
-			 *  @default false
-			 */
-			"bBounding": false,
-	
-			/**
-			 * Browser scrollbar width
-			 *  @type integer
-			 *  @default 0
-			 */
-			"barWidth": 0
-		},
-	
-	
-		"ajax": null,
-	
-	
-		/**
-		 * Array referencing the nodes which are used for the features. The
-		 * parameters of this object match what is allowed by sDom - i.e.
-		 *   <ul>
-		 *     <li>'l' - Length changing</li>
-		 *     <li>'f' - Filtering input</li>
-		 *     <li>'t' - The table!</li>
-		 *     <li>'i' - Information</li>
-		 *     <li>'p' - Pagination</li>
-		 *     <li>'r' - pRocessing</li>
-		 *   </ul>
-		 *  @type array
-		 *  @default []
-		 */
-		"aanFeatures": [],
-	
-		/**
-		 * Store data information - see {@link DataTable.models.oRow} for detailed
-		 * information.
-		 *  @type array
-		 *  @default []
-		 */
-		"aoData": [],
-	
-		/**
-		 * Array of indexes which are in the current display (after filtering etc)
-		 *  @type array
-		 *  @default []
-		 */
-		"aiDisplay": [],
-	
-		/**
-		 * Array of indexes for display - no filtering
-		 *  @type array
-		 *  @default []
-		 */
-		"aiDisplayMaster": [],
-	
-		/**
-		 * Map of row ids to data indexes
-		 *  @type object
-		 *  @default {}
-		 */
-		"aIds": {},
-	
-		/**
-		 * Store information about each column that is in use
-		 *  @type array
-		 *  @default []
-		 */
-		"aoColumns": [],
-	
-		/**
-		 * Store information about the table's header
-		 *  @type array
-		 *  @default []
-		 */
-		"aoHeader": [],
-	
-		/**
-		 * Store information about the table's footer
-		 *  @type array
-		 *  @default []
-		 */
-		"aoFooter": [],
-	
-		/**
-		 * Store the applied global search information in case we want to force a
-		 * research or compare the old search to a new one.
-		 * Note that this parameter will be set by the initialisation routine. To
-		 * set a default use {@link DataTable.defaults}.
-		 *  @namespace
-		 *  @extends DataTable.models.oSearch
-		 */
-		"oPreviousSearch": {},
-	
-		/**
-		 * Store the applied search for each column - see
-		 * {@link DataTable.models.oSearch} for the format that is used for the
-		 * filtering information for each column.
-		 *  @type array
-		 *  @default []
-		 */
-		"aoPreSearchCols": [],
-	
-		/**
-		 * Sorting that is applied to the table. Note that the inner arrays are
-		 * used in the following manner:
-		 * <ul>
-		 *   <li>Index 0 - column number</li>
-		 *   <li>Index 1 - current sorting direction</li>
-		 * </ul>
-		 * Note that this parameter will be set by the initialisation routine. To
-		 * set a default use {@link DataTable.defaults}.
-		 *  @type array
-		 *  @todo These inner arrays should really be objects
-		 */
-		"aaSorting": null,
-	
-		/**
-		 * Sorting that is always applied to the table (i.e. prefixed in front of
-		 * aaSorting).
-		 * Note that this parameter will be set by the initialisation routine. To
-		 * set a default use {@link DataTable.defaults}.
-		 *  @type array
-		 *  @default []
-		 */
-		"aaSortingFixed": [],
-	
-		/**
-		 * Classes to use for the striping of a table.
-		 * Note that this parameter will be set by the initialisation routine. To
-		 * set a default use {@link DataTable.defaults}.
-		 *  @type array
-		 *  @default []
-		 */
-		"asStripeClasses": null,
-	
-		/**
-		 * If restoring a table - we should restore its striping classes as well
-		 *  @type array
-		 *  @default []
-		 */
-		"asDestroyStripes": [],
-	
-		/**
-		 * If restoring a table - we should restore its width
-		 *  @type int
-		 *  @default 0
-		 */
-		"sDestroyWidth": 0,
-	
-		/**
-		 * Callback functions array for every time a row is inserted (i.e. on a draw).
-		 *  @type array
-		 *  @default []
-		 */
-		"aoRowCallback": [],
-	
-		/**
-		 * Callback functions for the header on each draw.
-		 *  @type array
-		 *  @default []
-		 */
-		"aoHeaderCallback": [],
-	
-		/**
-		 * Callback function for the footer on each draw.
-		 *  @type array
-		 *  @default []
-		 */
-		"aoFooterCallback": [],
-	
-		/**
-		 * Array of callback functions for draw callback functions
-		 *  @type array
-		 *  @default []
-		 */
-		"aoDrawCallback": [],
-	
-		/**
-		 * Array of callback functions for row created function
-		 *  @type array
-		 *  @default []
-		 */
-		"aoRowCreatedCallback": [],
-	
-		/**
-		 * Callback functions for just before the table is redrawn. A return of
-		 * false will be used to cancel the draw.
-		 *  @type array
-		 *  @default []
-		 */
-		"aoPreDrawCallback": [],
-	
-		/**
-		 * Callback functions for when the table has been initialised.
-		 *  @type array
-		 *  @default []
-		 */
-		"aoInitComplete": [],
-	
-	
-		/**
-		 * Callbacks for modifying the settings to be stored for state saving, prior to
-		 * saving state.
-		 *  @type array
-		 *  @default []
-		 */
-		"aoStateSaveParams": [],
-	
-		/**
-		 * Callbacks for modifying the settings that have been stored for state saving
-		 * prior to using the stored values to restore the state.
-		 *  @type array
-		 *  @default []
-		 */
-		"aoStateLoadParams": [],
-	
-		/**
-		 * Callbacks for operating on the settings object once the saved state has been
-		 * loaded
-		 *  @type array
-		 *  @default []
-		 */
-		"aoStateLoaded": [],
-	
-		/**
-		 * Cache the table ID for quick access
-		 *  @type string
-		 *  @default <i>Empty string</i>
-		 */
-		"sTableId": "",
-	
-		/**
-		 * The TABLE node for the main table
-		 *  @type node
-		 *  @default null
-		 */
-		"nTable": null,
-	
-		/**
-		 * Permanent ref to the thead element
-		 *  @type node
-		 *  @default null
-		 */
-		"nTHead": null,
-	
-		/**
-		 * Permanent ref to the tfoot element - if it exists
-		 *  @type node
-		 *  @default null
-		 */
-		"nTFoot": null,
-	
-		/**
-		 * Permanent ref to the tbody element
-		 *  @type node
-		 *  @default null
-		 */
-		"nTBody": null,
-	
-		/**
-		 * Cache the wrapper node (contains all DataTables controlled elements)
-		 *  @type node
-		 *  @default null
-		 */
-		"nTableWrapper": null,
-	
-		/**
-		 * Indicate if when using server-side processing the loading of data
-		 * should be deferred until the second draw.
-		 * Note that this parameter will be set by the initialisation routine. To
-		 * set a default use {@link DataTable.defaults}.
-		 *  @type boolean
-		 *  @default false
-		 */
-		"bDeferLoading": false,
-	
-		/**
-		 * Indicate if all required information has been read in
-		 *  @type boolean
-		 *  @default false
-		 */
-		"bInitialised": false,
-	
-		/**
-		 * Information about open rows. Each object in the array has the parameters
-		 * 'nTr' and 'nParent'
-		 *  @type array
-		 *  @default []
-		 */
-		"aoOpenRows": [],
-	
-		/**
-		 * Dictate the positioning of DataTables' control elements - see
-		 * {@link DataTable.model.oInit.sDom}.
-		 * Note that this parameter will be set by the initialisation routine. To
-		 * set a default use {@link DataTable.defaults}.
-		 *  @type string
-		 *  @default null
-		 */
-		"sDom": null,
-	
-		/**
-		 * Search delay (in mS)
-		 *  @type integer
-		 *  @default null
-		 */
-		"searchDelay": null,
-	
-		/**
-		 * Which type of pagination should be used.
-		 * Note that this parameter will be set by the initialisation routine. To
-		 * set a default use {@link DataTable.defaults}.
-		 *  @type string
-		 *  @default two_button
-		 */
-		"sPaginationType": "two_button",
-	
-		/**
-		 * The state duration (for `stateSave`) in seconds.
-		 * Note that this parameter will be set by the initialisation routine. To
-		 * set a default use {@link DataTable.defaults}.
-		 *  @type int
-		 *  @default 0
-		 */
-		"iStateDuration": 0,
-	
-		/**
-		 * Array of callback functions for state saving. Each array element is an
-		 * object with the following parameters:
-		 *   <ul>
-		 *     <li>function:fn - function to call. Takes two parameters, oSettings
-		 *       and the JSON string to save that has been thus far created. Returns
-		 *       a JSON string to be inserted into a json object
-		 *       (i.e. '"param": [ 0, 1, 2]')</li>
-		 *     <li>string:sName - name of callback</li>
-		 *   </ul>
-		 *  @type array
-		 *  @default []
-		 */
-		"aoStateSave": [],
-	
-		/**
-		 * Array of callback functions for state loading. Each array element is an
-		 * object with the following parameters:
-		 *   <ul>
-		 *     <li>function:fn - function to call. Takes two parameters, oSettings
-		 *       and the object stored. May return false to cancel state loading</li>
-		 *     <li>string:sName - name of callback</li>
-		 *   </ul>
-		 *  @type array
-		 *  @default []
-		 */
-		"aoStateLoad": [],
-	
-		/**
-		 * State that was saved. Useful for back reference
-		 *  @type object
-		 *  @default null
-		 */
-		"oSavedState": null,
-	
-		/**
-		 * State that was loaded. Useful for back reference
-		 *  @type object
-		 *  @default null
-		 */
-		"oLoadedState": null,
-	
-		/**
-		 * Source url for AJAX data for the table.
-		 * Note that this parameter will be set by the initialisation routine. To
-		 * set a default use {@link DataTable.defaults}.
-		 *  @type string
-		 *  @default null
-		 */
-		"sAjaxSource": null,
-	
-		/**
-		 * Property from a given object from which to read the table data from. This
-		 * can be an empty string (when not server-side processing), in which case
-		 * it is  assumed an an array is given directly.
-		 * Note that this parameter will be set by the initialisation routine. To
-		 * set a default use {@link DataTable.defaults}.
-		 *  @type string
-		 */
-		"sAjaxDataProp": null,
-	
-		/**
-		 * Note if draw should be blocked while getting data
-		 *  @type boolean
-		 *  @default true
-		 */
-		"bAjaxDataGet": true,
-	
-		/**
-		 * The last jQuery XHR object that was used for server-side data gathering.
-		 * This can be used for working with the XHR information in one of the
-		 * callbacks
-		 *  @type object
-		 *  @default null
-		 */
-		"jqXHR": null,
-	
-		/**
-		 * JSON returned from the server in the last Ajax request
-		 *  @type object
-		 *  @default undefined
-		 */
-		"json": undefined,
-	
-		/**
-		 * Data submitted as part of the last Ajax request
-		 *  @type object
-		 *  @default undefined
-		 */
-		"oAjaxData": undefined,
-	
-		/**
-		 * Function to get the server-side data.
-		 * Note that this parameter will be set by the initialisation routine. To
-		 * set a default use {@link DataTable.defaults}.
-		 *  @type function
-		 */
-		"fnServerData": null,
-	
-		/**
-		 * Functions which are called prior to sending an Ajax request so extra
-		 * parameters can easily be sent to the server
-		 *  @type array
-		 *  @default []
-		 */
-		"aoServerParams": [],
-	
-		/**
-		 * Send the XHR HTTP method - GET or POST (could be PUT or DELETE if
-		 * required).
-		 * Note that this parameter will be set by the initialisation routine. To
-		 * set a default use {@link DataTable.defaults}.
-		 *  @type string
-		 */
-		"sServerMethod": null,
-	
-		/**
-		 * Format numbers for display.
-		 * Note that this parameter will be set by the initialisation routine. To
-		 * set a default use {@link DataTable.defaults}.
-		 *  @type function
-		 */
-		"fnFormatNumber": null,
-	
-		/**
-		 * List of options that can be used for the user selectable length menu.
-		 * Note that this parameter will be set by the initialisation routine. To
-		 * set a default use {@link DataTable.defaults}.
-		 *  @type array
-		 *  @default []
-		 */
-		"aLengthMenu": null,
-	
-		/**
-		 * Counter for the draws that the table does. Also used as a tracker for
-		 * server-side processing
-		 *  @type int
-		 *  @default 0
-		 */
-		"iDraw": 0,
-	
-		/**
-		 * Indicate if a redraw is being done - useful for Ajax
-		 *  @type boolean
-		 *  @default false
-		 */
-		"bDrawing": false,
-	
-		/**
-		 * Draw index (iDraw) of the last error when parsing the returned data
-		 *  @type int
-		 *  @default -1
-		 */
-		"iDrawError": -1,
-	
-		/**
-		 * Paging display length
-		 *  @type int
-		 *  @default 10
-		 */
-		"_iDisplayLength": 10,
-	
-		/**
-		 * Paging start point - aiDisplay index
-		 *  @type int
-		 *  @default 0
-		 */
-		"_iDisplayStart": 0,
-	
-		/**
-		 * Server-side processing - number of records in the result set
-		 * (i.e. before filtering), Use fnRecordsTotal rather than
-		 * this property to get the value of the number of records, regardless of
-		 * the server-side processing setting.
-		 *  @type int
-		 *  @default 0
-		 *  @private
-		 */
-		"_iRecordsTotal": 0,
-	
-		/**
-		 * Server-side processing - number of records in the current display set
-		 * (i.e. after filtering). Use fnRecordsDisplay rather than
-		 * this property to get the value of the number of records, regardless of
-		 * the server-side processing setting.
-		 *  @type boolean
-		 *  @default 0
-		 *  @private
-		 */
-		"_iRecordsDisplay": 0,
-	
-		/**
-		 * The classes to use for the table
-		 *  @type object
-		 *  @default {}
-		 */
-		"oClasses": {},
-	
-		/**
-		 * Flag attached to the settings object so you can check in the draw
-		 * callback if filtering has been done in the draw. Deprecated in favour of
-		 * events.
-		 *  @type boolean
-		 *  @default false
-		 *  @deprecated
-		 */
-		"bFiltered": false,
-	
-		/**
-		 * Flag attached to the settings object so you can check in the draw
-		 * callback if sorting has been done in the draw. Deprecated in favour of
-		 * events.
-		 *  @type boolean
-		 *  @default false
-		 *  @deprecated
-		 */
-		"bSorted": false,
-	
-		/**
-		 * Indicate that if multiple rows are in the header and there is more than
-		 * one unique cell per column, if the top one (true) or bottom one (false)
-		 * should be used for sorting / title by DataTables.
-		 * Note that this parameter will be set by the initialisation routine. To
-		 * set a default use {@link DataTable.defaults}.
-		 *  @type boolean
-		 */
-		"bSortCellsTop": null,
-	
-		/**
-		 * Initialisation object that is used for the table
-		 *  @type object
-		 *  @default null
-		 */
-		"oInit": null,
-	
-		/**
-		 * Destroy callback functions - for plug-ins to attach themselves to the
-		 * destroy so they can clean up markup and events.
-		 *  @type array
-		 *  @default []
-		 */
-		"aoDestroyCallback": [],
-	
-	
-		/**
-		 * Get the number of records in the current record set, before filtering
-		 *  @type function
-		 */
-		"fnRecordsTotal": function ()
-		{
-			return _fnDataSource( this ) == 'ssp' ?
-				this._iRecordsTotal * 1 :
-				this.aiDisplayMaster.length;
-		},
-	
-		/**
-		 * Get the number of records in the current record set, after filtering
-		 *  @type function
-		 */
-		"fnRecordsDisplay": function ()
-		{
-			return _fnDataSource( this ) == 'ssp' ?
-				this._iRecordsDisplay * 1 :
-				this.aiDisplay.length;
-		},
-	
-		/**
-		 * Get the display end point - aiDisplay index
-		 *  @type function
-		 */
-		"fnDisplayEnd": function ()
-		{
-			var
-				len      = this._iDisplayLength,
-				start    = this._iDisplayStart,
-				calc     = start + len,
-				records  = this.aiDisplay.length,
-				features = this.oFeatures,
-				paginate = features.bPaginate;
-	
-			if ( features.bServerSide ) {
-				return paginate === false || len === -1 ?
-					start + records :
-					Math.min( start+len, this._iRecordsDisplay );
-			}
-			else {
-				return ! paginate || calc>records || len===-1 ?
-					records :
-					calc;
-			}
-		},
-	
-		/**
-		 * The DataTables object for this table
-		 *  @type object
-		 *  @default null
-		 */
-		"oInstance": null,
-	
-		/**
-		 * Unique identifier for each instance of the DataTables object. If there
-		 * is an ID on the table node, then it takes that value, otherwise an
-		 * incrementing internal counter is used.
-		 *  @type string
-		 *  @default null
-		 */
-		"sInstance": null,
-	
-		/**
-		 * tabindex attribute value that is added to DataTables control elements, allowing
-		 * keyboard navigation of the table and its controls.
-		 */
-		"iTabIndex": 0,
-	
-		/**
-		 * DIV container for the footer scrolling table if scrolling
-		 */
-		"nScrollHead": null,
-	
-		/**
-		 * DIV container for the footer scrolling table if scrolling
-		 */
-		"nScrollFoot": null,
-	
-		/**
-		 * Last applied sort
-		 *  @type array
-		 *  @default []
-		 */
-		"aLastSort": [],
-	
-		/**
-		 * Stored plug-in instances
-		 *  @type object
-		 *  @default {}
-		 */
-		"oPlugins": {},
-	
-		/**
-		 * Function used to get a row's id from the row's data
-		 *  @type function
-		 *  @default null
-		 */
-		"rowIdFn": null,
-	
-		/**
-		 * Data location where to store a row's id
-		 *  @type string
-		 *  @default null
-		 */
-		"rowId": null
-	};
-
-	/**
-	 * Extension object for DataTables that is used to provide all extension
-	 * options.
-	 *
-	 * Note that the `DataTable.ext` object is available through
-	 * `jQuery.fn.dataTable.ext` where it may be accessed and manipulated. It is
-	 * also aliased to `jQuery.fn.dataTableExt` for historic reasons.
-	 *  @namespace
-	 *  @extends DataTable.models.ext
-	 */
-	
-	
-	/**
-	 * DataTables extensions
-	 * 
-	 * This namespace acts as a collection area for plug-ins that can be used to
-	 * extend DataTables capabilities. Indeed many of the build in methods
-	 * use this method to provide their own capabilities (sorting methods for
-	 * example).
-	 *
-	 * Note that this namespace is aliased to `jQuery.fn.dataTableExt` for legacy
-	 * reasons
-	 *
-	 *  @namespace
-	 */
-	DataTable.ext = _ext = {
-		/**
-		 * Buttons. For use with the Buttons extension for DataTables. This is
-		 * defined here so other extensions can define buttons regardless of load
-		 * order. It is _not_ used by DataTables core.
-		 *
-		 *  @type object
-		 *  @default {}
-		 */
-		buttons: {},
-	
-	
-		/**
-		 * Element class names
-		 *
-		 *  @type object
-		 *  @default {}
-		 */
-		classes: {},
-	
-	
-		/**
-		 * DataTables build type (expanded by the download builder)
-		 *
-		 *  @type string
-		 */
-		builder: "-source-",
-	
-	
-		/**
-		 * Error reporting.
-		 * 
-		 * How should DataTables report an error. Can take the value 'alert',
-		 * 'throw', 'none' or a function.
-		 *
-		 *  @type string|function
-		 *  @default alert
-		 */
-		errMode: "alert",
-	
-	
-		/**
-		 * Feature plug-ins.
-		 * 
-		 * This is an array of objects which describe the feature plug-ins that are
-		 * available to DataTables. These feature plug-ins are then available for
-		 * use through the `dom` initialisation option.
-		 * 
-		 * Each feature plug-in is described by an object which must have the
-		 * following properties:
-		 * 
-		 * * `fnInit` - function that is used to initialise the plug-in,
-		 * * `cFeature` - a character so the feature can be enabled by the `dom`
-		 *   instillation option. This is case sensitive.
-		 *
-		 * The `fnInit` function has the following input parameters:
-		 *
-		 * 1. `{object}` DataTables settings object: see
-		 *    {@link DataTable.models.oSettings}
-		 *
-		 * And the following return is expected:
-		 * 
-		 * * {node|null} The element which contains your feature. Note that the
-		 *   return may also be void if your plug-in does not require to inject any
-		 *   DOM elements into DataTables control (`dom`) - for example this might
-		 *   be useful when developing a plug-in which allows table control via
-		 *   keyboard entry
-		 *
-		 *  @type array
-		 *
-		 *  @example
-		 *    $.fn.dataTable.ext.features.push( {
-		 *      "fnInit": function( oSettings ) {
-		 *        return new TableTools( { "oDTSettings": oSettings } );
-		 *      },
-		 *      "cFeature": "T"
-		 *    } );
-		 */
-		feature: [],
-	
-	
-		/**
-		 * Row searching.
-		 * 
-		 * This method of searching is complimentary to the default type based
-		 * searching, and a lot more comprehensive as it allows you complete control
-		 * over the searching logic. Each element in this array is a function
-		 * (parameters described below) that is called for every row in the table,
-		 * and your logic decides if it should be included in the searching data set
-		 * or not.
-		 *
-		 * Searching functions have the following input parameters:
-		 *
-		 * 1. `{object}` DataTables settings object: see
-		 *    {@link DataTable.models.oSettings}
-		 * 2. `{array|object}` Data for the row to be processed (same as the
-		 *    original format that was passed in as the data source, or an array
-		 *    from a DOM data source
-		 * 3. `{int}` Row index ({@link DataTable.models.oSettings.aoData}), which
-		 *    can be useful to retrieve the `TR` element if you need DOM interaction.
-		 *
-		 * And the following return is expected:
-		 *
-		 * * {boolean} Include the row in the searched result set (true) or not
-		 *   (false)
-		 *
-		 * Note that as with the main search ability in DataTables, technically this
-		 * is "filtering", since it is subtractive. However, for consistency in
-		 * naming we call it searching here.
-		 *
-		 *  @type array
-		 *  @default []
-		 *
-		 *  @example
-		 *    // The following example shows custom search being applied to the
-		 *    // fourth column (i.e. the data[3] index) based on two input values
-		 *    // from the end-user, matching the data in a certain range.
-		 *    $.fn.dataTable.ext.search.push(
-		 *      function( settings, data, dataIndex ) {
-		 *        var min = document.getElementById('min').value * 1;
-		 *        var max = document.getElementById('max').value * 1;
-		 *        var version = data[3] == "-" ? 0 : data[3]*1;
-		 *
-		 *        if ( min == "" && max == "" ) {
-		 *          return true;
-		 *        }
-		 *        else if ( min == "" && version < max ) {
-		 *          return true;
-		 *        }
-		 *        else if ( min < version && "" == max ) {
-		 *          return true;
-		 *        }
-		 *        else if ( min < version && version < max ) {
-		 *          return true;
-		 *        }
-		 *        return false;
-		 *      }
-		 *    );
-		 */
-		search: [],
-	
-	
-		/**
-		 * Selector extensions
-		 *
-		 * The `selector` option can be used to extend the options available for the
-		 * selector modifier options (`selector-modifier` object data type) that
-		 * each of the three built in selector types offer (row, column and cell +
-		 * their plural counterparts). For example the Select extension uses this
-		 * mechanism to provide an option to select only rows, columns and cells
-		 * that have been marked as selected by the end user (`{selected: true}`),
-		 * which can be used in conjunction with the existing built in selector
-		 * options.
-		 *
-		 * Each property is an array to which functions can be pushed. The functions
-		 * take three attributes:
-		 *
-		 * * Settings object for the host table
-		 * * Options object (`selector-modifier` object type)
-		 * * Array of selected item indexes
-		 *
-		 * The return is an array of the resulting item indexes after the custom
-		 * selector has been applied.
-		 *
-		 *  @type object
-		 */
-		selector: {
-			cell: [],
-			column: [],
-			row: []
-		},
-	
-	
-		/**
-		 * Internal functions, exposed for used in plug-ins.
-		 * 
-		 * Please note that you should not need to use the internal methods for
-		 * anything other than a plug-in (and even then, try to avoid if possible).
-		 * The internal function may change between releases.
-		 *
-		 *  @type object
-		 *  @default {}
-		 */
-		internal: {},
-	
-	
-		/**
-		 * Legacy configuration options. Enable and disable legacy options that
-		 * are available in DataTables.
-		 *
-		 *  @type object
-		 */
-		legacy: {
-			/**
-			 * Enable / disable DataTables 1.9 compatible server-side processing
-			 * requests
-			 *
-			 *  @type boolean
-			 *  @default null
-			 */
-			ajax: null
-		},
-	
-	
-		/**
-		 * Pagination plug-in methods.
-		 * 
-		 * Each entry in this object is a function and defines which buttons should
-		 * be shown by the pagination rendering method that is used for the table:
-		 * {@link DataTable.ext.renderer.pageButton}. The renderer addresses how the
-		 * buttons are displayed in the document, while the functions here tell it
-		 * what buttons to display. This is done by returning an array of button
-		 * descriptions (what each button will do).
-		 *
-		 * Pagination types (the four built in options and any additional plug-in
-		 * options defined here) can be used through the `paginationType`
-		 * initialisation parameter.
-		 *
-		 * The functions defined take two parameters:
-		 *
-		 * 1. `{int} page` The current page index
-		 * 2. `{int} pages` The number of pages in the table
-		 *
-		 * Each function is expected to return an array where each element of the
-		 * array can be one of:
-		 *
-		 * * `first` - Jump to first page when activated
-		 * * `last` - Jump to last page when activated
-		 * * `previous` - Show previous page when activated
-		 * * `next` - Show next page when activated
-		 * * `{int}` - Show page of the index given
-		 * * `{array}` - A nested array containing the above elements to add a
-		 *   containing 'DIV' element (might be useful for styling).
-		 *
-		 * Note that DataTables v1.9- used this object slightly differently whereby
-		 * an object with two functions would be defined for each plug-in. That
-		 * ability is still supported by DataTables 1.10+ to provide backwards
-		 * compatibility, but this option of use is now decremented and no longer
-		 * documented in DataTables 1.10+.
-		 *
-		 *  @type object
-		 *  @default {}
-		 *
-		 *  @example
-		 *    // Show previous, next and current page buttons only
-		 *    $.fn.dataTableExt.oPagination.current = function ( page, pages ) {
-		 *      return [ 'previous', page, 'next' ];
-		 *    };
-		 */
-		pager: {},
-	
-	
-		renderer: {
-			pageButton: {},
-			header: {}
-		},
-	
-	
-		/**
-		 * Ordering plug-ins - custom data source
-		 * 
-		 * The extension options for ordering of data available here is complimentary
-		 * to the default type based ordering that DataTables typically uses. It
-		 * allows much greater control over the the data that is being used to
-		 * order a column, but is necessarily therefore more complex.
-		 * 
-		 * This type of ordering is useful if you want to do ordering based on data
-		 * live from the DOM (for example the contents of an 'input' element) rather
-		 * than just the static string that DataTables knows of.
-		 * 
-		 * The way these plug-ins work is that you create an array of the values you
-		 * wish to be ordering for the column in question and then return that
-		 * array. The data in the array much be in the index order of the rows in
-		 * the table (not the currently ordering order!). Which order data gathering
-		 * function is run here depends on the `dt-init columns.orderDataType`
-		 * parameter that is used for the column (if any).
-		 *
-		 * The functions defined take two parameters:
-		 *
-		 * 1. `{object}` DataTables settings object: see
-		 *    {@link DataTable.models.oSettings}
-		 * 2. `{int}` Target column index
-		 *
-		 * Each function is expected to return an array:
-		 *
-		 * * `{array}` Data for the column to be ordering upon
-		 *
-		 *  @type array
-		 *
-		 *  @example
-		 *    // Ordering using `input` node values
-		 *    $.fn.dataTable.ext.order['dom-text'] = function  ( settings, col )
-		 *    {
-		 *      return this.api().column( col, {order:'index'} ).nodes().map( function ( td, i ) {
-		 *        return $('input', td).val();
-		 *      } );
-		 *    }
-		 */
-		order: {},
-	
-	
-		/**
-		 * Type based plug-ins.
-		 *
-		 * Each column in DataTables has a type assigned to it, either by automatic
-		 * detection or by direct assignment using the `type` option for the column.
-		 * The type of a column will effect how it is ordering and search (plug-ins
-		 * can also make use of the column type if required).
-		 *
-		 * @namespace
-		 */
-		type: {
-			/**
-			 * Type detection functions.
-			 *
-			 * The functions defined in this object are used to automatically detect
-			 * a column's type, making initialisation of DataTables super easy, even
-			 * when complex data is in the table.
-			 *
-			 * The functions defined take two parameters:
-			 *
-		     *  1. `{*}` Data from the column cell to be analysed
-		     *  2. `{settings}` DataTables settings object. This can be used to
-		     *     perform context specific type detection - for example detection
-		     *     based on language settings such as using a comma for a decimal
-		     *     place. Generally speaking the options from the settings will not
-		     *     be required
-			 *
-			 * Each function is expected to return:
-			 *
-			 * * `{string|null}` Data type detected, or null if unknown (and thus
-			 *   pass it on to the other type detection functions.
-			 *
-			 *  @type array
-			 *
-			 *  @example
-			 *    // Currency type detection plug-in:
-			 *    $.fn.dataTable.ext.type.detect.push(
-			 *      function ( data, settings ) {
-			 *        // Check the numeric part
-			 *        if ( ! data.substring(1).match(/[0-9]/) ) {
-			 *          return null;
-			 *        }
-			 *
-			 *        // Check prefixed by currency
-			 *        if ( data.charAt(0) == '$' || data.charAt(0) == '&pound;' ) {
-			 *          return 'currency';
-			 *        }
-			 *        return null;
-			 *      }
-			 *    );
-			 */
-			detect: [],
-	
-	
-			/**
-			 * Type based search formatting.
-			 *
-			 * The type based searching functions can be used to pre-format the
-			 * data to be search on. For example, it can be used to strip HTML
-			 * tags or to de-format telephone numbers for numeric only searching.
-			 *
-			 * Note that is a search is not defined for a column of a given type,
-			 * no search formatting will be performed.
-			 * 
-			 * Pre-processing of searching data plug-ins - When you assign the sType
-			 * for a column (or have it automatically detected for you by DataTables
-			 * or a type detection plug-in), you will typically be using this for
-			 * custom sorting, but it can also be used to provide custom searching
-			 * by allowing you to pre-processing the data and returning the data in
-			 * the format that should be searched upon. This is done by adding
-			 * functions this object with a parameter name which matches the sType
-			 * for that target column. This is the corollary of <i>afnSortData</i>
-			 * for searching data.
-			 *
-			 * The functions defined take a single parameter:
-			 *
-		     *  1. `{*}` Data from the column cell to be prepared for searching
-			 *
-			 * Each function is expected to return:
-			 *
-			 * * `{string|null}` Formatted string that will be used for the searching.
-			 *
-			 *  @type object
-			 *  @default {}
-			 *
-			 *  @example
-			 *    $.fn.dataTable.ext.type.search['title-numeric'] = function ( d ) {
-			 *      return d.replace(/\n/g," ").replace( /<.*?>/g, "" );
-			 *    }
-			 */
-			search: {},
-	
-	
-			/**
-			 * Type based ordering.
-			 *
-			 * The column type tells DataTables what ordering to apply to the table
-			 * when a column is sorted upon. The order for each type that is defined,
-			 * is defined by the functions available in this object.
-			 *
-			 * Each ordering option can be described by three properties added to
-			 * this object:
-			 *
-			 * * `{type}-pre` - Pre-formatting function
-			 * * `{type}-asc` - Ascending order function
-			 * * `{type}-desc` - Descending order function
-			 *
-			 * All three can be used together, only `{type}-pre` or only
-			 * `{type}-asc` and `{type}-desc` together. It is generally recommended
-			 * that only `{type}-pre` is used, as this provides the optimal
-			 * implementation in terms of speed, although the others are provided
-			 * for compatibility with existing Javascript sort functions.
-			 *
-			 * `{type}-pre`: Functions defined take a single parameter:
-			 *
-		     *  1. `{*}` Data from the column cell to be prepared for ordering
-			 *
-			 * And return:
-			 *
-			 * * `{*}` Data to be sorted upon
-			 *
-			 * `{type}-asc` and `{type}-desc`: Functions are typical Javascript sort
-			 * functions, taking two parameters:
-			 *
-		     *  1. `{*}` Data to compare to the second parameter
-		     *  2. `{*}` Data to compare to the first parameter
-			 *
-			 * And returning:
-			 *
-			 * * `{*}` Ordering match: <0 if first parameter should be sorted lower
-			 *   than the second parameter, ===0 if the two parameters are equal and
-			 *   >0 if the first parameter should be sorted height than the second
-			 *   parameter.
-			 * 
-			 *  @type object
-			 *  @default {}
-			 *
-			 *  @example
-			 *    // Numeric ordering of formatted numbers with a pre-formatter
-			 *    $.extend( $.fn.dataTable.ext.type.order, {
-			 *      "string-pre": function(x) {
-			 *        a = (a === "-" || a === "") ? 0 : a.replace( /[^\d\-\.]/g, "" );
-			 *        return parseFloat( a );
-			 *      }
-			 *    } );
-			 *
-			 *  @example
-			 *    // Case-sensitive string ordering, with no pre-formatting method
-			 *    $.extend( $.fn.dataTable.ext.order, {
-			 *      "string-case-asc": function(x,y) {
-			 *        return ((x < y) ? -1 : ((x > y) ? 1 : 0));
-			 *      },
-			 *      "string-case-desc": function(x,y) {
-			 *        return ((x < y) ? 1 : ((x > y) ? -1 : 0));
-			 *      }
-			 *    } );
-			 */
-			order: {}
-		},
-	
-		/**
-		 * Unique DataTables instance counter
-		 *
-		 * @type int
-		 * @private
-		 */
-		_unique: 0,
-	
-	
-		//
-		// Depreciated
-		// The following properties are retained for backwards compatiblity only.
-		// The should not be used in new projects and will be removed in a future
-		// version
-		//
-	
-		/**
-		 * Version check function.
-		 *  @type function
-		 *  @depreciated Since 1.10
-		 */
-		fnVersionCheck: DataTable.fnVersionCheck,
-	
-	
-		/**
-		 * Index for what 'this' index API functions should use
-		 *  @type int
-		 *  @deprecated Since v1.10
-		 */
-		iApiIndex: 0,
-	
-	
-		/**
-		 * jQuery UI class container
-		 *  @type object
-		 *  @deprecated Since v1.10
-		 */
-		oJUIClasses: {},
-	
-	
-		/**
-		 * Software version
-		 *  @type string
-		 *  @deprecated Since v1.10
-		 */
-		sVersion: DataTable.version
-	};
-	
-	
-	//
-	// Backwards compatibility. Alias to pre 1.10 Hungarian notation counter parts
-	//
-	$.extend( _ext, {
-		afnFiltering: _ext.search,
-		aTypes:       _ext.type.detect,
-		ofnSearch:    _ext.type.search,
-		oSort:        _ext.type.order,
-		afnSortData:  _ext.order,
-		aoFeatures:   _ext.feature,
-		oApi:         _ext.internal,
-		oStdClasses:  _ext.classes,
-		oPagination:  _ext.pager
-	} );
-	
-	
-	$.extend( DataTable.ext.classes, {
-		"sTable": "dataTable",
-		"sNoFooter": "no-footer",
-	
-		/* Paging buttons */
-		"sPageButton": "paginate_button",
-		"sPageButtonActive": "current",
-		"sPageButtonDisabled": "disabled",
-	
-		/* Striping classes */
-		"sStripeOdd": "odd",
-		"sStripeEven": "even",
-	
-		/* Empty row */
-		"sRowEmpty": "dataTables_empty",
-	
-		/* Features */
-		"sWrapper": "dataTables_wrapper",
-		"sFilter": "dataTables_filter",
-		"sInfo": "dataTables_info",
-		"sPaging": "dataTables_paginate paging_", /* Note that the type is postfixed */
-		"sLength": "dataTables_length",
-		"sProcessing": "dataTables_processing",
-	
-		/* Sorting */
-		"sSortAsc": "sorting_asc",
-		"sSortDesc": "sorting_desc",
-		"sSortable": "sorting", /* Sortable in both directions */
-		"sSortableAsc": "sorting_asc_disabled",
-		"sSortableDesc": "sorting_desc_disabled",
-		"sSortableNone": "sorting_disabled",
-		"sSortColumn": "sorting_", /* Note that an int is postfixed for the sorting order */
-	
-		/* Filtering */
-		"sFilterInput": "",
-	
-		/* Page length */
-		"sLengthSelect": "",
-	
-		/* Scrolling */
-		"sScrollWrapper": "dataTables_scroll",
-		"sScrollHead": "dataTables_scrollHead",
-		"sScrollHeadInner": "dataTables_scrollHeadInner",
-		"sScrollBody": "dataTables_scrollBody",
-		"sScrollFoot": "dataTables_scrollFoot",
-		"sScrollFootInner": "dataTables_scrollFootInner",
-	
-		/* Misc */
-		"sHeaderTH": "",
-		"sFooterTH": "",
-	
-		// Deprecated
-		"sSortJUIAsc": "",
-		"sSortJUIDesc": "",
-		"sSortJUI": "",
-		"sSortJUIAscAllowed": "",
-		"sSortJUIDescAllowed": "",
-		"sSortJUIWrapper": "",
-		"sSortIcon": "",
-		"sJUIHeader": "",
-		"sJUIFooter": ""
-	} );
-	
-	
-	var extPagination = DataTable.ext.pager;
-	
-	function _numbers ( page, pages ) {
-		var
-			numbers = [],
-			buttons = extPagination.numbers_length,
-			half = Math.floor( buttons / 2 ),
-			i = 1;
-	
-		if ( pages <= buttons ) {
-			numbers = _range( 0, pages );
-		}
-		else if ( page <= half ) {
-			numbers = _range( 0, buttons-2 );
-			numbers.push( 'ellipsis' );
-			numbers.push( pages-1 );
-		}
-		else if ( page >= pages - 1 - half ) {
-			numbers = _range( pages-(buttons-2), pages );
-			numbers.splice( 0, 0, 'ellipsis' ); // no unshift in ie6
-			numbers.splice( 0, 0, 0 );
-		}
-		else {
-			numbers = _range( page-half+2, page+half-1 );
-			numbers.push( 'ellipsis' );
-			numbers.push( pages-1 );
-			numbers.splice( 0, 0, 'ellipsis' );
-			numbers.splice( 0, 0, 0 );
-		}
-	
-		numbers.DT_el = 'span';
-		return numbers;
-	}
-	
-	
-	$.extend( extPagination, {
-		simple: function ( page, pages ) {
-			return [ 'previous', 'next' ];
-		},
-	
-		full: function ( page, pages ) {
-			return [  'first', 'previous', 'next', 'last' ];
-		},
-	
-		numbers: function ( page, pages ) {
-			return [ _numbers(page, pages) ];
-		},
-	
-		simple_numbers: function ( page, pages ) {
-			return [ 'previous', _numbers(page, pages), 'next' ];
-		},
-	
-		full_numbers: function ( page, pages ) {
-			return [ 'first', 'previous', _numbers(page, pages), 'next', 'last' ];
-		},
-		
-		first_last_numbers: function (page, pages) {
-	 		return ['first', _numbers(page, pages), 'last'];
-	 	},
-	
-		// For testing and plug-ins to use
-		_numbers: _numbers,
-	
-		// Number of number buttons (including ellipsis) to show. _Must be odd!_
-		numbers_length: 7
-	} );
-	
-	
-	$.extend( true, DataTable.ext.renderer, {
-		pageButton: {
-			_: function ( settings, host, idx, buttons, page, pages ) {
-				var classes = settings.oClasses;
-				var lang = settings.oLanguage.oPaginate;
-				var aria = settings.oLanguage.oAria.paginate || {};
-				var btnDisplay, btnClass, counter=0;
-	
-				var attach = function( container, buttons ) {
-					var i, ien, node, button, tabIndex;
-					var disabledClass = classes.sPageButtonDisabled;
-					var clickHandler = function ( e ) {
-						_fnPageChange( settings, e.data.action, true );
-					};
-	
-					for ( i=0, ien=buttons.length ; i<ien ; i++ ) {
-						button = buttons[i];
-	
-						if ( $.isArray( button ) ) {
-							var inner = $( '<'+(button.DT_el || 'div')+'/>' )
-								.appendTo( container );
-							attach( inner, button );
-						}
-						else {
-							btnDisplay = null;
-							btnClass = button;
-							tabIndex = settings.iTabIndex;
-	
-							switch ( button ) {
-								case 'ellipsis':
-									container.append('<span class="ellipsis">&#x2026;</span>');
-									break;
-	
-								case 'first':
-									btnDisplay = lang.sFirst;
-	
-									if ( page === 0 ) {
-										tabIndex = -1;
-										btnClass += ' ' + disabledClass;
-									}
-									break;
-	
-								case 'previous':
-									btnDisplay = lang.sPrevious;
-	
-									if ( page === 0 ) {
-										tabIndex = -1;
-										btnClass += ' ' + disabledClass;
-									}
-									break;
-	
-								case 'next':
-									btnDisplay = lang.sNext;
-	
-									if ( pages === 0 || page === pages-1 ) {
-										tabIndex = -1;
-										btnClass += ' ' + disabledClass;
-									}
-									break;
-	
-								case 'last':
-									btnDisplay = lang.sLast;
-	
-									if ( page === pages-1 ) {
-										tabIndex = -1;
-										btnClass += ' ' + disabledClass;
-									}
-									break;
-	
-								default:
-									btnDisplay = button + 1;
-									btnClass = page === button ?
-										classes.sPageButtonActive : '';
-									break;
-							}
-	
-							if ( btnDisplay !== null ) {
-								node = $('<a>', {
-										'class': classes.sPageButton+' '+btnClass,
-										'aria-controls': settings.sTableId,
-										'aria-label': aria[ button ],
-										'data-dt-idx': counter,
-										'tabindex': tabIndex,
-										'id': idx === 0 && typeof button === 'string' ?
-											settings.sTableId +'_'+ button :
-											null
-									} )
-									.html( btnDisplay )
-									.appendTo( container );
-	
-								_fnBindAction(
-									node, {action: button}, clickHandler
-								);
-	
-								counter++;
-							}
-						}
-					}
-				};
-	
-				// IE9 throws an 'unknown error' if document.activeElement is used
-				// inside an iframe or frame. Try / catch the error. Not good for
-				// accessibility, but neither are frames.
-				var activeEl;
-	
-				try {
-					// Because this approach is destroying and recreating the paging
-					// elements, focus is lost on the select button which is bad for
-					// accessibility. So we want to restore focus once the draw has
-					// completed
-					activeEl = $(host).find(document.activeElement).data('dt-idx');
-				}
-				catch (e) {}
-	
-				attach( $(host).empty(), buttons );
-	
-				if ( activeEl !== undefined ) {
-					$(host).find( '[data-dt-idx='+activeEl+']' ).trigger('focus');
-				}
-			}
-		}
-	} );
-	
-	
-	
-	// Built in type detection. See model.ext.aTypes for information about
-	// what is required from this methods.
-	$.extend( DataTable.ext.type.detect, [
-		// Plain numbers - first since V8 detects some plain numbers as dates
-		// e.g. Date.parse('55') (but not all, e.g. Date.parse('22')...).
-		function ( d, settings )
-		{
-			var decimal = settings.oLanguage.sDecimal;
-			return _isNumber( d, decimal ) ? 'num'+decimal : null;
-		},
-	
-		// Dates (only those recognised by the browser's Date.parse)
-		function ( d, settings )
-		{
-			// V8 tries _very_ hard to make a string passed into `Date.parse()`
-			// valid, so we need to use a regex to restrict date formats. Use a
-			// plug-in for anything other than ISO8601 style strings
-			if ( d && !(d instanceof Date) && ! _re_date.test(d) ) {
-				return null;
-			}
-			var parsed = Date.parse(d);
-			return (parsed !== null && !isNaN(parsed)) || _empty(d) ? 'date' : null;
-		},
-	
-		// Formatted numbers
-		function ( d, settings )
-		{
-			var decimal = settings.oLanguage.sDecimal;
-			return _isNumber( d, decimal, true ) ? 'num-fmt'+decimal : null;
-		},
-	
-		// HTML numeric
-		function ( d, settings )
-		{
-			var decimal = settings.oLanguage.sDecimal;
-			return _htmlNumeric( d, decimal ) ? 'html-num'+decimal : null;
-		},
-	
-		// HTML numeric, formatted
-		function ( d, settings )
-		{
-			var decimal = settings.oLanguage.sDecimal;
-			return _htmlNumeric( d, decimal, true ) ? 'html-num-fmt'+decimal : null;
-		},
-	
-		// HTML (this is strict checking - there must be html)
-		function ( d, settings )
-		{
-			return _empty( d ) || (typeof d === 'string' && d.indexOf('<') !== -1) ?
-				'html' : null;
-		}
-	] );
-	
-	
-	
-	// Filter formatting functions. See model.ext.ofnSearch for information about
-	// what is required from these methods.
-	// 
-	// Note that additional search methods are added for the html numbers and
-	// html formatted numbers by `_addNumericSort()` when we know what the decimal
-	// place is
-	
-	
-	$.extend( DataTable.ext.type.search, {
-		html: function ( data ) {
-			return _empty(data) ?
-				data :
-				typeof data === 'string' ?
-					data
-						.replace( _re_new_lines, " " )
-						.replace( _re_html, "" ) :
-					'';
-		},
-	
-		string: function ( data ) {
-			return _empty(data) ?
-				data :
-				typeof data === 'string' ?
-					data.replace( _re_new_lines, " " ) :
-					data;
-		}
-	} );
-	
-	
-	
-	var __numericReplace = function ( d, decimalPlace, re1, re2 ) {
-		if ( d !== 0 && (!d || d === '-') ) {
-			return -Infinity;
-		}
-	
-		// If a decimal place other than `.` is used, it needs to be given to the
-		// function so we can detect it and replace with a `.` which is the only
-		// decimal place Javascript recognises - it is not locale aware.
-		if ( decimalPlace ) {
-			d = _numToDecimal( d, decimalPlace );
-		}
-	
-		if ( d.replace ) {
-			if ( re1 ) {
-				d = d.replace( re1, '' );
-			}
-	
-			if ( re2 ) {
-				d = d.replace( re2, '' );
-			}
-		}
-	
-		return d * 1;
-	};
-	
-	
-	// Add the numeric 'deformatting' functions for sorting and search. This is done
-	// in a function to provide an easy ability for the language options to add
-	// additional methods if a non-period decimal place is used.
-	function _addNumericSort ( decimalPlace ) {
-		$.each(
-			{
-				// Plain numbers
-				"num": function ( d ) {
-					return __numericReplace( d, decimalPlace );
-				},
-	
-				// Formatted numbers
-				"num-fmt": function ( d ) {
-					return __numericReplace( d, decimalPlace, _re_formatted_numeric );
-				},
-	
-				// HTML numeric
-				"html-num": function ( d ) {
-					return __numericReplace( d, decimalPlace, _re_html );
-				},
-	
-				// HTML numeric, formatted
-				"html-num-fmt": function ( d ) {
-					return __numericReplace( d, decimalPlace, _re_html, _re_formatted_numeric );
-				}
-			},
-			function ( key, fn ) {
-				// Add the ordering method
-				_ext.type.order[ key+decimalPlace+'-pre' ] = fn;
-	
-				// For HTML types add a search formatter that will strip the HTML
-				if ( key.match(/^html\-/) ) {
-					_ext.type.search[ key+decimalPlace ] = _ext.type.search.html;
-				}
-			}
-		);
-	}
-	
-	
-	// Default sort methods
-	$.extend( _ext.type.order, {
-		// Dates
-		"date-pre": function ( d ) {
-			var ts = Date.parse( d );
-			return isNaN(ts) ? -Infinity : ts;
-		},
-	
-		// html
-		"html-pre": function ( a ) {
-			return _empty(a) ?
-				'' :
-				a.replace ?
-					a.replace( /<.*?>/g, "" ).toLowerCase() :
-					a+'';
-		},
-	
-		// string
-		"string-pre": function ( a ) {
-			// This is a little complex, but faster than always calling toString,
-			// http://jsperf.com/tostring-v-check
-			return _empty(a) ?
-				'' :
-				typeof a === 'string' ?
-					a.toLowerCase() :
-					! a.toString ?
-						'' :
-						a.toString();
-		},
-	
-		// string-asc and -desc are retained only for compatibility with the old
-		// sort methods
-		"string-asc": function ( x, y ) {
-			return ((x < y) ? -1 : ((x > y) ? 1 : 0));
-		},
-	
-		"string-desc": function ( x, y ) {
-			return ((x < y) ? 1 : ((x > y) ? -1 : 0));
-		}
-	} );
-	
-	
-	// Numeric sorting types - order doesn't matter here
-	_addNumericSort( '' );
-	
-	
-	$.extend( true, DataTable.ext.renderer, {
-		header: {
-			_: function ( settings, cell, column, classes ) {
-				// No additional mark-up required
-				// Attach a sort listener to update on sort - note that using the
-				// `DT` namespace will allow the event to be removed automatically
-				// on destroy, while the `dt` namespaced event is the one we are
-				// listening for
-				$(settings.nTable).on( 'order.dt.DT', function ( e, ctx, sorting, columns ) {
-					if ( settings !== ctx ) { // need to check this this is the host
-						return;               // table, not a nested one
-					}
-	
-					var colIdx = column.idx;
-	
-					cell
-						.removeClass(
-							column.sSortingClass +' '+
-							classes.sSortAsc +' '+
-							classes.sSortDesc
-						)
-						.addClass( columns[ colIdx ] == 'asc' ?
-							classes.sSortAsc : columns[ colIdx ] == 'desc' ?
-								classes.sSortDesc :
-								column.sSortingClass
-						);
-				} );
-			},
-	
-			jqueryui: function ( settings, cell, column, classes ) {
-				$('<div/>')
-					.addClass( classes.sSortJUIWrapper )
-					.append( cell.contents() )
-					.append( $('<span/>')
-						.addClass( classes.sSortIcon+' '+column.sSortingClassJUI )
-					)
-					.appendTo( cell );
-	
-				// Attach a sort listener to update on sort
-				$(settings.nTable).on( 'order.dt.DT', function ( e, ctx, sorting, columns ) {
-					if ( settings !== ctx ) {
-						return;
-					}
-	
-					var colIdx = column.idx;
-	
-					cell
-						.removeClass( classes.sSortAsc +" "+classes.sSortDesc )
-						.addClass( columns[ colIdx ] == 'asc' ?
-							classes.sSortAsc : columns[ colIdx ] == 'desc' ?
-								classes.sSortDesc :
-								column.sSortingClass
-						);
-	
-					cell
-						.find( 'span.'+classes.sSortIcon )
-						.removeClass(
-							classes.sSortJUIAsc +" "+
-							classes.sSortJUIDesc +" "+
-							classes.sSortJUI +" "+
-							classes.sSortJUIAscAllowed +" "+
-							classes.sSortJUIDescAllowed
-						)
-						.addClass( columns[ colIdx ] == 'asc' ?
-							classes.sSortJUIAsc : columns[ colIdx ] == 'desc' ?
-								classes.sSortJUIDesc :
-								column.sSortingClassJUI
-						);
-				} );
-			}
-		}
-	} );
-	
-	/*
-	 * Public helper functions. These aren't used internally by DataTables, or
-	 * called by any of the options passed into DataTables, but they can be used
-	 * externally by developers working with DataTables. They are helper functions
-	 * to make working with DataTables a little bit easier.
-	 */
-	
-	var __htmlEscapeEntities = function ( d ) {
-		return typeof d === 'string' ?
-			d
-				.replace(/&/g, '&amp;')
-				.replace(/</g, '&lt;')
-				.replace(/>/g, '&gt;')
-				.replace(/"/g, '&quot;') :
-			d;
-	};
-	
-	/**
-	 * Helpers for `columns.render`.
-	 *
-	 * The options defined here can be used with the `columns.render` initialisation
-	 * option to provide a display renderer. The following functions are defined:
-	 *
-	 * * `number` - Will format numeric data (defined by `columns.data`) for
-	 *   display, retaining the original unformatted data for sorting and filtering.
-	 *   It takes 5 parameters:
-	 *   * `string` - Thousands grouping separator
-	 *   * `string` - Decimal point indicator
-	 *   * `integer` - Number of decimal points to show
-	 *   * `string` (optional) - Prefix.
-	 *   * `string` (optional) - Postfix (/suffix).
-	 * * `text` - Escape HTML to help prevent XSS attacks. It has no optional
-	 *   parameters.
-	 *
-	 * @example
-	 *   // Column definition using the number renderer
-	 *   {
-	 *     data: "salary",
-	 *     render: $.fn.dataTable.render.number( '\'', '.', 0, '$' )
-	 *   }
-	 *
-	 * @namespace
-	 */
-	DataTable.render = {
-		number: function ( thousands, decimal, precision, prefix, postfix ) {
-			return {
-				display: function ( d ) {
-					if ( typeof d !== 'number' && typeof d !== 'string' ) {
-						return d;
-					}
-	
-					var negative = d < 0 ? '-' : '';
-					var flo = parseFloat( d );
-	
-					// If NaN then there isn't much formatting that we can do - just
-					// return immediately, escaping any HTML (this was supposed to
-					// be a number after all)
-					if ( isNaN( flo ) ) {
-						return __htmlEscapeEntities( d );
-					}
-	
-					flo = flo.toFixed( precision );
-					d = Math.abs( flo );
-	
-					var intPart = parseInt( d, 10 );
-					var floatPart = precision ?
-						decimal+(d - intPart).toFixed( precision ).substring( 2 ):
-						'';
-	
-					return negative + (prefix||'') +
-						intPart.toString().replace(
-							/\B(?=(\d{3})+(?!\d))/g, thousands
-						) +
-						floatPart +
-						(postfix||'');
-				}
-			};
-		},
-	
-		text: function () {
-			return {
-				display: __htmlEscapeEntities,
-				filter: __htmlEscapeEntities
-			};
-		}
-	};
-	
-	
-	/*
-	 * This is really a good bit rubbish this method of exposing the internal methods
-	 * publicly... - To be fixed in 2.0 using methods on the prototype
-	 */
-	
-	
-	/**
-	 * Create a wrapper function for exporting an internal functions to an external API.
-	 *  @param {string} fn API function name
-	 *  @returns {function} wrapped function
-	 *  @memberof DataTable#internal
-	 */
-	function _fnExternApiFunc (fn)
-	{
-		return function() {
-			var args = [_fnSettingsFromNode( this[DataTable.ext.iApiIndex] )].concat(
-				Array.prototype.slice.call(arguments)
-			);
-			return DataTable.ext.internal[fn].apply( this, args );
-		};
-	}
-	
-	
-	/**
-	 * Reference to internal functions for use by plug-in developers. Note that
-	 * these methods are references to internal functions and are considered to be
-	 * private. If you use these methods, be aware that they are liable to change
-	 * between versions.
-	 *  @namespace
-	 */
-	$.extend( DataTable.ext.internal, {
-		_fnExternApiFunc: _fnExternApiFunc,
-		_fnBuildAjax: _fnBuildAjax,
-		_fnAjaxUpdate: _fnAjaxUpdate,
-		_fnAjaxParameters: _fnAjaxParameters,
-		_fnAjaxUpdateDraw: _fnAjaxUpdateDraw,
-		_fnAjaxDataSrc: _fnAjaxDataSrc,
-		_fnAddColumn: _fnAddColumn,
-		_fnColumnOptions: _fnColumnOptions,
-		_fnAdjustColumnSizing: _fnAdjustColumnSizing,
-		_fnVisibleToColumnIndex: _fnVisibleToColumnIndex,
-		_fnColumnIndexToVisible: _fnColumnIndexToVisible,
-		_fnVisbleColumns: _fnVisbleColumns,
-		_fnGetColumns: _fnGetColumns,
-		_fnColumnTypes: _fnColumnTypes,
-		_fnApplyColumnDefs: _fnApplyColumnDefs,
-		_fnHungarianMap: _fnHungarianMap,
-		_fnCamelToHungarian: _fnCamelToHungarian,
-		_fnLanguageCompat: _fnLanguageCompat,
-		_fnBrowserDetect: _fnBrowserDetect,
-		_fnAddData: _fnAddData,
-		_fnAddTr: _fnAddTr,
-		_fnNodeToDataIndex: _fnNodeToDataIndex,
-		_fnNodeToColumnIndex: _fnNodeToColumnIndex,
-		_fnGetCellData: _fnGetCellData,
-		_fnSetCellData: _fnSetCellData,
-		_fnSplitObjNotation: _fnSplitObjNotation,
-		_fnGetObjectDataFn: _fnGetObjectDataFn,
-		_fnSetObjectDataFn: _fnSetObjectDataFn,
-		_fnGetDataMaster: _fnGetDataMaster,
-		_fnClearTable: _fnClearTable,
-		_fnDeleteIndex: _fnDeleteIndex,
-		_fnInvalidate: _fnInvalidate,
-		_fnGetRowElements: _fnGetRowElements,
-		_fnCreateTr: _fnCreateTr,
-		_fnBuildHead: _fnBuildHead,
-		_fnDrawHead: _fnDrawHead,
-		_fnDraw: _fnDraw,
-		_fnReDraw: _fnReDraw,
-		_fnAddOptionsHtml: _fnAddOptionsHtml,
-		_fnDetectHeader: _fnDetectHeader,
-		_fnGetUniqueThs: _fnGetUniqueThs,
-		_fnFeatureHtmlFilter: _fnFeatureHtmlFilter,
-		_fnFilterComplete: _fnFilterComplete,
-		_fnFilterCustom: _fnFilterCustom,
-		_fnFilterColumn: _fnFilterColumn,
-		_fnFilter: _fnFilter,
-		_fnFilterCreateSearch: _fnFilterCreateSearch,
-		_fnEscapeRegex: _fnEscapeRegex,
-		_fnFilterData: _fnFilterData,
-		_fnFeatureHtmlInfo: _fnFeatureHtmlInfo,
-		_fnUpdateInfo: _fnUpdateInfo,
-		_fnInfoMacros: _fnInfoMacros,
-		_fnInitialise: _fnInitialise,
-		_fnInitComplete: _fnInitComplete,
-		_fnLengthChange: _fnLengthChange,
-		_fnFeatureHtmlLength: _fnFeatureHtmlLength,
-		_fnFeatureHtmlPaginate: _fnFeatureHtmlPaginate,
-		_fnPageChange: _fnPageChange,
-		_fnFeatureHtmlProcessing: _fnFeatureHtmlProcessing,
-		_fnProcessingDisplay: _fnProcessingDisplay,
-		_fnFeatureHtmlTable: _fnFeatureHtmlTable,
-		_fnScrollDraw: _fnScrollDraw,
-		_fnApplyToChildren: _fnApplyToChildren,
-		_fnCalculateColumnWidths: _fnCalculateColumnWidths,
-		_fnThrottle: _fnThrottle,
-		_fnConvertToWidth: _fnConvertToWidth,
-		_fnGetWidestNode: _fnGetWidestNode,
-		_fnGetMaxLenString: _fnGetMaxLenString,
-		_fnStringToCss: _fnStringToCss,
-		_fnSortFlatten: _fnSortFlatten,
-		_fnSort: _fnSort,
-		_fnSortAria: _fnSortAria,
-		_fnSortListener: _fnSortListener,
-		_fnSortAttachListener: _fnSortAttachListener,
-		_fnSortingClasses: _fnSortingClasses,
-		_fnSortData: _fnSortData,
-		_fnSaveState: _fnSaveState,
-		_fnLoadState: _fnLoadState,
-		_fnSettingsFromNode: _fnSettingsFromNode,
-		_fnLog: _fnLog,
-		_fnMap: _fnMap,
-		_fnBindAction: _fnBindAction,
-		_fnCallbackReg: _fnCallbackReg,
-		_fnCallbackFire: _fnCallbackFire,
-		_fnLengthOverflow: _fnLengthOverflow,
-		_fnRenderer: _fnRenderer,
-		_fnDataSource: _fnDataSource,
-		_fnRowAttributes: _fnRowAttributes,
-		_fnExtend: _fnExtend,
-		_fnCalculateEnd: function () {} // Used by a lot of plug-ins, but redundant
-		                                // in 1.10, so this dead-end function is
-		                                // added to prevent errors
-	} );
-	
-
-	// jQuery access
-	$.fn.dataTable = DataTable;
-
-	// Provide access to the host jQuery object (circular reference)
-	DataTable.$ = $;
-
-	// Legacy aliases
-	$.fn.dataTableSettings = DataTable.settings;
-	$.fn.dataTableExt = DataTable.ext;
-
-	// With a capital `D` we return a DataTables API instance rather than a
-	// jQuery object
-	$.fn.DataTable = function ( opts ) {
-		return $(this).dataTable( opts ).api();
-	};
-
-	// All properties that are available to $.fn.dataTable should also be
-	// available on $.fn.DataTable
-	$.each( DataTable, function ( prop, val ) {
-		$.fn.DataTable[ prop ] = val;
-	} );
-
-
-	// Information about events fired by DataTables - for documentation.
-	/**
-	 * Draw event, fired whenever the table is redrawn on the page, at the same
-	 * point as fnDrawCallback. This may be useful for binding events or
-	 * performing calculations when the table is altered at all.
-	 *  @name DataTable#draw.dt
-	 *  @event
-	 *  @param {event} e jQuery event object
-	 *  @param {object} o DataTables settings object {@link DataTable.models.oSettings}
-	 */
-
-	/**
-	 * Search event, fired when the searching applied to the table (using the
-	 * built-in global search, or column filters) is altered.
-	 *  @name DataTable#search.dt
-	 *  @event
-	 *  @param {event} e jQuery event object
-	 *  @param {object} o DataTables settings object {@link DataTable.models.oSettings}
-	 */
-
-	/**
-	 * Page change event, fired when the paging of the table is altered.
-	 *  @name DataTable#page.dt
-	 *  @event
-	 *  @param {event} e jQuery event object
-	 *  @param {object} o DataTables settings object {@link DataTable.models.oSettings}
-	 */
-
-	/**
-	 * Order event, fired when the ordering applied to the table is altered.
-	 *  @name DataTable#order.dt
-	 *  @event
-	 *  @param {event} e jQuery event object
-	 *  @param {object} o DataTables settings object {@link DataTable.models.oSettings}
-	 */
-
-	/**
-	 * DataTables initialisation complete event, fired when the table is fully
-	 * drawn, including Ajax data loaded, if Ajax data is required.
-	 *  @name DataTable#init.dt
-	 *  @event
-	 *  @param {event} e jQuery event object
-	 *  @param {object} oSettings DataTables settings object
-	 *  @param {object} json The JSON object request from the server - only
-	 *    present if client-side Ajax sourced data is used</li></ol>
-	 */
-
-	/**
-	 * State save event, fired when the table has changed state a new state save
-	 * is required. This event allows modification of the state saving object
-	 * prior to actually doing the save, including addition or other state
-	 * properties (for plug-ins) or modification of a DataTables core property.
-	 *  @name DataTable#stateSaveParams.dt
-	 *  @event
-	 *  @param {event} e jQuery event object
-	 *  @param {object} oSettings DataTables settings object
-	 *  @param {object} json The state information to be saved
-	 */
-
-	/**
-	 * State load event, fired when the table is loading state from the stored
-	 * data, but prior to the settings object being modified by the saved state
-	 * - allowing modification of the saved state is required or loading of
-	 * state for a plug-in.
-	 *  @name DataTable#stateLoadParams.dt
-	 *  @event
-	 *  @param {event} e jQuery event object
-	 *  @param {object} oSettings DataTables settings object
-	 *  @param {object} json The saved state information
-	 */
-
-	/**
-	 * State loaded event, fired when state has been loaded from stored data and
-	 * the settings object has been modified by the loaded data.
-	 *  @name DataTable#stateLoaded.dt
-	 *  @event
-	 *  @param {event} e jQuery event object
-	 *  @param {object} oSettings DataTables settings object
-	 *  @param {object} json The saved state information
-	 */
-
-	/**
-	 * Processing event, fired when DataTables is doing some kind of processing
-	 * (be it, order, search or anything else). It can be used to indicate to
-	 * the end user that there is something happening, or that something has
-	 * finished.
-	 *  @name DataTable#processing.dt
-	 *  @event
-	 *  @param {event} e jQuery event object
-	 *  @param {object} oSettings DataTables settings object
-	 *  @param {boolean} bShow Flag for if DataTables is doing processing or not
-	 */
-
-	/**
-	 * Ajax (XHR) event, fired whenever an Ajax request is completed from a
-	 * request to made to the server for new data. This event is called before
-	 * DataTables processed the returned data, so it can also be used to pre-
-	 * process the data returned from the server, if needed.
-	 *
-	 * Note that this trigger is called in `fnServerData`, if you override
-	 * `fnServerData` and which to use this event, you need to trigger it in you
-	 * success function.
-	 *  @name DataTable#xhr.dt
-	 *  @event
-	 *  @param {event} e jQuery event object
-	 *  @param {object} o DataTables settings object {@link DataTable.models.oSettings}
-	 *  @param {object} json JSON returned from the server
-	 *
-	 *  @example
-	 *     // Use a custom property returned from the server in another DOM element
-	 *     $('#table').dataTable().on('xhr.dt', function (e, settings, json) {
-	 *       $('#status').html( json.status );
-	 *     } );
-	 *
-	 *  @example
-	 *     // Pre-process the data returned from the server
-	 *     $('#table').dataTable().on('xhr.dt', function (e, settings, json) {
-	 *       for ( var i=0, ien=json.aaData.length ; i<ien ; i++ ) {
-	 *         json.aaData[i].sum = json.aaData[i].one + json.aaData[i].two;
-	 *       }
-	 *       // Note no return - manipulate the data directly in the JSON object.
-	 *     } );
-	 */
-
-	/**
-	 * Destroy event, fired when the DataTable is destroyed by calling fnDestroy
-	 * or passing the bDestroy:true parameter in the initialisation object. This
-	 * can be used to remove bound events, added DOM nodes, etc.
-	 *  @name DataTable#destroy.dt
-	 *  @event
-	 *  @param {event} e jQuery event object
-	 *  @param {object} o DataTables settings object {@link DataTable.models.oSettings}
-	 */
-
-	/**
-	 * Page length change event, fired when number of records to show on each
-	 * page (the length) is changed.
-	 *  @name DataTable#length.dt
-	 *  @event
-	 *  @param {event} e jQuery event object
-	 *  @param {object} o DataTables settings object {@link DataTable.models.oSettings}
-	 *  @param {integer} len New length
-	 */
-
-	/**
-	 * Column sizing has changed.
-	 *  @name DataTable#column-sizing.dt
-	 *  @event
-	 *  @param {event} e jQuery event object
-	 *  @param {object} o DataTables settings object {@link DataTable.models.oSettings}
-	 */
-
-	/**
-	 * Column visibility has changed.
-	 *  @name DataTable#column-visibility.dt
-	 *  @event
-	 *  @param {event} e jQuery event object
-	 *  @param {object} o DataTables settings object {@link DataTable.models.oSettings}
-	 *  @param {int} column Column index
-	 *  @param {bool} vis `false` if column now hidden, or `true` if visible
-	 */
-
-	return $.fn.dataTable;
-}));
diff --git a/DataTables/DataTables-1.10.21/js/jquery.dataTables.min.js b/DataTables/DataTables-1.10.21/js/jquery.dataTables.min.js
deleted file mode 100644
index ae98c33..0000000
--- a/DataTables/DataTables-1.10.21/js/jquery.dataTables.min.js
+++ /dev/null
@@ -1,181 +0,0 @@
-/*!
-   Copyright 2008-2020 SpryMedia Ltd.
-
- This source file is free software, available under the following license:
-   MIT license - http://datatables.net/license
-
- This source file is distributed in the hope that it will be useful, but
- WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
- or FITNESS FOR A PARTICULAR PURPOSE. See the license files for details.
-
- For details please refer to: http://www.datatables.net
- DataTables 1.10.21
- ©2008-2020 SpryMedia Ltd - datatables.net/license
-*/
-var $jscomp=$jscomp||{};$jscomp.scope={};$jscomp.findInternal=function(f,y,w){f instanceof String&&(f=String(f));for(var n=f.length,H=0;H<n;H++){var L=f[H];if(y.call(w,L,H,f))return{i:H,v:L}}return{i:-1,v:void 0}};$jscomp.ASSUME_ES5=!1;$jscomp.ASSUME_NO_NATIVE_MAP=!1;$jscomp.ASSUME_NO_NATIVE_SET=!1;$jscomp.SIMPLE_FROUND_POLYFILL=!1;
-$jscomp.defineProperty=$jscomp.ASSUME_ES5||"function"==typeof Object.defineProperties?Object.defineProperty:function(f,y,w){f!=Array.prototype&&f!=Object.prototype&&(f[y]=w.value)};$jscomp.getGlobal=function(f){f=["object"==typeof window&&window,"object"==typeof self&&self,"object"==typeof global&&global,f];for(var y=0;y<f.length;++y){var w=f[y];if(w&&w.Math==Math)return w}throw Error("Cannot find global object");};$jscomp.global=$jscomp.getGlobal(this);
-$jscomp.polyfill=function(f,y,w,n){if(y){w=$jscomp.global;f=f.split(".");for(n=0;n<f.length-1;n++){var H=f[n];H in w||(w[H]={});w=w[H]}f=f[f.length-1];n=w[f];y=y(n);y!=n&&null!=y&&$jscomp.defineProperty(w,f,{configurable:!0,writable:!0,value:y})}};$jscomp.polyfill("Array.prototype.find",function(f){return f?f:function(f,w){return $jscomp.findInternal(this,f,w).v}},"es6","es3");
-(function(f){"function"===typeof define&&define.amd?define(["jquery"],function(y){return f(y,window,document)}):"object"===typeof exports?module.exports=function(y,w){y||(y=window);w||(w="undefined"!==typeof window?require("jquery"):require("jquery")(y));return f(w,y,y.document)}:f(jQuery,window,document)})(function(f,y,w,n){function H(a){var b,c,d={};f.each(a,function(e,h){(b=e.match(/^([^A-Z]+?)([A-Z])/))&&-1!=="a aa ai ao as b fn i m o s ".indexOf(b[1]+" ")&&(c=e.replace(b[0],b[2].toLowerCase()),
-d[c]=e,"o"===b[1]&&H(a[e]))});a._hungarianMap=d}function L(a,b,c){a._hungarianMap||H(a);var d;f.each(b,function(e,h){d=a._hungarianMap[e];d===n||!c&&b[d]!==n||("o"===d.charAt(0)?(b[d]||(b[d]={}),f.extend(!0,b[d],b[e]),L(a[d],b[d],c)):b[d]=b[e])})}function Fa(a){var b=q.defaults.oLanguage,c=b.sDecimal;c&&Ga(c);if(a){var d=a.sZeroRecords;!a.sEmptyTable&&d&&"No data available in table"===b.sEmptyTable&&M(a,a,"sZeroRecords","sEmptyTable");!a.sLoadingRecords&&d&&"Loading..."===b.sLoadingRecords&&M(a,a,
-"sZeroRecords","sLoadingRecords");a.sInfoThousands&&(a.sThousands=a.sInfoThousands);(a=a.sDecimal)&&c!==a&&Ga(a)}}function ib(a){E(a,"ordering","bSort");E(a,"orderMulti","bSortMulti");E(a,"orderClasses","bSortClasses");E(a,"orderCellsTop","bSortCellsTop");E(a,"order","aaSorting");E(a,"orderFixed","aaSortingFixed");E(a,"paging","bPaginate");E(a,"pagingType","sPaginationType");E(a,"pageLength","iDisplayLength");E(a,"searching","bFilter");"boolean"===typeof a.sScrollX&&(a.sScrollX=a.sScrollX?"100%":
-"");"boolean"===typeof a.scrollX&&(a.scrollX=a.scrollX?"100%":"");if(a=a.aoSearchCols)for(var b=0,c=a.length;b<c;b++)a[b]&&L(q.models.oSearch,a[b])}function jb(a){E(a,"orderable","bSortable");E(a,"orderData","aDataSort");E(a,"orderSequence","asSorting");E(a,"orderDataType","sortDataType");var b=a.aDataSort;"number"!==typeof b||f.isArray(b)||(a.aDataSort=[b])}function kb(a){if(!q.__browser){var b={};q.__browser=b;var c=f("<div/>").css({position:"fixed",top:0,left:-1*f(y).scrollLeft(),height:1,width:1,
-overflow:"hidden"}).append(f("<div/>").css({position:"absolute",top:1,left:1,width:100,overflow:"scroll"}).append(f("<div/>").css({width:"100%",height:10}))).appendTo("body"),d=c.children(),e=d.children();b.barWidth=d[0].offsetWidth-d[0].clientWidth;b.bScrollOversize=100===e[0].offsetWidth&&100!==d[0].clientWidth;b.bScrollbarLeft=1!==Math.round(e.offset().left);b.bBounding=c[0].getBoundingClientRect().width?!0:!1;c.remove()}f.extend(a.oBrowser,q.__browser);a.oScroll.iBarWidth=q.__browser.barWidth}
-function lb(a,b,c,d,e,h){var g=!1;if(c!==n){var k=c;g=!0}for(;d!==e;)a.hasOwnProperty(d)&&(k=g?b(k,a[d],d,a):a[d],g=!0,d+=h);return k}function Ha(a,b){var c=q.defaults.column,d=a.aoColumns.length;c=f.extend({},q.models.oColumn,c,{nTh:b?b:w.createElement("th"),sTitle:c.sTitle?c.sTitle:b?b.innerHTML:"",aDataSort:c.aDataSort?c.aDataSort:[d],mData:c.mData?c.mData:d,idx:d});a.aoColumns.push(c);c=a.aoPreSearchCols;c[d]=f.extend({},q.models.oSearch,c[d]);la(a,d,f(b).data())}function la(a,b,c){b=a.aoColumns[b];
-var d=a.oClasses,e=f(b.nTh);if(!b.sWidthOrig){b.sWidthOrig=e.attr("width")||null;var h=(e.attr("style")||"").match(/width:\s*(\d+[pxem%]+)/);h&&(b.sWidthOrig=h[1])}c!==n&&null!==c&&(jb(c),L(q.defaults.column,c,!0),c.mDataProp===n||c.mData||(c.mData=c.mDataProp),c.sType&&(b._sManualType=c.sType),c.className&&!c.sClass&&(c.sClass=c.className),c.sClass&&e.addClass(c.sClass),f.extend(b,c),M(b,c,"sWidth","sWidthOrig"),c.iDataSort!==n&&(b.aDataSort=[c.iDataSort]),M(b,c,"aDataSort"));var g=b.mData,k=T(g),
-l=b.mRender?T(b.mRender):null;c=function(a){return"string"===typeof a&&-1!==a.indexOf("@")};b._bAttrSrc=f.isPlainObject(g)&&(c(g.sort)||c(g.type)||c(g.filter));b._setter=null;b.fnGetData=function(a,b,c){var d=k(a,b,n,c);return l&&b?l(d,b,a,c):d};b.fnSetData=function(a,b,c){return Q(g)(a,b,c)};"number"!==typeof g&&(a._rowReadObject=!0);a.oFeatures.bSort||(b.bSortable=!1,e.addClass(d.sSortableNone));a=-1!==f.inArray("asc",b.asSorting);c=-1!==f.inArray("desc",b.asSorting);b.bSortable&&(a||c)?a&&!c?(b.sSortingClass=
-d.sSortableAsc,b.sSortingClassJUI=d.sSortJUIAscAllowed):!a&&c?(b.sSortingClass=d.sSortableDesc,b.sSortingClassJUI=d.sSortJUIDescAllowed):(b.sSortingClass=d.sSortable,b.sSortingClassJUI=d.sSortJUI):(b.sSortingClass=d.sSortableNone,b.sSortingClassJUI="")}function Z(a){if(!1!==a.oFeatures.bAutoWidth){var b=a.aoColumns;Ia(a);for(var c=0,d=b.length;c<d;c++)b[c].nTh.style.width=b[c].sWidth}b=a.oScroll;""===b.sY&&""===b.sX||ma(a);A(a,null,"column-sizing",[a])}function aa(a,b){a=na(a,"bVisible");return"number"===
-typeof a[b]?a[b]:null}function ba(a,b){a=na(a,"bVisible");b=f.inArray(b,a);return-1!==b?b:null}function V(a){var b=0;f.each(a.aoColumns,function(a,d){d.bVisible&&"none"!==f(d.nTh).css("display")&&b++});return b}function na(a,b){var c=[];f.map(a.aoColumns,function(a,e){a[b]&&c.push(e)});return c}function Ja(a){var b=a.aoColumns,c=a.aoData,d=q.ext.type.detect,e,h,g;var k=0;for(e=b.length;k<e;k++){var f=b[k];var m=[];if(!f.sType&&f._sManualType)f.sType=f._sManualType;else if(!f.sType){var p=0;for(h=
-d.length;p<h;p++){var v=0;for(g=c.length;v<g;v++){m[v]===n&&(m[v]=F(a,v,k,"type"));var u=d[p](m[v],a);if(!u&&p!==d.length-1)break;if("html"===u)break}if(u){f.sType=u;break}}f.sType||(f.sType="string")}}}function mb(a,b,c,d){var e,h,g,k=a.aoColumns;if(b)for(e=b.length-1;0<=e;e--){var l=b[e];var m=l.targets!==n?l.targets:l.aTargets;f.isArray(m)||(m=[m]);var p=0;for(h=m.length;p<h;p++)if("number"===typeof m[p]&&0<=m[p]){for(;k.length<=m[p];)Ha(a);d(m[p],l)}else if("number"===typeof m[p]&&0>m[p])d(k.length+
-m[p],l);else if("string"===typeof m[p]){var v=0;for(g=k.length;v<g;v++)("_all"==m[p]||f(k[v].nTh).hasClass(m[p]))&&d(v,l)}}if(c)for(e=0,a=c.length;e<a;e++)d(e,c[e])}function R(a,b,c,d){var e=a.aoData.length,h=f.extend(!0,{},q.models.oRow,{src:c?"dom":"data",idx:e});h._aData=b;a.aoData.push(h);for(var g=a.aoColumns,k=0,l=g.length;k<l;k++)g[k].sType=null;a.aiDisplayMaster.push(e);b=a.rowIdFn(b);b!==n&&(a.aIds[b]=h);!c&&a.oFeatures.bDeferRender||Ka(a,e,c,d);return e}function oa(a,b){var c;b instanceof
-f||(b=f(b));return b.map(function(b,e){c=La(a,e);return R(a,c.data,e,c.cells)})}function F(a,b,c,d){var e=a.iDraw,h=a.aoColumns[c],g=a.aoData[b]._aData,k=h.sDefaultContent,f=h.fnGetData(g,d,{settings:a,row:b,col:c});if(f===n)return a.iDrawError!=e&&null===k&&(O(a,0,"Requested unknown parameter "+("function"==typeof h.mData?"{function}":"'"+h.mData+"'")+" for row "+b+", column "+c,4),a.iDrawError=e),k;if((f===g||null===f)&&null!==k&&d!==n)f=k;else if("function"===typeof f)return f.call(g);return null===
-f&&"display"==d?"":f}function nb(a,b,c,d){a.aoColumns[c].fnSetData(a.aoData[b]._aData,d,{settings:a,row:b,col:c})}function Ma(a){return f.map(a.match(/(\\.|[^\.])+/g)||[""],function(a){return a.replace(/\\\./g,".")})}function T(a){if(f.isPlainObject(a)){var b={};f.each(a,function(a,c){c&&(b[a]=T(c))});return function(a,c,h,g){var d=b[c]||b._;return d!==n?d(a,c,h,g):a}}if(null===a)return function(a){return a};if("function"===typeof a)return function(b,c,h,g){return a(b,c,h,g)};if("string"!==typeof a||
--1===a.indexOf(".")&&-1===a.indexOf("[")&&-1===a.indexOf("("))return function(b,c){return b[a]};var c=function(a,b,h){if(""!==h){var d=Ma(h);for(var e=0,l=d.length;e<l;e++){h=d[e].match(ca);var m=d[e].match(W);if(h){d[e]=d[e].replace(ca,"");""!==d[e]&&(a=a[d[e]]);m=[];d.splice(0,e+1);d=d.join(".");if(f.isArray(a))for(e=0,l=a.length;e<l;e++)m.push(c(a[e],b,d));a=h[0].substring(1,h[0].length-1);a=""===a?m:m.join(a);break}else if(m){d[e]=d[e].replace(W,"");a=a[d[e]]();continue}if(null===a||a[d[e]]===
-n)return n;a=a[d[e]]}}return a};return function(b,e){return c(b,e,a)}}function Q(a){if(f.isPlainObject(a))return Q(a._);if(null===a)return function(){};if("function"===typeof a)return function(b,d,e){a(b,"set",d,e)};if("string"!==typeof a||-1===a.indexOf(".")&&-1===a.indexOf("[")&&-1===a.indexOf("("))return function(b,d){b[a]=d};var b=function(a,d,e){e=Ma(e);var c=e[e.length-1];for(var g,k,l=0,m=e.length-1;l<m;l++){g=e[l].match(ca);k=e[l].match(W);if(g){e[l]=e[l].replace(ca,"");a[e[l]]=[];c=e.slice();
-c.splice(0,l+1);g=c.join(".");if(f.isArray(d))for(k=0,m=d.length;k<m;k++)c={},b(c,d[k],g),a[e[l]].push(c);else a[e[l]]=d;return}k&&(e[l]=e[l].replace(W,""),a=a[e[l]](d));if(null===a[e[l]]||a[e[l]]===n)a[e[l]]={};a=a[e[l]]}if(c.match(W))a[c.replace(W,"")](d);else a[c.replace(ca,"")]=d};return function(c,d){return b(c,d,a)}}function Na(a){return K(a.aoData,"_aData")}function pa(a){a.aoData.length=0;a.aiDisplayMaster.length=0;a.aiDisplay.length=0;a.aIds={}}function qa(a,b,c){for(var d=-1,e=0,h=a.length;e<
-h;e++)a[e]==b?d=e:a[e]>b&&a[e]--; -1!=d&&c===n&&a.splice(d,1)}function da(a,b,c,d){var e=a.aoData[b],h,g=function(c,d){for(;c.childNodes.length;)c.removeChild(c.firstChild);c.innerHTML=F(a,b,d,"display")};if("dom"!==c&&(c&&"auto"!==c||"dom"!==e.src)){var k=e.anCells;if(k)if(d!==n)g(k[d],d);else for(c=0,h=k.length;c<h;c++)g(k[c],c)}else e._aData=La(a,e,d,d===n?n:e._aData).data;e._aSortData=null;e._aFilterData=null;g=a.aoColumns;if(d!==n)g[d].sType=null;else{c=0;for(h=g.length;c<h;c++)g[c].sType=null;
-Oa(a,e)}}function La(a,b,c,d){var e=[],h=b.firstChild,g,k=0,l,m=a.aoColumns,p=a._rowReadObject;d=d!==n?d:p?{}:[];var v=function(a,b){if("string"===typeof a){var c=a.indexOf("@");-1!==c&&(c=a.substring(c+1),Q(a)(d,b.getAttribute(c)))}},u=function(a){if(c===n||c===k)g=m[k],l=f.trim(a.innerHTML),g&&g._bAttrSrc?(Q(g.mData._)(d,l),v(g.mData.sort,a),v(g.mData.type,a),v(g.mData.filter,a)):p?(g._setter||(g._setter=Q(g.mData)),g._setter(d,l)):d[k]=l;k++};if(h)for(;h;){var q=h.nodeName.toUpperCase();if("TD"==
-q||"TH"==q)u(h),e.push(h);h=h.nextSibling}else for(e=b.anCells,h=0,q=e.length;h<q;h++)u(e[h]);(b=b.firstChild?b:b.nTr)&&(b=b.getAttribute("id"))&&Q(a.rowId)(d,b);return{data:d,cells:e}}function Ka(a,b,c,d){var e=a.aoData[b],h=e._aData,g=[],k,l;if(null===e.nTr){var m=c||w.createElement("tr");e.nTr=m;e.anCells=g;m._DT_RowIndex=b;Oa(a,e);var p=0;for(k=a.aoColumns.length;p<k;p++){var v=a.aoColumns[p];var n=(l=c?!1:!0)?w.createElement(v.sCellType):d[p];n._DT_CellIndex={row:b,column:p};g.push(n);if(l||
-!(c&&!v.mRender&&v.mData===p||f.isPlainObject(v.mData)&&v.mData._===p+".display"))n.innerHTML=F(a,b,p,"display");v.sClass&&(n.className+=" "+v.sClass);v.bVisible&&!c?m.appendChild(n):!v.bVisible&&c&&n.parentNode.removeChild(n);v.fnCreatedCell&&v.fnCreatedCell.call(a.oInstance,n,F(a,b,p),h,b,p)}A(a,"aoRowCreatedCallback",null,[m,h,b,g])}e.nTr.setAttribute("role","row")}function Oa(a,b){var c=b.nTr,d=b._aData;if(c){if(a=a.rowIdFn(d))c.id=a;d.DT_RowClass&&(a=d.DT_RowClass.split(" "),b.__rowc=b.__rowc?
-sa(b.__rowc.concat(a)):a,f(c).removeClass(b.__rowc.join(" ")).addClass(d.DT_RowClass));d.DT_RowAttr&&f(c).attr(d.DT_RowAttr);d.DT_RowData&&f(c).data(d.DT_RowData)}}function ob(a){var b,c,d=a.nTHead,e=a.nTFoot,h=0===f("th, td",d).length,g=a.oClasses,k=a.aoColumns;h&&(c=f("<tr/>").appendTo(d));var l=0;for(b=k.length;l<b;l++){var m=k[l];var p=f(m.nTh).addClass(m.sClass);h&&p.appendTo(c);a.oFeatures.bSort&&(p.addClass(m.sSortingClass),!1!==m.bSortable&&(p.attr("tabindex",a.iTabIndex).attr("aria-controls",
-a.sTableId),Pa(a,m.nTh,l)));m.sTitle!=p[0].innerHTML&&p.html(m.sTitle);Qa(a,"header")(a,p,m,g)}h&&ea(a.aoHeader,d);f(d).find(">tr").attr("role","row");f(d).find(">tr>th, >tr>td").addClass(g.sHeaderTH);f(e).find(">tr>th, >tr>td").addClass(g.sFooterTH);if(null!==e)for(a=a.aoFooter[0],l=0,b=a.length;l<b;l++)m=k[l],m.nTf=a[l].cell,m.sClass&&f(m.nTf).addClass(m.sClass)}function fa(a,b,c){var d,e,h=[],g=[],k=a.aoColumns.length;if(b){c===n&&(c=!1);var l=0;for(d=b.length;l<d;l++){h[l]=b[l].slice();h[l].nTr=
-b[l].nTr;for(e=k-1;0<=e;e--)a.aoColumns[e].bVisible||c||h[l].splice(e,1);g.push([])}l=0;for(d=h.length;l<d;l++){if(a=h[l].nTr)for(;e=a.firstChild;)a.removeChild(e);e=0;for(b=h[l].length;e<b;e++){var m=k=1;if(g[l][e]===n){a.appendChild(h[l][e].cell);for(g[l][e]=1;h[l+k]!==n&&h[l][e].cell==h[l+k][e].cell;)g[l+k][e]=1,k++;for(;h[l][e+m]!==n&&h[l][e].cell==h[l][e+m].cell;){for(c=0;c<k;c++)g[l+c][e+m]=1;m++}f(h[l][e].cell).attr("rowspan",k).attr("colspan",m)}}}}}function S(a){var b=A(a,"aoPreDrawCallback",
-"preDraw",[a]);if(-1!==f.inArray(!1,b))J(a,!1);else{b=[];var c=0,d=a.asStripeClasses,e=d.length,h=a.oLanguage,g=a.iInitDisplayStart,k="ssp"==I(a),l=a.aiDisplay;a.bDrawing=!0;g!==n&&-1!==g&&(a._iDisplayStart=k?g:g>=a.fnRecordsDisplay()?0:g,a.iInitDisplayStart=-1);g=a._iDisplayStart;var m=a.fnDisplayEnd();if(a.bDeferLoading)a.bDeferLoading=!1,a.iDraw++,J(a,!1);else if(!k)a.iDraw++;else if(!a.bDestroying&&!pb(a))return;if(0!==l.length)for(h=k?a.aoData.length:m,k=k?0:g;k<h;k++){var p=l[k],v=a.aoData[p];
-null===v.nTr&&Ka(a,p);var u=v.nTr;if(0!==e){var q=d[c%e];v._sRowStripe!=q&&(f(u).removeClass(v._sRowStripe).addClass(q),v._sRowStripe=q)}A(a,"aoRowCallback",null,[u,v._aData,c,k,p]);b.push(u);c++}else c=h.sZeroRecords,1==a.iDraw&&"ajax"==I(a)?c=h.sLoadingRecords:h.sEmptyTable&&0===a.fnRecordsTotal()&&(c=h.sEmptyTable),b[0]=f("<tr/>",{"class":e?d[0]:""}).append(f("<td />",{valign:"top",colSpan:V(a),"class":a.oClasses.sRowEmpty}).html(c))[0];A(a,"aoHeaderCallback","header",[f(a.nTHead).children("tr")[0],
-Na(a),g,m,l]);A(a,"aoFooterCallback","footer",[f(a.nTFoot).children("tr")[0],Na(a),g,m,l]);d=f(a.nTBody);d.children().detach();d.append(f(b));A(a,"aoDrawCallback","draw",[a]);a.bSorted=!1;a.bFiltered=!1;a.bDrawing=!1}}function U(a,b){var c=a.oFeatures,d=c.bFilter;c.bSort&&qb(a);d?ha(a,a.oPreviousSearch):a.aiDisplay=a.aiDisplayMaster.slice();!0!==b&&(a._iDisplayStart=0);a._drawHold=b;S(a);a._drawHold=!1}function rb(a){var b=a.oClasses,c=f(a.nTable);c=f("<div/>").insertBefore(c);var d=a.oFeatures,e=
-f("<div/>",{id:a.sTableId+"_wrapper","class":b.sWrapper+(a.nTFoot?"":" "+b.sNoFooter)});a.nHolding=c[0];a.nTableWrapper=e[0];a.nTableReinsertBefore=a.nTable.nextSibling;for(var h=a.sDom.split(""),g,k,l,m,p,n,u=0;u<h.length;u++){g=null;k=h[u];if("<"==k){l=f("<div/>")[0];m=h[u+1];if("'"==m||'"'==m){p="";for(n=2;h[u+n]!=m;)p+=h[u+n],n++;"H"==p?p=b.sJUIHeader:"F"==p&&(p=b.sJUIFooter);-1!=p.indexOf(".")?(m=p.split("."),l.id=m[0].substr(1,m[0].length-1),l.className=m[1]):"#"==p.charAt(0)?l.id=p.substr(1,
-p.length-1):l.className=p;u+=n}e.append(l);e=f(l)}else if(">"==k)e=e.parent();else if("l"==k&&d.bPaginate&&d.bLengthChange)g=sb(a);else if("f"==k&&d.bFilter)g=tb(a);else if("r"==k&&d.bProcessing)g=ub(a);else if("t"==k)g=vb(a);else if("i"==k&&d.bInfo)g=wb(a);else if("p"==k&&d.bPaginate)g=xb(a);else if(0!==q.ext.feature.length)for(l=q.ext.feature,n=0,m=l.length;n<m;n++)if(k==l[n].cFeature){g=l[n].fnInit(a);break}g&&(l=a.aanFeatures,l[k]||(l[k]=[]),l[k].push(g),e.append(g))}c.replaceWith(e);a.nHolding=
-null}function ea(a,b){b=f(b).children("tr");var c,d,e;a.splice(0,a.length);var h=0;for(e=b.length;h<e;h++)a.push([]);h=0;for(e=b.length;h<e;h++){var g=b[h];for(c=g.firstChild;c;){if("TD"==c.nodeName.toUpperCase()||"TH"==c.nodeName.toUpperCase()){var k=1*c.getAttribute("colspan");var l=1*c.getAttribute("rowspan");k=k&&0!==k&&1!==k?k:1;l=l&&0!==l&&1!==l?l:1;var m=0;for(d=a[h];d[m];)m++;var p=m;var n=1===k?!0:!1;for(d=0;d<k;d++)for(m=0;m<l;m++)a[h+m][p+d]={cell:c,unique:n},a[h+m].nTr=g}c=c.nextSibling}}}
-function ta(a,b,c){var d=[];c||(c=a.aoHeader,b&&(c=[],ea(c,b)));b=0;for(var e=c.length;b<e;b++)for(var h=0,g=c[b].length;h<g;h++)!c[b][h].unique||d[h]&&a.bSortCellsTop||(d[h]=c[b][h].cell);return d}function ua(a,b,c){A(a,"aoServerParams","serverParams",[b]);if(b&&f.isArray(b)){var d={},e=/(.*?)\[\]$/;f.each(b,function(a,b){(a=b.name.match(e))?(a=a[0],d[a]||(d[a]=[]),d[a].push(b.value)):d[b.name]=b.value});b=d}var h=a.ajax,g=a.oInstance,k=function(b){A(a,null,"xhr",[a,b,a.jqXHR]);c(b)};if(f.isPlainObject(h)&&
-h.data){var l=h.data;var m="function"===typeof l?l(b,a):l;b="function"===typeof l&&m?m:f.extend(!0,b,m);delete h.data}m={data:b,success:function(b){var c=b.error||b.sError;c&&O(a,0,c);a.json=b;k(b)},dataType:"json",cache:!1,type:a.sServerMethod,error:function(b,c,d){d=A(a,null,"xhr",[a,null,a.jqXHR]);-1===f.inArray(!0,d)&&("parsererror"==c?O(a,0,"Invalid JSON response",1):4===b.readyState&&O(a,0,"Ajax error",7));J(a,!1)}};a.oAjaxData=b;A(a,null,"preXhr",[a,b]);a.fnServerData?a.fnServerData.call(g,
-a.sAjaxSource,f.map(b,function(a,b){return{name:b,value:a}}),k,a):a.sAjaxSource||"string"===typeof h?a.jqXHR=f.ajax(f.extend(m,{url:h||a.sAjaxSource})):"function"===typeof h?a.jqXHR=h.call(g,b,k,a):(a.jqXHR=f.ajax(f.extend(m,h)),h.data=l)}function pb(a){return a.bAjaxDataGet?(a.iDraw++,J(a,!0),ua(a,yb(a),function(b){zb(a,b)}),!1):!0}function yb(a){var b=a.aoColumns,c=b.length,d=a.oFeatures,e=a.oPreviousSearch,h=a.aoPreSearchCols,g=[],k=X(a);var l=a._iDisplayStart;var m=!1!==d.bPaginate?a._iDisplayLength:
--1;var p=function(a,b){g.push({name:a,value:b})};p("sEcho",a.iDraw);p("iColumns",c);p("sColumns",K(b,"sName").join(","));p("iDisplayStart",l);p("iDisplayLength",m);var n={draw:a.iDraw,columns:[],order:[],start:l,length:m,search:{value:e.sSearch,regex:e.bRegex}};for(l=0;l<c;l++){var u=b[l];var ra=h[l];m="function"==typeof u.mData?"function":u.mData;n.columns.push({data:m,name:u.sName,searchable:u.bSearchable,orderable:u.bSortable,search:{value:ra.sSearch,regex:ra.bRegex}});p("mDataProp_"+l,m);d.bFilter&&
-(p("sSearch_"+l,ra.sSearch),p("bRegex_"+l,ra.bRegex),p("bSearchable_"+l,u.bSearchable));d.bSort&&p("bSortable_"+l,u.bSortable)}d.bFilter&&(p("sSearch",e.sSearch),p("bRegex",e.bRegex));d.bSort&&(f.each(k,function(a,b){n.order.push({column:b.col,dir:b.dir});p("iSortCol_"+a,b.col);p("sSortDir_"+a,b.dir)}),p("iSortingCols",k.length));b=q.ext.legacy.ajax;return null===b?a.sAjaxSource?g:n:b?g:n}function zb(a,b){var c=function(a,c){return b[a]!==n?b[a]:b[c]},d=va(a,b),e=c("sEcho","draw"),h=c("iTotalRecords",
-"recordsTotal");c=c("iTotalDisplayRecords","recordsFiltered");if(e!==n){if(1*e<a.iDraw)return;a.iDraw=1*e}pa(a);a._iRecordsTotal=parseInt(h,10);a._iRecordsDisplay=parseInt(c,10);e=0;for(h=d.length;e<h;e++)R(a,d[e]);a.aiDisplay=a.aiDisplayMaster.slice();a.bAjaxDataGet=!1;S(a);a._bInitComplete||wa(a,b);a.bAjaxDataGet=!0;J(a,!1)}function va(a,b){a=f.isPlainObject(a.ajax)&&a.ajax.dataSrc!==n?a.ajax.dataSrc:a.sAjaxDataProp;return"data"===a?b.aaData||b[a]:""!==a?T(a)(b):b}function tb(a){var b=a.oClasses,
-c=a.sTableId,d=a.oLanguage,e=a.oPreviousSearch,h=a.aanFeatures,g='<input type="search" class="'+b.sFilterInput+'"/>',k=d.sSearch;k=k.match(/_INPUT_/)?k.replace("_INPUT_",g):k+g;b=f("<div/>",{id:h.f?null:c+"_filter","class":b.sFilter}).append(f("<label/>").append(k));var l=function(){var b=this.value?this.value:"";b!=e.sSearch&&(ha(a,{sSearch:b,bRegex:e.bRegex,bSmart:e.bSmart,bCaseInsensitive:e.bCaseInsensitive}),a._iDisplayStart=0,S(a))};h=null!==a.searchDelay?a.searchDelay:"ssp"===I(a)?400:0;var m=
-f("input",b).val(e.sSearch).attr("placeholder",d.sSearchPlaceholder).on("keyup.DT search.DT input.DT paste.DT cut.DT",h?Ra(l,h):l).on("mouseup",function(a){setTimeout(function(){l.call(m[0])},10)}).on("keypress.DT",function(a){if(13==a.keyCode)return!1}).attr("aria-controls",c);f(a.nTable).on("search.dt.DT",function(b,c){if(a===c)try{m[0]!==w.activeElement&&m.val(e.sSearch)}catch(u){}});return b[0]}function ha(a,b,c){var d=a.oPreviousSearch,e=a.aoPreSearchCols,h=function(a){d.sSearch=a.sSearch;d.bRegex=
-a.bRegex;d.bSmart=a.bSmart;d.bCaseInsensitive=a.bCaseInsensitive},g=function(a){return a.bEscapeRegex!==n?!a.bEscapeRegex:a.bRegex};Ja(a);if("ssp"!=I(a)){Ab(a,b.sSearch,c,g(b),b.bSmart,b.bCaseInsensitive);h(b);for(b=0;b<e.length;b++)Bb(a,e[b].sSearch,b,g(e[b]),e[b].bSmart,e[b].bCaseInsensitive);Cb(a)}else h(b);a.bFiltered=!0;A(a,null,"search",[a])}function Cb(a){for(var b=q.ext.search,c=a.aiDisplay,d,e,h=0,g=b.length;h<g;h++){for(var k=[],l=0,m=c.length;l<m;l++)e=c[l],d=a.aoData[e],b[h](a,d._aFilterData,
-e,d._aData,l)&&k.push(e);c.length=0;f.merge(c,k)}}function Bb(a,b,c,d,e,h){if(""!==b){var g=[],k=a.aiDisplay;d=Sa(b,d,e,h);for(e=0;e<k.length;e++)b=a.aoData[k[e]]._aFilterData[c],d.test(b)&&g.push(k[e]);a.aiDisplay=g}}function Ab(a,b,c,d,e,h){e=Sa(b,d,e,h);var g=a.oPreviousSearch.sSearch,k=a.aiDisplayMaster;h=[];0!==q.ext.search.length&&(c=!0);var f=Db(a);if(0>=b.length)a.aiDisplay=k.slice();else{if(f||c||d||g.length>b.length||0!==b.indexOf(g)||a.bSorted)a.aiDisplay=k.slice();b=a.aiDisplay;for(c=
-0;c<b.length;c++)e.test(a.aoData[b[c]]._sFilterRow)&&h.push(b[c]);a.aiDisplay=h}}function Sa(a,b,c,d){a=b?a:Ta(a);c&&(a="^(?=.*?"+f.map(a.match(/"[^"]+"|[^ ]+/g)||[""],function(a){if('"'===a.charAt(0)){var b=a.match(/^"(.*)"$/);a=b?b[1]:a}return a.replace('"',"")}).join(")(?=.*?")+").*$");return new RegExp(a,d?"i":"")}function Db(a){var b=a.aoColumns,c,d,e=q.ext.type.search;var h=!1;var g=0;for(c=a.aoData.length;g<c;g++){var k=a.aoData[g];if(!k._aFilterData){var f=[];var m=0;for(d=b.length;m<d;m++){h=
-b[m];if(h.bSearchable){var p=F(a,g,m,"filter");e[h.sType]&&(p=e[h.sType](p));null===p&&(p="");"string"!==typeof p&&p.toString&&(p=p.toString())}else p="";p.indexOf&&-1!==p.indexOf("&")&&(xa.innerHTML=p,p=$b?xa.textContent:xa.innerText);p.replace&&(p=p.replace(/[\r\n\u2028]/g,""));f.push(p)}k._aFilterData=f;k._sFilterRow=f.join("  ");h=!0}}return h}function Eb(a){return{search:a.sSearch,smart:a.bSmart,regex:a.bRegex,caseInsensitive:a.bCaseInsensitive}}function Fb(a){return{sSearch:a.search,bSmart:a.smart,
-bRegex:a.regex,bCaseInsensitive:a.caseInsensitive}}function wb(a){var b=a.sTableId,c=a.aanFeatures.i,d=f("<div/>",{"class":a.oClasses.sInfo,id:c?null:b+"_info"});c||(a.aoDrawCallback.push({fn:Gb,sName:"information"}),d.attr("role","status").attr("aria-live","polite"),f(a.nTable).attr("aria-describedby",b+"_info"));return d[0]}function Gb(a){var b=a.aanFeatures.i;if(0!==b.length){var c=a.oLanguage,d=a._iDisplayStart+1,e=a.fnDisplayEnd(),h=a.fnRecordsTotal(),g=a.fnRecordsDisplay(),k=g?c.sInfo:c.sInfoEmpty;
-g!==h&&(k+=" "+c.sInfoFiltered);k+=c.sInfoPostFix;k=Hb(a,k);c=c.fnInfoCallback;null!==c&&(k=c.call(a.oInstance,a,d,e,h,g,k));f(b).html(k)}}function Hb(a,b){var c=a.fnFormatNumber,d=a._iDisplayStart+1,e=a._iDisplayLength,h=a.fnRecordsDisplay(),g=-1===e;return b.replace(/_START_/g,c.call(a,d)).replace(/_END_/g,c.call(a,a.fnDisplayEnd())).replace(/_MAX_/g,c.call(a,a.fnRecordsTotal())).replace(/_TOTAL_/g,c.call(a,h)).replace(/_PAGE_/g,c.call(a,g?1:Math.ceil(d/e))).replace(/_PAGES_/g,c.call(a,g?1:Math.ceil(h/
-e)))}function ia(a){var b=a.iInitDisplayStart,c=a.aoColumns;var d=a.oFeatures;var e=a.bDeferLoading;if(a.bInitialised){rb(a);ob(a);fa(a,a.aoHeader);fa(a,a.aoFooter);J(a,!0);d.bAutoWidth&&Ia(a);var h=0;for(d=c.length;h<d;h++){var g=c[h];g.sWidth&&(g.nTh.style.width=B(g.sWidth))}A(a,null,"preInit",[a]);U(a);c=I(a);if("ssp"!=c||e)"ajax"==c?ua(a,[],function(c){var d=va(a,c);for(h=0;h<d.length;h++)R(a,d[h]);a.iInitDisplayStart=b;U(a);J(a,!1);wa(a,c)},a):(J(a,!1),wa(a))}else setTimeout(function(){ia(a)},
-200)}function wa(a,b){a._bInitComplete=!0;(b||a.oInit.aaData)&&Z(a);A(a,null,"plugin-init",[a,b]);A(a,"aoInitComplete","init",[a,b])}function Ua(a,b){b=parseInt(b,10);a._iDisplayLength=b;Va(a);A(a,null,"length",[a,b])}function sb(a){var b=a.oClasses,c=a.sTableId,d=a.aLengthMenu,e=f.isArray(d[0]),h=e?d[0]:d;d=e?d[1]:d;e=f("<select/>",{name:c+"_length","aria-controls":c,"class":b.sLengthSelect});for(var g=0,k=h.length;g<k;g++)e[0][g]=new Option("number"===typeof d[g]?a.fnFormatNumber(d[g]):d[g],h[g]);
-var l=f("<div><label/></div>").addClass(b.sLength);a.aanFeatures.l||(l[0].id=c+"_length");l.children().append(a.oLanguage.sLengthMenu.replace("_MENU_",e[0].outerHTML));f("select",l).val(a._iDisplayLength).on("change.DT",function(b){Ua(a,f(this).val());S(a)});f(a.nTable).on("length.dt.DT",function(b,c,d){a===c&&f("select",l).val(d)});return l[0]}function xb(a){var b=a.sPaginationType,c=q.ext.pager[b],d="function"===typeof c,e=function(a){S(a)};b=f("<div/>").addClass(a.oClasses.sPaging+b)[0];var h=
-a.aanFeatures;d||c.fnInit(a,b,e);h.p||(b.id=a.sTableId+"_paginate",a.aoDrawCallback.push({fn:function(a){if(d){var b=a._iDisplayStart,g=a._iDisplayLength,f=a.fnRecordsDisplay(),p=-1===g;b=p?0:Math.ceil(b/g);g=p?1:Math.ceil(f/g);f=c(b,g);var n;p=0;for(n=h.p.length;p<n;p++)Qa(a,"pageButton")(a,h.p[p],p,f,b,g)}else c.fnUpdate(a,e)},sName:"pagination"}));return b}function Wa(a,b,c){var d=a._iDisplayStart,e=a._iDisplayLength,h=a.fnRecordsDisplay();0===h||-1===e?d=0:"number"===typeof b?(d=b*e,d>h&&(d=0)):
-"first"==b?d=0:"previous"==b?(d=0<=e?d-e:0,0>d&&(d=0)):"next"==b?d+e<h&&(d+=e):"last"==b?d=Math.floor((h-1)/e)*e:O(a,0,"Unknown paging action: "+b,5);b=a._iDisplayStart!==d;a._iDisplayStart=d;b&&(A(a,null,"page",[a]),c&&S(a));return b}function ub(a){return f("<div/>",{id:a.aanFeatures.r?null:a.sTableId+"_processing","class":a.oClasses.sProcessing}).html(a.oLanguage.sProcessing).insertBefore(a.nTable)[0]}function J(a,b){a.oFeatures.bProcessing&&f(a.aanFeatures.r).css("display",b?"block":"none");A(a,
-null,"processing",[a,b])}function vb(a){var b=f(a.nTable);b.attr("role","grid");var c=a.oScroll;if(""===c.sX&&""===c.sY)return a.nTable;var d=c.sX,e=c.sY,h=a.oClasses,g=b.children("caption"),k=g.length?g[0]._captionSide:null,l=f(b[0].cloneNode(!1)),m=f(b[0].cloneNode(!1)),p=b.children("tfoot");p.length||(p=null);l=f("<div/>",{"class":h.sScrollWrapper}).append(f("<div/>",{"class":h.sScrollHead}).css({overflow:"hidden",position:"relative",border:0,width:d?d?B(d):null:"100%"}).append(f("<div/>",{"class":h.sScrollHeadInner}).css({"box-sizing":"content-box",
-width:c.sXInner||"100%"}).append(l.removeAttr("id").css("margin-left",0).append("top"===k?g:null).append(b.children("thead"))))).append(f("<div/>",{"class":h.sScrollBody}).css({position:"relative",overflow:"auto",width:d?B(d):null}).append(b));p&&l.append(f("<div/>",{"class":h.sScrollFoot}).css({overflow:"hidden",border:0,width:d?d?B(d):null:"100%"}).append(f("<div/>",{"class":h.sScrollFootInner}).append(m.removeAttr("id").css("margin-left",0).append("bottom"===k?g:null).append(b.children("tfoot")))));
-b=l.children();var n=b[0];h=b[1];var u=p?b[2]:null;if(d)f(h).on("scroll.DT",function(a){a=this.scrollLeft;n.scrollLeft=a;p&&(u.scrollLeft=a)});f(h).css("max-height",e);c.bCollapse||f(h).css("height",e);a.nScrollHead=n;a.nScrollBody=h;a.nScrollFoot=u;a.aoDrawCallback.push({fn:ma,sName:"scrolling"});return l[0]}function ma(a){var b=a.oScroll,c=b.sX,d=b.sXInner,e=b.sY;b=b.iBarWidth;var h=f(a.nScrollHead),g=h[0].style,k=h.children("div"),l=k[0].style,m=k.children("table");k=a.nScrollBody;var p=f(k),v=
-k.style,u=f(a.nScrollFoot).children("div"),q=u.children("table"),t=f(a.nTHead),r=f(a.nTable),x=r[0],ya=x.style,w=a.nTFoot?f(a.nTFoot):null,y=a.oBrowser,A=y.bScrollOversize,ac=K(a.aoColumns,"nTh"),Xa=[],z=[],C=[],G=[],H,I=function(a){a=a.style;a.paddingTop="0";a.paddingBottom="0";a.borderTopWidth="0";a.borderBottomWidth="0";a.height=0};var D=k.scrollHeight>k.clientHeight;if(a.scrollBarVis!==D&&a.scrollBarVis!==n)a.scrollBarVis=D,Z(a);else{a.scrollBarVis=D;r.children("thead, tfoot").remove();if(w){var E=
-w.clone().prependTo(r);var F=w.find("tr");E=E.find("tr")}var J=t.clone().prependTo(r);t=t.find("tr");D=J.find("tr");J.find("th, td").removeAttr("tabindex");c||(v.width="100%",h[0].style.width="100%");f.each(ta(a,J),function(b,c){H=aa(a,b);c.style.width=a.aoColumns[H].sWidth});w&&N(function(a){a.style.width=""},E);h=r.outerWidth();""===c?(ya.width="100%",A&&(r.find("tbody").height()>k.offsetHeight||"scroll"==p.css("overflow-y"))&&(ya.width=B(r.outerWidth()-b)),h=r.outerWidth()):""!==d&&(ya.width=B(d),
-h=r.outerWidth());N(I,D);N(function(a){C.push(a.innerHTML);Xa.push(B(f(a).css("width")))},D);N(function(a,b){-1!==f.inArray(a,ac)&&(a.style.width=Xa[b])},t);f(D).height(0);w&&(N(I,E),N(function(a){G.push(a.innerHTML);z.push(B(f(a).css("width")))},E),N(function(a,b){a.style.width=z[b]},F),f(E).height(0));N(function(a,b){a.innerHTML='<div class="dataTables_sizing">'+C[b]+"</div>";a.childNodes[0].style.height="0";a.childNodes[0].style.overflow="hidden";a.style.width=Xa[b]},D);w&&N(function(a,b){a.innerHTML=
-'<div class="dataTables_sizing">'+G[b]+"</div>";a.childNodes[0].style.height="0";a.childNodes[0].style.overflow="hidden";a.style.width=z[b]},E);r.outerWidth()<h?(F=k.scrollHeight>k.offsetHeight||"scroll"==p.css("overflow-y")?h+b:h,A&&(k.scrollHeight>k.offsetHeight||"scroll"==p.css("overflow-y"))&&(ya.width=B(F-b)),""!==c&&""===d||O(a,1,"Possible column misalignment",6)):F="100%";v.width=B(F);g.width=B(F);w&&(a.nScrollFoot.style.width=B(F));!e&&A&&(v.height=B(x.offsetHeight+b));c=r.outerWidth();m[0].style.width=
-B(c);l.width=B(c);d=r.height()>k.clientHeight||"scroll"==p.css("overflow-y");e="padding"+(y.bScrollbarLeft?"Left":"Right");l[e]=d?b+"px":"0px";w&&(q[0].style.width=B(c),u[0].style.width=B(c),u[0].style[e]=d?b+"px":"0px");r.children("colgroup").insertBefore(r.children("thead"));p.trigger("scroll");!a.bSorted&&!a.bFiltered||a._drawHold||(k.scrollTop=0)}}function N(a,b,c){for(var d=0,e=0,h=b.length,g,k;e<h;){g=b[e].firstChild;for(k=c?c[e].firstChild:null;g;)1===g.nodeType&&(c?a(g,k,d):a(g,d),d++),g=
-g.nextSibling,k=c?k.nextSibling:null;e++}}function Ia(a){var b=a.nTable,c=a.aoColumns,d=a.oScroll,e=d.sY,h=d.sX,g=d.sXInner,k=c.length,l=na(a,"bVisible"),m=f("th",a.nTHead),p=b.getAttribute("width"),n=b.parentNode,u=!1,q,t=a.oBrowser;d=t.bScrollOversize;(q=b.style.width)&&-1!==q.indexOf("%")&&(p=q);for(q=0;q<l.length;q++){var r=c[l[q]];null!==r.sWidth&&(r.sWidth=Ib(r.sWidthOrig,n),u=!0)}if(d||!u&&!h&&!e&&k==V(a)&&k==m.length)for(q=0;q<k;q++)l=aa(a,q),null!==l&&(c[l].sWidth=B(m.eq(q).width()));else{k=
-f(b).clone().css("visibility","hidden").removeAttr("id");k.find("tbody tr").remove();var w=f("<tr/>").appendTo(k.find("tbody"));k.find("thead, tfoot").remove();k.append(f(a.nTHead).clone()).append(f(a.nTFoot).clone());k.find("tfoot th, tfoot td").css("width","");m=ta(a,k.find("thead")[0]);for(q=0;q<l.length;q++)r=c[l[q]],m[q].style.width=null!==r.sWidthOrig&&""!==r.sWidthOrig?B(r.sWidthOrig):"",r.sWidthOrig&&h&&f(m[q]).append(f("<div/>").css({width:r.sWidthOrig,margin:0,padding:0,border:0,height:1}));
-if(a.aoData.length)for(q=0;q<l.length;q++)u=l[q],r=c[u],f(Jb(a,u)).clone(!1).append(r.sContentPadding).appendTo(w);f("[name]",k).removeAttr("name");r=f("<div/>").css(h||e?{position:"absolute",top:0,left:0,height:1,right:0,overflow:"hidden"}:{}).append(k).appendTo(n);h&&g?k.width(g):h?(k.css("width","auto"),k.removeAttr("width"),k.width()<n.clientWidth&&p&&k.width(n.clientWidth)):e?k.width(n.clientWidth):p&&k.width(p);for(q=e=0;q<l.length;q++)n=f(m[q]),g=n.outerWidth()-n.width(),n=t.bBounding?Math.ceil(m[q].getBoundingClientRect().width):
-n.outerWidth(),e+=n,c[l[q]].sWidth=B(n-g);b.style.width=B(e);r.remove()}p&&(b.style.width=B(p));!p&&!h||a._reszEvt||(b=function(){f(y).on("resize.DT-"+a.sInstance,Ra(function(){Z(a)}))},d?setTimeout(b,1E3):b(),a._reszEvt=!0)}function Ib(a,b){if(!a)return 0;a=f("<div/>").css("width",B(a)).appendTo(b||w.body);b=a[0].offsetWidth;a.remove();return b}function Jb(a,b){var c=Kb(a,b);if(0>c)return null;var d=a.aoData[c];return d.nTr?d.anCells[b]:f("<td/>").html(F(a,c,b,"display"))[0]}function Kb(a,b){for(var c,
-d=-1,e=-1,h=0,g=a.aoData.length;h<g;h++)c=F(a,h,b,"display")+"",c=c.replace(bc,""),c=c.replace(/&nbsp;/g," "),c.length>d&&(d=c.length,e=h);return e}function B(a){return null===a?"0px":"number"==typeof a?0>a?"0px":a+"px":a.match(/\d$/)?a+"px":a}function X(a){var b=[],c=a.aoColumns;var d=a.aaSortingFixed;var e=f.isPlainObject(d);var h=[];var g=function(a){a.length&&!f.isArray(a[0])?h.push(a):f.merge(h,a)};f.isArray(d)&&g(d);e&&d.pre&&g(d.pre);g(a.aaSorting);e&&d.post&&g(d.post);for(a=0;a<h.length;a++){var k=
-h[a][0];g=c[k].aDataSort;d=0;for(e=g.length;d<e;d++){var l=g[d];var m=c[l].sType||"string";h[a]._idx===n&&(h[a]._idx=f.inArray(h[a][1],c[l].asSorting));b.push({src:k,col:l,dir:h[a][1],index:h[a]._idx,type:m,formatter:q.ext.type.order[m+"-pre"]})}}return b}function qb(a){var b,c=[],d=q.ext.type.order,e=a.aoData,h=0,g=a.aiDisplayMaster;Ja(a);var k=X(a);var f=0;for(b=k.length;f<b;f++){var m=k[f];m.formatter&&h++;Lb(a,m.col)}if("ssp"!=I(a)&&0!==k.length){f=0;for(b=g.length;f<b;f++)c[g[f]]=f;h===k.length?
-g.sort(function(a,b){var d,h=k.length,g=e[a]._aSortData,f=e[b]._aSortData;for(d=0;d<h;d++){var l=k[d];var m=g[l.col];var p=f[l.col];m=m<p?-1:m>p?1:0;if(0!==m)return"asc"===l.dir?m:-m}m=c[a];p=c[b];return m<p?-1:m>p?1:0}):g.sort(function(a,b){var h,g=k.length,f=e[a]._aSortData,l=e[b]._aSortData;for(h=0;h<g;h++){var m=k[h];var p=f[m.col];var n=l[m.col];m=d[m.type+"-"+m.dir]||d["string-"+m.dir];p=m(p,n);if(0!==p)return p}p=c[a];n=c[b];return p<n?-1:p>n?1:0})}a.bSorted=!0}function Mb(a){var b=a.aoColumns,
-c=X(a);a=a.oLanguage.oAria;for(var d=0,e=b.length;d<e;d++){var h=b[d];var g=h.asSorting;var k=h.sTitle.replace(/<.*?>/g,"");var f=h.nTh;f.removeAttribute("aria-sort");h.bSortable&&(0<c.length&&c[0].col==d?(f.setAttribute("aria-sort","asc"==c[0].dir?"ascending":"descending"),h=g[c[0].index+1]||g[0]):h=g[0],k+="asc"===h?a.sSortAscending:a.sSortDescending);f.setAttribute("aria-label",k)}}function Ya(a,b,c,d){var e=a.aaSorting,h=a.aoColumns[b].asSorting,g=function(a,b){var c=a._idx;c===n&&(c=f.inArray(a[1],
-h));return c+1<h.length?c+1:b?null:0};"number"===typeof e[0]&&(e=a.aaSorting=[e]);c&&a.oFeatures.bSortMulti?(c=f.inArray(b,K(e,"0")),-1!==c?(b=g(e[c],!0),null===b&&1===e.length&&(b=0),null===b?e.splice(c,1):(e[c][1]=h[b],e[c]._idx=b)):(e.push([b,h[0],0]),e[e.length-1]._idx=0)):e.length&&e[0][0]==b?(b=g(e[0]),e.length=1,e[0][1]=h[b],e[0]._idx=b):(e.length=0,e.push([b,h[0]]),e[0]._idx=0);U(a);"function"==typeof d&&d(a)}function Pa(a,b,c,d){var e=a.aoColumns[c];Za(b,{},function(b){!1!==e.bSortable&&
-(a.oFeatures.bProcessing?(J(a,!0),setTimeout(function(){Ya(a,c,b.shiftKey,d);"ssp"!==I(a)&&J(a,!1)},0)):Ya(a,c,b.shiftKey,d))})}function za(a){var b=a.aLastSort,c=a.oClasses.sSortColumn,d=X(a),e=a.oFeatures,h;if(e.bSort&&e.bSortClasses){e=0;for(h=b.length;e<h;e++){var g=b[e].src;f(K(a.aoData,"anCells",g)).removeClass(c+(2>e?e+1:3))}e=0;for(h=d.length;e<h;e++)g=d[e].src,f(K(a.aoData,"anCells",g)).addClass(c+(2>e?e+1:3))}a.aLastSort=d}function Lb(a,b){var c=a.aoColumns[b],d=q.ext.order[c.sSortDataType],
-e;d&&(e=d.call(a.oInstance,a,b,ba(a,b)));for(var h,g=q.ext.type.order[c.sType+"-pre"],f=0,l=a.aoData.length;f<l;f++)if(c=a.aoData[f],c._aSortData||(c._aSortData=[]),!c._aSortData[b]||d)h=d?e[f]:F(a,f,b,"sort"),c._aSortData[b]=g?g(h):h}function Aa(a){if(a.oFeatures.bStateSave&&!a.bDestroying){var b={time:+new Date,start:a._iDisplayStart,length:a._iDisplayLength,order:f.extend(!0,[],a.aaSorting),search:Eb(a.oPreviousSearch),columns:f.map(a.aoColumns,function(b,d){return{visible:b.bVisible,search:Eb(a.aoPreSearchCols[d])}})};
-A(a,"aoStateSaveParams","stateSaveParams",[a,b]);a.oSavedState=b;a.fnStateSaveCallback.call(a.oInstance,a,b)}}function Nb(a,b,c){var d,e,h=a.aoColumns;b=function(b){if(b&&b.time){var g=A(a,"aoStateLoadParams","stateLoadParams",[a,b]);if(-1===f.inArray(!1,g)&&(g=a.iStateDuration,!(0<g&&b.time<+new Date-1E3*g||b.columns&&h.length!==b.columns.length))){a.oLoadedState=f.extend(!0,{},b);b.start!==n&&(a._iDisplayStart=b.start,a.iInitDisplayStart=b.start);b.length!==n&&(a._iDisplayLength=b.length);b.order!==
-n&&(a.aaSorting=[],f.each(b.order,function(b,c){a.aaSorting.push(c[0]>=h.length?[0,c[1]]:c)}));b.search!==n&&f.extend(a.oPreviousSearch,Fb(b.search));if(b.columns)for(d=0,e=b.columns.length;d<e;d++)g=b.columns[d],g.visible!==n&&(h[d].bVisible=g.visible),g.search!==n&&f.extend(a.aoPreSearchCols[d],Fb(g.search));A(a,"aoStateLoaded","stateLoaded",[a,b])}}c()};if(a.oFeatures.bStateSave){var g=a.fnStateLoadCallback.call(a.oInstance,a,b);g!==n&&b(g)}else c()}function Ba(a){var b=q.settings;a=f.inArray(a,
-K(b,"nTable"));return-1!==a?b[a]:null}function O(a,b,c,d){c="DataTables warning: "+(a?"table id="+a.sTableId+" - ":"")+c;d&&(c+=". For more information about this error, please see http://datatables.net/tn/"+d);if(b)y.console&&console.log&&console.log(c);else if(b=q.ext,b=b.sErrMode||b.errMode,a&&A(a,null,"error",[a,d,c]),"alert"==b)alert(c);else{if("throw"==b)throw Error(c);"function"==typeof b&&b(a,d,c)}}function M(a,b,c,d){f.isArray(c)?f.each(c,function(c,d){f.isArray(d)?M(a,b,d[0],d[1]):M(a,b,
-d)}):(d===n&&(d=c),b[c]!==n&&(a[d]=b[c]))}function $a(a,b,c){var d;for(d in b)if(b.hasOwnProperty(d)){var e=b[d];f.isPlainObject(e)?(f.isPlainObject(a[d])||(a[d]={}),f.extend(!0,a[d],e)):c&&"data"!==d&&"aaData"!==d&&f.isArray(e)?a[d]=e.slice():a[d]=e}return a}function Za(a,b,c){f(a).on("click.DT",b,function(b){f(a).trigger("blur");c(b)}).on("keypress.DT",b,function(a){13===a.which&&(a.preventDefault(),c(a))}).on("selectstart.DT",function(){return!1})}function D(a,b,c,d){c&&a[b].push({fn:c,sName:d})}
-function A(a,b,c,d){var e=[];b&&(e=f.map(a[b].slice().reverse(),function(b,c){return b.fn.apply(a.oInstance,d)}));null!==c&&(b=f.Event(c+".dt"),f(a.nTable).trigger(b,d),e.push(b.result));return e}function Va(a){var b=a._iDisplayStart,c=a.fnDisplayEnd(),d=a._iDisplayLength;b>=c&&(b=c-d);b-=b%d;if(-1===d||0>b)b=0;a._iDisplayStart=b}function Qa(a,b){a=a.renderer;var c=q.ext.renderer[b];return f.isPlainObject(a)&&a[b]?c[a[b]]||c._:"string"===typeof a?c[a]||c._:c._}function I(a){return a.oFeatures.bServerSide?
-"ssp":a.ajax||a.sAjaxSource?"ajax":"dom"}function ja(a,b){var c=Ob.numbers_length,d=Math.floor(c/2);b<=c?a=Y(0,b):a<=d?(a=Y(0,c-2),a.push("ellipsis"),a.push(b-1)):(a>=b-1-d?a=Y(b-(c-2),b):(a=Y(a-d+2,a+d-1),a.push("ellipsis"),a.push(b-1)),a.splice(0,0,"ellipsis"),a.splice(0,0,0));a.DT_el="span";return a}function Ga(a){f.each({num:function(b){return Ca(b,a)},"num-fmt":function(b){return Ca(b,a,ab)},"html-num":function(b){return Ca(b,a,Da)},"html-num-fmt":function(b){return Ca(b,a,Da,ab)}},function(b,
-c){C.type.order[b+a+"-pre"]=c;b.match(/^html\-/)&&(C.type.search[b+a]=C.type.search.html)})}function Pb(a){return function(){var b=[Ba(this[q.ext.iApiIndex])].concat(Array.prototype.slice.call(arguments));return q.ext.internal[a].apply(this,b)}}var q=function(a){this.$=function(a,b){return this.api(!0).$(a,b)};this._=function(a,b){return this.api(!0).rows(a,b).data()};this.api=function(a){return a?new x(Ba(this[C.iApiIndex])):new x(this)};this.fnAddData=function(a,b){var c=this.api(!0);a=f.isArray(a)&&
-(f.isArray(a[0])||f.isPlainObject(a[0]))?c.rows.add(a):c.row.add(a);(b===n||b)&&c.draw();return a.flatten().toArray()};this.fnAdjustColumnSizing=function(a){var b=this.api(!0).columns.adjust(),c=b.settings()[0],d=c.oScroll;a===n||a?b.draw(!1):(""!==d.sX||""!==d.sY)&&ma(c)};this.fnClearTable=function(a){var b=this.api(!0).clear();(a===n||a)&&b.draw()};this.fnClose=function(a){this.api(!0).row(a).child.hide()};this.fnDeleteRow=function(a,b,c){var d=this.api(!0);a=d.rows(a);var e=a.settings()[0],h=e.aoData[a[0][0]];
-a.remove();b&&b.call(this,e,h);(c===n||c)&&d.draw();return h};this.fnDestroy=function(a){this.api(!0).destroy(a)};this.fnDraw=function(a){this.api(!0).draw(a)};this.fnFilter=function(a,b,c,d,e,f){e=this.api(!0);null===b||b===n?e.search(a,c,d,f):e.column(b).search(a,c,d,f);e.draw()};this.fnGetData=function(a,b){var c=this.api(!0);if(a!==n){var d=a.nodeName?a.nodeName.toLowerCase():"";return b!==n||"td"==d||"th"==d?c.cell(a,b).data():c.row(a).data()||null}return c.data().toArray()};this.fnGetNodes=
-function(a){var b=this.api(!0);return a!==n?b.row(a).node():b.rows().nodes().flatten().toArray()};this.fnGetPosition=function(a){var b=this.api(!0),c=a.nodeName.toUpperCase();return"TR"==c?b.row(a).index():"TD"==c||"TH"==c?(a=b.cell(a).index(),[a.row,a.columnVisible,a.column]):null};this.fnIsOpen=function(a){return this.api(!0).row(a).child.isShown()};this.fnOpen=function(a,b,c){return this.api(!0).row(a).child(b,c).show().child()[0]};this.fnPageChange=function(a,b){a=this.api(!0).page(a);(b===n||
-b)&&a.draw(!1)};this.fnSetColumnVis=function(a,b,c){a=this.api(!0).column(a).visible(b);(c===n||c)&&a.columns.adjust().draw()};this.fnSettings=function(){return Ba(this[C.iApiIndex])};this.fnSort=function(a){this.api(!0).order(a).draw()};this.fnSortListener=function(a,b,c){this.api(!0).order.listener(a,b,c)};this.fnUpdate=function(a,b,c,d,e){var h=this.api(!0);c===n||null===c?h.row(b).data(a):h.cell(b,c).data(a);(e===n||e)&&h.columns.adjust();(d===n||d)&&h.draw();return 0};this.fnVersionCheck=C.fnVersionCheck;
-var b=this,c=a===n,d=this.length;c&&(a={});this.oApi=this.internal=C.internal;for(var e in q.ext.internal)e&&(this[e]=Pb(e));this.each(function(){var e={},g=1<d?$a(e,a,!0):a,k=0,l;e=this.getAttribute("id");var m=!1,p=q.defaults,v=f(this);if("table"!=this.nodeName.toLowerCase())O(null,0,"Non-table node initialisation ("+this.nodeName+")",2);else{ib(p);jb(p.column);L(p,p,!0);L(p.column,p.column,!0);L(p,f.extend(g,v.data()),!0);var u=q.settings;k=0;for(l=u.length;k<l;k++){var t=u[k];if(t.nTable==this||
-t.nTHead&&t.nTHead.parentNode==this||t.nTFoot&&t.nTFoot.parentNode==this){var w=g.bRetrieve!==n?g.bRetrieve:p.bRetrieve;if(c||w)return t.oInstance;if(g.bDestroy!==n?g.bDestroy:p.bDestroy){t.oInstance.fnDestroy();break}else{O(t,0,"Cannot reinitialise DataTable",3);return}}if(t.sTableId==this.id){u.splice(k,1);break}}if(null===e||""===e)this.id=e="DataTables_Table_"+q.ext._unique++;var r=f.extend(!0,{},q.models.oSettings,{sDestroyWidth:v[0].style.width,sInstance:e,sTableId:e});r.nTable=this;r.oApi=
-b.internal;r.oInit=g;u.push(r);r.oInstance=1===b.length?b:v.dataTable();ib(g);Fa(g.oLanguage);g.aLengthMenu&&!g.iDisplayLength&&(g.iDisplayLength=f.isArray(g.aLengthMenu[0])?g.aLengthMenu[0][0]:g.aLengthMenu[0]);g=$a(f.extend(!0,{},p),g);M(r.oFeatures,g,"bPaginate bLengthChange bFilter bSort bSortMulti bInfo bProcessing bAutoWidth bSortClasses bServerSide bDeferRender".split(" "));M(r,g,["asStripeClasses","ajax","fnServerData","fnFormatNumber","sServerMethod","aaSorting","aaSortingFixed","aLengthMenu",
-"sPaginationType","sAjaxSource","sAjaxDataProp","iStateDuration","sDom","bSortCellsTop","iTabIndex","fnStateLoadCallback","fnStateSaveCallback","renderer","searchDelay","rowId",["iCookieDuration","iStateDuration"],["oSearch","oPreviousSearch"],["aoSearchCols","aoPreSearchCols"],["iDisplayLength","_iDisplayLength"]]);M(r.oScroll,g,[["sScrollX","sX"],["sScrollXInner","sXInner"],["sScrollY","sY"],["bScrollCollapse","bCollapse"]]);M(r.oLanguage,g,"fnInfoCallback");D(r,"aoDrawCallback",g.fnDrawCallback,
-"user");D(r,"aoServerParams",g.fnServerParams,"user");D(r,"aoStateSaveParams",g.fnStateSaveParams,"user");D(r,"aoStateLoadParams",g.fnStateLoadParams,"user");D(r,"aoStateLoaded",g.fnStateLoaded,"user");D(r,"aoRowCallback",g.fnRowCallback,"user");D(r,"aoRowCreatedCallback",g.fnCreatedRow,"user");D(r,"aoHeaderCallback",g.fnHeaderCallback,"user");D(r,"aoFooterCallback",g.fnFooterCallback,"user");D(r,"aoInitComplete",g.fnInitComplete,"user");D(r,"aoPreDrawCallback",g.fnPreDrawCallback,"user");r.rowIdFn=
-T(g.rowId);kb(r);var x=r.oClasses;f.extend(x,q.ext.classes,g.oClasses);v.addClass(x.sTable);r.iInitDisplayStart===n&&(r.iInitDisplayStart=g.iDisplayStart,r._iDisplayStart=g.iDisplayStart);null!==g.iDeferLoading&&(r.bDeferLoading=!0,e=f.isArray(g.iDeferLoading),r._iRecordsDisplay=e?g.iDeferLoading[0]:g.iDeferLoading,r._iRecordsTotal=e?g.iDeferLoading[1]:g.iDeferLoading);var y=r.oLanguage;f.extend(!0,y,g.oLanguage);y.sUrl&&(f.ajax({dataType:"json",url:y.sUrl,success:function(a){Fa(a);L(p.oLanguage,
-a);f.extend(!0,y,a);ia(r)},error:function(){ia(r)}}),m=!0);null===g.asStripeClasses&&(r.asStripeClasses=[x.sStripeOdd,x.sStripeEven]);e=r.asStripeClasses;var z=v.children("tbody").find("tr").eq(0);-1!==f.inArray(!0,f.map(e,function(a,b){return z.hasClass(a)}))&&(f("tbody tr",this).removeClass(e.join(" ")),r.asDestroyStripes=e.slice());e=[];u=this.getElementsByTagName("thead");0!==u.length&&(ea(r.aoHeader,u[0]),e=ta(r));if(null===g.aoColumns)for(u=[],k=0,l=e.length;k<l;k++)u.push(null);else u=g.aoColumns;
-k=0;for(l=u.length;k<l;k++)Ha(r,e?e[k]:null);mb(r,g.aoColumnDefs,u,function(a,b){la(r,a,b)});if(z.length){var B=function(a,b){return null!==a.getAttribute("data-"+b)?b:null};f(z[0]).children("th, td").each(function(a,b){var c=r.aoColumns[a];if(c.mData===a){var d=B(b,"sort")||B(b,"order");b=B(b,"filter")||B(b,"search");if(null!==d||null!==b)c.mData={_:a+".display",sort:null!==d?a+".@data-"+d:n,type:null!==d?a+".@data-"+d:n,filter:null!==b?a+".@data-"+b:n},la(r,a)}})}var C=r.oFeatures;e=function(){if(g.aaSorting===
-n){var a=r.aaSorting;k=0;for(l=a.length;k<l;k++)a[k][1]=r.aoColumns[k].asSorting[0]}za(r);C.bSort&&D(r,"aoDrawCallback",function(){if(r.bSorted){var a=X(r),b={};f.each(a,function(a,c){b[c.src]=c.dir});A(r,null,"order",[r,a,b]);Mb(r)}});D(r,"aoDrawCallback",function(){(r.bSorted||"ssp"===I(r)||C.bDeferRender)&&za(r)},"sc");a=v.children("caption").each(function(){this._captionSide=f(this).css("caption-side")});var b=v.children("thead");0===b.length&&(b=f("<thead/>").appendTo(v));r.nTHead=b[0];b=v.children("tbody");
-0===b.length&&(b=f("<tbody/>").appendTo(v));r.nTBody=b[0];b=v.children("tfoot");0===b.length&&0<a.length&&(""!==r.oScroll.sX||""!==r.oScroll.sY)&&(b=f("<tfoot/>").appendTo(v));0===b.length||0===b.children().length?v.addClass(x.sNoFooter):0<b.length&&(r.nTFoot=b[0],ea(r.aoFooter,r.nTFoot));if(g.aaData)for(k=0;k<g.aaData.length;k++)R(r,g.aaData[k]);else(r.bDeferLoading||"dom"==I(r))&&oa(r,f(r.nTBody).children("tr"));r.aiDisplay=r.aiDisplayMaster.slice();r.bInitialised=!0;!1===m&&ia(r)};g.bStateSave?
-(C.bStateSave=!0,D(r,"aoDrawCallback",Aa,"state_save"),Nb(r,g,e)):e()}});b=null;return this},C,t,z,bb={},Qb=/[\r\n\u2028]/g,Da=/<.*?>/g,cc=/^\d{2,4}[\.\/\-]\d{1,2}[\.\/\-]\d{1,2}([T ]{1}\d{1,2}[:\.]\d{2}([\.:]\d{2})?)?$/,dc=/(\/|\.|\*|\+|\?|\||\(|\)|\[|\]|\{|\}|\\|\$|\^|\-)/g,ab=/[',$£€¥%\u2009\u202F\u20BD\u20a9\u20BArfkɃΞ]/gi,P=function(a){return a&&!0!==a&&"-"!==a?!1:!0},Rb=function(a){var b=parseInt(a,10);return!isNaN(b)&&isFinite(a)?b:null},Sb=function(a,b){bb[b]||(bb[b]=new RegExp(Ta(b),"g"));
-return"string"===typeof a&&"."!==b?a.replace(/\./g,"").replace(bb[b],"."):a},cb=function(a,b,c){var d="string"===typeof a;if(P(a))return!0;b&&d&&(a=Sb(a,b));c&&d&&(a=a.replace(ab,""));return!isNaN(parseFloat(a))&&isFinite(a)},Tb=function(a,b,c){return P(a)?!0:P(a)||"string"===typeof a?cb(a.replace(Da,""),b,c)?!0:null:null},K=function(a,b,c){var d=[],e=0,h=a.length;if(c!==n)for(;e<h;e++)a[e]&&a[e][b]&&d.push(a[e][b][c]);else for(;e<h;e++)a[e]&&d.push(a[e][b]);return d},ka=function(a,b,c,d){var e=[],
-h=0,g=b.length;if(d!==n)for(;h<g;h++)a[b[h]][c]&&e.push(a[b[h]][c][d]);else for(;h<g;h++)e.push(a[b[h]][c]);return e},Y=function(a,b){var c=[];if(b===n){b=0;var d=a}else d=b,b=a;for(a=b;a<d;a++)c.push(a);return c},Ub=function(a){for(var b=[],c=0,d=a.length;c<d;c++)a[c]&&b.push(a[c]);return b},sa=function(a){a:{if(!(2>a.length)){var b=a.slice().sort();for(var c=b[0],d=1,e=b.length;d<e;d++){if(b[d]===c){b=!1;break a}c=b[d]}}b=!0}if(b)return a.slice();b=[];e=a.length;var h,g=0;d=0;a:for(;d<e;d++){c=
-a[d];for(h=0;h<g;h++)if(b[h]===c)continue a;b.push(c);g++}return b};q.util={throttle:function(a,b){var c=b!==n?b:200,d,e;return function(){var b=this,g=+new Date,f=arguments;d&&g<d+c?(clearTimeout(e),e=setTimeout(function(){d=n;a.apply(b,f)},c)):(d=g,a.apply(b,f))}},escapeRegex:function(a){return a.replace(dc,"\\$1")}};var E=function(a,b,c){a[b]!==n&&(a[c]=a[b])},ca=/\[.*?\]$/,W=/\(\)$/,Ta=q.util.escapeRegex,xa=f("<div>")[0],$b=xa.textContent!==n,bc=/<.*?>/g,Ra=q.util.throttle,Vb=[],G=Array.prototype,
-ec=function(a){var b,c=q.settings,d=f.map(c,function(a,b){return a.nTable});if(a){if(a.nTable&&a.oApi)return[a];if(a.nodeName&&"table"===a.nodeName.toLowerCase()){var e=f.inArray(a,d);return-1!==e?[c[e]]:null}if(a&&"function"===typeof a.settings)return a.settings().toArray();"string"===typeof a?b=f(a):a instanceof f&&(b=a)}else return[];if(b)return b.map(function(a){e=f.inArray(this,d);return-1!==e?c[e]:null}).toArray()};var x=function(a,b){if(!(this instanceof x))return new x(a,b);var c=[],d=function(a){(a=
-ec(a))&&c.push.apply(c,a)};if(f.isArray(a))for(var e=0,h=a.length;e<h;e++)d(a[e]);else d(a);this.context=sa(c);b&&f.merge(this,b);this.selector={rows:null,cols:null,opts:null};x.extend(this,this,Vb)};q.Api=x;f.extend(x.prototype,{any:function(){return 0!==this.count()},concat:G.concat,context:[],count:function(){return this.flatten().length},each:function(a){for(var b=0,c=this.length;b<c;b++)a.call(this,this[b],b,this);return this},eq:function(a){var b=this.context;return b.length>a?new x(b[a],this[a]):
-null},filter:function(a){var b=[];if(G.filter)b=G.filter.call(this,a,this);else for(var c=0,d=this.length;c<d;c++)a.call(this,this[c],c,this)&&b.push(this[c]);return new x(this.context,b)},flatten:function(){var a=[];return new x(this.context,a.concat.apply(a,this.toArray()))},join:G.join,indexOf:G.indexOf||function(a,b){b=b||0;for(var c=this.length;b<c;b++)if(this[b]===a)return b;return-1},iterator:function(a,b,c,d){var e=[],h,g,f=this.context,l,m=this.selector;"string"===typeof a&&(d=c,c=b,b=a,
-a=!1);var p=0;for(h=f.length;p<h;p++){var q=new x(f[p]);if("table"===b){var u=c.call(q,f[p],p);u!==n&&e.push(u)}else if("columns"===b||"rows"===b)u=c.call(q,f[p],this[p],p),u!==n&&e.push(u);else if("column"===b||"column-rows"===b||"row"===b||"cell"===b){var t=this[p];"column-rows"===b&&(l=Ea(f[p],m.opts));var w=0;for(g=t.length;w<g;w++)u=t[w],u="cell"===b?c.call(q,f[p],u.row,u.column,p,w):c.call(q,f[p],u,p,w,l),u!==n&&e.push(u)}}return e.length||d?(a=new x(f,a?e.concat.apply([],e):e),b=a.selector,
-b.rows=m.rows,b.cols=m.cols,b.opts=m.opts,a):this},lastIndexOf:G.lastIndexOf||function(a,b){return this.indexOf.apply(this.toArray.reverse(),arguments)},length:0,map:function(a){var b=[];if(G.map)b=G.map.call(this,a,this);else for(var c=0,d=this.length;c<d;c++)b.push(a.call(this,this[c],c));return new x(this.context,b)},pluck:function(a){return this.map(function(b){return b[a]})},pop:G.pop,push:G.push,reduce:G.reduce||function(a,b){return lb(this,a,b,0,this.length,1)},reduceRight:G.reduceRight||function(a,
-b){return lb(this,a,b,this.length-1,-1,-1)},reverse:G.reverse,selector:null,shift:G.shift,slice:function(){return new x(this.context,this)},sort:G.sort,splice:G.splice,toArray:function(){return G.slice.call(this)},to$:function(){return f(this)},toJQuery:function(){return f(this)},unique:function(){return new x(this.context,sa(this))},unshift:G.unshift});x.extend=function(a,b,c){if(c.length&&b&&(b instanceof x||b.__dt_wrapper)){var d,e=function(a,b,c){return function(){var d=b.apply(a,arguments);x.extend(d,
-d,c.methodExt);return d}};var h=0;for(d=c.length;h<d;h++){var f=c[h];b[f.name]="function"===f.type?e(a,f.val,f):"object"===f.type?{}:f.val;b[f.name].__dt_wrapper=!0;x.extend(a,b[f.name],f.propExt)}}};x.register=t=function(a,b){if(f.isArray(a))for(var c=0,d=a.length;c<d;c++)x.register(a[c],b);else{d=a.split(".");var e=Vb,h;a=0;for(c=d.length;a<c;a++){var g=(h=-1!==d[a].indexOf("()"))?d[a].replace("()",""):d[a];a:{var k=0;for(var l=e.length;k<l;k++)if(e[k].name===g){k=e[k];break a}k=null}k||(k={name:g,
-val:{},methodExt:[],propExt:[],type:"object"},e.push(k));a===c-1?(k.val=b,k.type="function"===typeof b?"function":f.isPlainObject(b)?"object":"other"):e=h?k.methodExt:k.propExt}}};x.registerPlural=z=function(a,b,c){x.register(a,c);x.register(b,function(){var a=c.apply(this,arguments);return a===this?this:a instanceof x?a.length?f.isArray(a[0])?new x(a.context,a[0]):a[0]:n:a})};var Wb=function(a,b){if(f.isArray(a))return f.map(a,function(a){return Wb(a,b)});if("number"===typeof a)return[b[a]];var c=
-f.map(b,function(a,b){return a.nTable});return f(c).filter(a).map(function(a){a=f.inArray(this,c);return b[a]}).toArray()};t("tables()",function(a){return a!==n&&null!==a?new x(Wb(a,this.context)):this});t("table()",function(a){a=this.tables(a);var b=a.context;return b.length?new x(b[0]):a});z("tables().nodes()","table().node()",function(){return this.iterator("table",function(a){return a.nTable},1)});z("tables().body()","table().body()",function(){return this.iterator("table",function(a){return a.nTBody},
-1)});z("tables().header()","table().header()",function(){return this.iterator("table",function(a){return a.nTHead},1)});z("tables().footer()","table().footer()",function(){return this.iterator("table",function(a){return a.nTFoot},1)});z("tables().containers()","table().container()",function(){return this.iterator("table",function(a){return a.nTableWrapper},1)});t("draw()",function(a){return this.iterator("table",function(b){"page"===a?S(b):("string"===typeof a&&(a="full-hold"===a?!1:!0),U(b,!1===
-a))})});t("page()",function(a){return a===n?this.page.info().page:this.iterator("table",function(b){Wa(b,a)})});t("page.info()",function(a){if(0===this.context.length)return n;a=this.context[0];var b=a._iDisplayStart,c=a.oFeatures.bPaginate?a._iDisplayLength:-1,d=a.fnRecordsDisplay(),e=-1===c;return{page:e?0:Math.floor(b/c),pages:e?1:Math.ceil(d/c),start:b,end:a.fnDisplayEnd(),length:c,recordsTotal:a.fnRecordsTotal(),recordsDisplay:d,serverSide:"ssp"===I(a)}});t("page.len()",function(a){return a===
-n?0!==this.context.length?this.context[0]._iDisplayLength:n:this.iterator("table",function(b){Ua(b,a)})});var Xb=function(a,b,c){if(c){var d=new x(a);d.one("draw",function(){c(d.ajax.json())})}if("ssp"==I(a))U(a,b);else{J(a,!0);var e=a.jqXHR;e&&4!==e.readyState&&e.abort();ua(a,[],function(c){pa(a);c=va(a,c);for(var d=0,e=c.length;d<e;d++)R(a,c[d]);U(a,b);J(a,!1)})}};t("ajax.json()",function(){var a=this.context;if(0<a.length)return a[0].json});t("ajax.params()",function(){var a=this.context;if(0<
-a.length)return a[0].oAjaxData});t("ajax.reload()",function(a,b){return this.iterator("table",function(c){Xb(c,!1===b,a)})});t("ajax.url()",function(a){var b=this.context;if(a===n){if(0===b.length)return n;b=b[0];return b.ajax?f.isPlainObject(b.ajax)?b.ajax.url:b.ajax:b.sAjaxSource}return this.iterator("table",function(b){f.isPlainObject(b.ajax)?b.ajax.url=a:b.ajax=a})});t("ajax.url().load()",function(a,b){return this.iterator("table",function(c){Xb(c,!1===b,a)})});var db=function(a,b,c,d,e){var h=
-[],g,k,l;var m=typeof b;b&&"string"!==m&&"function"!==m&&b.length!==n||(b=[b]);m=0;for(k=b.length;m<k;m++){var p=b[m]&&b[m].split&&!b[m].match(/[\[\(:]/)?b[m].split(","):[b[m]];var q=0;for(l=p.length;q<l;q++)(g=c("string"===typeof p[q]?f.trim(p[q]):p[q]))&&g.length&&(h=h.concat(g))}a=C.selector[a];if(a.length)for(m=0,k=a.length;m<k;m++)h=a[m](d,e,h);return sa(h)},eb=function(a){a||(a={});a.filter&&a.search===n&&(a.search=a.filter);return f.extend({search:"none",order:"current",page:"all"},a)},fb=
-function(a){for(var b=0,c=a.length;b<c;b++)if(0<a[b].length)return a[0]=a[b],a[0].length=1,a.length=1,a.context=[a.context[b]],a;a.length=0;return a},Ea=function(a,b){var c=[],d=a.aiDisplay;var e=a.aiDisplayMaster;var h=b.search;var g=b.order;b=b.page;if("ssp"==I(a))return"removed"===h?[]:Y(0,e.length);if("current"==b)for(g=a._iDisplayStart,a=a.fnDisplayEnd();g<a;g++)c.push(d[g]);else if("current"==g||"applied"==g)if("none"==h)c=e.slice();else if("applied"==h)c=d.slice();else{if("removed"==h){var k=
-{};g=0;for(a=d.length;g<a;g++)k[d[g]]=null;c=f.map(e,function(a){return k.hasOwnProperty(a)?null:a})}}else if("index"==g||"original"==g)for(g=0,a=a.aoData.length;g<a;g++)"none"==h?c.push(g):(e=f.inArray(g,d),(-1===e&&"removed"==h||0<=e&&"applied"==h)&&c.push(g));return c},fc=function(a,b,c){var d;return db("row",b,function(b){var e=Rb(b),g=a.aoData;if(null!==e&&!c)return[e];d||(d=Ea(a,c));if(null!==e&&-1!==f.inArray(e,d))return[e];if(null===b||b===n||""===b)return d;if("function"===typeof b)return f.map(d,
-function(a){var c=g[a];return b(a,c._aData,c.nTr)?a:null});if(b.nodeName){e=b._DT_RowIndex;var k=b._DT_CellIndex;if(e!==n)return g[e]&&g[e].nTr===b?[e]:[];if(k)return g[k.row]&&g[k.row].nTr===b.parentNode?[k.row]:[];e=f(b).closest("*[data-dt-row]");return e.length?[e.data("dt-row")]:[]}if("string"===typeof b&&"#"===b.charAt(0)&&(e=a.aIds[b.replace(/^#/,"")],e!==n))return[e.idx];e=Ub(ka(a.aoData,d,"nTr"));return f(e).filter(b).map(function(){return this._DT_RowIndex}).toArray()},a,c)};t("rows()",function(a,
-b){a===n?a="":f.isPlainObject(a)&&(b=a,a="");b=eb(b);var c=this.iterator("table",function(c){return fc(c,a,b)},1);c.selector.rows=a;c.selector.opts=b;return c});t("rows().nodes()",function(){return this.iterator("row",function(a,b){return a.aoData[b].nTr||n},1)});t("rows().data()",function(){return this.iterator(!0,"rows",function(a,b){return ka(a.aoData,b,"_aData")},1)});z("rows().cache()","row().cache()",function(a){return this.iterator("row",function(b,c){b=b.aoData[c];return"search"===a?b._aFilterData:
-b._aSortData},1)});z("rows().invalidate()","row().invalidate()",function(a){return this.iterator("row",function(b,c){da(b,c,a)})});z("rows().indexes()","row().index()",function(){return this.iterator("row",function(a,b){return b},1)});z("rows().ids()","row().id()",function(a){for(var b=[],c=this.context,d=0,e=c.length;d<e;d++)for(var f=0,g=this[d].length;f<g;f++){var k=c[d].rowIdFn(c[d].aoData[this[d][f]]._aData);b.push((!0===a?"#":"")+k)}return new x(c,b)});z("rows().remove()","row().remove()",function(){var a=
-this;this.iterator("row",function(b,c,d){var e=b.aoData,f=e[c],g,k;e.splice(c,1);var l=0;for(g=e.length;l<g;l++){var m=e[l];var p=m.anCells;null!==m.nTr&&(m.nTr._DT_RowIndex=l);if(null!==p)for(m=0,k=p.length;m<k;m++)p[m]._DT_CellIndex.row=l}qa(b.aiDisplayMaster,c);qa(b.aiDisplay,c);qa(a[d],c,!1);0<b._iRecordsDisplay&&b._iRecordsDisplay--;Va(b);c=b.rowIdFn(f._aData);c!==n&&delete b.aIds[c]});this.iterator("table",function(a){for(var b=0,d=a.aoData.length;b<d;b++)a.aoData[b].idx=b});return this});t("rows.add()",
-function(a){var b=this.iterator("table",function(b){var c,d=[];var f=0;for(c=a.length;f<c;f++){var k=a[f];k.nodeName&&"TR"===k.nodeName.toUpperCase()?d.push(oa(b,k)[0]):d.push(R(b,k))}return d},1),c=this.rows(-1);c.pop();f.merge(c,b);return c});t("row()",function(a,b){return fb(this.rows(a,b))});t("row().data()",function(a){var b=this.context;if(a===n)return b.length&&this.length?b[0].aoData[this[0]]._aData:n;var c=b[0].aoData[this[0]];c._aData=a;f.isArray(a)&&c.nTr&&c.nTr.id&&Q(b[0].rowId)(a,c.nTr.id);
-da(b[0],this[0],"data");return this});t("row().node()",function(){var a=this.context;return a.length&&this.length?a[0].aoData[this[0]].nTr||null:null});t("row.add()",function(a){a instanceof f&&a.length&&(a=a[0]);var b=this.iterator("table",function(b){return a.nodeName&&"TR"===a.nodeName.toUpperCase()?oa(b,a)[0]:R(b,a)});return this.row(b[0])});var gc=function(a,b,c,d){var e=[],h=function(b,c){if(f.isArray(b)||b instanceof f)for(var d=0,g=b.length;d<g;d++)h(b[d],c);else b.nodeName&&"tr"===b.nodeName.toLowerCase()?
-e.push(b):(d=f("<tr><td/></tr>").addClass(c),f("td",d).addClass(c).html(b)[0].colSpan=V(a),e.push(d[0]))};h(c,d);b._details&&b._details.detach();b._details=f(e);b._detailsShow&&b._details.insertAfter(b.nTr)},gb=function(a,b){var c=a.context;c.length&&(a=c[0].aoData[b!==n?b:a[0]])&&a._details&&(a._details.remove(),a._detailsShow=n,a._details=n)},Yb=function(a,b){var c=a.context;c.length&&a.length&&(a=c[0].aoData[a[0]],a._details&&((a._detailsShow=b)?a._details.insertAfter(a.nTr):a._details.detach(),
-hc(c[0])))},hc=function(a){var b=new x(a),c=a.aoData;b.off("draw.dt.DT_details column-visibility.dt.DT_details destroy.dt.DT_details");0<K(c,"_details").length&&(b.on("draw.dt.DT_details",function(d,e){a===e&&b.rows({page:"current"}).eq(0).each(function(a){a=c[a];a._detailsShow&&a._details.insertAfter(a.nTr)})}),b.on("column-visibility.dt.DT_details",function(b,e,f,g){if(a===e)for(e=V(e),f=0,g=c.length;f<g;f++)b=c[f],b._details&&b._details.children("td[colspan]").attr("colspan",e)}),b.on("destroy.dt.DT_details",
-function(d,e){if(a===e)for(d=0,e=c.length;d<e;d++)c[d]._details&&gb(b,d)}))};t("row().child()",function(a,b){var c=this.context;if(a===n)return c.length&&this.length?c[0].aoData[this[0]]._details:n;!0===a?this.child.show():!1===a?gb(this):c.length&&this.length&&gc(c[0],c[0].aoData[this[0]],a,b);return this});t(["row().child.show()","row().child().show()"],function(a){Yb(this,!0);return this});t(["row().child.hide()","row().child().hide()"],function(){Yb(this,!1);return this});t(["row().child.remove()",
-"row().child().remove()"],function(){gb(this);return this});t("row().child.isShown()",function(){var a=this.context;return a.length&&this.length?a[0].aoData[this[0]]._detailsShow||!1:!1});var ic=/^([^:]+):(name|visIdx|visible)$/,Zb=function(a,b,c,d,e){c=[];d=0;for(var f=e.length;d<f;d++)c.push(F(a,e[d],b));return c},jc=function(a,b,c){var d=a.aoColumns,e=K(d,"sName"),h=K(d,"nTh");return db("column",b,function(b){var g=Rb(b);if(""===b)return Y(d.length);if(null!==g)return[0<=g?g:d.length+g];if("function"===
-typeof b){var l=Ea(a,c);return f.map(d,function(c,d){return b(d,Zb(a,d,0,0,l),h[d])?d:null})}var m="string"===typeof b?b.match(ic):"";if(m)switch(m[2]){case "visIdx":case "visible":g=parseInt(m[1],10);if(0>g){var p=f.map(d,function(a,b){return a.bVisible?b:null});return[p[p.length+g]]}return[aa(a,g)];case "name":return f.map(e,function(a,b){return a===m[1]?b:null});default:return[]}if(b.nodeName&&b._DT_CellIndex)return[b._DT_CellIndex.column];g=f(h).filter(b).map(function(){return f.inArray(this,
-h)}).toArray();if(g.length||!b.nodeName)return g;g=f(b).closest("*[data-dt-column]");return g.length?[g.data("dt-column")]:[]},a,c)};t("columns()",function(a,b){a===n?a="":f.isPlainObject(a)&&(b=a,a="");b=eb(b);var c=this.iterator("table",function(c){return jc(c,a,b)},1);c.selector.cols=a;c.selector.opts=b;return c});z("columns().header()","column().header()",function(a,b){return this.iterator("column",function(a,b){return a.aoColumns[b].nTh},1)});z("columns().footer()","column().footer()",function(a,
-b){return this.iterator("column",function(a,b){return a.aoColumns[b].nTf},1)});z("columns().data()","column().data()",function(){return this.iterator("column-rows",Zb,1)});z("columns().dataSrc()","column().dataSrc()",function(){return this.iterator("column",function(a,b){return a.aoColumns[b].mData},1)});z("columns().cache()","column().cache()",function(a){return this.iterator("column-rows",function(b,c,d,e,f){return ka(b.aoData,f,"search"===a?"_aFilterData":"_aSortData",c)},1)});z("columns().nodes()",
-"column().nodes()",function(){return this.iterator("column-rows",function(a,b,c,d,e){return ka(a.aoData,e,"anCells",b)},1)});z("columns().visible()","column().visible()",function(a,b){var c=this,d=this.iterator("column",function(b,c){if(a===n)return b.aoColumns[c].bVisible;var d=b.aoColumns,e=d[c],h=b.aoData,m;if(a!==n&&e.bVisible!==a){if(a){var p=f.inArray(!0,K(d,"bVisible"),c+1);d=0;for(m=h.length;d<m;d++){var q=h[d].nTr;b=h[d].anCells;q&&q.insertBefore(b[c],b[p]||null)}}else f(K(b.aoData,"anCells",
-c)).detach();e.bVisible=a}});a!==n&&this.iterator("table",function(d){fa(d,d.aoHeader);fa(d,d.aoFooter);d.aiDisplay.length||f(d.nTBody).find("td[colspan]").attr("colspan",V(d));Aa(d);c.iterator("column",function(c,d){A(c,null,"column-visibility",[c,d,a,b])});(b===n||b)&&c.columns.adjust()});return d});z("columns().indexes()","column().index()",function(a){return this.iterator("column",function(b,c){return"visible"===a?ba(b,c):c},1)});t("columns.adjust()",function(){return this.iterator("table",function(a){Z(a)},
-1)});t("column.index()",function(a,b){if(0!==this.context.length){var c=this.context[0];if("fromVisible"===a||"toData"===a)return aa(c,b);if("fromData"===a||"toVisible"===a)return ba(c,b)}});t("column()",function(a,b){return fb(this.columns(a,b))});var kc=function(a,b,c){var d=a.aoData,e=Ea(a,c),h=Ub(ka(d,e,"anCells")),g=f([].concat.apply([],h)),k,l=a.aoColumns.length,m,p,q,u,t,w;return db("cell",b,function(b){var c="function"===typeof b;if(null===b||b===n||c){m=[];p=0;for(q=e.length;p<q;p++)for(k=
-e[p],u=0;u<l;u++)t={row:k,column:u},c?(w=d[k],b(t,F(a,k,u),w.anCells?w.anCells[u]:null)&&m.push(t)):m.push(t);return m}if(f.isPlainObject(b))return b.column!==n&&b.row!==n&&-1!==f.inArray(b.row,e)?[b]:[];c=g.filter(b).map(function(a,b){return{row:b._DT_CellIndex.row,column:b._DT_CellIndex.column}}).toArray();if(c.length||!b.nodeName)return c;w=f(b).closest("*[data-dt-row]");return w.length?[{row:w.data("dt-row"),column:w.data("dt-column")}]:[]},a,c)};t("cells()",function(a,b,c){f.isPlainObject(a)&&
-(a.row===n?(c=a,a=null):(c=b,b=null));f.isPlainObject(b)&&(c=b,b=null);if(null===b||b===n)return this.iterator("table",function(b){return kc(b,a,eb(c))});var d=c?{page:c.page,order:c.order,search:c.search}:{},e=this.columns(b,d),h=this.rows(a,d),g,k,l,m;d=this.iterator("table",function(a,b){a=[];g=0;for(k=h[b].length;g<k;g++)for(l=0,m=e[b].length;l<m;l++)a.push({row:h[b][g],column:e[b][l]});return a},1);d=c&&c.selected?this.cells(d,c):d;f.extend(d.selector,{cols:b,rows:a,opts:c});return d});z("cells().nodes()",
-"cell().node()",function(){return this.iterator("cell",function(a,b,c){return(a=a.aoData[b])&&a.anCells?a.anCells[c]:n},1)});t("cells().data()",function(){return this.iterator("cell",function(a,b,c){return F(a,b,c)},1)});z("cells().cache()","cell().cache()",function(a){a="search"===a?"_aFilterData":"_aSortData";return this.iterator("cell",function(b,c,d){return b.aoData[c][a][d]},1)});z("cells().render()","cell().render()",function(a){return this.iterator("cell",function(b,c,d){return F(b,c,d,a)},
-1)});z("cells().indexes()","cell().index()",function(){return this.iterator("cell",function(a,b,c){return{row:b,column:c,columnVisible:ba(a,c)}},1)});z("cells().invalidate()","cell().invalidate()",function(a){return this.iterator("cell",function(b,c,d){da(b,c,a,d)})});t("cell()",function(a,b,c){return fb(this.cells(a,b,c))});t("cell().data()",function(a){var b=this.context,c=this[0];if(a===n)return b.length&&c.length?F(b[0],c[0].row,c[0].column):n;nb(b[0],c[0].row,c[0].column,a);da(b[0],c[0].row,
-"data",c[0].column);return this});t("order()",function(a,b){var c=this.context;if(a===n)return 0!==c.length?c[0].aaSorting:n;"number"===typeof a?a=[[a,b]]:a.length&&!f.isArray(a[0])&&(a=Array.prototype.slice.call(arguments));return this.iterator("table",function(b){b.aaSorting=a.slice()})});t("order.listener()",function(a,b,c){return this.iterator("table",function(d){Pa(d,a,b,c)})});t("order.fixed()",function(a){if(!a){var b=this.context;b=b.length?b[0].aaSortingFixed:n;return f.isArray(b)?{pre:b}:
-b}return this.iterator("table",function(b){b.aaSortingFixed=f.extend(!0,{},a)})});t(["columns().order()","column().order()"],function(a){var b=this;return this.iterator("table",function(c,d){var e=[];f.each(b[d],function(b,c){e.push([c,a])});c.aaSorting=e})});t("search()",function(a,b,c,d){var e=this.context;return a===n?0!==e.length?e[0].oPreviousSearch.sSearch:n:this.iterator("table",function(e){e.oFeatures.bFilter&&ha(e,f.extend({},e.oPreviousSearch,{sSearch:a+"",bRegex:null===b?!1:b,bSmart:null===
-c?!0:c,bCaseInsensitive:null===d?!0:d}),1)})});z("columns().search()","column().search()",function(a,b,c,d){return this.iterator("column",function(e,h){var g=e.aoPreSearchCols;if(a===n)return g[h].sSearch;e.oFeatures.bFilter&&(f.extend(g[h],{sSearch:a+"",bRegex:null===b?!1:b,bSmart:null===c?!0:c,bCaseInsensitive:null===d?!0:d}),ha(e,e.oPreviousSearch,1))})});t("state()",function(){return this.context.length?this.context[0].oSavedState:null});t("state.clear()",function(){return this.iterator("table",
-function(a){a.fnStateSaveCallback.call(a.oInstance,a,{})})});t("state.loaded()",function(){return this.context.length?this.context[0].oLoadedState:null});t("state.save()",function(){return this.iterator("table",function(a){Aa(a)})});q.versionCheck=q.fnVersionCheck=function(a){var b=q.version.split(".");a=a.split(".");for(var c,d,e=0,f=a.length;e<f;e++)if(c=parseInt(b[e],10)||0,d=parseInt(a[e],10)||0,c!==d)return c>d;return!0};q.isDataTable=q.fnIsDataTable=function(a){var b=f(a).get(0),c=!1;if(a instanceof
-q.Api)return!0;f.each(q.settings,function(a,e){a=e.nScrollHead?f("table",e.nScrollHead)[0]:null;var d=e.nScrollFoot?f("table",e.nScrollFoot)[0]:null;if(e.nTable===b||a===b||d===b)c=!0});return c};q.tables=q.fnTables=function(a){var b=!1;f.isPlainObject(a)&&(b=a.api,a=a.visible);var c=f.map(q.settings,function(b){if(!a||a&&f(b.nTable).is(":visible"))return b.nTable});return b?new x(c):c};q.camelToHungarian=L;t("$()",function(a,b){b=this.rows(b).nodes();b=f(b);return f([].concat(b.filter(a).toArray(),
-b.find(a).toArray()))});f.each(["on","one","off"],function(a,b){t(b+"()",function(){var a=Array.prototype.slice.call(arguments);a[0]=f.map(a[0].split(/\s/),function(a){return a.match(/\.dt\b/)?a:a+".dt"}).join(" ");var d=f(this.tables().nodes());d[b].apply(d,a);return this})});t("clear()",function(){return this.iterator("table",function(a){pa(a)})});t("settings()",function(){return new x(this.context,this.context)});t("init()",function(){var a=this.context;return a.length?a[0].oInit:null});t("data()",
-function(){return this.iterator("table",function(a){return K(a.aoData,"_aData")}).flatten()});t("destroy()",function(a){a=a||!1;return this.iterator("table",function(b){var c=b.nTableWrapper.parentNode,d=b.oClasses,e=b.nTable,h=b.nTBody,g=b.nTHead,k=b.nTFoot,l=f(e);h=f(h);var m=f(b.nTableWrapper),p=f.map(b.aoData,function(a){return a.nTr}),n;b.bDestroying=!0;A(b,"aoDestroyCallback","destroy",[b]);a||(new x(b)).columns().visible(!0);m.off(".DT").find(":not(tbody *)").off(".DT");f(y).off(".DT-"+b.sInstance);
-e!=g.parentNode&&(l.children("thead").detach(),l.append(g));k&&e!=k.parentNode&&(l.children("tfoot").detach(),l.append(k));b.aaSorting=[];b.aaSortingFixed=[];za(b);f(p).removeClass(b.asStripeClasses.join(" "));f("th, td",g).removeClass(d.sSortable+" "+d.sSortableAsc+" "+d.sSortableDesc+" "+d.sSortableNone);h.children().detach();h.append(p);g=a?"remove":"detach";l[g]();m[g]();!a&&c&&(c.insertBefore(e,b.nTableReinsertBefore),l.css("width",b.sDestroyWidth).removeClass(d.sTable),(n=b.asDestroyStripes.length)&&
-h.children().each(function(a){f(this).addClass(b.asDestroyStripes[a%n])}));c=f.inArray(b,q.settings);-1!==c&&q.settings.splice(c,1)})});f.each(["column","row","cell"],function(a,b){t(b+"s().every()",function(a){var c=this.selector.opts,e=this;return this.iterator(b,function(d,f,k,l,m){a.call(e[b](f,"cell"===b?k:c,"cell"===b?c:n),f,k,l,m)})})});t("i18n()",function(a,b,c){var d=this.context[0];a=T(a)(d.oLanguage);a===n&&(a=b);c!==n&&f.isPlainObject(a)&&(a=a[c]!==n?a[c]:a._);return a.replace("%d",c)});
-q.version="1.10.21";q.settings=[];q.models={};q.models.oSearch={bCaseInsensitive:!0,sSearch:"",bRegex:!1,bSmart:!0};q.models.oRow={nTr:null,anCells:null,_aData:[],_aSortData:null,_aFilterData:null,_sFilterRow:null,_sRowStripe:"",src:null,idx:-1};q.models.oColumn={idx:null,aDataSort:null,asSorting:null,bSearchable:null,bSortable:null,bVisible:null,_sManualType:null,_bAttrSrc:!1,fnCreatedCell:null,fnGetData:null,fnSetData:null,mData:null,mRender:null,nTh:null,nTf:null,sClass:null,sContentPadding:null,
-sDefaultContent:null,sName:null,sSortDataType:"std",sSortingClass:null,sSortingClassJUI:null,sTitle:null,sType:null,sWidth:null,sWidthOrig:null};q.defaults={aaData:null,aaSorting:[[0,"asc"]],aaSortingFixed:[],ajax:null,aLengthMenu:[10,25,50,100],aoColumns:null,aoColumnDefs:null,aoSearchCols:[],asStripeClasses:null,bAutoWidth:!0,bDeferRender:!1,bDestroy:!1,bFilter:!0,bInfo:!0,bLengthChange:!0,bPaginate:!0,bProcessing:!1,bRetrieve:!1,bScrollCollapse:!1,bServerSide:!1,bSort:!0,bSortMulti:!0,bSortCellsTop:!1,
-bSortClasses:!0,bStateSave:!1,fnCreatedRow:null,fnDrawCallback:null,fnFooterCallback:null,fnFormatNumber:function(a){return a.toString().replace(/\B(?=(\d{3})+(?!\d))/g,this.oLanguage.sThousands)},fnHeaderCallback:null,fnInfoCallback:null,fnInitComplete:null,fnPreDrawCallback:null,fnRowCallback:null,fnServerData:null,fnServerParams:null,fnStateLoadCallback:function(a){try{return JSON.parse((-1===a.iStateDuration?sessionStorage:localStorage).getItem("DataTables_"+a.sInstance+"_"+location.pathname))}catch(b){return{}}},
-fnStateLoadParams:null,fnStateLoaded:null,fnStateSaveCallback:function(a,b){try{(-1===a.iStateDuration?sessionStorage:localStorage).setItem("DataTables_"+a.sInstance+"_"+location.pathname,JSON.stringify(b))}catch(c){}},fnStateSaveParams:null,iStateDuration:7200,iDeferLoading:null,iDisplayLength:10,iDisplayStart:0,iTabIndex:0,oClasses:{},oLanguage:{oAria:{sSortAscending:": activate to sort column ascending",sSortDescending:": activate to sort column descending"},oPaginate:{sFirst:"First",sLast:"Last",
-sNext:"Next",sPrevious:"Previous"},sEmptyTable:"No data available in table",sInfo:"Showing _START_ to _END_ of _TOTAL_ entries",sInfoEmpty:"Showing 0 to 0 of 0 entries",sInfoFiltered:"(filtered from _MAX_ total entries)",sInfoPostFix:"",sDecimal:"",sThousands:",",sLengthMenu:"Show _MENU_ entries",sLoadingRecords:"Loading...",sProcessing:"Processing...",sSearch:"Search:",sSearchPlaceholder:"",sUrl:"",sZeroRecords:"No matching records found"},oSearch:f.extend({},q.models.oSearch),sAjaxDataProp:"data",
-sAjaxSource:null,sDom:"lfrtip",searchDelay:null,sPaginationType:"simple_numbers",sScrollX:"",sScrollXInner:"",sScrollY:"",sServerMethod:"GET",renderer:null,rowId:"DT_RowId"};H(q.defaults);q.defaults.column={aDataSort:null,iDataSort:-1,asSorting:["asc","desc"],bSearchable:!0,bSortable:!0,bVisible:!0,fnCreatedCell:null,mData:null,mRender:null,sCellType:"td",sClass:"",sContentPadding:"",sDefaultContent:null,sName:"",sSortDataType:"std",sTitle:null,sType:null,sWidth:null};H(q.defaults.column);q.models.oSettings=
-{oFeatures:{bAutoWidth:null,bDeferRender:null,bFilter:null,bInfo:null,bLengthChange:null,bPaginate:null,bProcessing:null,bServerSide:null,bSort:null,bSortMulti:null,bSortClasses:null,bStateSave:null},oScroll:{bCollapse:null,iBarWidth:0,sX:null,sXInner:null,sY:null},oLanguage:{fnInfoCallback:null},oBrowser:{bScrollOversize:!1,bScrollbarLeft:!1,bBounding:!1,barWidth:0},ajax:null,aanFeatures:[],aoData:[],aiDisplay:[],aiDisplayMaster:[],aIds:{},aoColumns:[],aoHeader:[],aoFooter:[],oPreviousSearch:{},
-aoPreSearchCols:[],aaSorting:null,aaSortingFixed:[],asStripeClasses:null,asDestroyStripes:[],sDestroyWidth:0,aoRowCallback:[],aoHeaderCallback:[],aoFooterCallback:[],aoDrawCallback:[],aoRowCreatedCallback:[],aoPreDrawCallback:[],aoInitComplete:[],aoStateSaveParams:[],aoStateLoadParams:[],aoStateLoaded:[],sTableId:"",nTable:null,nTHead:null,nTFoot:null,nTBody:null,nTableWrapper:null,bDeferLoading:!1,bInitialised:!1,aoOpenRows:[],sDom:null,searchDelay:null,sPaginationType:"two_button",iStateDuration:0,
-aoStateSave:[],aoStateLoad:[],oSavedState:null,oLoadedState:null,sAjaxSource:null,sAjaxDataProp:null,bAjaxDataGet:!0,jqXHR:null,json:n,oAjaxData:n,fnServerData:null,aoServerParams:[],sServerMethod:null,fnFormatNumber:null,aLengthMenu:null,iDraw:0,bDrawing:!1,iDrawError:-1,_iDisplayLength:10,_iDisplayStart:0,_iRecordsTotal:0,_iRecordsDisplay:0,oClasses:{},bFiltered:!1,bSorted:!1,bSortCellsTop:null,oInit:null,aoDestroyCallback:[],fnRecordsTotal:function(){return"ssp"==I(this)?1*this._iRecordsTotal:
-this.aiDisplayMaster.length},fnRecordsDisplay:function(){return"ssp"==I(this)?1*this._iRecordsDisplay:this.aiDisplay.length},fnDisplayEnd:function(){var a=this._iDisplayLength,b=this._iDisplayStart,c=b+a,d=this.aiDisplay.length,e=this.oFeatures,f=e.bPaginate;return e.bServerSide?!1===f||-1===a?b+d:Math.min(b+a,this._iRecordsDisplay):!f||c>d||-1===a?d:c},oInstance:null,sInstance:null,iTabIndex:0,nScrollHead:null,nScrollFoot:null,aLastSort:[],oPlugins:{},rowIdFn:null,rowId:null};q.ext=C={buttons:{},
-classes:{},builder:"-source-",errMode:"alert",feature:[],search:[],selector:{cell:[],column:[],row:[]},internal:{},legacy:{ajax:null},pager:{},renderer:{pageButton:{},header:{}},order:{},type:{detect:[],search:{},order:{}},_unique:0,fnVersionCheck:q.fnVersionCheck,iApiIndex:0,oJUIClasses:{},sVersion:q.version};f.extend(C,{afnFiltering:C.search,aTypes:C.type.detect,ofnSearch:C.type.search,oSort:C.type.order,afnSortData:C.order,aoFeatures:C.feature,oApi:C.internal,oStdClasses:C.classes,oPagination:C.pager});
-f.extend(q.ext.classes,{sTable:"dataTable",sNoFooter:"no-footer",sPageButton:"paginate_button",sPageButtonActive:"current",sPageButtonDisabled:"disabled",sStripeOdd:"odd",sStripeEven:"even",sRowEmpty:"dataTables_empty",sWrapper:"dataTables_wrapper",sFilter:"dataTables_filter",sInfo:"dataTables_info",sPaging:"dataTables_paginate paging_",sLength:"dataTables_length",sProcessing:"dataTables_processing",sSortAsc:"sorting_asc",sSortDesc:"sorting_desc",sSortable:"sorting",sSortableAsc:"sorting_asc_disabled",
-sSortableDesc:"sorting_desc_disabled",sSortableNone:"sorting_disabled",sSortColumn:"sorting_",sFilterInput:"",sLengthSelect:"",sScrollWrapper:"dataTables_scroll",sScrollHead:"dataTables_scrollHead",sScrollHeadInner:"dataTables_scrollHeadInner",sScrollBody:"dataTables_scrollBody",sScrollFoot:"dataTables_scrollFoot",sScrollFootInner:"dataTables_scrollFootInner",sHeaderTH:"",sFooterTH:"",sSortJUIAsc:"",sSortJUIDesc:"",sSortJUI:"",sSortJUIAscAllowed:"",sSortJUIDescAllowed:"",sSortJUIWrapper:"",sSortIcon:"",
-sJUIHeader:"",sJUIFooter:""});var Ob=q.ext.pager;f.extend(Ob,{simple:function(a,b){return["previous","next"]},full:function(a,b){return["first","previous","next","last"]},numbers:function(a,b){return[ja(a,b)]},simple_numbers:function(a,b){return["previous",ja(a,b),"next"]},full_numbers:function(a,b){return["first","previous",ja(a,b),"next","last"]},first_last_numbers:function(a,b){return["first",ja(a,b),"last"]},_numbers:ja,numbers_length:7});f.extend(!0,q.ext.renderer,{pageButton:{_:function(a,b,
-c,d,e,h){var g=a.oClasses,k=a.oLanguage.oPaginate,l=a.oLanguage.oAria.paginate||{},m,p,q=0,t=function(b,d){var n,r=g.sPageButtonDisabled,u=function(b){Wa(a,b.data.action,!0)};var w=0;for(n=d.length;w<n;w++){var v=d[w];if(f.isArray(v)){var x=f("<"+(v.DT_el||"div")+"/>").appendTo(b);t(x,v)}else{m=null;p=v;x=a.iTabIndex;switch(v){case "ellipsis":b.append('<span class="ellipsis">&#x2026;</span>');break;case "first":m=k.sFirst;0===e&&(x=-1,p+=" "+r);break;case "previous":m=k.sPrevious;0===e&&(x=-1,p+=
-" "+r);break;case "next":m=k.sNext;if(0===h||e===h-1)x=-1,p+=" "+r;break;case "last":m=k.sLast;e===h-1&&(x=-1,p+=" "+r);break;default:m=v+1,p=e===v?g.sPageButtonActive:""}null!==m&&(x=f("<a>",{"class":g.sPageButton+" "+p,"aria-controls":a.sTableId,"aria-label":l[v],"data-dt-idx":q,tabindex:x,id:0===c&&"string"===typeof v?a.sTableId+"_"+v:null}).html(m).appendTo(b),Za(x,{action:v},u),q++)}}};try{var x=f(b).find(w.activeElement).data("dt-idx")}catch(lc){}t(f(b).empty(),d);x!==n&&f(b).find("[data-dt-idx="+
-x+"]").trigger("focus")}}});f.extend(q.ext.type.detect,[function(a,b){b=b.oLanguage.sDecimal;return cb(a,b)?"num"+b:null},function(a,b){if(a&&!(a instanceof Date)&&!cc.test(a))return null;b=Date.parse(a);return null!==b&&!isNaN(b)||P(a)?"date":null},function(a,b){b=b.oLanguage.sDecimal;return cb(a,b,!0)?"num-fmt"+b:null},function(a,b){b=b.oLanguage.sDecimal;return Tb(a,b)?"html-num"+b:null},function(a,b){b=b.oLanguage.sDecimal;return Tb(a,b,!0)?"html-num-fmt"+b:null},function(a,b){return P(a)||"string"===
-typeof a&&-1!==a.indexOf("<")?"html":null}]);f.extend(q.ext.type.search,{html:function(a){return P(a)?a:"string"===typeof a?a.replace(Qb," ").replace(Da,""):""},string:function(a){return P(a)?a:"string"===typeof a?a.replace(Qb," "):a}});var Ca=function(a,b,c,d){if(0!==a&&(!a||"-"===a))return-Infinity;b&&(a=Sb(a,b));a.replace&&(c&&(a=a.replace(c,"")),d&&(a=a.replace(d,"")));return 1*a};f.extend(C.type.order,{"date-pre":function(a){a=Date.parse(a);return isNaN(a)?-Infinity:a},"html-pre":function(a){return P(a)?
-"":a.replace?a.replace(/<.*?>/g,"").toLowerCase():a+""},"string-pre":function(a){return P(a)?"":"string"===typeof a?a.toLowerCase():a.toString?a.toString():""},"string-asc":function(a,b){return a<b?-1:a>b?1:0},"string-desc":function(a,b){return a<b?1:a>b?-1:0}});Ga("");f.extend(!0,q.ext.renderer,{header:{_:function(a,b,c,d){f(a.nTable).on("order.dt.DT",function(e,f,g,k){a===f&&(e=c.idx,b.removeClass(c.sSortingClass+" "+d.sSortAsc+" "+d.sSortDesc).addClass("asc"==k[e]?d.sSortAsc:"desc"==k[e]?d.sSortDesc:
-c.sSortingClass))})},jqueryui:function(a,b,c,d){f("<div/>").addClass(d.sSortJUIWrapper).append(b.contents()).append(f("<span/>").addClass(d.sSortIcon+" "+c.sSortingClassJUI)).appendTo(b);f(a.nTable).on("order.dt.DT",function(e,f,g,k){a===f&&(e=c.idx,b.removeClass(d.sSortAsc+" "+d.sSortDesc).addClass("asc"==k[e]?d.sSortAsc:"desc"==k[e]?d.sSortDesc:c.sSortingClass),b.find("span."+d.sSortIcon).removeClass(d.sSortJUIAsc+" "+d.sSortJUIDesc+" "+d.sSortJUI+" "+d.sSortJUIAscAllowed+" "+d.sSortJUIDescAllowed).addClass("asc"==
-k[e]?d.sSortJUIAsc:"desc"==k[e]?d.sSortJUIDesc:c.sSortingClassJUI))})}}});var hb=function(a){return"string"===typeof a?a.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;"):a};q.render={number:function(a,b,c,d,e){return{display:function(f){if("number"!==typeof f&&"string"!==typeof f)return f;var g=0>f?"-":"",h=parseFloat(f);if(isNaN(h))return hb(f);h=h.toFixed(c);f=Math.abs(h);h=parseInt(f,10);f=c?b+(f-h).toFixed(c).substring(2):"";return g+(d||"")+h.toString().replace(/\B(?=(\d{3})+(?!\d))/g,
-a)+f+(e||"")}}},text:function(){return{display:hb,filter:hb}}};f.extend(q.ext.internal,{_fnExternApiFunc:Pb,_fnBuildAjax:ua,_fnAjaxUpdate:pb,_fnAjaxParameters:yb,_fnAjaxUpdateDraw:zb,_fnAjaxDataSrc:va,_fnAddColumn:Ha,_fnColumnOptions:la,_fnAdjustColumnSizing:Z,_fnVisibleToColumnIndex:aa,_fnColumnIndexToVisible:ba,_fnVisbleColumns:V,_fnGetColumns:na,_fnColumnTypes:Ja,_fnApplyColumnDefs:mb,_fnHungarianMap:H,_fnCamelToHungarian:L,_fnLanguageCompat:Fa,_fnBrowserDetect:kb,_fnAddData:R,_fnAddTr:oa,_fnNodeToDataIndex:function(a,
-b){return b._DT_RowIndex!==n?b._DT_RowIndex:null},_fnNodeToColumnIndex:function(a,b,c){return f.inArray(c,a.aoData[b].anCells)},_fnGetCellData:F,_fnSetCellData:nb,_fnSplitObjNotation:Ma,_fnGetObjectDataFn:T,_fnSetObjectDataFn:Q,_fnGetDataMaster:Na,_fnClearTable:pa,_fnDeleteIndex:qa,_fnInvalidate:da,_fnGetRowElements:La,_fnCreateTr:Ka,_fnBuildHead:ob,_fnDrawHead:fa,_fnDraw:S,_fnReDraw:U,_fnAddOptionsHtml:rb,_fnDetectHeader:ea,_fnGetUniqueThs:ta,_fnFeatureHtmlFilter:tb,_fnFilterComplete:ha,_fnFilterCustom:Cb,
-_fnFilterColumn:Bb,_fnFilter:Ab,_fnFilterCreateSearch:Sa,_fnEscapeRegex:Ta,_fnFilterData:Db,_fnFeatureHtmlInfo:wb,_fnUpdateInfo:Gb,_fnInfoMacros:Hb,_fnInitialise:ia,_fnInitComplete:wa,_fnLengthChange:Ua,_fnFeatureHtmlLength:sb,_fnFeatureHtmlPaginate:xb,_fnPageChange:Wa,_fnFeatureHtmlProcessing:ub,_fnProcessingDisplay:J,_fnFeatureHtmlTable:vb,_fnScrollDraw:ma,_fnApplyToChildren:N,_fnCalculateColumnWidths:Ia,_fnThrottle:Ra,_fnConvertToWidth:Ib,_fnGetWidestNode:Jb,_fnGetMaxLenString:Kb,_fnStringToCss:B,
-_fnSortFlatten:X,_fnSort:qb,_fnSortAria:Mb,_fnSortListener:Ya,_fnSortAttachListener:Pa,_fnSortingClasses:za,_fnSortData:Lb,_fnSaveState:Aa,_fnLoadState:Nb,_fnSettingsFromNode:Ba,_fnLog:O,_fnMap:M,_fnBindAction:Za,_fnCallbackReg:D,_fnCallbackFire:A,_fnLengthOverflow:Va,_fnRenderer:Qa,_fnDataSource:I,_fnRowAttributes:Oa,_fnExtend:$a,_fnCalculateEnd:function(){}});f.fn.dataTable=q;q.$=f;f.fn.dataTableSettings=q.settings;f.fn.dataTableExt=q.ext;f.fn.DataTable=function(a){return f(this).dataTable(a).api()};
-f.each(q,function(a,b){f.fn.DataTable[a]=b});return f.fn.dataTable});
diff --git a/DataTables/Responsive-2.2.5/css/responsive.bootstrap.css b/DataTables/Responsive-2.2.5/css/responsive.bootstrap.css
deleted file mode 100644
index 523cd69..0000000
--- a/DataTables/Responsive-2.2.5/css/responsive.bootstrap.css
+++ /dev/null
@@ -1,180 +0,0 @@
-table.dataTable.dtr-inline.collapsed > tbody > tr > td.child,
-table.dataTable.dtr-inline.collapsed > tbody > tr > th.child,
-table.dataTable.dtr-inline.collapsed > tbody > tr > td.dataTables_empty {
-  cursor: default !important;
-}
-table.dataTable.dtr-inline.collapsed > tbody > tr > td.child:before,
-table.dataTable.dtr-inline.collapsed > tbody > tr > th.child:before,
-table.dataTable.dtr-inline.collapsed > tbody > tr > td.dataTables_empty:before {
-  display: none !important;
-}
-table.dataTable.dtr-inline.collapsed > tbody > tr[role="row"] > td.dtr-control,
-table.dataTable.dtr-inline.collapsed > tbody > tr[role="row"] > th.dtr-control {
-  position: relative;
-  padding-left: 30px;
-  cursor: pointer;
-}
-table.dataTable.dtr-inline.collapsed > tbody > tr[role="row"] > td.dtr-control:before,
-table.dataTable.dtr-inline.collapsed > tbody > tr[role="row"] > th.dtr-control:before {
-  top: 50%;
-  left: 5px;
-  height: 14px;
-  width: 14px;
-  margin-top: -9px;
-  display: block;
-  position: absolute;
-  color: white;
-  border: 2px solid white;
-  border-radius: 14px;
-  box-shadow: 0 0 3px #444;
-  box-sizing: content-box;
-  text-align: center;
-  text-indent: 0 !important;
-  font-family: 'Courier New', Courier, monospace;
-  line-height: 14px;
-  content: '+';
-  background-color: #337ab7;
-}
-table.dataTable.dtr-inline.collapsed > tbody > tr.parent > td.dtr-control:before,
-table.dataTable.dtr-inline.collapsed > tbody > tr.parent > th.dtr-control:before {
-  content: '-';
-  background-color: #d33333;
-}
-table.dataTable.dtr-inline.collapsed.compact > tbody > tr > td.dtr-control,
-table.dataTable.dtr-inline.collapsed.compact > tbody > tr > th.dtr-control {
-  padding-left: 27px;
-}
-table.dataTable.dtr-inline.collapsed.compact > tbody > tr > td.dtr-control:before,
-table.dataTable.dtr-inline.collapsed.compact > tbody > tr > th.dtr-control:before {
-  left: 4px;
-  height: 14px;
-  width: 14px;
-  border-radius: 14px;
-  line-height: 14px;
-  text-indent: 3px;
-}
-table.dataTable.dtr-column > tbody > tr > td.control,
-table.dataTable.dtr-column > tbody > tr > th.control {
-  position: relative;
-  cursor: pointer;
-}
-table.dataTable.dtr-column > tbody > tr > td.control:before,
-table.dataTable.dtr-column > tbody > tr > th.control:before {
-  top: 50%;
-  left: 50%;
-  height: 16px;
-  width: 16px;
-  margin-top: -10px;
-  margin-left: -10px;
-  display: block;
-  position: absolute;
-  color: white;
-  border: 2px solid white;
-  border-radius: 14px;
-  box-shadow: 0 0 3px #444;
-  box-sizing: content-box;
-  text-align: center;
-  text-indent: 0 !important;
-  font-family: 'Courier New', Courier, monospace;
-  line-height: 14px;
-  content: '+';
-  background-color: #337ab7;
-}
-table.dataTable.dtr-column > tbody > tr.parent td.control:before,
-table.dataTable.dtr-column > tbody > tr.parent th.control:before {
-  content: '-';
-  background-color: #d33333;
-}
-table.dataTable > tbody > tr.child {
-  padding: 0.5em 1em;
-}
-table.dataTable > tbody > tr.child:hover {
-  background: transparent !important;
-}
-table.dataTable > tbody > tr.child ul.dtr-details {
-  display: inline-block;
-  list-style-type: none;
-  margin: 0;
-  padding: 0;
-}
-table.dataTable > tbody > tr.child ul.dtr-details > li {
-  border-bottom: 1px solid #efefef;
-  padding: 0.5em 0;
-}
-table.dataTable > tbody > tr.child ul.dtr-details > li:first-child {
-  padding-top: 0;
-}
-table.dataTable > tbody > tr.child ul.dtr-details > li:last-child {
-  border-bottom: none;
-}
-table.dataTable > tbody > tr.child span.dtr-title {
-  display: inline-block;
-  min-width: 75px;
-  font-weight: bold;
-}
-
-div.dtr-modal {
-  position: fixed;
-  box-sizing: border-box;
-  top: 0;
-  left: 0;
-  height: 100%;
-  width: 100%;
-  z-index: 100;
-  padding: 10em 1em;
-}
-div.dtr-modal div.dtr-modal-display {
-  position: absolute;
-  top: 0;
-  left: 0;
-  bottom: 0;
-  right: 0;
-  width: 50%;
-  height: 50%;
-  overflow: auto;
-  margin: auto;
-  z-index: 102;
-  overflow: auto;
-  background-color: #f5f5f7;
-  border: 1px solid black;
-  border-radius: 0.5em;
-  box-shadow: 0 12px 30px rgba(0, 0, 0, 0.6);
-}
-div.dtr-modal div.dtr-modal-content {
-  position: relative;
-  padding: 1em;
-}
-div.dtr-modal div.dtr-modal-close {
-  position: absolute;
-  top: 6px;
-  right: 6px;
-  width: 22px;
-  height: 22px;
-  border: 1px solid #eaeaea;
-  background-color: #f9f9f9;
-  text-align: center;
-  border-radius: 3px;
-  cursor: pointer;
-  z-index: 12;
-}
-div.dtr-modal div.dtr-modal-close:hover {
-  background-color: #eaeaea;
-}
-div.dtr-modal div.dtr-modal-background {
-  position: fixed;
-  top: 0;
-  left: 0;
-  right: 0;
-  bottom: 0;
-  z-index: 101;
-  background: rgba(0, 0, 0, 0.6);
-}
-
-@media screen and (max-width: 767px) {
-  div.dtr-modal div.dtr-modal-display {
-    width: 95%;
-  }
-}
-div.dtr-bs-modal table.table tr:first-child td {
-  border-top: none;
-}
diff --git a/DataTables/Responsive-2.2.5/css/responsive.bootstrap.min.css b/DataTables/Responsive-2.2.5/css/responsive.bootstrap.min.css
deleted file mode 100644
index 0c1d371..0000000
--- a/DataTables/Responsive-2.2.5/css/responsive.bootstrap.min.css
+++ /dev/null
@@ -1 +0,0 @@
-table.dataTable.dtr-inline.collapsed>tbody>tr>td.child,table.dataTable.dtr-inline.collapsed>tbody>tr>th.child,table.dataTable.dtr-inline.collapsed>tbody>tr>td.dataTables_empty{cursor:default !important}table.dataTable.dtr-inline.collapsed>tbody>tr>td.child:before,table.dataTable.dtr-inline.collapsed>tbody>tr>th.child:before,table.dataTable.dtr-inline.collapsed>tbody>tr>td.dataTables_empty:before{display:none !important}table.dataTable.dtr-inline.collapsed>tbody>tr[role="row"]>td.dtr-control,table.dataTable.dtr-inline.collapsed>tbody>tr[role="row"]>th.dtr-control{position:relative;padding-left:30px;cursor:pointer}table.dataTable.dtr-inline.collapsed>tbody>tr[role="row"]>td.dtr-control:before,table.dataTable.dtr-inline.collapsed>tbody>tr[role="row"]>th.dtr-control:before{top:50%;left:5px;height:14px;width:14px;margin-top:-9px;display:block;position:absolute;color:white;border:2px solid white;border-radius:14px;box-shadow:0 0 3px #444;box-sizing:content-box;text-align:center;text-indent:0 !important;font-family:'Courier New', Courier, monospace;line-height:14px;content:'+';background-color:#337ab7}table.dataTable.dtr-inline.collapsed>tbody>tr.parent>td.dtr-control:before,table.dataTable.dtr-inline.collapsed>tbody>tr.parent>th.dtr-control:before{content:'-';background-color:#d33333}table.dataTable.dtr-inline.collapsed.compact>tbody>tr>td.dtr-control,table.dataTable.dtr-inline.collapsed.compact>tbody>tr>th.dtr-control{padding-left:27px}table.dataTable.dtr-inline.collapsed.compact>tbody>tr>td.dtr-control:before,table.dataTable.dtr-inline.collapsed.compact>tbody>tr>th.dtr-control:before{left:4px;height:14px;width:14px;border-radius:14px;line-height:14px;text-indent:3px}table.dataTable.dtr-column>tbody>tr>td.control,table.dataTable.dtr-column>tbody>tr>th.control{position:relative;cursor:pointer}table.dataTable.dtr-column>tbody>tr>td.control:before,table.dataTable.dtr-column>tbody>tr>th.control:before{top:50%;left:50%;height:16px;width:16px;margin-top:-10px;margin-left:-10px;display:block;position:absolute;color:white;border:2px solid white;border-radius:14px;box-shadow:0 0 3px #444;box-sizing:content-box;text-align:center;text-indent:0 !important;font-family:'Courier New', Courier, monospace;line-height:14px;content:'+';background-color:#337ab7}table.dataTable.dtr-column>tbody>tr.parent td.control:before,table.dataTable.dtr-column>tbody>tr.parent th.control:before{content:'-';background-color:#d33333}table.dataTable>tbody>tr.child{padding:0.5em 1em}table.dataTable>tbody>tr.child:hover{background:transparent !important}table.dataTable>tbody>tr.child ul.dtr-details{display:inline-block;list-style-type:none;margin:0;padding:0}table.dataTable>tbody>tr.child ul.dtr-details>li{border-bottom:1px solid #efefef;padding:0.5em 0}table.dataTable>tbody>tr.child ul.dtr-details>li:first-child{padding-top:0}table.dataTable>tbody>tr.child ul.dtr-details>li:last-child{border-bottom:none}table.dataTable>tbody>tr.child span.dtr-title{display:inline-block;min-width:75px;font-weight:bold}div.dtr-modal{position:fixed;box-sizing:border-box;top:0;left:0;height:100%;width:100%;z-index:100;padding:10em 1em}div.dtr-modal div.dtr-modal-display{position:absolute;top:0;left:0;bottom:0;right:0;width:50%;height:50%;overflow:auto;margin:auto;z-index:102;overflow:auto;background-color:#f5f5f7;border:1px solid black;border-radius:0.5em;box-shadow:0 12px 30px rgba(0,0,0,0.6)}div.dtr-modal div.dtr-modal-content{position:relative;padding:1em}div.dtr-modal div.dtr-modal-close{position:absolute;top:6px;right:6px;width:22px;height:22px;border:1px solid #eaeaea;background-color:#f9f9f9;text-align:center;border-radius:3px;cursor:pointer;z-index:12}div.dtr-modal div.dtr-modal-close:hover{background-color:#eaeaea}div.dtr-modal div.dtr-modal-background{position:fixed;top:0;left:0;right:0;bottom:0;z-index:101;background:rgba(0,0,0,0.6)}@media screen and (max-width: 767px){div.dtr-modal div.dtr-modal-display{width:95%}}div.dtr-bs-modal table.table tr:first-child td{border-top:none}
diff --git a/DataTables/Responsive-2.2.5/css/responsive.bootstrap4.css b/DataTables/Responsive-2.2.5/css/responsive.bootstrap4.css
deleted file mode 100644
index 6641836..0000000
--- a/DataTables/Responsive-2.2.5/css/responsive.bootstrap4.css
+++ /dev/null
@@ -1,185 +0,0 @@
-table.dataTable.dtr-inline.collapsed > tbody > tr > td.child,
-table.dataTable.dtr-inline.collapsed > tbody > tr > th.child,
-table.dataTable.dtr-inline.collapsed > tbody > tr > td.dataTables_empty {
-  cursor: default !important;
-}
-table.dataTable.dtr-inline.collapsed > tbody > tr > td.child:before,
-table.dataTable.dtr-inline.collapsed > tbody > tr > th.child:before,
-table.dataTable.dtr-inline.collapsed > tbody > tr > td.dataTables_empty:before {
-  display: none !important;
-}
-table.dataTable.dtr-inline.collapsed > tbody > tr[role="row"] > td.dtr-control,
-table.dataTable.dtr-inline.collapsed > tbody > tr[role="row"] > th.dtr-control {
-  position: relative;
-  padding-left: 30px;
-  cursor: pointer;
-}
-table.dataTable.dtr-inline.collapsed > tbody > tr[role="row"] > td.dtr-control:before,
-table.dataTable.dtr-inline.collapsed > tbody > tr[role="row"] > th.dtr-control:before {
-  top: 50%;
-  left: 5px;
-  height: 14px;
-  width: 14px;
-  margin-top: -9px;
-  display: block;
-  position: absolute;
-  color: white;
-  border: 2px solid white;
-  border-radius: 14px;
-  box-shadow: 0 0 3px #444;
-  box-sizing: content-box;
-  text-align: center;
-  text-indent: 0 !important;
-  font-family: 'Courier New', Courier, monospace;
-  line-height: 14px;
-  content: '+';
-  background-color: #0275d8;
-}
-table.dataTable.dtr-inline.collapsed > tbody > tr.parent > td.dtr-control:before,
-table.dataTable.dtr-inline.collapsed > tbody > tr.parent > th.dtr-control:before {
-  content: '-';
-  background-color: #d33333;
-}
-table.dataTable.dtr-inline.collapsed.compact > tbody > tr > td.dtr-control,
-table.dataTable.dtr-inline.collapsed.compact > tbody > tr > th.dtr-control {
-  padding-left: 27px;
-}
-table.dataTable.dtr-inline.collapsed.compact > tbody > tr > td.dtr-control:before,
-table.dataTable.dtr-inline.collapsed.compact > tbody > tr > th.dtr-control:before {
-  left: 4px;
-  height: 14px;
-  width: 14px;
-  border-radius: 14px;
-  line-height: 14px;
-  text-indent: 3px;
-}
-table.dataTable.dtr-column > tbody > tr > td.control,
-table.dataTable.dtr-column > tbody > tr > th.control {
-  position: relative;
-  cursor: pointer;
-}
-table.dataTable.dtr-column > tbody > tr > td.control:before,
-table.dataTable.dtr-column > tbody > tr > th.control:before {
-  top: 50%;
-  left: 50%;
-  height: 16px;
-  width: 16px;
-  margin-top: -10px;
-  margin-left: -10px;
-  display: block;
-  position: absolute;
-  color: white;
-  border: 2px solid white;
-  border-radius: 14px;
-  box-shadow: 0 0 3px #444;
-  box-sizing: content-box;
-  text-align: center;
-  text-indent: 0 !important;
-  font-family: 'Courier New', Courier, monospace;
-  line-height: 14px;
-  content: '+';
-  background-color: #0275d8;
-}
-table.dataTable.dtr-column > tbody > tr.parent td.control:before,
-table.dataTable.dtr-column > tbody > tr.parent th.control:before {
-  content: '-';
-  background-color: #d33333;
-}
-table.dataTable > tbody > tr.child {
-  padding: 0.5em 1em;
-}
-table.dataTable > tbody > tr.child:hover {
-  background: transparent !important;
-}
-table.dataTable > tbody > tr.child ul.dtr-details {
-  display: inline-block;
-  list-style-type: none;
-  margin: 0;
-  padding: 0;
-}
-table.dataTable > tbody > tr.child ul.dtr-details > li {
-  border-bottom: 1px solid #efefef;
-  padding: 0.5em 0;
-}
-table.dataTable > tbody > tr.child ul.dtr-details > li:first-child {
-  padding-top: 0;
-}
-table.dataTable > tbody > tr.child ul.dtr-details > li:last-child {
-  border-bottom: none;
-}
-table.dataTable > tbody > tr.child span.dtr-title {
-  display: inline-block;
-  min-width: 75px;
-  font-weight: bold;
-}
-
-div.dtr-modal {
-  position: fixed;
-  box-sizing: border-box;
-  top: 0;
-  left: 0;
-  height: 100%;
-  width: 100%;
-  z-index: 100;
-  padding: 10em 1em;
-}
-div.dtr-modal div.dtr-modal-display {
-  position: absolute;
-  top: 0;
-  left: 0;
-  bottom: 0;
-  right: 0;
-  width: 50%;
-  height: 50%;
-  overflow: auto;
-  margin: auto;
-  z-index: 102;
-  overflow: auto;
-  background-color: #f5f5f7;
-  border: 1px solid black;
-  border-radius: 0.5em;
-  box-shadow: 0 12px 30px rgba(0, 0, 0, 0.6);
-}
-div.dtr-modal div.dtr-modal-content {
-  position: relative;
-  padding: 1em;
-}
-div.dtr-modal div.dtr-modal-close {
-  position: absolute;
-  top: 6px;
-  right: 6px;
-  width: 22px;
-  height: 22px;
-  border: 1px solid #eaeaea;
-  background-color: #f9f9f9;
-  text-align: center;
-  border-radius: 3px;
-  cursor: pointer;
-  z-index: 12;
-}
-div.dtr-modal div.dtr-modal-close:hover {
-  background-color: #eaeaea;
-}
-div.dtr-modal div.dtr-modal-background {
-  position: fixed;
-  top: 0;
-  left: 0;
-  right: 0;
-  bottom: 0;
-  z-index: 101;
-  background: rgba(0, 0, 0, 0.6);
-}
-
-@media screen and (max-width: 767px) {
-  div.dtr-modal div.dtr-modal-display {
-    width: 95%;
-  }
-}
-div.dtr-bs-modal table.table tr:first-child td {
-  border-top: none;
-}
-
-table.dataTable.dtr-inline.collapsed.table-sm > tbody > tr > td:first-child:before,
-table.dataTable.dtr-inline.collapsed.table-sm > tbody > tr > th:first-child:before {
-  top: 5px;
-}
diff --git a/DataTables/Responsive-2.2.5/css/responsive.bootstrap4.min.css b/DataTables/Responsive-2.2.5/css/responsive.bootstrap4.min.css
deleted file mode 100644
index c6555ab..0000000
--- a/DataTables/Responsive-2.2.5/css/responsive.bootstrap4.min.css
+++ /dev/null
@@ -1 +0,0 @@
-table.dataTable.dtr-inline.collapsed>tbody>tr>td.child,table.dataTable.dtr-inline.collapsed>tbody>tr>th.child,table.dataTable.dtr-inline.collapsed>tbody>tr>td.dataTables_empty{cursor:default !important}table.dataTable.dtr-inline.collapsed>tbody>tr>td.child:before,table.dataTable.dtr-inline.collapsed>tbody>tr>th.child:before,table.dataTable.dtr-inline.collapsed>tbody>tr>td.dataTables_empty:before{display:none !important}table.dataTable.dtr-inline.collapsed>tbody>tr[role="row"]>td.dtr-control,table.dataTable.dtr-inline.collapsed>tbody>tr[role="row"]>th.dtr-control{position:relative;padding-left:30px;cursor:pointer}table.dataTable.dtr-inline.collapsed>tbody>tr[role="row"]>td.dtr-control:before,table.dataTable.dtr-inline.collapsed>tbody>tr[role="row"]>th.dtr-control:before{top:50%;left:5px;height:14px;width:14px;margin-top:-9px;display:block;position:absolute;color:white;border:2px solid white;border-radius:14px;box-shadow:0 0 3px #444;box-sizing:content-box;text-align:center;text-indent:0 !important;font-family:'Courier New', Courier, monospace;line-height:14px;content:'+';background-color:#0275d8}table.dataTable.dtr-inline.collapsed>tbody>tr.parent>td.dtr-control:before,table.dataTable.dtr-inline.collapsed>tbody>tr.parent>th.dtr-control:before{content:'-';background-color:#d33333}table.dataTable.dtr-inline.collapsed.compact>tbody>tr>td.dtr-control,table.dataTable.dtr-inline.collapsed.compact>tbody>tr>th.dtr-control{padding-left:27px}table.dataTable.dtr-inline.collapsed.compact>tbody>tr>td.dtr-control:before,table.dataTable.dtr-inline.collapsed.compact>tbody>tr>th.dtr-control:before{left:4px;height:14px;width:14px;border-radius:14px;line-height:14px;text-indent:3px}table.dataTable.dtr-column>tbody>tr>td.control,table.dataTable.dtr-column>tbody>tr>th.control{position:relative;cursor:pointer}table.dataTable.dtr-column>tbody>tr>td.control:before,table.dataTable.dtr-column>tbody>tr>th.control:before{top:50%;left:50%;height:16px;width:16px;margin-top:-10px;margin-left:-10px;display:block;position:absolute;color:white;border:2px solid white;border-radius:14px;box-shadow:0 0 3px #444;box-sizing:content-box;text-align:center;text-indent:0 !important;font-family:'Courier New', Courier, monospace;line-height:14px;content:'+';background-color:#0275d8}table.dataTable.dtr-column>tbody>tr.parent td.control:before,table.dataTable.dtr-column>tbody>tr.parent th.control:before{content:'-';background-color:#d33333}table.dataTable>tbody>tr.child{padding:0.5em 1em}table.dataTable>tbody>tr.child:hover{background:transparent !important}table.dataTable>tbody>tr.child ul.dtr-details{display:inline-block;list-style-type:none;margin:0;padding:0}table.dataTable>tbody>tr.child ul.dtr-details>li{border-bottom:1px solid #efefef;padding:0.5em 0}table.dataTable>tbody>tr.child ul.dtr-details>li:first-child{padding-top:0}table.dataTable>tbody>tr.child ul.dtr-details>li:last-child{border-bottom:none}table.dataTable>tbody>tr.child span.dtr-title{display:inline-block;min-width:75px;font-weight:bold}div.dtr-modal{position:fixed;box-sizing:border-box;top:0;left:0;height:100%;width:100%;z-index:100;padding:10em 1em}div.dtr-modal div.dtr-modal-display{position:absolute;top:0;left:0;bottom:0;right:0;width:50%;height:50%;overflow:auto;margin:auto;z-index:102;overflow:auto;background-color:#f5f5f7;border:1px solid black;border-radius:0.5em;box-shadow:0 12px 30px rgba(0,0,0,0.6)}div.dtr-modal div.dtr-modal-content{position:relative;padding:1em}div.dtr-modal div.dtr-modal-close{position:absolute;top:6px;right:6px;width:22px;height:22px;border:1px solid #eaeaea;background-color:#f9f9f9;text-align:center;border-radius:3px;cursor:pointer;z-index:12}div.dtr-modal div.dtr-modal-close:hover{background-color:#eaeaea}div.dtr-modal div.dtr-modal-background{position:fixed;top:0;left:0;right:0;bottom:0;z-index:101;background:rgba(0,0,0,0.6)}@media screen and (max-width: 767px){div.dtr-modal div.dtr-modal-display{width:95%}}div.dtr-bs-modal table.table tr:first-child td{border-top:none}table.dataTable.dtr-inline.collapsed.table-sm>tbody>tr>td:first-child:before,table.dataTable.dtr-inline.collapsed.table-sm>tbody>tr>th:first-child:before{top:5px}
diff --git a/DataTables/Responsive-2.2.5/css/responsive.dataTables.css b/DataTables/Responsive-2.2.5/css/responsive.dataTables.css
deleted file mode 100644
index 1ff5142..0000000
--- a/DataTables/Responsive-2.2.5/css/responsive.dataTables.css
+++ /dev/null
@@ -1,177 +0,0 @@
-table.dataTable.dtr-inline.collapsed > tbody > tr > td.child,
-table.dataTable.dtr-inline.collapsed > tbody > tr > th.child,
-table.dataTable.dtr-inline.collapsed > tbody > tr > td.dataTables_empty {
-  cursor: default !important;
-}
-table.dataTable.dtr-inline.collapsed > tbody > tr > td.child:before,
-table.dataTable.dtr-inline.collapsed > tbody > tr > th.child:before,
-table.dataTable.dtr-inline.collapsed > tbody > tr > td.dataTables_empty:before {
-  display: none !important;
-}
-table.dataTable.dtr-inline.collapsed > tbody > tr[role="row"] > td.dtr-control,
-table.dataTable.dtr-inline.collapsed > tbody > tr[role="row"] > th.dtr-control {
-  position: relative;
-  padding-left: 30px;
-  cursor: pointer;
-}
-table.dataTable.dtr-inline.collapsed > tbody > tr[role="row"] > td.dtr-control:before,
-table.dataTable.dtr-inline.collapsed > tbody > tr[role="row"] > th.dtr-control:before {
-  top: 50%;
-  left: 5px;
-  height: 14px;
-  width: 14px;
-  margin-top: -9px;
-  display: block;
-  position: absolute;
-  color: white;
-  border: 2px solid white;
-  border-radius: 14px;
-  box-shadow: 0 0 3px #444;
-  box-sizing: content-box;
-  text-align: center;
-  text-indent: 0 !important;
-  font-family: 'Courier New', Courier, monospace;
-  line-height: 14px;
-  content: '+';
-  background-color: #31b131;
-}
-table.dataTable.dtr-inline.collapsed > tbody > tr.parent > td.dtr-control:before,
-table.dataTable.dtr-inline.collapsed > tbody > tr.parent > th.dtr-control:before {
-  content: '-';
-  background-color: #d33333;
-}
-table.dataTable.dtr-inline.collapsed.compact > tbody > tr > td.dtr-control,
-table.dataTable.dtr-inline.collapsed.compact > tbody > tr > th.dtr-control {
-  padding-left: 27px;
-}
-table.dataTable.dtr-inline.collapsed.compact > tbody > tr > td.dtr-control:before,
-table.dataTable.dtr-inline.collapsed.compact > tbody > tr > th.dtr-control:before {
-  left: 4px;
-  height: 14px;
-  width: 14px;
-  border-radius: 14px;
-  line-height: 14px;
-  text-indent: 3px;
-}
-table.dataTable.dtr-column > tbody > tr > td.control,
-table.dataTable.dtr-column > tbody > tr > th.control {
-  position: relative;
-  cursor: pointer;
-}
-table.dataTable.dtr-column > tbody > tr > td.control:before,
-table.dataTable.dtr-column > tbody > tr > th.control:before {
-  top: 50%;
-  left: 50%;
-  height: 16px;
-  width: 16px;
-  margin-top: -10px;
-  margin-left: -10px;
-  display: block;
-  position: absolute;
-  color: white;
-  border: 2px solid white;
-  border-radius: 14px;
-  box-shadow: 0 0 3px #444;
-  box-sizing: content-box;
-  text-align: center;
-  text-indent: 0 !important;
-  font-family: 'Courier New', Courier, monospace;
-  line-height: 14px;
-  content: '+';
-  background-color: #31b131;
-}
-table.dataTable.dtr-column > tbody > tr.parent td.control:before,
-table.dataTable.dtr-column > tbody > tr.parent th.control:before {
-  content: '-';
-  background-color: #d33333;
-}
-table.dataTable > tbody > tr.child {
-  padding: 0.5em 1em;
-}
-table.dataTable > tbody > tr.child:hover {
-  background: transparent !important;
-}
-table.dataTable > tbody > tr.child ul.dtr-details {
-  display: inline-block;
-  list-style-type: none;
-  margin: 0;
-  padding: 0;
-}
-table.dataTable > tbody > tr.child ul.dtr-details > li {
-  border-bottom: 1px solid #efefef;
-  padding: 0.5em 0;
-}
-table.dataTable > tbody > tr.child ul.dtr-details > li:first-child {
-  padding-top: 0;
-}
-table.dataTable > tbody > tr.child ul.dtr-details > li:last-child {
-  border-bottom: none;
-}
-table.dataTable > tbody > tr.child span.dtr-title {
-  display: inline-block;
-  min-width: 75px;
-  font-weight: bold;
-}
-
-div.dtr-modal {
-  position: fixed;
-  box-sizing: border-box;
-  top: 0;
-  left: 0;
-  height: 100%;
-  width: 100%;
-  z-index: 100;
-  padding: 10em 1em;
-}
-div.dtr-modal div.dtr-modal-display {
-  position: absolute;
-  top: 0;
-  left: 0;
-  bottom: 0;
-  right: 0;
-  width: 50%;
-  height: 50%;
-  overflow: auto;
-  margin: auto;
-  z-index: 102;
-  overflow: auto;
-  background-color: #f5f5f7;
-  border: 1px solid black;
-  border-radius: 0.5em;
-  box-shadow: 0 12px 30px rgba(0, 0, 0, 0.6);
-}
-div.dtr-modal div.dtr-modal-content {
-  position: relative;
-  padding: 1em;
-}
-div.dtr-modal div.dtr-modal-close {
-  position: absolute;
-  top: 6px;
-  right: 6px;
-  width: 22px;
-  height: 22px;
-  border: 1px solid #eaeaea;
-  background-color: #f9f9f9;
-  text-align: center;
-  border-radius: 3px;
-  cursor: pointer;
-  z-index: 12;
-}
-div.dtr-modal div.dtr-modal-close:hover {
-  background-color: #eaeaea;
-}
-div.dtr-modal div.dtr-modal-background {
-  position: fixed;
-  top: 0;
-  left: 0;
-  right: 0;
-  bottom: 0;
-  z-index: 101;
-  background: rgba(0, 0, 0, 0.6);
-}
-
-@media screen and (max-width: 767px) {
-  div.dtr-modal div.dtr-modal-display {
-    width: 95%;
-  }
-}
diff --git a/DataTables/Responsive-2.2.5/css/responsive.dataTables.min.css b/DataTables/Responsive-2.2.5/css/responsive.dataTables.min.css
deleted file mode 100644
index 477250e..0000000
--- a/DataTables/Responsive-2.2.5/css/responsive.dataTables.min.css
+++ /dev/null
@@ -1 +0,0 @@
-table.dataTable.dtr-inline.collapsed>tbody>tr>td.child,table.dataTable.dtr-inline.collapsed>tbody>tr>th.child,table.dataTable.dtr-inline.collapsed>tbody>tr>td.dataTables_empty{cursor:default !important}table.dataTable.dtr-inline.collapsed>tbody>tr>td.child:before,table.dataTable.dtr-inline.collapsed>tbody>tr>th.child:before,table.dataTable.dtr-inline.collapsed>tbody>tr>td.dataTables_empty:before{display:none !important}table.dataTable.dtr-inline.collapsed>tbody>tr[role="row"]>td.dtr-control,table.dataTable.dtr-inline.collapsed>tbody>tr[role="row"]>th.dtr-control{position:relative;padding-left:30px;cursor:pointer}table.dataTable.dtr-inline.collapsed>tbody>tr[role="row"]>td.dtr-control:before,table.dataTable.dtr-inline.collapsed>tbody>tr[role="row"]>th.dtr-control:before{top:50%;left:5px;height:14px;width:14px;margin-top:-9px;display:block;position:absolute;color:white;border:2px solid white;border-radius:14px;box-shadow:0 0 3px #444;box-sizing:content-box;text-align:center;text-indent:0 !important;font-family:'Courier New', Courier, monospace;line-height:14px;content:'+';background-color:#31b131}table.dataTable.dtr-inline.collapsed>tbody>tr.parent>td.dtr-control:before,table.dataTable.dtr-inline.collapsed>tbody>tr.parent>th.dtr-control:before{content:'-';background-color:#d33333}table.dataTable.dtr-inline.collapsed.compact>tbody>tr>td.dtr-control,table.dataTable.dtr-inline.collapsed.compact>tbody>tr>th.dtr-control{padding-left:27px}table.dataTable.dtr-inline.collapsed.compact>tbody>tr>td.dtr-control:before,table.dataTable.dtr-inline.collapsed.compact>tbody>tr>th.dtr-control:before{left:4px;height:14px;width:14px;border-radius:14px;line-height:14px;text-indent:3px}table.dataTable.dtr-column>tbody>tr>td.control,table.dataTable.dtr-column>tbody>tr>th.control{position:relative;cursor:pointer}table.dataTable.dtr-column>tbody>tr>td.control:before,table.dataTable.dtr-column>tbody>tr>th.control:before{top:50%;left:50%;height:16px;width:16px;margin-top:-10px;margin-left:-10px;display:block;position:absolute;color:white;border:2px solid white;border-radius:14px;box-shadow:0 0 3px #444;box-sizing:content-box;text-align:center;text-indent:0 !important;font-family:'Courier New', Courier, monospace;line-height:14px;content:'+';background-color:#31b131}table.dataTable.dtr-column>tbody>tr.parent td.control:before,table.dataTable.dtr-column>tbody>tr.parent th.control:before{content:'-';background-color:#d33333}table.dataTable>tbody>tr.child{padding:0.5em 1em}table.dataTable>tbody>tr.child:hover{background:transparent !important}table.dataTable>tbody>tr.child ul.dtr-details{display:inline-block;list-style-type:none;margin:0;padding:0}table.dataTable>tbody>tr.child ul.dtr-details>li{border-bottom:1px solid #efefef;padding:0.5em 0}table.dataTable>tbody>tr.child ul.dtr-details>li:first-child{padding-top:0}table.dataTable>tbody>tr.child ul.dtr-details>li:last-child{border-bottom:none}table.dataTable>tbody>tr.child span.dtr-title{display:inline-block;min-width:75px;font-weight:bold}div.dtr-modal{position:fixed;box-sizing:border-box;top:0;left:0;height:100%;width:100%;z-index:100;padding:10em 1em}div.dtr-modal div.dtr-modal-display{position:absolute;top:0;left:0;bottom:0;right:0;width:50%;height:50%;overflow:auto;margin:auto;z-index:102;overflow:auto;background-color:#f5f5f7;border:1px solid black;border-radius:0.5em;box-shadow:0 12px 30px rgba(0,0,0,0.6)}div.dtr-modal div.dtr-modal-content{position:relative;padding:1em}div.dtr-modal div.dtr-modal-close{position:absolute;top:6px;right:6px;width:22px;height:22px;border:1px solid #eaeaea;background-color:#f9f9f9;text-align:center;border-radius:3px;cursor:pointer;z-index:12}div.dtr-modal div.dtr-modal-close:hover{background-color:#eaeaea}div.dtr-modal div.dtr-modal-background{position:fixed;top:0;left:0;right:0;bottom:0;z-index:101;background:rgba(0,0,0,0.6)}@media screen and (max-width: 767px){div.dtr-modal div.dtr-modal-display{width:95%}}
diff --git a/DataTables/Responsive-2.2.5/css/responsive.foundation.css b/DataTables/Responsive-2.2.5/css/responsive.foundation.css
deleted file mode 100644
index e95bdba..0000000
--- a/DataTables/Responsive-2.2.5/css/responsive.foundation.css
+++ /dev/null
@@ -1,180 +0,0 @@
-table.dataTable.dtr-inline.collapsed > tbody > tr > td.child,
-table.dataTable.dtr-inline.collapsed > tbody > tr > th.child,
-table.dataTable.dtr-inline.collapsed > tbody > tr > td.dataTables_empty {
-  cursor: default !important;
-}
-table.dataTable.dtr-inline.collapsed > tbody > tr > td.child:before,
-table.dataTable.dtr-inline.collapsed > tbody > tr > th.child:before,
-table.dataTable.dtr-inline.collapsed > tbody > tr > td.dataTables_empty:before {
-  display: none !important;
-}
-table.dataTable.dtr-inline.collapsed > tbody > tr[role="row"] > td.dtr-control,
-table.dataTable.dtr-inline.collapsed > tbody > tr[role="row"] > th.dtr-control {
-  position: relative;
-  padding-left: 30px;
-  cursor: pointer;
-}
-table.dataTable.dtr-inline.collapsed > tbody > tr[role="row"] > td.dtr-control:before,
-table.dataTable.dtr-inline.collapsed > tbody > tr[role="row"] > th.dtr-control:before {
-  top: 50%;
-  left: 5px;
-  height: 14px;
-  width: 14px;
-  margin-top: -9px;
-  display: block;
-  position: absolute;
-  color: white;
-  border: 2px solid white;
-  border-radius: 14px;
-  box-shadow: 0 0 3px #444;
-  box-sizing: content-box;
-  text-align: center;
-  text-indent: 0 !important;
-  font-family: 'Courier New', Courier, monospace;
-  line-height: 14px;
-  content: '+';
-  background-color: #008CBA;
-}
-table.dataTable.dtr-inline.collapsed > tbody > tr.parent > td.dtr-control:before,
-table.dataTable.dtr-inline.collapsed > tbody > tr.parent > th.dtr-control:before {
-  content: '-';
-  background-color: #d33333;
-}
-table.dataTable.dtr-inline.collapsed.compact > tbody > tr > td.dtr-control,
-table.dataTable.dtr-inline.collapsed.compact > tbody > tr > th.dtr-control {
-  padding-left: 27px;
-}
-table.dataTable.dtr-inline.collapsed.compact > tbody > tr > td.dtr-control:before,
-table.dataTable.dtr-inline.collapsed.compact > tbody > tr > th.dtr-control:before {
-  left: 4px;
-  height: 14px;
-  width: 14px;
-  border-radius: 14px;
-  line-height: 14px;
-  text-indent: 3px;
-}
-table.dataTable.dtr-column > tbody > tr > td.control,
-table.dataTable.dtr-column > tbody > tr > th.control {
-  position: relative;
-  cursor: pointer;
-}
-table.dataTable.dtr-column > tbody > tr > td.control:before,
-table.dataTable.dtr-column > tbody > tr > th.control:before {
-  top: 50%;
-  left: 50%;
-  height: 16px;
-  width: 16px;
-  margin-top: -10px;
-  margin-left: -10px;
-  display: block;
-  position: absolute;
-  color: white;
-  border: 2px solid white;
-  border-radius: 14px;
-  box-shadow: 0 0 3px #444;
-  box-sizing: content-box;
-  text-align: center;
-  text-indent: 0 !important;
-  font-family: 'Courier New', Courier, monospace;
-  line-height: 14px;
-  content: '+';
-  background-color: #008CBA;
-}
-table.dataTable.dtr-column > tbody > tr.parent td.control:before,
-table.dataTable.dtr-column > tbody > tr.parent th.control:before {
-  content: '-';
-  background-color: #d33333;
-}
-table.dataTable > tbody > tr.child {
-  padding: 0.5em 1em;
-}
-table.dataTable > tbody > tr.child:hover {
-  background: transparent !important;
-}
-table.dataTable > tbody > tr.child ul.dtr-details {
-  display: inline-block;
-  list-style-type: none;
-  margin: 0;
-  padding: 0;
-}
-table.dataTable > tbody > tr.child ul.dtr-details > li {
-  border-bottom: 1px solid #efefef;
-  padding: 0.5em 0;
-}
-table.dataTable > tbody > tr.child ul.dtr-details > li:first-child {
-  padding-top: 0;
-}
-table.dataTable > tbody > tr.child ul.dtr-details > li:last-child {
-  border-bottom: none;
-}
-table.dataTable > tbody > tr.child span.dtr-title {
-  display: inline-block;
-  min-width: 75px;
-  font-weight: bold;
-}
-
-div.dtr-modal {
-  position: fixed;
-  box-sizing: border-box;
-  top: 0;
-  left: 0;
-  height: 100%;
-  width: 100%;
-  z-index: 100;
-  padding: 10em 1em;
-}
-div.dtr-modal div.dtr-modal-display {
-  position: absolute;
-  top: 0;
-  left: 0;
-  bottom: 0;
-  right: 0;
-  width: 50%;
-  height: 50%;
-  overflow: auto;
-  margin: auto;
-  z-index: 102;
-  overflow: auto;
-  background-color: #f5f5f7;
-  border: 1px solid black;
-  border-radius: 0.5em;
-  box-shadow: 0 12px 30px rgba(0, 0, 0, 0.6);
-}
-div.dtr-modal div.dtr-modal-content {
-  position: relative;
-  padding: 1em;
-}
-div.dtr-modal div.dtr-modal-close {
-  position: absolute;
-  top: 6px;
-  right: 6px;
-  width: 22px;
-  height: 22px;
-  border: 1px solid #eaeaea;
-  background-color: #f9f9f9;
-  text-align: center;
-  border-radius: 3px;
-  cursor: pointer;
-  z-index: 12;
-}
-div.dtr-modal div.dtr-modal-close:hover {
-  background-color: #eaeaea;
-}
-div.dtr-modal div.dtr-modal-background {
-  position: fixed;
-  top: 0;
-  left: 0;
-  right: 0;
-  bottom: 0;
-  z-index: 101;
-  background: rgba(0, 0, 0, 0.6);
-}
-
-@media screen and (max-width: 767px) {
-  div.dtr-modal div.dtr-modal-display {
-    width: 95%;
-  }
-}
-table.dataTable > tbody > tr.child ul {
-  font-size: 1em;
-}
diff --git a/DataTables/Responsive-2.2.5/css/responsive.foundation.min.css b/DataTables/Responsive-2.2.5/css/responsive.foundation.min.css
deleted file mode 100644
index e9659b0..0000000
--- a/DataTables/Responsive-2.2.5/css/responsive.foundation.min.css
+++ /dev/null
@@ -1 +0,0 @@
-table.dataTable.dtr-inline.collapsed>tbody>tr>td.child,table.dataTable.dtr-inline.collapsed>tbody>tr>th.child,table.dataTable.dtr-inline.collapsed>tbody>tr>td.dataTables_empty{cursor:default !important}table.dataTable.dtr-inline.collapsed>tbody>tr>td.child:before,table.dataTable.dtr-inline.collapsed>tbody>tr>th.child:before,table.dataTable.dtr-inline.collapsed>tbody>tr>td.dataTables_empty:before{display:none !important}table.dataTable.dtr-inline.collapsed>tbody>tr[role="row"]>td.dtr-control,table.dataTable.dtr-inline.collapsed>tbody>tr[role="row"]>th.dtr-control{position:relative;padding-left:30px;cursor:pointer}table.dataTable.dtr-inline.collapsed>tbody>tr[role="row"]>td.dtr-control:before,table.dataTable.dtr-inline.collapsed>tbody>tr[role="row"]>th.dtr-control:before{top:50%;left:5px;height:14px;width:14px;margin-top:-9px;display:block;position:absolute;color:white;border:2px solid white;border-radius:14px;box-shadow:0 0 3px #444;box-sizing:content-box;text-align:center;text-indent:0 !important;font-family:'Courier New', Courier, monospace;line-height:14px;content:'+';background-color:#008CBA}table.dataTable.dtr-inline.collapsed>tbody>tr.parent>td.dtr-control:before,table.dataTable.dtr-inline.collapsed>tbody>tr.parent>th.dtr-control:before{content:'-';background-color:#d33333}table.dataTable.dtr-inline.collapsed.compact>tbody>tr>td.dtr-control,table.dataTable.dtr-inline.collapsed.compact>tbody>tr>th.dtr-control{padding-left:27px}table.dataTable.dtr-inline.collapsed.compact>tbody>tr>td.dtr-control:before,table.dataTable.dtr-inline.collapsed.compact>tbody>tr>th.dtr-control:before{left:4px;height:14px;width:14px;border-radius:14px;line-height:14px;text-indent:3px}table.dataTable.dtr-column>tbody>tr>td.control,table.dataTable.dtr-column>tbody>tr>th.control{position:relative;cursor:pointer}table.dataTable.dtr-column>tbody>tr>td.control:before,table.dataTable.dtr-column>tbody>tr>th.control:before{top:50%;left:50%;height:16px;width:16px;margin-top:-10px;margin-left:-10px;display:block;position:absolute;color:white;border:2px solid white;border-radius:14px;box-shadow:0 0 3px #444;box-sizing:content-box;text-align:center;text-indent:0 !important;font-family:'Courier New', Courier, monospace;line-height:14px;content:'+';background-color:#008CBA}table.dataTable.dtr-column>tbody>tr.parent td.control:before,table.dataTable.dtr-column>tbody>tr.parent th.control:before{content:'-';background-color:#d33333}table.dataTable>tbody>tr.child{padding:0.5em 1em}table.dataTable>tbody>tr.child:hover{background:transparent !important}table.dataTable>tbody>tr.child ul.dtr-details{display:inline-block;list-style-type:none;margin:0;padding:0}table.dataTable>tbody>tr.child ul.dtr-details>li{border-bottom:1px solid #efefef;padding:0.5em 0}table.dataTable>tbody>tr.child ul.dtr-details>li:first-child{padding-top:0}table.dataTable>tbody>tr.child ul.dtr-details>li:last-child{border-bottom:none}table.dataTable>tbody>tr.child span.dtr-title{display:inline-block;min-width:75px;font-weight:bold}div.dtr-modal{position:fixed;box-sizing:border-box;top:0;left:0;height:100%;width:100%;z-index:100;padding:10em 1em}div.dtr-modal div.dtr-modal-display{position:absolute;top:0;left:0;bottom:0;right:0;width:50%;height:50%;overflow:auto;margin:auto;z-index:102;overflow:auto;background-color:#f5f5f7;border:1px solid black;border-radius:0.5em;box-shadow:0 12px 30px rgba(0,0,0,0.6)}div.dtr-modal div.dtr-modal-content{position:relative;padding:1em}div.dtr-modal div.dtr-modal-close{position:absolute;top:6px;right:6px;width:22px;height:22px;border:1px solid #eaeaea;background-color:#f9f9f9;text-align:center;border-radius:3px;cursor:pointer;z-index:12}div.dtr-modal div.dtr-modal-close:hover{background-color:#eaeaea}div.dtr-modal div.dtr-modal-background{position:fixed;top:0;left:0;right:0;bottom:0;z-index:101;background:rgba(0,0,0,0.6)}@media screen and (max-width: 767px){div.dtr-modal div.dtr-modal-display{width:95%}}table.dataTable>tbody>tr.child ul{font-size:1em}
diff --git a/DataTables/Responsive-2.2.5/css/responsive.jqueryui.css b/DataTables/Responsive-2.2.5/css/responsive.jqueryui.css
deleted file mode 100644
index 1ff5142..0000000
--- a/DataTables/Responsive-2.2.5/css/responsive.jqueryui.css
+++ /dev/null
@@ -1,177 +0,0 @@
-table.dataTable.dtr-inline.collapsed > tbody > tr > td.child,
-table.dataTable.dtr-inline.collapsed > tbody > tr > th.child,
-table.dataTable.dtr-inline.collapsed > tbody > tr > td.dataTables_empty {
-  cursor: default !important;
-}
-table.dataTable.dtr-inline.collapsed > tbody > tr > td.child:before,
-table.dataTable.dtr-inline.collapsed > tbody > tr > th.child:before,
-table.dataTable.dtr-inline.collapsed > tbody > tr > td.dataTables_empty:before {
-  display: none !important;
-}
-table.dataTable.dtr-inline.collapsed > tbody > tr[role="row"] > td.dtr-control,
-table.dataTable.dtr-inline.collapsed > tbody > tr[role="row"] > th.dtr-control {
-  position: relative;
-  padding-left: 30px;
-  cursor: pointer;
-}
-table.dataTable.dtr-inline.collapsed > tbody > tr[role="row"] > td.dtr-control:before,
-table.dataTable.dtr-inline.collapsed > tbody > tr[role="row"] > th.dtr-control:before {
-  top: 50%;
-  left: 5px;
-  height: 14px;
-  width: 14px;
-  margin-top: -9px;
-  display: block;
-  position: absolute;
-  color: white;
-  border: 2px solid white;
-  border-radius: 14px;
-  box-shadow: 0 0 3px #444;
-  box-sizing: content-box;
-  text-align: center;
-  text-indent: 0 !important;
-  font-family: 'Courier New', Courier, monospace;
-  line-height: 14px;
-  content: '+';
-  background-color: #31b131;
-}
-table.dataTable.dtr-inline.collapsed > tbody > tr.parent > td.dtr-control:before,
-table.dataTable.dtr-inline.collapsed > tbody > tr.parent > th.dtr-control:before {
-  content: '-';
-  background-color: #d33333;
-}
-table.dataTable.dtr-inline.collapsed.compact > tbody > tr > td.dtr-control,
-table.dataTable.dtr-inline.collapsed.compact > tbody > tr > th.dtr-control {
-  padding-left: 27px;
-}
-table.dataTable.dtr-inline.collapsed.compact > tbody > tr > td.dtr-control:before,
-table.dataTable.dtr-inline.collapsed.compact > tbody > tr > th.dtr-control:before {
-  left: 4px;
-  height: 14px;
-  width: 14px;
-  border-radius: 14px;
-  line-height: 14px;
-  text-indent: 3px;
-}
-table.dataTable.dtr-column > tbody > tr > td.control,
-table.dataTable.dtr-column > tbody > tr > th.control {
-  position: relative;
-  cursor: pointer;
-}
-table.dataTable.dtr-column > tbody > tr > td.control:before,
-table.dataTable.dtr-column > tbody > tr > th.control:before {
-  top: 50%;
-  left: 50%;
-  height: 16px;
-  width: 16px;
-  margin-top: -10px;
-  margin-left: -10px;
-  display: block;
-  position: absolute;
-  color: white;
-  border: 2px solid white;
-  border-radius: 14px;
-  box-shadow: 0 0 3px #444;
-  box-sizing: content-box;
-  text-align: center;
-  text-indent: 0 !important;
-  font-family: 'Courier New', Courier, monospace;
-  line-height: 14px;
-  content: '+';
-  background-color: #31b131;
-}
-table.dataTable.dtr-column > tbody > tr.parent td.control:before,
-table.dataTable.dtr-column > tbody > tr.parent th.control:before {
-  content: '-';
-  background-color: #d33333;
-}
-table.dataTable > tbody > tr.child {
-  padding: 0.5em 1em;
-}
-table.dataTable > tbody > tr.child:hover {
-  background: transparent !important;
-}
-table.dataTable > tbody > tr.child ul.dtr-details {
-  display: inline-block;
-  list-style-type: none;
-  margin: 0;
-  padding: 0;
-}
-table.dataTable > tbody > tr.child ul.dtr-details > li {
-  border-bottom: 1px solid #efefef;
-  padding: 0.5em 0;
-}
-table.dataTable > tbody > tr.child ul.dtr-details > li:first-child {
-  padding-top: 0;
-}
-table.dataTable > tbody > tr.child ul.dtr-details > li:last-child {
-  border-bottom: none;
-}
-table.dataTable > tbody > tr.child span.dtr-title {
-  display: inline-block;
-  min-width: 75px;
-  font-weight: bold;
-}
-
-div.dtr-modal {
-  position: fixed;
-  box-sizing: border-box;
-  top: 0;
-  left: 0;
-  height: 100%;
-  width: 100%;
-  z-index: 100;
-  padding: 10em 1em;
-}
-div.dtr-modal div.dtr-modal-display {
-  position: absolute;
-  top: 0;
-  left: 0;
-  bottom: 0;
-  right: 0;
-  width: 50%;
-  height: 50%;
-  overflow: auto;
-  margin: auto;
-  z-index: 102;
-  overflow: auto;
-  background-color: #f5f5f7;
-  border: 1px solid black;
-  border-radius: 0.5em;
-  box-shadow: 0 12px 30px rgba(0, 0, 0, 0.6);
-}
-div.dtr-modal div.dtr-modal-content {
-  position: relative;
-  padding: 1em;
-}
-div.dtr-modal div.dtr-modal-close {
-  position: absolute;
-  top: 6px;
-  right: 6px;
-  width: 22px;
-  height: 22px;
-  border: 1px solid #eaeaea;
-  background-color: #f9f9f9;
-  text-align: center;
-  border-radius: 3px;
-  cursor: pointer;
-  z-index: 12;
-}
-div.dtr-modal div.dtr-modal-close:hover {
-  background-color: #eaeaea;
-}
-div.dtr-modal div.dtr-modal-background {
-  position: fixed;
-  top: 0;
-  left: 0;
-  right: 0;
-  bottom: 0;
-  z-index: 101;
-  background: rgba(0, 0, 0, 0.6);
-}
-
-@media screen and (max-width: 767px) {
-  div.dtr-modal div.dtr-modal-display {
-    width: 95%;
-  }
-}
diff --git a/DataTables/Responsive-2.2.5/css/responsive.jqueryui.min.css b/DataTables/Responsive-2.2.5/css/responsive.jqueryui.min.css
deleted file mode 100644
index 477250e..0000000
--- a/DataTables/Responsive-2.2.5/css/responsive.jqueryui.min.css
+++ /dev/null
@@ -1 +0,0 @@
-table.dataTable.dtr-inline.collapsed>tbody>tr>td.child,table.dataTable.dtr-inline.collapsed>tbody>tr>th.child,table.dataTable.dtr-inline.collapsed>tbody>tr>td.dataTables_empty{cursor:default !important}table.dataTable.dtr-inline.collapsed>tbody>tr>td.child:before,table.dataTable.dtr-inline.collapsed>tbody>tr>th.child:before,table.dataTable.dtr-inline.collapsed>tbody>tr>td.dataTables_empty:before{display:none !important}table.dataTable.dtr-inline.collapsed>tbody>tr[role="row"]>td.dtr-control,table.dataTable.dtr-inline.collapsed>tbody>tr[role="row"]>th.dtr-control{position:relative;padding-left:30px;cursor:pointer}table.dataTable.dtr-inline.collapsed>tbody>tr[role="row"]>td.dtr-control:before,table.dataTable.dtr-inline.collapsed>tbody>tr[role="row"]>th.dtr-control:before{top:50%;left:5px;height:14px;width:14px;margin-top:-9px;display:block;position:absolute;color:white;border:2px solid white;border-radius:14px;box-shadow:0 0 3px #444;box-sizing:content-box;text-align:center;text-indent:0 !important;font-family:'Courier New', Courier, monospace;line-height:14px;content:'+';background-color:#31b131}table.dataTable.dtr-inline.collapsed>tbody>tr.parent>td.dtr-control:before,table.dataTable.dtr-inline.collapsed>tbody>tr.parent>th.dtr-control:before{content:'-';background-color:#d33333}table.dataTable.dtr-inline.collapsed.compact>tbody>tr>td.dtr-control,table.dataTable.dtr-inline.collapsed.compact>tbody>tr>th.dtr-control{padding-left:27px}table.dataTable.dtr-inline.collapsed.compact>tbody>tr>td.dtr-control:before,table.dataTable.dtr-inline.collapsed.compact>tbody>tr>th.dtr-control:before{left:4px;height:14px;width:14px;border-radius:14px;line-height:14px;text-indent:3px}table.dataTable.dtr-column>tbody>tr>td.control,table.dataTable.dtr-column>tbody>tr>th.control{position:relative;cursor:pointer}table.dataTable.dtr-column>tbody>tr>td.control:before,table.dataTable.dtr-column>tbody>tr>th.control:before{top:50%;left:50%;height:16px;width:16px;margin-top:-10px;margin-left:-10px;display:block;position:absolute;color:white;border:2px solid white;border-radius:14px;box-shadow:0 0 3px #444;box-sizing:content-box;text-align:center;text-indent:0 !important;font-family:'Courier New', Courier, monospace;line-height:14px;content:'+';background-color:#31b131}table.dataTable.dtr-column>tbody>tr.parent td.control:before,table.dataTable.dtr-column>tbody>tr.parent th.control:before{content:'-';background-color:#d33333}table.dataTable>tbody>tr.child{padding:0.5em 1em}table.dataTable>tbody>tr.child:hover{background:transparent !important}table.dataTable>tbody>tr.child ul.dtr-details{display:inline-block;list-style-type:none;margin:0;padding:0}table.dataTable>tbody>tr.child ul.dtr-details>li{border-bottom:1px solid #efefef;padding:0.5em 0}table.dataTable>tbody>tr.child ul.dtr-details>li:first-child{padding-top:0}table.dataTable>tbody>tr.child ul.dtr-details>li:last-child{border-bottom:none}table.dataTable>tbody>tr.child span.dtr-title{display:inline-block;min-width:75px;font-weight:bold}div.dtr-modal{position:fixed;box-sizing:border-box;top:0;left:0;height:100%;width:100%;z-index:100;padding:10em 1em}div.dtr-modal div.dtr-modal-display{position:absolute;top:0;left:0;bottom:0;right:0;width:50%;height:50%;overflow:auto;margin:auto;z-index:102;overflow:auto;background-color:#f5f5f7;border:1px solid black;border-radius:0.5em;box-shadow:0 12px 30px rgba(0,0,0,0.6)}div.dtr-modal div.dtr-modal-content{position:relative;padding:1em}div.dtr-modal div.dtr-modal-close{position:absolute;top:6px;right:6px;width:22px;height:22px;border:1px solid #eaeaea;background-color:#f9f9f9;text-align:center;border-radius:3px;cursor:pointer;z-index:12}div.dtr-modal div.dtr-modal-close:hover{background-color:#eaeaea}div.dtr-modal div.dtr-modal-background{position:fixed;top:0;left:0;right:0;bottom:0;z-index:101;background:rgba(0,0,0,0.6)}@media screen and (max-width: 767px){div.dtr-modal div.dtr-modal-display{width:95%}}
diff --git a/DataTables/Responsive-2.2.5/css/responsive.semanticui.css b/DataTables/Responsive-2.2.5/css/responsive.semanticui.css
deleted file mode 100644
index b1f1c93..0000000
--- a/DataTables/Responsive-2.2.5/css/responsive.semanticui.css
+++ /dev/null
@@ -1,180 +0,0 @@
-table.dataTable.dtr-inline.collapsed > tbody > tr > td.child,
-table.dataTable.dtr-inline.collapsed > tbody > tr > th.child,
-table.dataTable.dtr-inline.collapsed > tbody > tr > td.dataTables_empty {
-  cursor: default !important;
-}
-table.dataTable.dtr-inline.collapsed > tbody > tr > td.child:before,
-table.dataTable.dtr-inline.collapsed > tbody > tr > th.child:before,
-table.dataTable.dtr-inline.collapsed > tbody > tr > td.dataTables_empty:before {
-  display: none !important;
-}
-table.dataTable.dtr-inline.collapsed > tbody > tr[role="row"] > td.dtr-control,
-table.dataTable.dtr-inline.collapsed > tbody > tr[role="row"] > th.dtr-control {
-  position: relative;
-  padding-left: 30px;
-  cursor: pointer;
-}
-table.dataTable.dtr-inline.collapsed > tbody > tr[role="row"] > td.dtr-control:before,
-table.dataTable.dtr-inline.collapsed > tbody > tr[role="row"] > th.dtr-control:before {
-  top: 50%;
-  left: 5px;
-  height: 14px;
-  width: 14px;
-  margin-top: -9px;
-  display: block;
-  position: absolute;
-  color: white;
-  border: 2px solid white;
-  border-radius: 14px;
-  box-shadow: 0 0 3px #444;
-  box-sizing: content-box;
-  text-align: center;
-  text-indent: 0 !important;
-  font-family: 'Courier New', Courier, monospace;
-  line-height: 14px;
-  content: '+';
-  background-color: #21ba45;
-}
-table.dataTable.dtr-inline.collapsed > tbody > tr.parent > td.dtr-control:before,
-table.dataTable.dtr-inline.collapsed > tbody > tr.parent > th.dtr-control:before {
-  content: '-';
-  background-color: #d33333;
-}
-table.dataTable.dtr-inline.collapsed.compact > tbody > tr > td.dtr-control,
-table.dataTable.dtr-inline.collapsed.compact > tbody > tr > th.dtr-control {
-  padding-left: 27px;
-}
-table.dataTable.dtr-inline.collapsed.compact > tbody > tr > td.dtr-control:before,
-table.dataTable.dtr-inline.collapsed.compact > tbody > tr > th.dtr-control:before {
-  left: 4px;
-  height: 14px;
-  width: 14px;
-  border-radius: 14px;
-  line-height: 14px;
-  text-indent: 3px;
-}
-table.dataTable.dtr-column > tbody > tr > td.control,
-table.dataTable.dtr-column > tbody > tr > th.control {
-  position: relative;
-  cursor: pointer;
-}
-table.dataTable.dtr-column > tbody > tr > td.control:before,
-table.dataTable.dtr-column > tbody > tr > th.control:before {
-  top: 50%;
-  left: 50%;
-  height: 16px;
-  width: 16px;
-  margin-top: -10px;
-  margin-left: -10px;
-  display: block;
-  position: absolute;
-  color: white;
-  border: 2px solid white;
-  border-radius: 14px;
-  box-shadow: 0 0 3px #444;
-  box-sizing: content-box;
-  text-align: center;
-  text-indent: 0 !important;
-  font-family: 'Courier New', Courier, monospace;
-  line-height: 14px;
-  content: '+';
-  background-color: #21ba45;
-}
-table.dataTable.dtr-column > tbody > tr.parent td.control:before,
-table.dataTable.dtr-column > tbody > tr.parent th.control:before {
-  content: '-';
-  background-color: #d33333;
-}
-table.dataTable > tbody > tr.child {
-  padding: 0.5em 1em;
-}
-table.dataTable > tbody > tr.child:hover {
-  background: transparent !important;
-}
-table.dataTable > tbody > tr.child ul.dtr-details {
-  display: inline-block;
-  list-style-type: none;
-  margin: 0;
-  padding: 0;
-}
-table.dataTable > tbody > tr.child ul.dtr-details > li {
-  border-bottom: 1px solid #efefef;
-  padding: 0.5em 0;
-}
-table.dataTable > tbody > tr.child ul.dtr-details > li:first-child {
-  padding-top: 0;
-}
-table.dataTable > tbody > tr.child ul.dtr-details > li:last-child {
-  border-bottom: none;
-}
-table.dataTable > tbody > tr.child span.dtr-title {
-  display: inline-block;
-  min-width: 75px;
-  font-weight: bold;
-}
-
-div.dtr-modal {
-  position: fixed;
-  box-sizing: border-box;
-  top: 0;
-  left: 0;
-  height: 100%;
-  width: 100%;
-  z-index: 100;
-  padding: 10em 1em;
-}
-div.dtr-modal div.dtr-modal-display {
-  position: absolute;
-  top: 0;
-  left: 0;
-  bottom: 0;
-  right: 0;
-  width: 50%;
-  height: 50%;
-  overflow: auto;
-  margin: auto;
-  z-index: 102;
-  overflow: auto;
-  background-color: #f5f5f7;
-  border: 1px solid black;
-  border-radius: 0.5em;
-  box-shadow: 0 12px 30px rgba(0, 0, 0, 0.6);
-}
-div.dtr-modal div.dtr-modal-content {
-  position: relative;
-  padding: 1em;
-}
-div.dtr-modal div.dtr-modal-close {
-  position: absolute;
-  top: 6px;
-  right: 6px;
-  width: 22px;
-  height: 22px;
-  border: 1px solid #eaeaea;
-  background-color: #f9f9f9;
-  text-align: center;
-  border-radius: 3px;
-  cursor: pointer;
-  z-index: 12;
-}
-div.dtr-modal div.dtr-modal-close:hover {
-  background-color: #eaeaea;
-}
-div.dtr-modal div.dtr-modal-background {
-  position: fixed;
-  top: 0;
-  left: 0;
-  right: 0;
-  bottom: 0;
-  z-index: 101;
-  background: rgba(0, 0, 0, 0.6);
-}
-
-@media screen and (max-width: 767px) {
-  div.dtr-modal div.dtr-modal-display {
-    width: 95%;
-  }
-}
-div.dtr-bs-modal table.table tr:first-child td {
-  border-top: none;
-}
diff --git a/DataTables/Responsive-2.2.5/css/responsive.semanticui.min.css b/DataTables/Responsive-2.2.5/css/responsive.semanticui.min.css
deleted file mode 100644
index 21872d6..0000000
--- a/DataTables/Responsive-2.2.5/css/responsive.semanticui.min.css
+++ /dev/null
@@ -1 +0,0 @@
-table.dataTable.dtr-inline.collapsed>tbody>tr>td.child,table.dataTable.dtr-inline.collapsed>tbody>tr>th.child,table.dataTable.dtr-inline.collapsed>tbody>tr>td.dataTables_empty{cursor:default !important}table.dataTable.dtr-inline.collapsed>tbody>tr>td.child:before,table.dataTable.dtr-inline.collapsed>tbody>tr>th.child:before,table.dataTable.dtr-inline.collapsed>tbody>tr>td.dataTables_empty:before{display:none !important}table.dataTable.dtr-inline.collapsed>tbody>tr[role="row"]>td.dtr-control,table.dataTable.dtr-inline.collapsed>tbody>tr[role="row"]>th.dtr-control{position:relative;padding-left:30px;cursor:pointer}table.dataTable.dtr-inline.collapsed>tbody>tr[role="row"]>td.dtr-control:before,table.dataTable.dtr-inline.collapsed>tbody>tr[role="row"]>th.dtr-control:before{top:50%;left:5px;height:14px;width:14px;margin-top:-9px;display:block;position:absolute;color:white;border:2px solid white;border-radius:14px;box-shadow:0 0 3px #444;box-sizing:content-box;text-align:center;text-indent:0 !important;font-family:'Courier New', Courier, monospace;line-height:14px;content:'+';background-color:#21ba45}table.dataTable.dtr-inline.collapsed>tbody>tr.parent>td.dtr-control:before,table.dataTable.dtr-inline.collapsed>tbody>tr.parent>th.dtr-control:before{content:'-';background-color:#d33333}table.dataTable.dtr-inline.collapsed.compact>tbody>tr>td.dtr-control,table.dataTable.dtr-inline.collapsed.compact>tbody>tr>th.dtr-control{padding-left:27px}table.dataTable.dtr-inline.collapsed.compact>tbody>tr>td.dtr-control:before,table.dataTable.dtr-inline.collapsed.compact>tbody>tr>th.dtr-control:before{left:4px;height:14px;width:14px;border-radius:14px;line-height:14px;text-indent:3px}table.dataTable.dtr-column>tbody>tr>td.control,table.dataTable.dtr-column>tbody>tr>th.control{position:relative;cursor:pointer}table.dataTable.dtr-column>tbody>tr>td.control:before,table.dataTable.dtr-column>tbody>tr>th.control:before{top:50%;left:50%;height:16px;width:16px;margin-top:-10px;margin-left:-10px;display:block;position:absolute;color:white;border:2px solid white;border-radius:14px;box-shadow:0 0 3px #444;box-sizing:content-box;text-align:center;text-indent:0 !important;font-family:'Courier New', Courier, monospace;line-height:14px;content:'+';background-color:#21ba45}table.dataTable.dtr-column>tbody>tr.parent td.control:before,table.dataTable.dtr-column>tbody>tr.parent th.control:before{content:'-';background-color:#d33333}table.dataTable>tbody>tr.child{padding:0.5em 1em}table.dataTable>tbody>tr.child:hover{background:transparent !important}table.dataTable>tbody>tr.child ul.dtr-details{display:inline-block;list-style-type:none;margin:0;padding:0}table.dataTable>tbody>tr.child ul.dtr-details>li{border-bottom:1px solid #efefef;padding:0.5em 0}table.dataTable>tbody>tr.child ul.dtr-details>li:first-child{padding-top:0}table.dataTable>tbody>tr.child ul.dtr-details>li:last-child{border-bottom:none}table.dataTable>tbody>tr.child span.dtr-title{display:inline-block;min-width:75px;font-weight:bold}div.dtr-modal{position:fixed;box-sizing:border-box;top:0;left:0;height:100%;width:100%;z-index:100;padding:10em 1em}div.dtr-modal div.dtr-modal-display{position:absolute;top:0;left:0;bottom:0;right:0;width:50%;height:50%;overflow:auto;margin:auto;z-index:102;overflow:auto;background-color:#f5f5f7;border:1px solid black;border-radius:0.5em;box-shadow:0 12px 30px rgba(0,0,0,0.6)}div.dtr-modal div.dtr-modal-content{position:relative;padding:1em}div.dtr-modal div.dtr-modal-close{position:absolute;top:6px;right:6px;width:22px;height:22px;border:1px solid #eaeaea;background-color:#f9f9f9;text-align:center;border-radius:3px;cursor:pointer;z-index:12}div.dtr-modal div.dtr-modal-close:hover{background-color:#eaeaea}div.dtr-modal div.dtr-modal-background{position:fixed;top:0;left:0;right:0;bottom:0;z-index:101;background:rgba(0,0,0,0.6)}@media screen and (max-width: 767px){div.dtr-modal div.dtr-modal-display{width:95%}}div.dtr-bs-modal table.table tr:first-child td{border-top:none}
diff --git a/DataTables/Responsive-2.2.5/js/dataTables.responsive.js b/DataTables/Responsive-2.2.5/js/dataTables.responsive.js
deleted file mode 100644
index 5ef19ef..0000000
--- a/DataTables/Responsive-2.2.5/js/dataTables.responsive.js
+++ /dev/null
@@ -1,1472 +0,0 @@
-/*! Responsive 2.2.5
- * 2014-2020 SpryMedia Ltd - datatables.net/license
- */
-
-/**
- * @summary     Responsive
- * @description Responsive tables plug-in for DataTables
- * @version     2.2.5
- * @file        dataTables.responsive.js
- * @author      SpryMedia Ltd (www.sprymedia.co.uk)
- * @contact     www.sprymedia.co.uk/contact
- * @copyright   Copyright 2014-2020 SpryMedia Ltd.
- *
- * This source file is free software, available under the following license:
- *   MIT license - http://datatables.net/license/mit
- *
- * This source file is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
- * or FITNESS FOR A PARTICULAR PURPOSE. See the license files for details.
- *
- * For details please refer to: http://www.datatables.net
- */
-(function( factory ){
-	if ( typeof define === 'function' && define.amd ) {
-		// AMD
-		define( ['jquery', 'datatables.net'], function ( $ ) {
-			return factory( $, window, document );
-		} );
-	}
-	else if ( typeof exports === 'object' ) {
-		// CommonJS
-		module.exports = function (root, $) {
-			if ( ! root ) {
-				root = window;
-			}
-
-			if ( ! $ || ! $.fn.dataTable ) {
-				$ = require('datatables.net')(root, $).$;
-			}
-
-			return factory( $, root, root.document );
-		};
-	}
-	else {
-		// Browser
-		factory( jQuery, window, document );
-	}
-}(function( $, window, document, undefined ) {
-'use strict';
-var DataTable = $.fn.dataTable;
-
-
-/**
- * Responsive is a plug-in for the DataTables library that makes use of
- * DataTables' ability to change the visibility of columns, changing the
- * visibility of columns so the displayed columns fit into the table container.
- * The end result is that complex tables will be dynamically adjusted to fit
- * into the viewport, be it on a desktop, tablet or mobile browser.
- *
- * Responsive for DataTables has two modes of operation, which can used
- * individually or combined:
- *
- * * Class name based control - columns assigned class names that match the
- *   breakpoint logic can be shown / hidden as required for each breakpoint.
- * * Automatic control - columns are automatically hidden when there is no
- *   room left to display them. Columns removed from the right.
- *
- * In additional to column visibility control, Responsive also has built into
- * options to use DataTables' child row display to show / hide the information
- * from the table that has been hidden. There are also two modes of operation
- * for this child row display:
- *
- * * Inline - when the control element that the user can use to show / hide
- *   child rows is displayed inside the first column of the table.
- * * Column - where a whole column is dedicated to be the show / hide control.
- *
- * Initialisation of Responsive is performed by:
- *
- * * Adding the class `responsive` or `dt-responsive` to the table. In this case
- *   Responsive will automatically be initialised with the default configuration
- *   options when the DataTable is created.
- * * Using the `responsive` option in the DataTables configuration options. This
- *   can also be used to specify the configuration options, or simply set to
- *   `true` to use the defaults.
- *
- *  @class
- *  @param {object} settings DataTables settings object for the host table
- *  @param {object} [opts] Configuration options
- *  @requires jQuery 1.7+
- *  @requires DataTables 1.10.3+
- *
- *  @example
- *      $('#example').DataTable( {
- *        responsive: true
- *      } );
- *    } );
- */
-var Responsive = function ( settings, opts ) {
-	// Sanity check that we are using DataTables 1.10 or newer
-	if ( ! DataTable.versionCheck || ! DataTable.versionCheck( '1.10.10' ) ) {
-		throw 'DataTables Responsive requires DataTables 1.10.10 or newer';
-	}
-
-	this.s = {
-		dt: new DataTable.Api( settings ),
-		columns: [],
-		current: []
-	};
-
-	// Check if responsive has already been initialised on this table
-	if ( this.s.dt.settings()[0].responsive ) {
-		return;
-	}
-
-	// details is an object, but for simplicity the user can give it as a string
-	// or a boolean
-	if ( opts && typeof opts.details === 'string' ) {
-		opts.details = { type: opts.details };
-	}
-	else if ( opts && opts.details === false ) {
-		opts.details = { type: false };
-	}
-	else if ( opts && opts.details === true ) {
-		opts.details = { type: 'inline' };
-	}
-
-	this.c = $.extend( true, {}, Responsive.defaults, DataTable.defaults.responsive, opts );
-	settings.responsive = this;
-	this._constructor();
-};
-
-$.extend( Responsive.prototype, {
-	/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
-	 * Constructor
-	 */
-
-	/**
-	 * Initialise the Responsive instance
-	 *
-	 * @private
-	 */
-	_constructor: function ()
-	{
-		var that = this;
-		var dt = this.s.dt;
-		var dtPrivateSettings = dt.settings()[0];
-		var oldWindowWidth = $(window).innerWidth();
-
-		dt.settings()[0]._responsive = this;
-
-		// Use DataTables' throttle function to avoid processor thrashing on
-		// resize
-		$(window).on( 'resize.dtr orientationchange.dtr', DataTable.util.throttle( function () {
-			// iOS has a bug whereby resize can fire when only scrolling
-			// See: http://stackoverflow.com/questions/8898412
-			var width = $(window).innerWidth();
-
-			if ( width !== oldWindowWidth ) {
-				that._resize();
-				oldWindowWidth = width;
-			}
-		} ) );
-
-		// DataTables doesn't currently trigger an event when a row is added, so
-		// we need to hook into its private API to enforce the hidden rows when
-		// new data is added
-		dtPrivateSettings.oApi._fnCallbackReg( dtPrivateSettings, 'aoRowCreatedCallback', function (tr, data, idx) {
-			if ( $.inArray( false, that.s.current ) !== -1 ) {
-				$('>td, >th', tr).each( function ( i ) {
-					var idx = dt.column.index( 'toData', i );
-
-					if ( that.s.current[idx] === false ) {
-						$(this).css('display', 'none');
-					}
-				} );
-			}
-		} );
-
-		// Destroy event handler
-		dt.on( 'destroy.dtr', function () {
-			dt.off( '.dtr' );
-			$( dt.table().body() ).off( '.dtr' );
-			$(window).off( 'resize.dtr orientationchange.dtr' );
-			dt.cells('.dtr-control').nodes().to$().removeClass('dtr-control');
-
-			// Restore the columns that we've hidden
-			$.each( that.s.current, function ( i, val ) {
-				if ( val === false ) {
-					that._setColumnVis( i, true );
-				}
-			} );
-		} );
-
-		// Reorder the breakpoints array here in case they have been added out
-		// of order
-		this.c.breakpoints.sort( function (a, b) {
-			return a.width < b.width ? 1 :
-				a.width > b.width ? -1 : 0;
-		} );
-
-		this._classLogic();
-		this._resizeAuto();
-
-		// Details handler
-		var details = this.c.details;
-
-		if ( details.type !== false ) {
-			that._detailsInit();
-
-			// DataTables will trigger this event on every column it shows and
-			// hides individually
-			dt.on( 'column-visibility.dtr', function () {
-				// Use a small debounce to allow multiple columns to be set together
-				if ( that._timer ) {
-					clearTimeout( that._timer );
-				}
-
-				that._timer = setTimeout( function () {
-					that._timer = null;
-
-					that._classLogic();
-					that._resizeAuto();
-					that._resize();
-
-					that._redrawChildren();
-				}, 100 );
-			} );
-
-			// Redraw the details box on each draw which will happen if the data
-			// has changed. This is used until DataTables implements a native
-			// `updated` event for rows
-			dt.on( 'draw.dtr', function () {
-				that._redrawChildren();
-			} );
-
-			$(dt.table().node()).addClass( 'dtr-'+details.type );
-		}
-
-		dt.on( 'column-reorder.dtr', function (e, settings, details) {
-			that._classLogic();
-			that._resizeAuto();
-			that._resize(true);
-		} );
-
-		// Change in column sizes means we need to calc
-		dt.on( 'column-sizing.dtr', function () {
-			that._resizeAuto();
-			that._resize();
-		});
-
-		// On Ajax reload we want to reopen any child rows which are displayed
-		// by responsive
-		dt.on( 'preXhr.dtr', function () {
-			var rowIds = [];
-			dt.rows().every( function () {
-				if ( this.child.isShown() ) {
-					rowIds.push( this.id(true) );
-				}
-			} );
-
-			dt.one( 'draw.dtr', function () {
-				that._resizeAuto();
-				that._resize();
-
-				dt.rows( rowIds ).every( function () {
-					that._detailsDisplay( this, false );
-				} );
-			} );
-		});
-
-		dt
-			.on( 'draw.dtr', function () {
-				that._controlClass();
-			})
-			.on( 'init.dtr', function (e, settings, details) {
-				if ( e.namespace !== 'dt' ) {
-					return;
-				}
-
-				that._resizeAuto();
-				that._resize();
-
-				// If columns were hidden, then DataTables needs to adjust the
-				// column sizing
-				if ( $.inArray( false, that.s.current ) ) {
-					dt.columns.adjust();
-				}
-			} );
-
-		// First pass - draw the table for the current viewport size
-		this._resize();
-	},
-
-
-	/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
-	 * Private methods
-	 */
-
-	/**
-	 * Calculate the visibility for the columns in a table for a given
-	 * breakpoint. The result is pre-determined based on the class logic if
-	 * class names are used to control all columns, but the width of the table
-	 * is also used if there are columns which are to be automatically shown
-	 * and hidden.
-	 *
-	 * @param  {string} breakpoint Breakpoint name to use for the calculation
-	 * @return {array} Array of boolean values initiating the visibility of each
-	 *   column.
-	 *  @private
-	 */
-	_columnsVisiblity: function ( breakpoint )
-	{
-		var dt = this.s.dt;
-		var columns = this.s.columns;
-		var i, ien;
-
-		// Create an array that defines the column ordering based first on the
-		// column's priority, and secondly the column index. This allows the
-		// columns to be removed from the right if the priority matches
-		var order = columns
-			.map( function ( col, idx ) {
-				return {
-					columnIdx: idx,
-					priority: col.priority
-				};
-			} )
-			.sort( function ( a, b ) {
-				if ( a.priority !== b.priority ) {
-					return a.priority - b.priority;
-				}
-				return a.columnIdx - b.columnIdx;
-			} );
-
-		// Class logic - determine which columns are in this breakpoint based
-		// on the classes. If no class control (i.e. `auto`) then `-` is used
-		// to indicate this to the rest of the function
-		var display = $.map( columns, function ( col, i ) {
-			if ( dt.column(i).visible() === false ) {
-				return 'not-visible';
-			}
-			return col.auto && col.minWidth === null ?
-				false :
-				col.auto === true ?
-					'-' :
-					$.inArray( breakpoint, col.includeIn ) !== -1;
-		} );
-
-		// Auto column control - first pass: how much width is taken by the
-		// ones that must be included from the non-auto columns
-		var requiredWidth = 0;
-		for ( i=0, ien=display.length ; i<ien ; i++ ) {
-			if ( display[i] === true ) {
-				requiredWidth += columns[i].minWidth;
-			}
-		}
-
-		// Second pass, use up any remaining width for other columns. For
-		// scrolling tables we need to subtract the width of the scrollbar. It
-		// may not be requires which makes this sub-optimal, but it would
-		// require another full redraw to make complete use of those extra few
-		// pixels
-		var scrolling = dt.settings()[0].oScroll;
-		var bar = scrolling.sY || scrolling.sX ? scrolling.iBarWidth : 0;
-		var widthAvailable = dt.table().container().offsetWidth - bar;
-		var usedWidth = widthAvailable - requiredWidth;
-
-		// Control column needs to always be included. This makes it sub-
-		// optimal in terms of using the available with, but to stop layout
-		// thrashing or overflow. Also we need to account for the control column
-		// width first so we know how much width is available for the other
-		// columns, since the control column might not be the first one shown
-		for ( i=0, ien=display.length ; i<ien ; i++ ) {
-			if ( columns[i].control ) {
-				usedWidth -= columns[i].minWidth;
-			}
-		}
-
-		// Allow columns to be shown (counting by priority and then right to
-		// left) until we run out of room
-		var empty = false;
-		for ( i=0, ien=order.length ; i<ien ; i++ ) {
-			var colIdx = order[i].columnIdx;
-
-			if ( display[colIdx] === '-' && ! columns[colIdx].control && columns[colIdx].minWidth ) {
-				// Once we've found a column that won't fit we don't let any
-				// others display either, or columns might disappear in the
-				// middle of the table
-				if ( empty || usedWidth - columns[colIdx].minWidth < 0 ) {
-					empty = true;
-					display[colIdx] = false;
-				}
-				else {
-					display[colIdx] = true;
-				}
-
-				usedWidth -= columns[colIdx].minWidth;
-			}
-		}
-
-		// Determine if the 'control' column should be shown (if there is one).
-		// This is the case when there is a hidden column (that is not the
-		// control column). The two loops look inefficient here, but they are
-		// trivial and will fly through. We need to know the outcome from the
-		// first , before the action in the second can be taken
-		var showControl = false;
-
-		for ( i=0, ien=columns.length ; i<ien ; i++ ) {
-			if ( ! columns[i].control && ! columns[i].never && display[i] === false ) {
-				showControl = true;
-				break;
-			}
-		}
-
-		for ( i=0, ien=columns.length ; i<ien ; i++ ) {
-			if ( columns[i].control ) {
-				display[i] = showControl;
-			}
-
-			// Replace not visible string with false from the control column detection above
-			if ( display[i] === 'not-visible' ) {
-				display[i] = false;
-			}
-		}
-
-		// Finally we need to make sure that there is at least one column that
-		// is visible
-		if ( $.inArray( true, display ) === -1 ) {
-			display[0] = true;
-		}
-
-		return display;
-	},
-
-
-	/**
-	 * Create the internal `columns` array with information about the columns
-	 * for the table. This includes determining which breakpoints the column
-	 * will appear in, based upon class names in the column, which makes up the
-	 * vast majority of this method.
-	 *
-	 * @private
-	 */
-	_classLogic: function ()
-	{
-		var that = this;
-		var calc = {};
-		var breakpoints = this.c.breakpoints;
-		var dt = this.s.dt;
-		var columns = dt.columns().eq(0).map( function (i) {
-			var column = this.column(i);
-			var className = column.header().className;
-			var priority = dt.settings()[0].aoColumns[i].responsivePriority;
-			var dataPriority = column.header().getAttribute('data-priority');
-
-			if ( priority === undefined ) {
-				priority = dataPriority === undefined || dataPriority === null?
-					10000 :
-					dataPriority * 1;
-			}
-
-			return {
-				className: className,
-				includeIn: [],
-				auto:      false,
-				control:   false,
-				never:     className.match(/\bnever\b/) ? true : false,
-				priority:  priority
-			};
-		} );
-
-		// Simply add a breakpoint to `includeIn` array, ensuring that there are
-		// no duplicates
-		var add = function ( colIdx, name ) {
-			var includeIn = columns[ colIdx ].includeIn;
-
-			if ( $.inArray( name, includeIn ) === -1 ) {
-				includeIn.push( name );
-			}
-		};
-
-		var column = function ( colIdx, name, operator, matched ) {
-			var size, i, ien;
-
-			if ( ! operator ) {
-				columns[ colIdx ].includeIn.push( name );
-			}
-			else if ( operator === 'max-' ) {
-				// Add this breakpoint and all smaller
-				size = that._find( name ).width;
-
-				for ( i=0, ien=breakpoints.length ; i<ien ; i++ ) {
-					if ( breakpoints[i].width <= size ) {
-						add( colIdx, breakpoints[i].name );
-					}
-				}
-			}
-			else if ( operator === 'min-' ) {
-				// Add this breakpoint and all larger
-				size = that._find( name ).width;
-
-				for ( i=0, ien=breakpoints.length ; i<ien ; i++ ) {
-					if ( breakpoints[i].width >= size ) {
-						add( colIdx, breakpoints[i].name );
-					}
-				}
-			}
-			else if ( operator === 'not-' ) {
-				// Add all but this breakpoint
-				for ( i=0, ien=breakpoints.length ; i<ien ; i++ ) {
-					if ( breakpoints[i].name.indexOf( matched ) === -1 ) {
-						add( colIdx, breakpoints[i].name );
-					}
-				}
-			}
-		};
-
-		// Loop over each column and determine if it has a responsive control
-		// class
-		columns.each( function ( col, i ) {
-			var classNames = col.className.split(' ');
-			var hasClass = false;
-
-			// Split the class name up so multiple rules can be applied if needed
-			for ( var k=0, ken=classNames.length ; k<ken ; k++ ) {
-				var className = $.trim( classNames[k] );
-
-				if ( className === 'all' ) {
-					// Include in all
-					hasClass = true;
-					col.includeIn = $.map( breakpoints, function (a) {
-						return a.name;
-					} );
-					return;
-				}
-				else if ( className === 'none' || col.never ) {
-					// Include in none (default) and no auto
-					hasClass = true;
-					return;
-				}
-				else if ( className === 'control' ) {
-					// Special column that is only visible, when one of the other
-					// columns is hidden. This is used for the details control
-					hasClass = true;
-					col.control = true;
-					return;
-				}
-
-				$.each( breakpoints, function ( j, breakpoint ) {
-					// Does this column have a class that matches this breakpoint?
-					var brokenPoint = breakpoint.name.split('-');
-					var re = new RegExp( '(min\\-|max\\-|not\\-)?('+brokenPoint[0]+')(\\-[_a-zA-Z0-9])?' );
-					var match = className.match( re );
-
-					if ( match ) {
-						hasClass = true;
-
-						if ( match[2] === brokenPoint[0] && match[3] === '-'+brokenPoint[1] ) {
-							// Class name matches breakpoint name fully
-							column( i, breakpoint.name, match[1], match[2]+match[3] );
-						}
-						else if ( match[2] === brokenPoint[0] && ! match[3] ) {
-							// Class name matched primary breakpoint name with no qualifier
-							column( i, breakpoint.name, match[1], match[2] );
-						}
-					}
-				} );
-			}
-
-			// If there was no control class, then automatic sizing is used
-			if ( ! hasClass ) {
-				col.auto = true;
-			}
-		} );
-
-		this.s.columns = columns;
-	},
-
-	/**
-	 * Update the cells to show the correct control class / button
-	 * @private
-	 */
-	_controlClass: function ()
-	{
-		if ( this.c.details.type === 'inline' ) {
-			var dt = this.s.dt;
-			var columnsVis = this.s.current;
-			var firstVisible = $.inArray(true, columnsVis);
-
-			// Remove from any cells which shouldn't have it
-			dt.cells(
-				null,
-				function(idx) {
-					return idx !== firstVisible;
-				},
-				{page: 'current'}
-			)
-				.nodes()
-				.to$()
-				.filter('.dtr-control')
-				.removeClass('dtr-control');
-
-			dt.cells(null, firstVisible, {page: 'current'})
-				.nodes()
-				.to$()
-				.addClass('dtr-control');
-		}
-	},
-
-	/**
-	 * Show the details for the child row
-	 *
-	 * @param  {DataTables.Api} row    API instance for the row
-	 * @param  {boolean}        update Update flag
-	 * @private
-	 */
-	_detailsDisplay: function ( row, update )
-	{
-		var that = this;
-		var dt = this.s.dt;
-		var details = this.c.details;
-
-		if ( details && details.type !== false ) {
-			var res = details.display( row, update, function () {
-				return details.renderer(
-					dt, row[0], that._detailsObj(row[0])
-				);
-			} );
-
-			if ( res === true || res === false ) {
-				$(dt.table().node()).triggerHandler( 'responsive-display.dt', [dt, row, res, update] );
-			}
-		}
-	},
-
-
-	/**
-	 * Initialisation for the details handler
-	 *
-	 * @private
-	 */
-	_detailsInit: function ()
-	{
-		var that    = this;
-		var dt      = this.s.dt;
-		var details = this.c.details;
-
-		// The inline type always uses the first child as the target
-		if ( details.type === 'inline' ) {
-			details.target = 'td.dtr-control, th.dtr-control';
-		}
-
-		// Keyboard accessibility
-		dt.on( 'draw.dtr', function () {
-			that._tabIndexes();
-		} );
-		that._tabIndexes(); // Initial draw has already happened
-
-		$( dt.table().body() ).on( 'keyup.dtr', 'td, th', function (e) {
-			if ( e.keyCode === 13 && $(this).data('dtr-keyboard') ) {
-				$(this).click();
-			}
-		} );
-
-		// type.target can be a string jQuery selector or a column index
-		var target   = details.target;
-		var selector = typeof target === 'string' ? target : 'td, th';
-
-		if ( target !== undefined || target !== null ) {
-			// Click handler to show / hide the details rows when they are available
-			$( dt.table().body() )
-				.on( 'click.dtr mousedown.dtr mouseup.dtr', selector, function (e) {
-					// If the table is not collapsed (i.e. there is no hidden columns)
-					// then take no action
-					if ( ! $(dt.table().node()).hasClass('collapsed' ) ) {
-						return;
-					}
-
-					// Check that the row is actually a DataTable's controlled node
-					if ( $.inArray( $(this).closest('tr').get(0), dt.rows().nodes().toArray() ) === -1 ) {
-						return;
-					}
-
-					// For column index, we determine if we should act or not in the
-					// handler - otherwise it is already okay
-					if ( typeof target === 'number' ) {
-						var targetIdx = target < 0 ?
-							dt.columns().eq(0).length + target :
-							target;
-
-						if ( dt.cell( this ).index().column !== targetIdx ) {
-							return;
-						}
-					}
-
-					// $().closest() includes itself in its check
-					var row = dt.row( $(this).closest('tr') );
-
-					// Check event type to do an action
-					if ( e.type === 'click' ) {
-						// The renderer is given as a function so the caller can execute it
-						// only when they need (i.e. if hiding there is no point is running
-						// the renderer)
-						that._detailsDisplay( row, false );
-					}
-					else if ( e.type === 'mousedown' ) {
-						// For mouse users, prevent the focus ring from showing
-						$(this).css('outline', 'none');
-					}
-					else if ( e.type === 'mouseup' ) {
-						// And then re-allow at the end of the click
-						$(this).trigger('blur').css('outline', '');
-					}
-				} );
-		}
-	},
-
-
-	/**
-	 * Get the details to pass to a renderer for a row
-	 * @param  {int} rowIdx Row index
-	 * @private
-	 */
-	_detailsObj: function ( rowIdx )
-	{
-		var that = this;
-		var dt = this.s.dt;
-
-		return $.map( this.s.columns, function( col, i ) {
-			// Never and control columns should not be passed to the renderer
-			if ( col.never || col.control ) {
-				return;
-			}
-
-			var dtCol = dt.settings()[0].aoColumns[ i ];
-
-			return {
-				className:   dtCol.sClass,
-				columnIndex: i,
-				data:        dt.cell( rowIdx, i ).render( that.c.orthogonal ),
-				hidden:      dt.column( i ).visible() && !that.s.current[ i ],
-				rowIndex:    rowIdx,
-				title:       dtCol.sTitle !== null ?
-					dtCol.sTitle :
-					$(dt.column(i).header()).text()
-			};
-		} );
-	},
-
-
-	/**
-	 * Find a breakpoint object from a name
-	 *
-	 * @param  {string} name Breakpoint name to find
-	 * @return {object}      Breakpoint description object
-	 * @private
-	 */
-	_find: function ( name )
-	{
-		var breakpoints = this.c.breakpoints;
-
-		for ( var i=0, ien=breakpoints.length ; i<ien ; i++ ) {
-			if ( breakpoints[i].name === name ) {
-				return breakpoints[i];
-			}
-		}
-	},
-
-
-	/**
-	 * Re-create the contents of the child rows as the display has changed in
-	 * some way.
-	 *
-	 * @private
-	 */
-	_redrawChildren: function ()
-	{
-		var that = this;
-		var dt = this.s.dt;
-
-		dt.rows( {page: 'current'} ).iterator( 'row', function ( settings, idx ) {
-			var row = dt.row( idx );
-
-			that._detailsDisplay( dt.row( idx ), true );
-		} );
-	},
-
-
-	/**
-	 * Alter the table display for a resized viewport. This involves first
-	 * determining what breakpoint the window currently is in, getting the
-	 * column visibilities to apply and then setting them.
-	 *
-	 * @param  {boolean} forceRedraw Force a redraw
-	 * @private
-	 */
-	_resize: function (forceRedraw)
-	{
-		var that = this;
-		var dt = this.s.dt;
-		var width = $(window).innerWidth();
-		var breakpoints = this.c.breakpoints;
-		var breakpoint = breakpoints[0].name;
-		var columns = this.s.columns;
-		var i, ien;
-		var oldVis = this.s.current.slice();
-
-		// Determine what breakpoint we are currently at
-		for ( i=breakpoints.length-1 ; i>=0 ; i-- ) {
-			if ( width <= breakpoints[i].width ) {
-				breakpoint = breakpoints[i].name;
-				break;
-			}
-		}
-		
-		// Show the columns for that break point
-		var columnsVis = this._columnsVisiblity( breakpoint );
-		this.s.current = columnsVis;
-
-		// Set the class before the column visibility is changed so event
-		// listeners know what the state is. Need to determine if there are
-		// any columns that are not visible but can be shown
-		var collapsedClass = false;
-	
-		for ( i=0, ien=columns.length ; i<ien ; i++ ) {
-			if ( columnsVis[i] === false && ! columns[i].never && ! columns[i].control && ! dt.column(i).visible() === false ) {
-				collapsedClass = true;
-				break;
-			}
-		}
-
-		$( dt.table().node() ).toggleClass( 'collapsed', collapsedClass );
-
-		var changed = false;
-		var visible = 0;
-
-		dt.columns().eq(0).each( function ( colIdx, i ) {
-			if ( columnsVis[i] === true ) {
-				visible++;
-			}
-
-			if ( forceRedraw || columnsVis[i] !== oldVis[i] ) {
-				changed = true;
-				that._setColumnVis( colIdx, columnsVis[i] );
-			}
-		} );
-
-		if ( changed ) {
-			this._redrawChildren();
-
-			// Inform listeners of the change
-			$(dt.table().node()).trigger( 'responsive-resize.dt', [dt, this.s.current] );
-
-			// If no records, update the "No records" display element
-			if ( dt.page.info().recordsDisplay === 0 ) {
-				$('td', dt.table().body()).eq(0).attr('colspan', visible);
-			}
-		}
-	},
-
-
-	/**
-	 * Determine the width of each column in the table so the auto column hiding
-	 * has that information to work with. This method is never going to be 100%
-	 * perfect since column widths can change slightly per page, but without
-	 * seriously compromising performance this is quite effective.
-	 *
-	 * @private
-	 */
-	_resizeAuto: function ()
-	{
-		var dt = this.s.dt;
-		var columns = this.s.columns;
-
-		// Are we allowed to do auto sizing?
-		if ( ! this.c.auto ) {
-			return;
-		}
-
-		// Are there any columns that actually need auto-sizing, or do they all
-		// have classes defined
-		if ( $.inArray( true, $.map( columns, function (c) { return c.auto; } ) ) === -1 ) {
-			return;
-		}
-
-		// Need to restore all children. They will be reinstated by a re-render
-		if ( ! $.isEmptyObject( _childNodeStore ) ) {
-			$.each( _childNodeStore, function ( key ) {
-				var idx = key.split('-');
-
-				_childNodesRestore( dt, idx[0]*1, idx[1]*1 );
-			} );
-		}
-
-		// Clone the table with the current data in it
-		var tableWidth   = dt.table().node().offsetWidth;
-		var columnWidths = dt.columns;
-		var clonedTable  = dt.table().node().cloneNode( false );
-		var clonedHeader = $( dt.table().header().cloneNode( false ) ).appendTo( clonedTable );
-		var clonedBody   = $( dt.table().body() ).clone( false, false ).empty().appendTo( clonedTable ); // use jQuery because of IE8
-
-		clonedTable.style.width = 'auto';
-
-		// Header
-		var headerCells = dt.columns()
-			.header()
-			.filter( function (idx) {
-				return dt.column(idx).visible();
-			} )
-			.to$()
-			.clone( false )
-			.css( 'display', 'table-cell' )
-			.css( 'width', 'auto' )
-			.css( 'min-width', 0 );
-
-		// Body rows - we don't need to take account of DataTables' column
-		// visibility since we implement our own here (hence the `display` set)
-		$(clonedBody)
-			.append( $(dt.rows( { page: 'current' } ).nodes()).clone( false ) )
-			.find( 'th, td' ).css( 'display', '' );
-
-		// Footer
-		var footer = dt.table().footer();
-		if ( footer ) {
-			var clonedFooter = $( footer.cloneNode( false ) ).appendTo( clonedTable );
-			var footerCells = dt.columns()
-				.footer()
-				.filter( function (idx) {
-					return dt.column(idx).visible();
-				} )
-				.to$()
-				.clone( false )
-				.css( 'display', 'table-cell' );
-
-			$('<tr/>')
-				.append( footerCells )
-				.appendTo( clonedFooter );
-		}
-
-		$('<tr/>')
-			.append( headerCells )
-			.appendTo( clonedHeader );
-
-		// In the inline case extra padding is applied to the first column to
-		// give space for the show / hide icon. We need to use this in the
-		// calculation
-		if ( this.c.details.type === 'inline' ) {
-			$(clonedTable).addClass( 'dtr-inline collapsed' );
-		}
-		
-		// It is unsafe to insert elements with the same name into the DOM
-		// multiple times. For example, cloning and inserting a checked radio
-		// clears the chcecked state of the original radio.
-		$( clonedTable ).find( '[name]' ).removeAttr( 'name' );
-
-		// A position absolute table would take the table out of the flow of
-		// our container element, bypassing the height and width (Scroller)
-		$( clonedTable ).css( 'position', 'relative' )
-		
-		var inserted = $('<div/>')
-			.css( {
-				width: 1,
-				height: 1,
-				overflow: 'hidden',
-				clear: 'both'
-			} )
-			.append( clonedTable );
-
-		inserted.insertBefore( dt.table().node() );
-
-		// The cloned header now contains the smallest that each column can be
-		headerCells.each( function (i) {
-			var idx = dt.column.index( 'fromVisible', i );
-			columns[ idx ].minWidth =  this.offsetWidth || 0;
-		} );
-
-		inserted.remove();
-	},
-
-	/**
-	 * Get the state of the current hidden columns - controlled by Responsive only
-	 */
-	_responsiveOnlyHidden: function ()
-	{
-		var dt = this.s.dt;
-
-		return $.map( this.s.current, function (v, i) {
-			// If the column is hidden by DataTables then it can't be hidden by
-			// Responsive!
-			if ( dt.column(i).visible() === false ) {
-				return true;
-			}
-			return v;
-		} );
-	},
-
-	/**
-	 * Set a column's visibility.
-	 *
-	 * We don't use DataTables' column visibility controls in order to ensure
-	 * that column visibility can Responsive can no-exist. Since only IE8+ is
-	 * supported (and all evergreen browsers of course) the control of the
-	 * display attribute works well.
-	 *
-	 * @param {integer} col      Column index
-	 * @param {boolean} showHide Show or hide (true or false)
-	 * @private
-	 */
-	_setColumnVis: function ( col, showHide )
-	{
-		var dt = this.s.dt;
-		var display = showHide ? '' : 'none'; // empty string will remove the attr
-
-		$( dt.column( col ).header() ).css( 'display', display );
-		$( dt.column( col ).footer() ).css( 'display', display );
-		dt.column( col ).nodes().to$().css( 'display', display );
-
-		// If the are child nodes stored, we might need to reinsert them
-		if ( ! $.isEmptyObject( _childNodeStore ) ) {
-			dt.cells( null, col ).indexes().each( function (idx) {
-				_childNodesRestore( dt, idx.row, idx.column );
-			} );
-		}
-	},
-
-
-	/**
-	 * Update the cell tab indexes for keyboard accessibility. This is called on
-	 * every table draw - that is potentially inefficient, but also the least
-	 * complex option given that column visibility can change on the fly. Its a
-	 * shame user-focus was removed from CSS 3 UI, as it would have solved this
-	 * issue with a single CSS statement.
-	 *
-	 * @private
-	 */
-	_tabIndexes: function ()
-	{
-		var dt = this.s.dt;
-		var cells = dt.cells( { page: 'current' } ).nodes().to$();
-		var ctx = dt.settings()[0];
-		var target = this.c.details.target;
-
-		cells.filter( '[data-dtr-keyboard]' ).removeData( '[data-dtr-keyboard]' );
-
-		if ( typeof target === 'number' ) {
-			dt.cells( null, target, { page: 'current' } ).nodes().to$()
-				.attr( 'tabIndex', ctx.iTabIndex )
-				.data( 'dtr-keyboard', 1 );
-		}
-		else {
-			// This is a bit of a hack - we need to limit the selected nodes to just
-			// those of this table
-			if ( target === 'td:first-child, th:first-child' ) {
-				target = '>td:first-child, >th:first-child';
-			}
-
-			$( target, dt.rows( { page: 'current' } ).nodes() )
-				.attr( 'tabIndex', ctx.iTabIndex )
-				.data( 'dtr-keyboard', 1 );
-		}
-	}
-} );
-
-
-/**
- * List of default breakpoints. Each item in the array is an object with two
- * properties:
- *
- * * `name` - the breakpoint name.
- * * `width` - the breakpoint width
- *
- * @name Responsive.breakpoints
- * @static
- */
-Responsive.breakpoints = [
-	{ name: 'desktop',  width: Infinity },
-	{ name: 'tablet-l', width: 1024 },
-	{ name: 'tablet-p', width: 768 },
-	{ name: 'mobile-l', width: 480 },
-	{ name: 'mobile-p', width: 320 }
-];
-
-
-/**
- * Display methods - functions which define how the hidden data should be shown
- * in the table.
- *
- * @namespace
- * @name Responsive.defaults
- * @static
- */
-Responsive.display = {
-	childRow: function ( row, update, render ) {
-		if ( update ) {
-			if ( $(row.node()).hasClass('parent') ) {
-				row.child( render(), 'child' ).show();
-
-				return true;
-			}
-		}
-		else {
-			if ( ! row.child.isShown()  ) {
-				row.child( render(), 'child' ).show();
-				$( row.node() ).addClass( 'parent' );
-
-				return true;
-			}
-			else {
-				row.child( false );
-				$( row.node() ).removeClass( 'parent' );
-
-				return false;
-			}
-		}
-	},
-
-	childRowImmediate: function ( row, update, render ) {
-		if ( (! update && row.child.isShown()) || ! row.responsive.hasHidden() ) {
-			// User interaction and the row is show, or nothing to show
-			row.child( false );
-			$( row.node() ).removeClass( 'parent' );
-
-			return false;
-		}
-		else {
-			// Display
-			row.child( render(), 'child' ).show();
-			$( row.node() ).addClass( 'parent' );
-
-			return true;
-		}
-	},
-
-	// This is a wrapper so the modal options for Bootstrap and jQuery UI can
-	// have options passed into them. This specific one doesn't need to be a
-	// function but it is for consistency in the `modal` name
-	modal: function ( options ) {
-		return function ( row, update, render ) {
-			if ( ! update ) {
-				// Show a modal
-				var close = function () {
-					modal.remove(); // will tidy events for us
-					$(document).off( 'keypress.dtr' );
-				};
-
-				var modal = $('<div class="dtr-modal"/>')
-					.append( $('<div class="dtr-modal-display"/>')
-						.append( $('<div class="dtr-modal-content"/>')
-							.append( render() )
-						)
-						.append( $('<div class="dtr-modal-close">&times;</div>' )
-							.click( function () {
-								close();
-							} )
-						)
-					)
-					.append( $('<div class="dtr-modal-background"/>')
-						.click( function () {
-							close();
-						} )
-					)
-					.appendTo( 'body' );
-
-				$(document).on( 'keyup.dtr', function (e) {
-					if ( e.keyCode === 27 ) {
-						e.stopPropagation();
-
-						close();
-					}
-				} );
-			}
-			else {
-				$('div.dtr-modal-content')
-					.empty()
-					.append( render() );
-			}
-
-			if ( options && options.header ) {
-				$('div.dtr-modal-content').prepend(
-					'<h2>'+options.header( row )+'</h2>'
-				);
-			}
-		};
-	}
-};
-
-
-var _childNodeStore = {};
-
-function _childNodes( dt, row, col ) {
-	var name = row+'-'+col;
-
-	if ( _childNodeStore[ name ] ) {
-		return _childNodeStore[ name ];
-	}
-
-	// https://jsperf.com/childnodes-array-slice-vs-loop
-	var nodes = [];
-	var children = dt.cell( row, col ).node().childNodes;
-	for ( var i=0, ien=children.length ; i<ien ; i++ ) {
-		nodes.push( children[i] );
-	}
-
-	_childNodeStore[ name ] = nodes;
-
-	return nodes;
-}
-
-function _childNodesRestore( dt, row, col ) {
-	var name = row+'-'+col;
-
-	if ( ! _childNodeStore[ name ] ) {
-		return;
-	}
-
-	var node = dt.cell( row, col ).node();
-	var store = _childNodeStore[ name ];
-	var parent = store[0].parentNode;
-	var parentChildren = parent.childNodes;
-	var a = [];
-
-	for ( var i=0, ien=parentChildren.length ; i<ien ; i++ ) {
-		a.push( parentChildren[i] );
-	}
-
-	for ( var j=0, jen=a.length ; j<jen ; j++ ) {
-		node.appendChild( a[j] );
-	}
-
-	_childNodeStore[ name ] = undefined;
-}
-
-
-/**
- * Display methods - functions which define how the hidden data should be shown
- * in the table.
- *
- * @namespace
- * @name Responsive.defaults
- * @static
- */
-Responsive.renderer = {
-	listHiddenNodes: function () {
-		return function ( api, rowIdx, columns ) {
-			var ul = $('<ul data-dtr-index="'+rowIdx+'" class="dtr-details"/>');
-			var found = false;
-
-			var data = $.each( columns, function ( i, col ) {
-				if ( col.hidden ) {
-					var klass = col.className ?
-						'class="'+ col.className +'"' :
-						'';
-	
-					$(
-						'<li '+klass+' data-dtr-index="'+col.columnIndex+'" data-dt-row="'+col.rowIndex+'" data-dt-column="'+col.columnIndex+'">'+
-							'<span class="dtr-title">'+
-								col.title+
-							'</span> '+
-						'</li>'
-					)
-						.append( $('<span class="dtr-data"/>').append( _childNodes( api, col.rowIndex, col.columnIndex ) ) )// api.cell( col.rowIndex, col.columnIndex ).node().childNodes ) )
-						.appendTo( ul );
-
-					found = true;
-				}
-			} );
-
-			return found ?
-				ul :
-				false;
-		};
-	},
-
-	listHidden: function () {
-		return function ( api, rowIdx, columns ) {
-			var data = $.map( columns, function ( col ) {
-				var klass = col.className ?
-					'class="'+ col.className +'"' :
-					'';
-
-				return col.hidden ?
-					'<li '+klass+' data-dtr-index="'+col.columnIndex+'" data-dt-row="'+col.rowIndex+'" data-dt-column="'+col.columnIndex+'">'+
-						'<span class="dtr-title">'+
-							col.title+
-						'</span> '+
-						'<span class="dtr-data">'+
-							col.data+
-						'</span>'+
-					'</li>' :
-					'';
-			} ).join('');
-
-			return data ?
-				$('<ul data-dtr-index="'+rowIdx+'" class="dtr-details"/>').append( data ) :
-				false;
-		}
-	},
-
-	tableAll: function ( options ) {
-		options = $.extend( {
-			tableClass: ''
-		}, options );
-
-		return function ( api, rowIdx, columns ) {
-			var data = $.map( columns, function ( col ) {
-				var klass = col.className ?
-					'class="'+ col.className +'"' :
-					'';
-
-				return '<tr '+klass+' data-dt-row="'+col.rowIndex+'" data-dt-column="'+col.columnIndex+'">'+
-						'<td>'+col.title+':'+'</td> '+
-						'<td>'+col.data+'</td>'+
-					'</tr>';
-			} ).join('');
-
-			return $('<table class="'+options.tableClass+' dtr-details" width="100%"/>').append( data );
-		}
-	}
-};
-
-/**
- * Responsive default settings for initialisation
- *
- * @namespace
- * @name Responsive.defaults
- * @static
- */
-Responsive.defaults = {
-	/**
-	 * List of breakpoints for the instance. Note that this means that each
-	 * instance can have its own breakpoints. Additionally, the breakpoints
-	 * cannot be changed once an instance has been creased.
-	 *
-	 * @type {Array}
-	 * @default Takes the value of `Responsive.breakpoints`
-	 */
-	breakpoints: Responsive.breakpoints,
-
-	/**
-	 * Enable / disable auto hiding calculations. It can help to increase
-	 * performance slightly if you disable this option, but all columns would
-	 * need to have breakpoint classes assigned to them
-	 *
-	 * @type {Boolean}
-	 * @default  `true`
-	 */
-	auto: true,
-
-	/**
-	 * Details control. If given as a string value, the `type` property of the
-	 * default object is set to that value, and the defaults used for the rest
-	 * of the object - this is for ease of implementation.
-	 *
-	 * The object consists of the following properties:
-	 *
-	 * * `display` - A function that is used to show and hide the hidden details
-	 * * `renderer` - function that is called for display of the child row data.
-	 *   The default function will show the data from the hidden columns
-	 * * `target` - Used as the selector for what objects to attach the child
-	 *   open / close to
-	 * * `type` - `false` to disable the details display, `inline` or `column`
-	 *   for the two control types
-	 *
-	 * @type {Object|string}
-	 */
-	details: {
-		display: Responsive.display.childRow,
-
-		renderer: Responsive.renderer.listHidden(),
-
-		target: 0,
-
-		type: 'inline'
-	},
-
-	/**
-	 * Orthogonal data request option. This is used to define the data type
-	 * requested when Responsive gets the data to show in the child row.
-	 *
-	 * @type {String}
-	 */
-	orthogonal: 'display'
-};
-
-
-/*
- * API
- */
-var Api = $.fn.dataTable.Api;
-
-// Doesn't do anything - work around for a bug in DT... Not documented
-Api.register( 'responsive()', function () {
-	return this;
-} );
-
-Api.register( 'responsive.index()', function ( li ) {
-	li = $(li);
-
-	return {
-		column: li.data('dtr-index'),
-		row:    li.parent().data('dtr-index')
-	};
-} );
-
-Api.register( 'responsive.rebuild()', function () {
-	return this.iterator( 'table', function ( ctx ) {
-		if ( ctx._responsive ) {
-			ctx._responsive._classLogic();
-		}
-	} );
-} );
-
-Api.register( 'responsive.recalc()', function () {
-	return this.iterator( 'table', function ( ctx ) {
-		if ( ctx._responsive ) {
-			ctx._responsive._resizeAuto();
-			ctx._responsive._resize();
-		}
-	} );
-} );
-
-Api.register( 'responsive.hasHidden()', function () {
-	var ctx = this.context[0];
-
-	return ctx._responsive ?
-		$.inArray( false, ctx._responsive._responsiveOnlyHidden() ) !== -1 :
-		false;
-} );
-
-Api.registerPlural( 'columns().responsiveHidden()', 'column().responsiveHidden()', function () {
-	return this.iterator( 'column', function ( settings, column ) {
-		return settings._responsive ?
-			settings._responsive._responsiveOnlyHidden()[ column ] :
-			false;
-	}, 1 );
-} );
-
-
-/**
- * Version information
- *
- * @name Responsive.version
- * @static
- */
-Responsive.version = '2.2.5';
-
-
-$.fn.dataTable.Responsive = Responsive;
-$.fn.DataTable.Responsive = Responsive;
-
-// Attach a listener to the document which listens for DataTables initialisation
-// events so we can automatically initialise
-$(document).on( 'preInit.dt.dtr', function (e, settings, json) {
-	if ( e.namespace !== 'dt' ) {
-		return;
-	}
-
-	if ( $(settings.nTable).hasClass( 'responsive' ) ||
-		 $(settings.nTable).hasClass( 'dt-responsive' ) ||
-		 settings.oInit.responsive ||
-		 DataTable.defaults.responsive
-	) {
-		var init = settings.oInit.responsive;
-
-		if ( init !== false ) {
-			new Responsive( settings, $.isPlainObject( init ) ? init : {}  );
-		}
-	}
-} );
-
-
-return Responsive;
-}));
diff --git a/DataTables/Responsive-2.2.5/js/dataTables.responsive.min.js b/DataTables/Responsive-2.2.5/js/dataTables.responsive.min.js
deleted file mode 100644
index de30133..0000000
--- a/DataTables/Responsive-2.2.5/js/dataTables.responsive.min.js
+++ /dev/null
@@ -1,45 +0,0 @@
-/*!
-   Copyright 2014-2020 SpryMedia Ltd.
-
- This source file is free software, available under the following license:
-   MIT license - http://datatables.net/license/mit
-
- This source file is distributed in the hope that it will be useful, but
- WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
- or FITNESS FOR A PARTICULAR PURPOSE. See the license files for details.
-
- For details please refer to: http://www.datatables.net
- Responsive 2.2.5
- 2014-2020 SpryMedia Ltd - datatables.net/license
-*/
-var $jscomp=$jscomp||{};$jscomp.scope={};$jscomp.findInternal=function(a,k,g){a instanceof String&&(a=String(a));for(var n=a.length,p=0;p<n;p++){var v=a[p];if(k.call(g,v,p,a))return{i:p,v:v}}return{i:-1,v:void 0}};$jscomp.ASSUME_ES5=!1;$jscomp.ASSUME_NO_NATIVE_MAP=!1;$jscomp.ASSUME_NO_NATIVE_SET=!1;$jscomp.SIMPLE_FROUND_POLYFILL=!1;
-$jscomp.defineProperty=$jscomp.ASSUME_ES5||"function"==typeof Object.defineProperties?Object.defineProperty:function(a,k,g){a!=Array.prototype&&a!=Object.prototype&&(a[k]=g.value)};$jscomp.getGlobal=function(a){a=["object"==typeof window&&window,"object"==typeof self&&self,"object"==typeof global&&global,a];for(var k=0;k<a.length;++k){var g=a[k];if(g&&g.Math==Math)return g}throw Error("Cannot find global object");};$jscomp.global=$jscomp.getGlobal(this);
-$jscomp.polyfill=function(a,k,g,n){if(k){g=$jscomp.global;a=a.split(".");for(n=0;n<a.length-1;n++){var p=a[n];p in g||(g[p]={});g=g[p]}a=a[a.length-1];n=g[a];k=k(n);k!=n&&null!=k&&$jscomp.defineProperty(g,a,{configurable:!0,writable:!0,value:k})}};$jscomp.polyfill("Array.prototype.find",function(a){return a?a:function(a,g){return $jscomp.findInternal(this,a,g).v}},"es6","es3");
-(function(a){"function"===typeof define&&define.amd?define(["jquery","datatables.net"],function(k){return a(k,window,document)}):"object"===typeof exports?module.exports=function(k,g){k||(k=window);g&&g.fn.dataTable||(g=require("datatables.net")(k,g).$);return a(g,k,k.document)}:a(jQuery,window,document)})(function(a,k,g,n){function p(b,a,c){var d=a+"-"+c;if(q[d])return q[d];var f=[];b=b.cell(a,c).node().childNodes;a=0;for(c=b.length;a<c;a++)f.push(b[a]);return q[d]=f}function v(b,a,c){var d=a+"-"+
-c;if(q[d]){b=b.cell(a,c).node();c=q[d][0].parentNode.childNodes;a=[];for(var f=0,l=c.length;f<l;f++)a.push(c[f]);c=0;for(f=a.length;c<f;c++)b.appendChild(a[c]);q[d]=n}}var t=a.fn.dataTable,m=function(b,d){if(!t.versionCheck||!t.versionCheck("1.10.10"))throw"DataTables Responsive requires DataTables 1.10.10 or newer";this.s={dt:new t.Api(b),columns:[],current:[]};this.s.dt.settings()[0].responsive||(d&&"string"===typeof d.details?d.details={type:d.details}:d&&!1===d.details?d.details={type:!1}:d&&
-!0===d.details&&(d.details={type:"inline"}),this.c=a.extend(!0,{},m.defaults,t.defaults.responsive,d),b.responsive=this,this._constructor())};a.extend(m.prototype,{_constructor:function(){var b=this,d=this.s.dt,c=d.settings()[0],e=a(k).innerWidth();d.settings()[0]._responsive=this;a(k).on("resize.dtr orientationchange.dtr",t.util.throttle(function(){var d=a(k).innerWidth();d!==e&&(b._resize(),e=d)}));c.oApi._fnCallbackReg(c,"aoRowCreatedCallback",function(c,e,r){-1!==a.inArray(!1,b.s.current)&&a(">td, >th",
-c).each(function(c){c=d.column.index("toData",c);!1===b.s.current[c]&&a(this).css("display","none")})});d.on("destroy.dtr",function(){d.off(".dtr");a(d.table().body()).off(".dtr");a(k).off("resize.dtr orientationchange.dtr");d.cells(".dtr-control").nodes().to$().removeClass("dtr-control");a.each(b.s.current,function(a,d){!1===d&&b._setColumnVis(a,!0)})});this.c.breakpoints.sort(function(b,a){return b.width<a.width?1:b.width>a.width?-1:0});this._classLogic();this._resizeAuto();c=this.c.details;!1!==
-c.type&&(b._detailsInit(),d.on("column-visibility.dtr",function(){b._timer&&clearTimeout(b._timer);b._timer=setTimeout(function(){b._timer=null;b._classLogic();b._resizeAuto();b._resize();b._redrawChildren()},100)}),d.on("draw.dtr",function(){b._redrawChildren()}),a(d.table().node()).addClass("dtr-"+c.type));d.on("column-reorder.dtr",function(a,d,c){b._classLogic();b._resizeAuto();b._resize(!0)});d.on("column-sizing.dtr",function(){b._resizeAuto();b._resize()});d.on("preXhr.dtr",function(){var a=
-[];d.rows().every(function(){this.child.isShown()&&a.push(this.id(!0))});d.one("draw.dtr",function(){b._resizeAuto();b._resize();d.rows(a).every(function(){b._detailsDisplay(this,!1)})})});d.on("draw.dtr",function(){b._controlClass()}).on("init.dtr",function(c,e,r){"dt"===c.namespace&&(b._resizeAuto(),b._resize(),a.inArray(!1,b.s.current)&&d.columns.adjust())});this._resize()},_columnsVisiblity:function(b){var d=this.s.dt,c=this.s.columns,e,f=c.map(function(a,b){return{columnIdx:b,priority:a.priority}}).sort(function(a,
-b){return a.priority!==b.priority?a.priority-b.priority:a.columnIdx-b.columnIdx}),l=a.map(c,function(c,h){return!1===d.column(h).visible()?"not-visible":c.auto&&null===c.minWidth?!1:!0===c.auto?"-":-1!==a.inArray(b,c.includeIn)}),r=0;var h=0;for(e=l.length;h<e;h++)!0===l[h]&&(r+=c[h].minWidth);h=d.settings()[0].oScroll;h=h.sY||h.sX?h.iBarWidth:0;r=d.table().container().offsetWidth-h-r;h=0;for(e=l.length;h<e;h++)c[h].control&&(r-=c[h].minWidth);var k=!1;h=0;for(e=f.length;h<e;h++){var g=f[h].columnIdx;
-"-"===l[g]&&!c[g].control&&c[g].minWidth&&(k||0>r-c[g].minWidth?(k=!0,l[g]=!1):l[g]=!0,r-=c[g].minWidth)}f=!1;h=0;for(e=c.length;h<e;h++)if(!c[h].control&&!c[h].never&&!1===l[h]){f=!0;break}h=0;for(e=c.length;h<e;h++)c[h].control&&(l[h]=f),"not-visible"===l[h]&&(l[h]=!1);-1===a.inArray(!0,l)&&(l[0]=!0);return l},_classLogic:function(){var b=this,d=this.c.breakpoints,c=this.s.dt,e=c.columns().eq(0).map(function(a){var b=this.column(a),d=b.header().className;a=c.settings()[0].aoColumns[a].responsivePriority;
-b=b.header().getAttribute("data-priority");a===n&&(a=b===n||null===b?1E4:1*b);return{className:d,includeIn:[],auto:!1,control:!1,never:d.match(/\bnever\b/)?!0:!1,priority:a}}),f=function(b,d){b=e[b].includeIn;-1===a.inArray(d,b)&&b.push(d)},g=function(a,c,g,l){if(!g)e[a].includeIn.push(c);else if("max-"===g)for(l=b._find(c).width,c=0,g=d.length;c<g;c++)d[c].width<=l&&f(a,d[c].name);else if("min-"===g)for(l=b._find(c).width,c=0,g=d.length;c<g;c++)d[c].width>=l&&f(a,d[c].name);else if("not-"===g)for(c=
-0,g=d.length;c<g;c++)-1===d[c].name.indexOf(l)&&f(a,d[c].name)};e.each(function(b,c){for(var e=b.className.split(" "),f=!1,h=0,l=e.length;h<l;h++){var k=a.trim(e[h]);if("all"===k){f=!0;b.includeIn=a.map(d,function(b){return b.name});return}if("none"===k||b.never){f=!0;return}if("control"===k){f=!0;b.control=!0;return}a.each(d,function(b,a){b=a.name.split("-");var d=k.match(new RegExp("(min\\-|max\\-|not\\-)?("+b[0]+")(\\-[_a-zA-Z0-9])?"));d&&(f=!0,d[2]===b[0]&&d[3]==="-"+b[1]?g(c,a.name,d[1],d[2]+
-d[3]):d[2]!==b[0]||d[3]||g(c,a.name,d[1],d[2]))})}f||(b.auto=!0)});this.s.columns=e},_controlClass:function(){if("inline"===this.c.details.type){var b=this.s.dt,d=a.inArray(!0,this.s.current);b.cells(null,function(b){return b!==d},{page:"current"}).nodes().to$().filter(".dtr-control").removeClass("dtr-control");b.cells(null,d,{page:"current"}).nodes().to$().addClass("dtr-control")}},_detailsDisplay:function(b,d){var c=this,e=this.s.dt,f=this.c.details;if(f&&!1!==f.type){var g=f.display(b,d,function(){return f.renderer(e,
-b[0],c._detailsObj(b[0]))});!0!==g&&!1!==g||a(e.table().node()).triggerHandler("responsive-display.dt",[e,b,g,d])}},_detailsInit:function(){var b=this,d=this.s.dt,c=this.c.details;"inline"===c.type&&(c.target="td.dtr-control, th.dtr-control");d.on("draw.dtr",function(){b._tabIndexes()});b._tabIndexes();a(d.table().body()).on("keyup.dtr","td, th",function(b){13===b.keyCode&&a(this).data("dtr-keyboard")&&a(this).click()});var e=c.target;c="string"===typeof e?e:"td, th";if(e!==n||null!==e)a(d.table().body()).on("click.dtr mousedown.dtr mouseup.dtr",
-c,function(c){if(a(d.table().node()).hasClass("collapsed")&&-1!==a.inArray(a(this).closest("tr").get(0),d.rows().nodes().toArray())){if("number"===typeof e){var f=0>e?d.columns().eq(0).length+e:e;if(d.cell(this).index().column!==f)return}f=d.row(a(this).closest("tr"));"click"===c.type?b._detailsDisplay(f,!1):"mousedown"===c.type?a(this).css("outline","none"):"mouseup"===c.type&&a(this).trigger("blur").css("outline","")}})},_detailsObj:function(b){var d=this,c=this.s.dt;return a.map(this.s.columns,
-function(e,f){if(!e.never&&!e.control)return e=c.settings()[0].aoColumns[f],{className:e.sClass,columnIndex:f,data:c.cell(b,f).render(d.c.orthogonal),hidden:c.column(f).visible()&&!d.s.current[f],rowIndex:b,title:null!==e.sTitle?e.sTitle:a(c.column(f).header()).text()}})},_find:function(b){for(var a=this.c.breakpoints,c=0,e=a.length;c<e;c++)if(a[c].name===b)return a[c]},_redrawChildren:function(){var b=this,a=this.s.dt;a.rows({page:"current"}).iterator("row",function(c,d){a.row(d);b._detailsDisplay(a.row(d),
-!0)})},_resize:function(b){var d=this,c=this.s.dt,e=a(k).innerWidth(),f=this.c.breakpoints,g=f[0].name,r=this.s.columns,h,n=this.s.current.slice();for(h=f.length-1;0<=h;h--)if(e<=f[h].width){g=f[h].name;break}var m=this._columnsVisiblity(g);this.s.current=m;f=!1;h=0;for(e=r.length;h<e;h++)if(!1===m[h]&&!r[h].never&&!r[h].control&&!1===!c.column(h).visible()){f=!0;break}a(c.table().node()).toggleClass("collapsed",f);var p=!1,q=0;c.columns().eq(0).each(function(a,c){!0===m[c]&&q++;if(b||m[c]!==n[c])p=
-!0,d._setColumnVis(a,m[c])});p&&(this._redrawChildren(),a(c.table().node()).trigger("responsive-resize.dt",[c,this.s.current]),0===c.page.info().recordsDisplay&&a("td",c.table().body()).eq(0).attr("colspan",q))},_resizeAuto:function(){var b=this.s.dt,d=this.s.columns;if(this.c.auto&&-1!==a.inArray(!0,a.map(d,function(b){return b.auto}))){a.isEmptyObject(q)||a.each(q,function(a){a=a.split("-");v(b,1*a[0],1*a[1])});b.table().node();var c=b.table().node().cloneNode(!1),e=a(b.table().header().cloneNode(!1)).appendTo(c),
-f=a(b.table().body()).clone(!1,!1).empty().appendTo(c);c.style.width="auto";var g=b.columns().header().filter(function(a){return b.column(a).visible()}).to$().clone(!1).css("display","table-cell").css("width","auto").css("min-width",0);a(f).append(a(b.rows({page:"current"}).nodes()).clone(!1)).find("th, td").css("display","");if(f=b.table().footer()){f=a(f.cloneNode(!1)).appendTo(c);var k=b.columns().footer().filter(function(a){return b.column(a).visible()}).to$().clone(!1).css("display","table-cell");
-a("<tr/>").append(k).appendTo(f)}a("<tr/>").append(g).appendTo(e);"inline"===this.c.details.type&&a(c).addClass("dtr-inline collapsed");a(c).find("[name]").removeAttr("name");a(c).css("position","relative");c=a("<div/>").css({width:1,height:1,overflow:"hidden",clear:"both"}).append(c);c.insertBefore(b.table().node());g.each(function(a){a=b.column.index("fromVisible",a);d[a].minWidth=this.offsetWidth||0});c.remove()}},_responsiveOnlyHidden:function(){var b=this.s.dt;return a.map(this.s.current,function(a,
-c){return!1===b.column(c).visible()?!0:a})},_setColumnVis:function(b,d){var c=this.s.dt;d=d?"":"none";a(c.column(b).header()).css("display",d);a(c.column(b).footer()).css("display",d);c.column(b).nodes().to$().css("display",d);a.isEmptyObject(q)||c.cells(null,b).indexes().each(function(a){v(c,a.row,a.column)})},_tabIndexes:function(){var b=this.s.dt,d=b.cells({page:"current"}).nodes().to$(),c=b.settings()[0],e=this.c.details.target;d.filter("[data-dtr-keyboard]").removeData("[data-dtr-keyboard]");
-"number"===typeof e?b.cells(null,e,{page:"current"}).nodes().to$().attr("tabIndex",c.iTabIndex).data("dtr-keyboard",1):("td:first-child, th:first-child"===e&&(e=">td:first-child, >th:first-child"),a(e,b.rows({page:"current"}).nodes()).attr("tabIndex",c.iTabIndex).data("dtr-keyboard",1))}});m.breakpoints=[{name:"desktop",width:Infinity},{name:"tablet-l",width:1024},{name:"tablet-p",width:768},{name:"mobile-l",width:480},{name:"mobile-p",width:320}];m.display={childRow:function(b,d,c){if(d){if(a(b.node()).hasClass("parent"))return b.child(c(),
-"child").show(),!0}else{if(b.child.isShown())return b.child(!1),a(b.node()).removeClass("parent"),!1;b.child(c(),"child").show();a(b.node()).addClass("parent");return!0}},childRowImmediate:function(b,d,c){if(!d&&b.child.isShown()||!b.responsive.hasHidden())return b.child(!1),a(b.node()).removeClass("parent"),!1;b.child(c(),"child").show();a(b.node()).addClass("parent");return!0},modal:function(b){return function(d,c,e){if(c)a("div.dtr-modal-content").empty().append(e());else{var f=function(){k.remove();
-a(g).off("keypress.dtr")},k=a('<div class="dtr-modal"/>').append(a('<div class="dtr-modal-display"/>').append(a('<div class="dtr-modal-content"/>').append(e())).append(a('<div class="dtr-modal-close">&times;</div>').click(function(){f()}))).append(a('<div class="dtr-modal-background"/>').click(function(){f()})).appendTo("body");a(g).on("keyup.dtr",function(a){27===a.keyCode&&(a.stopPropagation(),f())})}b&&b.header&&a("div.dtr-modal-content").prepend("<h2>"+b.header(d)+"</h2>")}}};var q={};m.renderer=
-{listHiddenNodes:function(){return function(b,d,c){var e=a('<ul data-dtr-index="'+d+'" class="dtr-details"/>'),f=!1;a.each(c,function(c,d){d.hidden&&(a("<li "+(d.className?'class="'+d.className+'"':"")+' data-dtr-index="'+d.columnIndex+'" data-dt-row="'+d.rowIndex+'" data-dt-column="'+d.columnIndex+'"><span class="dtr-title">'+d.title+"</span> </li>").append(a('<span class="dtr-data"/>').append(p(b,d.rowIndex,d.columnIndex))).appendTo(e),f=!0)});return f?e:!1}},listHidden:function(){return function(b,
-d,c){return(b=a.map(c,function(a){var b=a.className?'class="'+a.className+'"':"";return a.hidden?"<li "+b+' data-dtr-index="'+a.columnIndex+'" data-dt-row="'+a.rowIndex+'" data-dt-column="'+a.columnIndex+'"><span class="dtr-title">'+a.title+'</span> <span class="dtr-data">'+a.data+"</span></li>":""}).join(""))?a('<ul data-dtr-index="'+d+'" class="dtr-details"/>').append(b):!1}},tableAll:function(b){b=a.extend({tableClass:""},b);return function(d,c,e){d=a.map(e,function(a){return"<tr "+(a.className?
-'class="'+a.className+'"':"")+' data-dt-row="'+a.rowIndex+'" data-dt-column="'+a.columnIndex+'"><td>'+a.title+":</td> <td>"+a.data+"</td></tr>"}).join("");return a('<table class="'+b.tableClass+' dtr-details" width="100%"/>').append(d)}}};m.defaults={breakpoints:m.breakpoints,auto:!0,details:{display:m.display.childRow,renderer:m.renderer.listHidden(),target:0,type:"inline"},orthogonal:"display"};var u=a.fn.dataTable.Api;u.register("responsive()",function(){return this});u.register("responsive.index()",
-function(b){b=a(b);return{column:b.data("dtr-index"),row:b.parent().data("dtr-index")}});u.register("responsive.rebuild()",function(){return this.iterator("table",function(a){a._responsive&&a._responsive._classLogic()})});u.register("responsive.recalc()",function(){return this.iterator("table",function(a){a._responsive&&(a._responsive._resizeAuto(),a._responsive._resize())})});u.register("responsive.hasHidden()",function(){var b=this.context[0];return b._responsive?-1!==a.inArray(!1,b._responsive._responsiveOnlyHidden()):
-!1});u.registerPlural("columns().responsiveHidden()","column().responsiveHidden()",function(){return this.iterator("column",function(a,d){return a._responsive?a._responsive._responsiveOnlyHidden()[d]:!1},1)});m.version="2.2.5";a.fn.dataTable.Responsive=m;a.fn.DataTable.Responsive=m;a(g).on("preInit.dt.dtr",function(b,d,c){"dt"===b.namespace&&(a(d.nTable).hasClass("responsive")||a(d.nTable).hasClass("dt-responsive")||d.oInit.responsive||t.defaults.responsive)&&(b=d.oInit.responsive,!1!==b&&new m(d,
-a.isPlainObject(b)?b:{}))});return m});
diff --git a/DataTables/Responsive-2.2.5/js/responsive.bootstrap.js b/DataTables/Responsive-2.2.5/js/responsive.bootstrap.js
deleted file mode 100644
index c275a0e..0000000
--- a/DataTables/Responsive-2.2.5/js/responsive.bootstrap.js
+++ /dev/null
@@ -1,85 +0,0 @@
-/*! Bootstrap integration for DataTables' Responsive
- * ©2015-2016 SpryMedia Ltd - datatables.net/license
- */
-
-(function( factory ){
-	if ( typeof define === 'function' && define.amd ) {
-		// AMD
-		define( ['jquery', 'datatables.net-bs', 'datatables.net-responsive'], function ( $ ) {
-			return factory( $, window, document );
-		} );
-	}
-	else if ( typeof exports === 'object' ) {
-		// CommonJS
-		module.exports = function (root, $) {
-			if ( ! root ) {
-				root = window;
-			}
-
-			if ( ! $ || ! $.fn.dataTable ) {
-				$ = require('datatables.net-bs')(root, $).$;
-			}
-
-			if ( ! $.fn.dataTable.Responsive ) {
-				require('datatables.net-responsive')(root, $);
-			}
-
-			return factory( $, root, root.document );
-		};
-	}
-	else {
-		// Browser
-		factory( jQuery, window, document );
-	}
-}(function( $, window, document, undefined ) {
-'use strict';
-var DataTable = $.fn.dataTable;
-
-
-var _display = DataTable.Responsive.display;
-var _original = _display.modal;
-var _modal = $(
-	'<div class="modal fade dtr-bs-modal" role="dialog">'+
-		'<div class="modal-dialog" role="document">'+
-			'<div class="modal-content">'+
-				'<div class="modal-header">'+
-					'<button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>'+
-				'</div>'+
-				'<div class="modal-body"/>'+
-			'</div>'+
-		'</div>'+
-	'</div>'
-);
-
-_display.modal = function ( options ) {
-	return function ( row, update, render ) {
-		if ( ! $.fn.modal ) {
-			_original( row, update, render );
-		}
-		else {
-			if ( ! update ) {
-				if ( options && options.header ) {
-					var header = _modal.find('div.modal-header');
-					var button = header.find('button').detach();
-					
-					header
-						.empty()
-						.append( '<h4 class="modal-title">'+options.header( row )+'</h4>' )
-						.prepend( button );
-				}
-
-				_modal.find( 'div.modal-body' )
-					.empty()
-					.append( render() );
-
-				_modal
-					.appendTo( 'body' )
-					.modal();
-			}
-		}
-	};
-};
-
-
-return DataTable.Responsive;
-}));
diff --git a/DataTables/Responsive-2.2.5/js/responsive.bootstrap.min.js b/DataTables/Responsive-2.2.5/js/responsive.bootstrap.min.js
deleted file mode 100644
index ecfce49..0000000
--- a/DataTables/Responsive-2.2.5/js/responsive.bootstrap.min.js
+++ /dev/null
@@ -1,9 +0,0 @@
-/*!
- Bootstrap integration for DataTables' Responsive
- ©2015-2016 SpryMedia Ltd - datatables.net/license
-*/
-var $jscomp=$jscomp||{};$jscomp.scope={};$jscomp.findInternal=function(a,c,b){a instanceof String&&(a=String(a));for(var d=a.length,e=0;e<d;e++){var f=a[e];if(c.call(b,f,e,a))return{i:e,v:f}}return{i:-1,v:void 0}};$jscomp.ASSUME_ES5=!1;$jscomp.ASSUME_NO_NATIVE_MAP=!1;$jscomp.ASSUME_NO_NATIVE_SET=!1;$jscomp.SIMPLE_FROUND_POLYFILL=!1;
-$jscomp.defineProperty=$jscomp.ASSUME_ES5||"function"==typeof Object.defineProperties?Object.defineProperty:function(a,c,b){a!=Array.prototype&&a!=Object.prototype&&(a[c]=b.value)};$jscomp.getGlobal=function(a){a=["object"==typeof window&&window,"object"==typeof self&&self,"object"==typeof global&&global,a];for(var c=0;c<a.length;++c){var b=a[c];if(b&&b.Math==Math)return b}throw Error("Cannot find global object");};$jscomp.global=$jscomp.getGlobal(this);
-$jscomp.polyfill=function(a,c,b,d){if(c){b=$jscomp.global;a=a.split(".");for(d=0;d<a.length-1;d++){var e=a[d];e in b||(b[e]={});b=b[e]}a=a[a.length-1];d=b[a];c=c(d);c!=d&&null!=c&&$jscomp.defineProperty(b,a,{configurable:!0,writable:!0,value:c})}};$jscomp.polyfill("Array.prototype.find",function(a){return a?a:function(a,b){return $jscomp.findInternal(this,a,b).v}},"es6","es3");
-(function(a){"function"===typeof define&&define.amd?define(["jquery","datatables.net-bs","datatables.net-responsive"],function(c){return a(c,window,document)}):"object"===typeof exports?module.exports=function(c,b){c||(c=window);b&&b.fn.dataTable||(b=require("datatables.net-bs")(c,b).$);b.fn.dataTable.Responsive||require("datatables.net-responsive")(c,b);return a(b,c,c.document)}:a(jQuery,window,document)})(function(a,c,b,d){c=a.fn.dataTable;b=c.Responsive.display;var e=b.modal,f=a('<div class="modal fade dtr-bs-modal" role="dialog"><div class="modal-dialog" role="document"><div class="modal-content"><div class="modal-header"><button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button></div><div class="modal-body"/></div></div></div>');
-b.modal=function(b){return function(c,d,g){if(!a.fn.modal)e(c,d,g);else if(!d){if(b&&b.header){d=f.find("div.modal-header");var h=d.find("button").detach();d.empty().append('<h4 class="modal-title">'+b.header(c)+"</h4>").prepend(h)}f.find("div.modal-body").empty().append(g());f.appendTo("body").modal()}}};return c.Responsive});
diff --git a/DataTables/Responsive-2.2.5/js/responsive.bootstrap4.js b/DataTables/Responsive-2.2.5/js/responsive.bootstrap4.js
deleted file mode 100644
index bfbecf1..0000000
--- a/DataTables/Responsive-2.2.5/js/responsive.bootstrap4.js
+++ /dev/null
@@ -1,85 +0,0 @@
-/*! Bootstrap 4 integration for DataTables' Responsive
- * ©2016 SpryMedia Ltd - datatables.net/license
- */
-
-(function( factory ){
-	if ( typeof define === 'function' && define.amd ) {
-		// AMD
-		define( ['jquery', 'datatables.net-bs4', 'datatables.net-responsive'], function ( $ ) {
-			return factory( $, window, document );
-		} );
-	}
-	else if ( typeof exports === 'object' ) {
-		// CommonJS
-		module.exports = function (root, $) {
-			if ( ! root ) {
-				root = window;
-			}
-
-			if ( ! $ || ! $.fn.dataTable ) {
-				$ = require('datatables.net-bs4')(root, $).$;
-			}
-
-			if ( ! $.fn.dataTable.Responsive ) {
-				require('datatables.net-responsive')(root, $);
-			}
-
-			return factory( $, root, root.document );
-		};
-	}
-	else {
-		// Browser
-		factory( jQuery, window, document );
-	}
-}(function( $, window, document, undefined ) {
-'use strict';
-var DataTable = $.fn.dataTable;
-
-
-var _display = DataTable.Responsive.display;
-var _original = _display.modal;
-var _modal = $(
-	'<div class="modal fade dtr-bs-modal" role="dialog">'+
-		'<div class="modal-dialog" role="document">'+
-			'<div class="modal-content">'+
-				'<div class="modal-header">'+
-					'<button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>'+
-				'</div>'+
-				'<div class="modal-body"/>'+
-			'</div>'+
-		'</div>'+
-	'</div>'
-);
-
-_display.modal = function ( options ) {
-	return function ( row, update, render ) {
-		if ( ! $.fn.modal ) {
-			_original( row, update, render );
-		}
-		else {
-			if ( ! update ) {
-				if ( options && options.header ) {
-					var header = _modal.find('div.modal-header');
-					var button = header.find('button').detach();
-					
-					header
-						.empty()
-						.append( '<h4 class="modal-title">'+options.header( row )+'</h4>' )
-						.append( button );
-				}
-
-				_modal.find( 'div.modal-body' )
-					.empty()
-					.append( render() );
-
-				_modal
-					.appendTo( 'body' )
-					.modal();
-			}
-		}
-	};
-};
-
-
-return DataTable.Responsive;
-}));
diff --git a/DataTables/Responsive-2.2.5/js/responsive.bootstrap4.min.js b/DataTables/Responsive-2.2.5/js/responsive.bootstrap4.min.js
deleted file mode 100644
index d399ad0..0000000
--- a/DataTables/Responsive-2.2.5/js/responsive.bootstrap4.min.js
+++ /dev/null
@@ -1,9 +0,0 @@
-/*!
- Bootstrap 4 integration for DataTables' Responsive
- ©2016 SpryMedia Ltd - datatables.net/license
-*/
-var $jscomp=$jscomp||{};$jscomp.scope={};$jscomp.findInternal=function(a,c,b){a instanceof String&&(a=String(a));for(var d=a.length,e=0;e<d;e++){var f=a[e];if(c.call(b,f,e,a))return{i:e,v:f}}return{i:-1,v:void 0}};$jscomp.ASSUME_ES5=!1;$jscomp.ASSUME_NO_NATIVE_MAP=!1;$jscomp.ASSUME_NO_NATIVE_SET=!1;$jscomp.SIMPLE_FROUND_POLYFILL=!1;
-$jscomp.defineProperty=$jscomp.ASSUME_ES5||"function"==typeof Object.defineProperties?Object.defineProperty:function(a,c,b){a!=Array.prototype&&a!=Object.prototype&&(a[c]=b.value)};$jscomp.getGlobal=function(a){a=["object"==typeof window&&window,"object"==typeof self&&self,"object"==typeof global&&global,a];for(var c=0;c<a.length;++c){var b=a[c];if(b&&b.Math==Math)return b}throw Error("Cannot find global object");};$jscomp.global=$jscomp.getGlobal(this);
-$jscomp.polyfill=function(a,c,b,d){if(c){b=$jscomp.global;a=a.split(".");for(d=0;d<a.length-1;d++){var e=a[d];e in b||(b[e]={});b=b[e]}a=a[a.length-1];d=b[a];c=c(d);c!=d&&null!=c&&$jscomp.defineProperty(b,a,{configurable:!0,writable:!0,value:c})}};$jscomp.polyfill("Array.prototype.find",function(a){return a?a:function(a,b){return $jscomp.findInternal(this,a,b).v}},"es6","es3");
-(function(a){"function"===typeof define&&define.amd?define(["jquery","datatables.net-bs4","datatables.net-responsive"],function(c){return a(c,window,document)}):"object"===typeof exports?module.exports=function(c,b){c||(c=window);b&&b.fn.dataTable||(b=require("datatables.net-bs4")(c,b).$);b.fn.dataTable.Responsive||require("datatables.net-responsive")(c,b);return a(b,c,c.document)}:a(jQuery,window,document)})(function(a,c,b,d){c=a.fn.dataTable;b=c.Responsive.display;var e=b.modal,f=a('<div class="modal fade dtr-bs-modal" role="dialog"><div class="modal-dialog" role="document"><div class="modal-content"><div class="modal-header"><button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button></div><div class="modal-body"/></div></div></div>');
-b.modal=function(b){return function(c,d,g){if(!a.fn.modal)e(c,d,g);else if(!d){if(b&&b.header){d=f.find("div.modal-header");var h=d.find("button").detach();d.empty().append('<h4 class="modal-title">'+b.header(c)+"</h4>").append(h)}f.find("div.modal-body").empty().append(g());f.appendTo("body").modal()}}};return c.Responsive});
diff --git a/DataTables/Responsive-2.2.5/js/responsive.foundation.js b/DataTables/Responsive-2.2.5/js/responsive.foundation.js
deleted file mode 100644
index 99e8689..0000000
--- a/DataTables/Responsive-2.2.5/js/responsive.foundation.js
+++ /dev/null
@@ -1,62 +0,0 @@
-/*! Foundation integration for DataTables' Responsive
- * ©2015 SpryMedia Ltd - datatables.net/license
- */
-
-(function( factory ){
-	if ( typeof define === 'function' && define.amd ) {
-		// AMD
-		define( ['jquery', 'datatables.net-zf', 'datatables.net-responsive'], function ( $ ) {
-			return factory( $, window, document );
-		} );
-	}
-	else if ( typeof exports === 'object' ) {
-		// CommonJS
-		module.exports = function (root, $) {
-			if ( ! root ) {
-				root = window;
-			}
-
-			if ( ! $ || ! $.fn.dataTable ) {
-				$ = require('datatables.net-zf')(root, $).$;
-			}
-
-			if ( ! $.fn.dataTable.Responsive ) {
-				require('datatables.net-responsive')(root, $);
-			}
-
-			return factory( $, root, root.document );
-		};
-	}
-	else {
-		// Browser
-		factory( jQuery, window, document );
-	}
-}(function( $, window, document, undefined ) {
-'use strict';
-var DataTable = $.fn.dataTable;
-
-
-var _display = DataTable.Responsive.display;
-var _original = _display.modal;
-
-_display.modal = function ( options ) {
-	return function ( row, update, render ) {
-		if ( ! $.fn.foundation ) {
-			_original( row, update, render );
-		}
-		else {
-			if ( ! update ) {
-				$( '<div class="reveal-modal" data-reveal/>' )
-					.append( '<a class="close-reveal-modal" aria-label="Close">&#215;</a>' )
-					.append( options && options.header ? '<h4>'+options.header( row )+'</h4>' : null )
-					.append( render() )
-					.appendTo( 'body' )
-					.foundation( 'reveal', 'open' );
-			}
-		}
-	};
-};
-
-
-return DataTable.Responsive;
-}));
diff --git a/DataTables/Responsive-2.2.5/js/responsive.foundation.min.js b/DataTables/Responsive-2.2.5/js/responsive.foundation.min.js
deleted file mode 100644
index d95c4a8..0000000
--- a/DataTables/Responsive-2.2.5/js/responsive.foundation.min.js
+++ /dev/null
@@ -1,6 +0,0 @@
-/*!
- Foundation integration for DataTables' Responsive
- ©2015 SpryMedia Ltd - datatables.net/license
-*/
-(function(c){"function"===typeof define&&define.amd?define(["jquery","datatables.net-zf","datatables.net-responsive"],function(a){return c(a,window,document)}):"object"===typeof exports?module.exports=function(a,b){a||(a=window);b&&b.fn.dataTable||(b=require("datatables.net-zf")(a,b).$);b.fn.dataTable.Responsive||require("datatables.net-responsive")(a,b);return c(b,a,a.document)}:c(jQuery,window,document)})(function(c,a,b,g){a=c.fn.dataTable;b=a.Responsive.display;var f=b.modal;b.modal=function(a){return function(b,
-d,e){c.fn.foundation?d||c('<div class="reveal-modal" data-reveal/>').append('<a class="close-reveal-modal" aria-label="Close">&#215;</a>').append(a&&a.header?"<h4>"+a.header(b)+"</h4>":null).append(e()).appendTo("body").foundation("reveal","open"):f(b,d,e)}};return a.Responsive});
diff --git a/DataTables/Responsive-2.2.5/js/responsive.jqueryui.js b/DataTables/Responsive-2.2.5/js/responsive.jqueryui.js
deleted file mode 100644
index 2c1d23d..0000000
--- a/DataTables/Responsive-2.2.5/js/responsive.jqueryui.js
+++ /dev/null
@@ -1,63 +0,0 @@
-/*! jQuery UI integration for DataTables' Responsive
- * ©2015 SpryMedia Ltd - datatables.net/license
- */
-
-(function( factory ){
-	if ( typeof define === 'function' && define.amd ) {
-		// AMD
-		define( ['jquery', 'datatables.net-jqui', 'datatables.net-responsive'], function ( $ ) {
-			return factory( $, window, document );
-		} );
-	}
-	else if ( typeof exports === 'object' ) {
-		// CommonJS
-		module.exports = function (root, $) {
-			if ( ! root ) {
-				root = window;
-			}
-
-			if ( ! $ || ! $.fn.dataTable ) {
-				$ = require('datatables.net-jqui')(root, $).$;
-			}
-
-			if ( ! $.fn.dataTable.Responsive ) {
-				require('datatables.net-responsive')(root, $);
-			}
-
-			return factory( $, root, root.document );
-		};
-	}
-	else {
-		// Browser
-		factory( jQuery, window, document );
-	}
-}(function( $, window, document, undefined ) {
-'use strict';
-var DataTable = $.fn.dataTable;
-
-
-var _display = DataTable.Responsive.display;
-var _original = _display.modal;
-
-_display.modal = function ( options ) {
-	return function ( row, update, render ) {
-		if ( ! $.fn.dialog ) {
-			_original( row, update, render );
-		}
-		else {
-			if ( ! update ) {
-				$( '<div/>' )
-					.append( render() )
-					.appendTo( 'body' )
-					.dialog( $.extend( true, {
-						title: options && options.header ? options.header( row ) : '',
-						width: 500
-					}, options.dialog ) );
-			}
-		}
-	};
-};
-
-
-return DataTable.Responsive;
-}));
diff --git a/DataTables/Responsive-2.2.5/js/responsive.jqueryui.min.js b/DataTables/Responsive-2.2.5/js/responsive.jqueryui.min.js
deleted file mode 100644
index bbe76e3..0000000
--- a/DataTables/Responsive-2.2.5/js/responsive.jqueryui.min.js
+++ /dev/null
@@ -1,6 +0,0 @@
-/*!
- jQuery UI integration for DataTables' Responsive
- ©2015 SpryMedia Ltd - datatables.net/license
-*/
-(function(c){"function"===typeof define&&define.amd?define(["jquery","datatables.net-jqui","datatables.net-responsive"],function(a){return c(a,window,document)}):"object"===typeof exports?module.exports=function(a,b){a||(a=window);b&&b.fn.dataTable||(b=require("datatables.net-jqui")(a,b).$);b.fn.dataTable.Responsive||require("datatables.net-responsive")(a,b);return c(b,a,a.document)}:c(jQuery,window,document)})(function(c,a,b,g){a=c.fn.dataTable;b=a.Responsive.display;var f=b.modal;b.modal=function(a){return function(b,
-d,e){c.fn.dialog?d||c("<div/>").append(e()).appendTo("body").dialog(c.extend(!0,{title:a&&a.header?a.header(b):"",width:500},a.dialog)):f(b,d,e)}};return a.Responsive});
diff --git a/DataTables/Responsive-2.2.5/js/responsive.semanticui.js b/DataTables/Responsive-2.2.5/js/responsive.semanticui.js
deleted file mode 100644
index e46995d..0000000
--- a/DataTables/Responsive-2.2.5/js/responsive.semanticui.js
+++ /dev/null
@@ -1,80 +0,0 @@
-/*! Bootstrap integration for DataTables' Responsive
- * ©2015-2016 SpryMedia Ltd - datatables.net/license
- */
-
-(function( factory ){
-	if ( typeof define === 'function' && define.amd ) {
-		// AMD
-		define( ['jquery', 'datatables.net-se', 'datatables.net-responsive'], function ( $ ) {
-			return factory( $, window, document );
-		} );
-	}
-	else if ( typeof exports === 'object' ) {
-		// CommonJS
-		module.exports = function (root, $) {
-			if ( ! root ) {
-				root = window;
-			}
-
-			if ( ! $ || ! $.fn.dataTable ) {
-				$ = require('datatables.net-se')(root, $).$;
-			}
-
-			if ( ! $.fn.dataTable.Responsive ) {
-				require('datatables.net-responsive')(root, $);
-			}
-
-			return factory( $, root, root.document );
-		};
-	}
-	else {
-		// Browser
-		factory( jQuery, window, document );
-	}
-}(function( $, window, document, undefined ) {
-'use strict';
-var DataTable = $.fn.dataTable;
-
-
-var _display = DataTable.Responsive.display;
-var _original = _display.modal;
-var _modal = $(
-	'<div class="ui modal" role="dialog">'+
-		'<div class="header">'+
-			'<button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>'+
-		'</div>'+
-		'<div class="content"/>'+
-	'</div>'
-);
-
-_display.modal = function ( options ) {
-	return function ( row, update, render ) {
-		if ( ! $.fn.modal ) {
-			_original( row, update, render );
-		}
-		else {
-			if ( ! update ) {
-				if ( options && options.header ) {
-					_modal.find('div.header')
-						.empty()
-						.append( '<h4 class="title">'+options.header( row )+'</h4>' );
-				}
-
-				_modal.find( 'div.content' )
-					.empty()
-					.append( render() );
-
-				// Only need to attach the first time
-				if (! _modal.parent().hasClass('dimmer')) {
-					_modal.appendTo( 'body' )
-				}
-
-				_modal.modal('show');
-			}
-		}
-	};
-};
-
-
-return DataTable.Responsive;
-}));
diff --git a/DataTables/Responsive-2.2.5/js/responsive.semanticui.min.js b/DataTables/Responsive-2.2.5/js/responsive.semanticui.min.js
deleted file mode 100644
index 2290e0e..0000000
--- a/DataTables/Responsive-2.2.5/js/responsive.semanticui.min.js
+++ /dev/null
@@ -1,9 +0,0 @@
-/*!
- Bootstrap integration for DataTables' Responsive
- ©2015-2016 SpryMedia Ltd - datatables.net/license
-*/
-var $jscomp=$jscomp||{};$jscomp.scope={};$jscomp.findInternal=function(a,c,b){a instanceof String&&(a=String(a));for(var d=a.length,e=0;e<d;e++){var f=a[e];if(c.call(b,f,e,a))return{i:e,v:f}}return{i:-1,v:void 0}};$jscomp.ASSUME_ES5=!1;$jscomp.ASSUME_NO_NATIVE_MAP=!1;$jscomp.ASSUME_NO_NATIVE_SET=!1;$jscomp.SIMPLE_FROUND_POLYFILL=!1;
-$jscomp.defineProperty=$jscomp.ASSUME_ES5||"function"==typeof Object.defineProperties?Object.defineProperty:function(a,c,b){a!=Array.prototype&&a!=Object.prototype&&(a[c]=b.value)};$jscomp.getGlobal=function(a){a=["object"==typeof window&&window,"object"==typeof self&&self,"object"==typeof global&&global,a];for(var c=0;c<a.length;++c){var b=a[c];if(b&&b.Math==Math)return b}throw Error("Cannot find global object");};$jscomp.global=$jscomp.getGlobal(this);
-$jscomp.polyfill=function(a,c,b,d){if(c){b=$jscomp.global;a=a.split(".");for(d=0;d<a.length-1;d++){var e=a[d];e in b||(b[e]={});b=b[e]}a=a[a.length-1];d=b[a];c=c(d);c!=d&&null!=c&&$jscomp.defineProperty(b,a,{configurable:!0,writable:!0,value:c})}};$jscomp.polyfill("Array.prototype.find",function(a){return a?a:function(a,b){return $jscomp.findInternal(this,a,b).v}},"es6","es3");
-(function(a){"function"===typeof define&&define.amd?define(["jquery","datatables.net-se","datatables.net-responsive"],function(c){return a(c,window,document)}):"object"===typeof exports?module.exports=function(c,b){c||(c=window);b&&b.fn.dataTable||(b=require("datatables.net-se")(c,b).$);b.fn.dataTable.Responsive||require("datatables.net-responsive")(c,b);return a(b,c,c.document)}:a(jQuery,window,document)})(function(a,c,b,d){c=a.fn.dataTable;b=c.Responsive.display;var e=b.modal,f=a('<div class="ui modal" role="dialog"><div class="header"><button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button></div><div class="content"/></div>');
-b.modal=function(b){return function(c,d,g){a.fn.modal?d||(b&&b.header&&f.find("div.header").empty().append('<h4 class="title">'+b.header(c)+"</h4>"),f.find("div.content").empty().append(g()),f.parent().hasClass("dimmer")||f.appendTo("body"),f.modal("show")):e(c,d,g)}};return c.Responsive});
diff --git a/DataTables/Select-1.3.1/css/select.bootstrap.css b/DataTables/Select-1.3.1/css/select.bootstrap.css
deleted file mode 100644
index 7b3dc12..0000000
--- a/DataTables/Select-1.3.1/css/select.bootstrap.css
+++ /dev/null
@@ -1,115 +0,0 @@
-table.dataTable tbody > tr.selected,
-table.dataTable tbody > tr > .selected {
-  background-color: #08C;
-}
-table.dataTable.stripe tbody > tr.odd.selected,
-table.dataTable.stripe tbody > tr.odd > .selected, table.dataTable.display tbody > tr.odd.selected,
-table.dataTable.display tbody > tr.odd > .selected {
-  background-color: #0085c7;
-}
-table.dataTable.hover tbody > tr.selected:hover,
-table.dataTable.hover tbody > tr > .selected:hover, table.dataTable.display tbody > tr.selected:hover,
-table.dataTable.display tbody > tr > .selected:hover {
-  background-color: #0083c5;
-}
-table.dataTable.order-column tbody > tr.selected > .sorting_1,
-table.dataTable.order-column tbody > tr.selected > .sorting_2,
-table.dataTable.order-column tbody > tr.selected > .sorting_3,
-table.dataTable.order-column tbody > tr > .selected, table.dataTable.display tbody > tr.selected > .sorting_1,
-table.dataTable.display tbody > tr.selected > .sorting_2,
-table.dataTable.display tbody > tr.selected > .sorting_3,
-table.dataTable.display tbody > tr > .selected {
-  background-color: #0085c8;
-}
-table.dataTable.display tbody > tr.odd.selected > .sorting_1, table.dataTable.order-column.stripe tbody > tr.odd.selected > .sorting_1 {
-  background-color: #0081c1;
-}
-table.dataTable.display tbody > tr.odd.selected > .sorting_2, table.dataTable.order-column.stripe tbody > tr.odd.selected > .sorting_2 {
-  background-color: #0082c2;
-}
-table.dataTable.display tbody > tr.odd.selected > .sorting_3, table.dataTable.order-column.stripe tbody > tr.odd.selected > .sorting_3 {
-  background-color: #0083c4;
-}
-table.dataTable.display tbody > tr.even.selected > .sorting_1, table.dataTable.order-column.stripe tbody > tr.even.selected > .sorting_1 {
-  background-color: #0085c8;
-}
-table.dataTable.display tbody > tr.even.selected > .sorting_2, table.dataTable.order-column.stripe tbody > tr.even.selected > .sorting_2 {
-  background-color: #0086ca;
-}
-table.dataTable.display tbody > tr.even.selected > .sorting_3, table.dataTable.order-column.stripe tbody > tr.even.selected > .sorting_3 {
-  background-color: #0087cb;
-}
-table.dataTable.display tbody > tr.odd > .selected, table.dataTable.order-column.stripe tbody > tr.odd > .selected {
-  background-color: #0081c1;
-}
-table.dataTable.display tbody > tr.even > .selected, table.dataTable.order-column.stripe tbody > tr.even > .selected {
-  background-color: #0085c8;
-}
-table.dataTable.display tbody > tr.selected:hover > .sorting_1, table.dataTable.order-column.hover tbody > tr.selected:hover > .sorting_1 {
-  background-color: #007dbb;
-}
-table.dataTable.display tbody > tr.selected:hover > .sorting_2, table.dataTable.order-column.hover tbody > tr.selected:hover > .sorting_2 {
-  background-color: #007ebd;
-}
-table.dataTable.display tbody > tr.selected:hover > .sorting_3, table.dataTable.order-column.hover tbody > tr.selected:hover > .sorting_3 {
-  background-color: #007fbf;
-}
-table.dataTable.display tbody > tr:hover > .selected,
-table.dataTable.display tbody > tr > .selected:hover, table.dataTable.order-column.hover tbody > tr:hover > .selected,
-table.dataTable.order-column.hover tbody > tr > .selected:hover {
-  background-color: #007dbb;
-}
-table.dataTable tbody td.select-checkbox,
-table.dataTable tbody th.select-checkbox {
-  position: relative;
-}
-table.dataTable tbody td.select-checkbox:before, table.dataTable tbody td.select-checkbox:after,
-table.dataTable tbody th.select-checkbox:before,
-table.dataTable tbody th.select-checkbox:after {
-  display: block;
-  position: absolute;
-  top: 1.2em;
-  left: 50%;
-  width: 12px;
-  height: 12px;
-  box-sizing: border-box;
-}
-table.dataTable tbody td.select-checkbox:before,
-table.dataTable tbody th.select-checkbox:before {
-  content: ' ';
-  margin-top: -6px;
-  margin-left: -6px;
-  border: 1px solid black;
-  border-radius: 3px;
-}
-table.dataTable tr.selected td.select-checkbox:after,
-table.dataTable tr.selected th.select-checkbox:after {
-  content: '\2714';
-  margin-top: -11px;
-  margin-left: -4px;
-  text-align: center;
-  text-shadow: 1px 1px #B0BED9, -1px -1px #B0BED9, 1px -1px #B0BED9, -1px 1px #B0BED9;
-}
-
-div.dataTables_wrapper span.select-info,
-div.dataTables_wrapper span.select-item {
-  margin-left: 0.5em;
-}
-
-@media screen and (max-width: 640px) {
-  div.dataTables_wrapper span.select-info,
-  div.dataTables_wrapper span.select-item {
-    margin-left: 0;
-    display: block;
-  }
-}
-table.dataTable tbody tr.selected,
-table.dataTable tbody th.selected,
-table.dataTable tbody td.selected {
-  color: white;
-}
-table.dataTable tbody tr.selected a,
-table.dataTable tbody th.selected a,
-table.dataTable tbody td.selected a {
-  color: #a2d4ed;
-}
diff --git a/DataTables/Select-1.3.1/css/select.bootstrap.min.css b/DataTables/Select-1.3.1/css/select.bootstrap.min.css
deleted file mode 100644
index 123e40a..0000000
--- a/DataTables/Select-1.3.1/css/select.bootstrap.min.css
+++ /dev/null
@@ -1 +0,0 @@
-table.dataTable tbody>tr.selected,table.dataTable tbody>tr>.selected{background-color:#08C}table.dataTable.stripe tbody>tr.odd.selected,table.dataTable.stripe tbody>tr.odd>.selected,table.dataTable.display tbody>tr.odd.selected,table.dataTable.display tbody>tr.odd>.selected{background-color:#0085c7}table.dataTable.hover tbody>tr.selected:hover,table.dataTable.hover tbody>tr>.selected:hover,table.dataTable.display tbody>tr.selected:hover,table.dataTable.display tbody>tr>.selected:hover{background-color:#0083c5}table.dataTable.order-column tbody>tr.selected>.sorting_1,table.dataTable.order-column tbody>tr.selected>.sorting_2,table.dataTable.order-column tbody>tr.selected>.sorting_3,table.dataTable.order-column tbody>tr>.selected,table.dataTable.display tbody>tr.selected>.sorting_1,table.dataTable.display tbody>tr.selected>.sorting_2,table.dataTable.display tbody>tr.selected>.sorting_3,table.dataTable.display tbody>tr>.selected{background-color:#0085c8}table.dataTable.display tbody>tr.odd.selected>.sorting_1,table.dataTable.order-column.stripe tbody>tr.odd.selected>.sorting_1{background-color:#0081c1}table.dataTable.display tbody>tr.odd.selected>.sorting_2,table.dataTable.order-column.stripe tbody>tr.odd.selected>.sorting_2{background-color:#0082c2}table.dataTable.display tbody>tr.odd.selected>.sorting_3,table.dataTable.order-column.stripe tbody>tr.odd.selected>.sorting_3{background-color:#0083c4}table.dataTable.display tbody>tr.even.selected>.sorting_1,table.dataTable.order-column.stripe tbody>tr.even.selected>.sorting_1{background-color:#0085c8}table.dataTable.display tbody>tr.even.selected>.sorting_2,table.dataTable.order-column.stripe tbody>tr.even.selected>.sorting_2{background-color:#0086ca}table.dataTable.display tbody>tr.even.selected>.sorting_3,table.dataTable.order-column.stripe tbody>tr.even.selected>.sorting_3{background-color:#0087cb}table.dataTable.display tbody>tr.odd>.selected,table.dataTable.order-column.stripe tbody>tr.odd>.selected{background-color:#0081c1}table.dataTable.display tbody>tr.even>.selected,table.dataTable.order-column.stripe tbody>tr.even>.selected{background-color:#0085c8}table.dataTable.display tbody>tr.selected:hover>.sorting_1,table.dataTable.order-column.hover tbody>tr.selected:hover>.sorting_1{background-color:#007dbb}table.dataTable.display tbody>tr.selected:hover>.sorting_2,table.dataTable.order-column.hover tbody>tr.selected:hover>.sorting_2{background-color:#007ebd}table.dataTable.display tbody>tr.selected:hover>.sorting_3,table.dataTable.order-column.hover tbody>tr.selected:hover>.sorting_3{background-color:#007fbf}table.dataTable.display tbody>tr:hover>.selected,table.dataTable.display tbody>tr>.selected:hover,table.dataTable.order-column.hover tbody>tr:hover>.selected,table.dataTable.order-column.hover tbody>tr>.selected:hover{background-color:#007dbb}table.dataTable tbody td.select-checkbox,table.dataTable tbody th.select-checkbox{position:relative}table.dataTable tbody td.select-checkbox:before,table.dataTable tbody td.select-checkbox:after,table.dataTable tbody th.select-checkbox:before,table.dataTable tbody th.select-checkbox:after{display:block;position:absolute;top:1.2em;left:50%;width:12px;height:12px;box-sizing:border-box}table.dataTable tbody td.select-checkbox:before,table.dataTable tbody th.select-checkbox:before{content:' ';margin-top:-6px;margin-left:-6px;border:1px solid black;border-radius:3px}table.dataTable tr.selected td.select-checkbox:after,table.dataTable tr.selected th.select-checkbox:after{content:'\2714';margin-top:-11px;margin-left:-4px;text-align:center;text-shadow:1px 1px #B0BED9, -1px -1px #B0BED9, 1px -1px #B0BED9, -1px 1px #B0BED9}div.dataTables_wrapper span.select-info,div.dataTables_wrapper span.select-item{margin-left:0.5em}@media screen and (max-width: 640px){div.dataTables_wrapper span.select-info,div.dataTables_wrapper span.select-item{margin-left:0;display:block}}table.dataTable tbody tr.selected,table.dataTable tbody th.selected,table.dataTable tbody td.selected{color:white}table.dataTable tbody tr.selected a,table.dataTable tbody th.selected a,table.dataTable tbody td.selected a{color:#a2d4ed}
diff --git a/DataTables/Select-1.3.1/css/select.bootstrap4.css b/DataTables/Select-1.3.1/css/select.bootstrap4.css
deleted file mode 100644
index 57f4179..0000000
--- a/DataTables/Select-1.3.1/css/select.bootstrap4.css
+++ /dev/null
@@ -1,115 +0,0 @@
-table.dataTable tbody > tr.selected,
-table.dataTable tbody > tr > .selected {
-  background-color: #0275d8;
-}
-table.dataTable.stripe tbody > tr.odd.selected,
-table.dataTable.stripe tbody > tr.odd > .selected, table.dataTable.display tbody > tr.odd.selected,
-table.dataTable.display tbody > tr.odd > .selected {
-  background-color: #0272d3;
-}
-table.dataTable.hover tbody > tr.selected:hover,
-table.dataTable.hover tbody > tr > .selected:hover, table.dataTable.display tbody > tr.selected:hover,
-table.dataTable.display tbody > tr > .selected:hover {
-  background-color: #0271d0;
-}
-table.dataTable.order-column tbody > tr.selected > .sorting_1,
-table.dataTable.order-column tbody > tr.selected > .sorting_2,
-table.dataTable.order-column tbody > tr.selected > .sorting_3,
-table.dataTable.order-column tbody > tr > .selected, table.dataTable.display tbody > tr.selected > .sorting_1,
-table.dataTable.display tbody > tr.selected > .sorting_2,
-table.dataTable.display tbody > tr.selected > .sorting_3,
-table.dataTable.display tbody > tr > .selected {
-  background-color: #0273d4;
-}
-table.dataTable.display tbody > tr.odd.selected > .sorting_1, table.dataTable.order-column.stripe tbody > tr.odd.selected > .sorting_1 {
-  background-color: #026fcc;
-}
-table.dataTable.display tbody > tr.odd.selected > .sorting_2, table.dataTable.order-column.stripe tbody > tr.odd.selected > .sorting_2 {
-  background-color: #0270ce;
-}
-table.dataTable.display tbody > tr.odd.selected > .sorting_3, table.dataTable.order-column.stripe tbody > tr.odd.selected > .sorting_3 {
-  background-color: #0270d0;
-}
-table.dataTable.display tbody > tr.even.selected > .sorting_1, table.dataTable.order-column.stripe tbody > tr.even.selected > .sorting_1 {
-  background-color: #0273d4;
-}
-table.dataTable.display tbody > tr.even.selected > .sorting_2, table.dataTable.order-column.stripe tbody > tr.even.selected > .sorting_2 {
-  background-color: #0274d5;
-}
-table.dataTable.display tbody > tr.even.selected > .sorting_3, table.dataTable.order-column.stripe tbody > tr.even.selected > .sorting_3 {
-  background-color: #0275d7;
-}
-table.dataTable.display tbody > tr.odd > .selected, table.dataTable.order-column.stripe tbody > tr.odd > .selected {
-  background-color: #026fcc;
-}
-table.dataTable.display tbody > tr.even > .selected, table.dataTable.order-column.stripe tbody > tr.even > .selected {
-  background-color: #0273d4;
-}
-table.dataTable.display tbody > tr.selected:hover > .sorting_1, table.dataTable.order-column.hover tbody > tr.selected:hover > .sorting_1 {
-  background-color: #026bc6;
-}
-table.dataTable.display tbody > tr.selected:hover > .sorting_2, table.dataTable.order-column.hover tbody > tr.selected:hover > .sorting_2 {
-  background-color: #026cc8;
-}
-table.dataTable.display tbody > tr.selected:hover > .sorting_3, table.dataTable.order-column.hover tbody > tr.selected:hover > .sorting_3 {
-  background-color: #026eca;
-}
-table.dataTable.display tbody > tr:hover > .selected,
-table.dataTable.display tbody > tr > .selected:hover, table.dataTable.order-column.hover tbody > tr:hover > .selected,
-table.dataTable.order-column.hover tbody > tr > .selected:hover {
-  background-color: #026bc6;
-}
-table.dataTable tbody td.select-checkbox,
-table.dataTable tbody th.select-checkbox {
-  position: relative;
-}
-table.dataTable tbody td.select-checkbox:before, table.dataTable tbody td.select-checkbox:after,
-table.dataTable tbody th.select-checkbox:before,
-table.dataTable tbody th.select-checkbox:after {
-  display: block;
-  position: absolute;
-  top: 1.2em;
-  left: 50%;
-  width: 12px;
-  height: 12px;
-  box-sizing: border-box;
-}
-table.dataTable tbody td.select-checkbox:before,
-table.dataTable tbody th.select-checkbox:before {
-  content: ' ';
-  margin-top: -6px;
-  margin-left: -6px;
-  border: 1px solid black;
-  border-radius: 3px;
-}
-table.dataTable tr.selected td.select-checkbox:after,
-table.dataTable tr.selected th.select-checkbox:after {
-  content: '\2714';
-  margin-top: -11px;
-  margin-left: -4px;
-  text-align: center;
-  text-shadow: 1px 1px #B0BED9, -1px -1px #B0BED9, 1px -1px #B0BED9, -1px 1px #B0BED9;
-}
-
-div.dataTables_wrapper span.select-info,
-div.dataTables_wrapper span.select-item {
-  margin-left: 0.5em;
-}
-
-@media screen and (max-width: 640px) {
-  div.dataTables_wrapper span.select-info,
-  div.dataTables_wrapper span.select-item {
-    margin-left: 0;
-    display: block;
-  }
-}
-table.dataTable tbody tr.selected,
-table.dataTable tbody th.selected,
-table.dataTable tbody td.selected {
-  color: white;
-}
-table.dataTable tbody tr.selected a,
-table.dataTable tbody th.selected a,
-table.dataTable tbody td.selected a {
-  color: #a2d4ed;
-}
diff --git a/DataTables/Select-1.3.1/css/select.bootstrap4.min.css b/DataTables/Select-1.3.1/css/select.bootstrap4.min.css
deleted file mode 100644
index 5fb496e..0000000
--- a/DataTables/Select-1.3.1/css/select.bootstrap4.min.css
+++ /dev/null
@@ -1 +0,0 @@
-table.dataTable tbody>tr.selected,table.dataTable tbody>tr>.selected{background-color:#0275d8}table.dataTable.stripe tbody>tr.odd.selected,table.dataTable.stripe tbody>tr.odd>.selected,table.dataTable.display tbody>tr.odd.selected,table.dataTable.display tbody>tr.odd>.selected{background-color:#0272d3}table.dataTable.hover tbody>tr.selected:hover,table.dataTable.hover tbody>tr>.selected:hover,table.dataTable.display tbody>tr.selected:hover,table.dataTable.display tbody>tr>.selected:hover{background-color:#0271d0}table.dataTable.order-column tbody>tr.selected>.sorting_1,table.dataTable.order-column tbody>tr.selected>.sorting_2,table.dataTable.order-column tbody>tr.selected>.sorting_3,table.dataTable.order-column tbody>tr>.selected,table.dataTable.display tbody>tr.selected>.sorting_1,table.dataTable.display tbody>tr.selected>.sorting_2,table.dataTable.display tbody>tr.selected>.sorting_3,table.dataTable.display tbody>tr>.selected{background-color:#0273d4}table.dataTable.display tbody>tr.odd.selected>.sorting_1,table.dataTable.order-column.stripe tbody>tr.odd.selected>.sorting_1{background-color:#026fcc}table.dataTable.display tbody>tr.odd.selected>.sorting_2,table.dataTable.order-column.stripe tbody>tr.odd.selected>.sorting_2{background-color:#0270ce}table.dataTable.display tbody>tr.odd.selected>.sorting_3,table.dataTable.order-column.stripe tbody>tr.odd.selected>.sorting_3{background-color:#0270d0}table.dataTable.display tbody>tr.even.selected>.sorting_1,table.dataTable.order-column.stripe tbody>tr.even.selected>.sorting_1{background-color:#0273d4}table.dataTable.display tbody>tr.even.selected>.sorting_2,table.dataTable.order-column.stripe tbody>tr.even.selected>.sorting_2{background-color:#0274d5}table.dataTable.display tbody>tr.even.selected>.sorting_3,table.dataTable.order-column.stripe tbody>tr.even.selected>.sorting_3{background-color:#0275d7}table.dataTable.display tbody>tr.odd>.selected,table.dataTable.order-column.stripe tbody>tr.odd>.selected{background-color:#026fcc}table.dataTable.display tbody>tr.even>.selected,table.dataTable.order-column.stripe tbody>tr.even>.selected{background-color:#0273d4}table.dataTable.display tbody>tr.selected:hover>.sorting_1,table.dataTable.order-column.hover tbody>tr.selected:hover>.sorting_1{background-color:#026bc6}table.dataTable.display tbody>tr.selected:hover>.sorting_2,table.dataTable.order-column.hover tbody>tr.selected:hover>.sorting_2{background-color:#026cc8}table.dataTable.display tbody>tr.selected:hover>.sorting_3,table.dataTable.order-column.hover tbody>tr.selected:hover>.sorting_3{background-color:#026eca}table.dataTable.display tbody>tr:hover>.selected,table.dataTable.display tbody>tr>.selected:hover,table.dataTable.order-column.hover tbody>tr:hover>.selected,table.dataTable.order-column.hover tbody>tr>.selected:hover{background-color:#026bc6}table.dataTable tbody td.select-checkbox,table.dataTable tbody th.select-checkbox{position:relative}table.dataTable tbody td.select-checkbox:before,table.dataTable tbody td.select-checkbox:after,table.dataTable tbody th.select-checkbox:before,table.dataTable tbody th.select-checkbox:after{display:block;position:absolute;top:1.2em;left:50%;width:12px;height:12px;box-sizing:border-box}table.dataTable tbody td.select-checkbox:before,table.dataTable tbody th.select-checkbox:before{content:' ';margin-top:-6px;margin-left:-6px;border:1px solid black;border-radius:3px}table.dataTable tr.selected td.select-checkbox:after,table.dataTable tr.selected th.select-checkbox:after{content:'\2714';margin-top:-11px;margin-left:-4px;text-align:center;text-shadow:1px 1px #B0BED9, -1px -1px #B0BED9, 1px -1px #B0BED9, -1px 1px #B0BED9}div.dataTables_wrapper span.select-info,div.dataTables_wrapper span.select-item{margin-left:0.5em}@media screen and (max-width: 640px){div.dataTables_wrapper span.select-info,div.dataTables_wrapper span.select-item{margin-left:0;display:block}}table.dataTable tbody tr.selected,table.dataTable tbody th.selected,table.dataTable tbody td.selected{color:white}table.dataTable tbody tr.selected a,table.dataTable tbody th.selected a,table.dataTable tbody td.selected a{color:#a2d4ed}
diff --git a/DataTables/Select-1.3.1/css/select.dataTables.css b/DataTables/Select-1.3.1/css/select.dataTables.css
deleted file mode 100644
index 60ab3d7..0000000
--- a/DataTables/Select-1.3.1/css/select.dataTables.css
+++ /dev/null
@@ -1,105 +0,0 @@
-table.dataTable tbody > tr.selected,
-table.dataTable tbody > tr > .selected {
-  background-color: #B0BED9;
-}
-table.dataTable.stripe tbody > tr.odd.selected,
-table.dataTable.stripe tbody > tr.odd > .selected, table.dataTable.display tbody > tr.odd.selected,
-table.dataTable.display tbody > tr.odd > .selected {
-  background-color: #acbad4;
-}
-table.dataTable.hover tbody > tr.selected:hover,
-table.dataTable.hover tbody > tr > .selected:hover, table.dataTable.display tbody > tr.selected:hover,
-table.dataTable.display tbody > tr > .selected:hover {
-  background-color: #aab7d1;
-}
-table.dataTable.order-column tbody > tr.selected > .sorting_1,
-table.dataTable.order-column tbody > tr.selected > .sorting_2,
-table.dataTable.order-column tbody > tr.selected > .sorting_3,
-table.dataTable.order-column tbody > tr > .selected, table.dataTable.display tbody > tr.selected > .sorting_1,
-table.dataTable.display tbody > tr.selected > .sorting_2,
-table.dataTable.display tbody > tr.selected > .sorting_3,
-table.dataTable.display tbody > tr > .selected {
-  background-color: #acbad5;
-}
-table.dataTable.display tbody > tr.odd.selected > .sorting_1, table.dataTable.order-column.stripe tbody > tr.odd.selected > .sorting_1 {
-  background-color: #a6b4cd;
-}
-table.dataTable.display tbody > tr.odd.selected > .sorting_2, table.dataTable.order-column.stripe tbody > tr.odd.selected > .sorting_2 {
-  background-color: #a8b5cf;
-}
-table.dataTable.display tbody > tr.odd.selected > .sorting_3, table.dataTable.order-column.stripe tbody > tr.odd.selected > .sorting_3 {
-  background-color: #a9b7d1;
-}
-table.dataTable.display tbody > tr.even.selected > .sorting_1, table.dataTable.order-column.stripe tbody > tr.even.selected > .sorting_1 {
-  background-color: #acbad5;
-}
-table.dataTable.display tbody > tr.even.selected > .sorting_2, table.dataTable.order-column.stripe tbody > tr.even.selected > .sorting_2 {
-  background-color: #aebcd6;
-}
-table.dataTable.display tbody > tr.even.selected > .sorting_3, table.dataTable.order-column.stripe tbody > tr.even.selected > .sorting_3 {
-  background-color: #afbdd8;
-}
-table.dataTable.display tbody > tr.odd > .selected, table.dataTable.order-column.stripe tbody > tr.odd > .selected {
-  background-color: #a6b4cd;
-}
-table.dataTable.display tbody > tr.even > .selected, table.dataTable.order-column.stripe tbody > tr.even > .selected {
-  background-color: #acbad5;
-}
-table.dataTable.display tbody > tr.selected:hover > .sorting_1, table.dataTable.order-column.hover tbody > tr.selected:hover > .sorting_1 {
-  background-color: #a2aec7;
-}
-table.dataTable.display tbody > tr.selected:hover > .sorting_2, table.dataTable.order-column.hover tbody > tr.selected:hover > .sorting_2 {
-  background-color: #a3b0c9;
-}
-table.dataTable.display tbody > tr.selected:hover > .sorting_3, table.dataTable.order-column.hover tbody > tr.selected:hover > .sorting_3 {
-  background-color: #a5b2cb;
-}
-table.dataTable.display tbody > tr:hover > .selected,
-table.dataTable.display tbody > tr > .selected:hover, table.dataTable.order-column.hover tbody > tr:hover > .selected,
-table.dataTable.order-column.hover tbody > tr > .selected:hover {
-  background-color: #a2aec7;
-}
-table.dataTable tbody td.select-checkbox,
-table.dataTable tbody th.select-checkbox {
-  position: relative;
-}
-table.dataTable tbody td.select-checkbox:before, table.dataTable tbody td.select-checkbox:after,
-table.dataTable tbody th.select-checkbox:before,
-table.dataTable tbody th.select-checkbox:after {
-  display: block;
-  position: absolute;
-  top: 1.2em;
-  left: 50%;
-  width: 12px;
-  height: 12px;
-  box-sizing: border-box;
-}
-table.dataTable tbody td.select-checkbox:before,
-table.dataTable tbody th.select-checkbox:before {
-  content: ' ';
-  margin-top: -6px;
-  margin-left: -6px;
-  border: 1px solid black;
-  border-radius: 3px;
-}
-table.dataTable tr.selected td.select-checkbox:after,
-table.dataTable tr.selected th.select-checkbox:after {
-  content: '\2714';
-  margin-top: -11px;
-  margin-left: -4px;
-  text-align: center;
-  text-shadow: 1px 1px #B0BED9, -1px -1px #B0BED9, 1px -1px #B0BED9, -1px 1px #B0BED9;
-}
-
-div.dataTables_wrapper span.select-info,
-div.dataTables_wrapper span.select-item {
-  margin-left: 0.5em;
-}
-
-@media screen and (max-width: 640px) {
-  div.dataTables_wrapper span.select-info,
-  div.dataTables_wrapper span.select-item {
-    margin-left: 0;
-    display: block;
-  }
-}
diff --git a/DataTables/Select-1.3.1/css/select.dataTables.min.css b/DataTables/Select-1.3.1/css/select.dataTables.min.css
deleted file mode 100644
index 2f5623a..0000000
--- a/DataTables/Select-1.3.1/css/select.dataTables.min.css
+++ /dev/null
@@ -1 +0,0 @@
-table.dataTable tbody>tr.selected,table.dataTable tbody>tr>.selected{background-color:#B0BED9}table.dataTable.stripe tbody>tr.odd.selected,table.dataTable.stripe tbody>tr.odd>.selected,table.dataTable.display tbody>tr.odd.selected,table.dataTable.display tbody>tr.odd>.selected{background-color:#acbad4}table.dataTable.hover tbody>tr.selected:hover,table.dataTable.hover tbody>tr>.selected:hover,table.dataTable.display tbody>tr.selected:hover,table.dataTable.display tbody>tr>.selected:hover{background-color:#aab7d1}table.dataTable.order-column tbody>tr.selected>.sorting_1,table.dataTable.order-column tbody>tr.selected>.sorting_2,table.dataTable.order-column tbody>tr.selected>.sorting_3,table.dataTable.order-column tbody>tr>.selected,table.dataTable.display tbody>tr.selected>.sorting_1,table.dataTable.display tbody>tr.selected>.sorting_2,table.dataTable.display tbody>tr.selected>.sorting_3,table.dataTable.display tbody>tr>.selected{background-color:#acbad5}table.dataTable.display tbody>tr.odd.selected>.sorting_1,table.dataTable.order-column.stripe tbody>tr.odd.selected>.sorting_1{background-color:#a6b4cd}table.dataTable.display tbody>tr.odd.selected>.sorting_2,table.dataTable.order-column.stripe tbody>tr.odd.selected>.sorting_2{background-color:#a8b5cf}table.dataTable.display tbody>tr.odd.selected>.sorting_3,table.dataTable.order-column.stripe tbody>tr.odd.selected>.sorting_3{background-color:#a9b7d1}table.dataTable.display tbody>tr.even.selected>.sorting_1,table.dataTable.order-column.stripe tbody>tr.even.selected>.sorting_1{background-color:#acbad5}table.dataTable.display tbody>tr.even.selected>.sorting_2,table.dataTable.order-column.stripe tbody>tr.even.selected>.sorting_2{background-color:#aebcd6}table.dataTable.display tbody>tr.even.selected>.sorting_3,table.dataTable.order-column.stripe tbody>tr.even.selected>.sorting_3{background-color:#afbdd8}table.dataTable.display tbody>tr.odd>.selected,table.dataTable.order-column.stripe tbody>tr.odd>.selected{background-color:#a6b4cd}table.dataTable.display tbody>tr.even>.selected,table.dataTable.order-column.stripe tbody>tr.even>.selected{background-color:#acbad5}table.dataTable.display tbody>tr.selected:hover>.sorting_1,table.dataTable.order-column.hover tbody>tr.selected:hover>.sorting_1{background-color:#a2aec7}table.dataTable.display tbody>tr.selected:hover>.sorting_2,table.dataTable.order-column.hover tbody>tr.selected:hover>.sorting_2{background-color:#a3b0c9}table.dataTable.display tbody>tr.selected:hover>.sorting_3,table.dataTable.order-column.hover tbody>tr.selected:hover>.sorting_3{background-color:#a5b2cb}table.dataTable.display tbody>tr:hover>.selected,table.dataTable.display tbody>tr>.selected:hover,table.dataTable.order-column.hover tbody>tr:hover>.selected,table.dataTable.order-column.hover tbody>tr>.selected:hover{background-color:#a2aec7}table.dataTable tbody td.select-checkbox,table.dataTable tbody th.select-checkbox{position:relative}table.dataTable tbody td.select-checkbox:before,table.dataTable tbody td.select-checkbox:after,table.dataTable tbody th.select-checkbox:before,table.dataTable tbody th.select-checkbox:after{display:block;position:absolute;top:1.2em;left:50%;width:12px;height:12px;box-sizing:border-box}table.dataTable tbody td.select-checkbox:before,table.dataTable tbody th.select-checkbox:before{content:' ';margin-top:-6px;margin-left:-6px;border:1px solid black;border-radius:3px}table.dataTable tr.selected td.select-checkbox:after,table.dataTable tr.selected th.select-checkbox:after{content:'\2714';margin-top:-11px;margin-left:-4px;text-align:center;text-shadow:1px 1px #B0BED9, -1px -1px #B0BED9, 1px -1px #B0BED9, -1px 1px #B0BED9}div.dataTables_wrapper span.select-info,div.dataTables_wrapper span.select-item{margin-left:0.5em}@media screen and (max-width: 640px){div.dataTables_wrapper span.select-info,div.dataTables_wrapper span.select-item{margin-left:0;display:block}}
diff --git a/DataTables/Select-1.3.1/css/select.foundation.css b/DataTables/Select-1.3.1/css/select.foundation.css
deleted file mode 100644
index 734dcfb..0000000
--- a/DataTables/Select-1.3.1/css/select.foundation.css
+++ /dev/null
@@ -1,117 +0,0 @@
-table.dataTable tbody > tr.selected,
-table.dataTable tbody > tr > .selected {
-  background-color: #008cba;
-}
-table.dataTable.stripe tbody > tr.odd.selected,
-table.dataTable.stripe tbody > tr.odd > .selected, table.dataTable.display tbody > tr.odd.selected,
-table.dataTable.display tbody > tr.odd > .selected {
-  background-color: #0089b6;
-}
-table.dataTable.hover tbody > tr.selected:hover,
-table.dataTable.hover tbody > tr > .selected:hover, table.dataTable.display tbody > tr.selected:hover,
-table.dataTable.display tbody > tr > .selected:hover {
-  background-color: #0087b3;
-}
-table.dataTable.order-column tbody > tr.selected > .sorting_1,
-table.dataTable.order-column tbody > tr.selected > .sorting_2,
-table.dataTable.order-column tbody > tr.selected > .sorting_3,
-table.dataTable.order-column tbody > tr > .selected, table.dataTable.display tbody > tr.selected > .sorting_1,
-table.dataTable.display tbody > tr.selected > .sorting_2,
-table.dataTable.display tbody > tr.selected > .sorting_3,
-table.dataTable.display tbody > tr > .selected {
-  background-color: #0089b6;
-}
-table.dataTable.display tbody > tr.odd.selected > .sorting_1, table.dataTable.order-column.stripe tbody > tr.odd.selected > .sorting_1 {
-  background-color: #0084b0;
-}
-table.dataTable.display tbody > tr.odd.selected > .sorting_2, table.dataTable.order-column.stripe tbody > tr.odd.selected > .sorting_2 {
-  background-color: #0085b1;
-}
-table.dataTable.display tbody > tr.odd.selected > .sorting_3, table.dataTable.order-column.stripe tbody > tr.odd.selected > .sorting_3 {
-  background-color: #0087b3;
-}
-table.dataTable.display tbody > tr.even.selected > .sorting_1, table.dataTable.order-column.stripe tbody > tr.even.selected > .sorting_1 {
-  background-color: #0089b6;
-}
-table.dataTable.display tbody > tr.even.selected > .sorting_2, table.dataTable.order-column.stripe tbody > tr.even.selected > .sorting_2 {
-  background-color: #008ab8;
-}
-table.dataTable.display tbody > tr.even.selected > .sorting_3, table.dataTable.order-column.stripe tbody > tr.even.selected > .sorting_3 {
-  background-color: #008bb9;
-}
-table.dataTable.display tbody > tr.odd > .selected, table.dataTable.order-column.stripe tbody > tr.odd > .selected {
-  background-color: #0084b0;
-}
-table.dataTable.display tbody > tr.even > .selected, table.dataTable.order-column.stripe tbody > tr.even > .selected {
-  background-color: #0089b6;
-}
-table.dataTable.display tbody > tr.selected:hover > .sorting_1, table.dataTable.order-column.hover tbody > tr.selected:hover > .sorting_1 {
-  background-color: #0081ab;
-}
-table.dataTable.display tbody > tr.selected:hover > .sorting_2, table.dataTable.order-column.hover tbody > tr.selected:hover > .sorting_2 {
-  background-color: #0082ac;
-}
-table.dataTable.display tbody > tr.selected:hover > .sorting_3, table.dataTable.order-column.hover tbody > tr.selected:hover > .sorting_3 {
-  background-color: #0083ae;
-}
-table.dataTable.display tbody > tr:hover > .selected,
-table.dataTable.display tbody > tr > .selected:hover, table.dataTable.order-column.hover tbody > tr:hover > .selected,
-table.dataTable.order-column.hover tbody > tr > .selected:hover {
-  background-color: #0081ab;
-}
-table.dataTable tbody td.select-checkbox,
-table.dataTable tbody th.select-checkbox {
-  position: relative;
-}
-table.dataTable tbody td.select-checkbox:before, table.dataTable tbody td.select-checkbox:after,
-table.dataTable tbody th.select-checkbox:before,
-table.dataTable tbody th.select-checkbox:after {
-  display: block;
-  position: absolute;
-  top: 1.2em;
-  left: 50%;
-  width: 12px;
-  height: 12px;
-  box-sizing: border-box;
-}
-table.dataTable tbody td.select-checkbox:before,
-table.dataTable tbody th.select-checkbox:before {
-  content: ' ';
-  margin-top: -6px;
-  margin-left: -6px;
-  border: 1px solid black;
-  border-radius: 3px;
-}
-table.dataTable tr.selected td.select-checkbox:after,
-table.dataTable tr.selected th.select-checkbox:after {
-  content: '\2714';
-  margin-top: -11px;
-  margin-left: -4px;
-  text-align: center;
-  text-shadow: 1px 1px #B0BED9, -1px -1px #B0BED9, 1px -1px #B0BED9, -1px 1px #B0BED9;
-}
-
-div.dataTables_wrapper span.select-info,
-div.dataTables_wrapper span.select-item {
-  margin-left: 0.5em;
-}
-
-@media screen and (max-width: 640px) {
-  div.dataTables_wrapper span.select-info,
-  div.dataTables_wrapper span.select-item {
-    margin-left: 0;
-    display: block;
-  }
-}
-table.dataTable tbody tr.selected th,
-table.dataTable tbody tr.selected td,
-table.dataTable tbody th.selected,
-table.dataTable tbody td.selected {
-  color: white;
-}
-table.dataTable tbody tr.selected th a,
-table.dataTable tbody tr.selected td a,
-table.dataTable tbody th.selected a,
-table.dataTable tbody td.selected a {
-  color: #a2d4ed;
-}
diff --git a/DataTables/Select-1.3.1/css/select.foundation.min.css b/DataTables/Select-1.3.1/css/select.foundation.min.css
deleted file mode 100644
index 8357bd8..0000000
--- a/DataTables/Select-1.3.1/css/select.foundation.min.css
+++ /dev/null
@@ -1 +0,0 @@
-table.dataTable tbody>tr.selected,table.dataTable tbody>tr>.selected{background-color:#008cba}table.dataTable.stripe tbody>tr.odd.selected,table.dataTable.stripe tbody>tr.odd>.selected,table.dataTable.display tbody>tr.odd.selected,table.dataTable.display tbody>tr.odd>.selected{background-color:#0089b6}table.dataTable.hover tbody>tr.selected:hover,table.dataTable.hover tbody>tr>.selected:hover,table.dataTable.display tbody>tr.selected:hover,table.dataTable.display tbody>tr>.selected:hover{background-color:#0087b3}table.dataTable.order-column tbody>tr.selected>.sorting_1,table.dataTable.order-column tbody>tr.selected>.sorting_2,table.dataTable.order-column tbody>tr.selected>.sorting_3,table.dataTable.order-column tbody>tr>.selected,table.dataTable.display tbody>tr.selected>.sorting_1,table.dataTable.display tbody>tr.selected>.sorting_2,table.dataTable.display tbody>tr.selected>.sorting_3,table.dataTable.display tbody>tr>.selected{background-color:#0089b6}table.dataTable.display tbody>tr.odd.selected>.sorting_1,table.dataTable.order-column.stripe tbody>tr.odd.selected>.sorting_1{background-color:#0084b0}table.dataTable.display tbody>tr.odd.selected>.sorting_2,table.dataTable.order-column.stripe tbody>tr.odd.selected>.sorting_2{background-color:#0085b1}table.dataTable.display tbody>tr.odd.selected>.sorting_3,table.dataTable.order-column.stripe tbody>tr.odd.selected>.sorting_3{background-color:#0087b3}table.dataTable.display tbody>tr.even.selected>.sorting_1,table.dataTable.order-column.stripe tbody>tr.even.selected>.sorting_1{background-color:#0089b6}table.dataTable.display tbody>tr.even.selected>.sorting_2,table.dataTable.order-column.stripe tbody>tr.even.selected>.sorting_2{background-color:#008ab8}table.dataTable.display tbody>tr.even.selected>.sorting_3,table.dataTable.order-column.stripe tbody>tr.even.selected>.sorting_3{background-color:#008bb9}table.dataTable.display tbody>tr.odd>.selected,table.dataTable.order-column.stripe tbody>tr.odd>.selected{background-color:#0084b0}table.dataTable.display tbody>tr.even>.selected,table.dataTable.order-column.stripe tbody>tr.even>.selected{background-color:#0089b6}table.dataTable.display tbody>tr.selected:hover>.sorting_1,table.dataTable.order-column.hover tbody>tr.selected:hover>.sorting_1{background-color:#0081ab}table.dataTable.display tbody>tr.selected:hover>.sorting_2,table.dataTable.order-column.hover tbody>tr.selected:hover>.sorting_2{background-color:#0082ac}table.dataTable.display tbody>tr.selected:hover>.sorting_3,table.dataTable.order-column.hover tbody>tr.selected:hover>.sorting_3{background-color:#0083ae}table.dataTable.display tbody>tr:hover>.selected,table.dataTable.display tbody>tr>.selected:hover,table.dataTable.order-column.hover tbody>tr:hover>.selected,table.dataTable.order-column.hover tbody>tr>.selected:hover{background-color:#0081ab}table.dataTable tbody td.select-checkbox,table.dataTable tbody th.select-checkbox{position:relative}table.dataTable tbody td.select-checkbox:before,table.dataTable tbody td.select-checkbox:after,table.dataTable tbody th.select-checkbox:before,table.dataTable tbody th.select-checkbox:after{display:block;position:absolute;top:1.2em;left:50%;width:12px;height:12px;box-sizing:border-box}table.dataTable tbody td.select-checkbox:before,table.dataTable tbody th.select-checkbox:before{content:' ';margin-top:-6px;margin-left:-6px;border:1px solid black;border-radius:3px}table.dataTable tr.selected td.select-checkbox:after,table.dataTable tr.selected th.select-checkbox:after{content:'\2714';margin-top:-11px;margin-left:-4px;text-align:center;text-shadow:1px 1px #B0BED9, -1px -1px #B0BED9, 1px -1px #B0BED9, -1px 1px #B0BED9}div.dataTables_wrapper span.select-info,div.dataTables_wrapper span.select-item{margin-left:0.5em}@media screen and (max-width: 640px){div.dataTables_wrapper span.select-info,div.dataTables_wrapper span.select-item{margin-left:0;display:block}}table.dataTable tbody tr.selected th,table.dataTable tbody tr.selected td,table.dataTable tbody th.selected,table.dataTable tbody td.selected{color:white}table.dataTable tbody tr.selected th a,table.dataTable tbody tr.selected td a,table.dataTable tbody th.selected a,table.dataTable tbody td.selected a{color:#a2d4ed}
diff --git a/DataTables/Select-1.3.1/css/select.jqueryui.css b/DataTables/Select-1.3.1/css/select.jqueryui.css
deleted file mode 100644
index 60ab3d7..0000000
--- a/DataTables/Select-1.3.1/css/select.jqueryui.css
+++ /dev/null
@@ -1,105 +0,0 @@
-table.dataTable tbody > tr.selected,
-table.dataTable tbody > tr > .selected {
-  background-color: #B0BED9;
-}
-table.dataTable.stripe tbody > tr.odd.selected,
-table.dataTable.stripe tbody > tr.odd > .selected, table.dataTable.display tbody > tr.odd.selected,
-table.dataTable.display tbody > tr.odd > .selected {
-  background-color: #acbad4;
-}
-table.dataTable.hover tbody > tr.selected:hover,
-table.dataTable.hover tbody > tr > .selected:hover, table.dataTable.display tbody > tr.selected:hover,
-table.dataTable.display tbody > tr > .selected:hover {
-  background-color: #aab7d1;
-}
-table.dataTable.order-column tbody > tr.selected > .sorting_1,
-table.dataTable.order-column tbody > tr.selected > .sorting_2,
-table.dataTable.order-column tbody > tr.selected > .sorting_3,
-table.dataTable.order-column tbody > tr > .selected, table.dataTable.display tbody > tr.selected > .sorting_1,
-table.dataTable.display tbody > tr.selected > .sorting_2,
-table.dataTable.display tbody > tr.selected > .sorting_3,
-table.dataTable.display tbody > tr > .selected {
-  background-color: #acbad5;
-}
-table.dataTable.display tbody > tr.odd.selected > .sorting_1, table.dataTable.order-column.stripe tbody > tr.odd.selected > .sorting_1 {
-  background-color: #a6b4cd;
-}
-table.dataTable.display tbody > tr.odd.selected > .sorting_2, table.dataTable.order-column.stripe tbody > tr.odd.selected > .sorting_2 {
-  background-color: #a8b5cf;
-}
-table.dataTable.display tbody > tr.odd.selected > .sorting_3, table.dataTable.order-column.stripe tbody > tr.odd.selected > .sorting_3 {
-  background-color: #a9b7d1;
-}
-table.dataTable.display tbody > tr.even.selected > .sorting_1, table.dataTable.order-column.stripe tbody > tr.even.selected > .sorting_1 {
-  background-color: #acbad5;
-}
-table.dataTable.display tbody > tr.even.selected > .sorting_2, table.dataTable.order-column.stripe tbody > tr.even.selected > .sorting_2 {
-  background-color: #aebcd6;
-}
-table.dataTable.display tbody > tr.even.selected > .sorting_3, table.dataTable.order-column.stripe tbody > tr.even.selected > .sorting_3 {
-  background-color: #afbdd8;
-}
-table.dataTable.display tbody > tr.odd > .selected, table.dataTable.order-column.stripe tbody > tr.odd > .selected {
-  background-color: #a6b4cd;
-}
-table.dataTable.display tbody > tr.even > .selected, table.dataTable.order-column.stripe tbody > tr.even > .selected {
-  background-color: #acbad5;
-}
-table.dataTable.display tbody > tr.selected:hover > .sorting_1, table.dataTable.order-column.hover tbody > tr.selected:hover > .sorting_1 {
-  background-color: #a2aec7;
-}
-table.dataTable.display tbody > tr.selected:hover > .sorting_2, table.dataTable.order-column.hover tbody > tr.selected:hover > .sorting_2 {
-  background-color: #a3b0c9;
-}
-table.dataTable.display tbody > tr.selected:hover > .sorting_3, table.dataTable.order-column.hover tbody > tr.selected:hover > .sorting_3 {
-  background-color: #a5b2cb;
-}
-table.dataTable.display tbody > tr:hover > .selected,
-table.dataTable.display tbody > tr > .selected:hover, table.dataTable.order-column.hover tbody > tr:hover > .selected,
-table.dataTable.order-column.hover tbody > tr > .selected:hover {
-  background-color: #a2aec7;
-}
-table.dataTable tbody td.select-checkbox,
-table.dataTable tbody th.select-checkbox {
-  position: relative;
-}
-table.dataTable tbody td.select-checkbox:before, table.dataTable tbody td.select-checkbox:after,
-table.dataTable tbody th.select-checkbox:before,
-table.dataTable tbody th.select-checkbox:after {
-  display: block;
-  position: absolute;
-  top: 1.2em;
-  left: 50%;
-  width: 12px;
-  height: 12px;
-  box-sizing: border-box;
-}
-table.dataTable tbody td.select-checkbox:before,
-table.dataTable tbody th.select-checkbox:before {
-  content: ' ';
-  margin-top: -6px;
-  margin-left: -6px;
-  border: 1px solid black;
-  border-radius: 3px;
-}
-table.dataTable tr.selected td.select-checkbox:after,
-table.dataTable tr.selected th.select-checkbox:after {
-  content: '\2714';
-  margin-top: -11px;
-  margin-left: -4px;
-  text-align: center;
-  text-shadow: 1px 1px #B0BED9, -1px -1px #B0BED9, 1px -1px #B0BED9, -1px 1px #B0BED9;
-}
-
-div.dataTables_wrapper span.select-info,
-div.dataTables_wrapper span.select-item {
-  margin-left: 0.5em;
-}
-
-@media screen and (max-width: 640px) {
-  div.dataTables_wrapper span.select-info,
-  div.dataTables_wrapper span.select-item {
-    margin-left: 0;
-    display: block;
-  }
-}
diff --git a/DataTables/Select-1.3.1/css/select.jqueryui.min.css b/DataTables/Select-1.3.1/css/select.jqueryui.min.css
deleted file mode 100644
index 2f5623a..0000000
--- a/DataTables/Select-1.3.1/css/select.jqueryui.min.css
+++ /dev/null
@@ -1 +0,0 @@
-table.dataTable tbody>tr.selected,table.dataTable tbody>tr>.selected{background-color:#B0BED9}table.dataTable.stripe tbody>tr.odd.selected,table.dataTable.stripe tbody>tr.odd>.selected,table.dataTable.display tbody>tr.odd.selected,table.dataTable.display tbody>tr.odd>.selected{background-color:#acbad4}table.dataTable.hover tbody>tr.selected:hover,table.dataTable.hover tbody>tr>.selected:hover,table.dataTable.display tbody>tr.selected:hover,table.dataTable.display tbody>tr>.selected:hover{background-color:#aab7d1}table.dataTable.order-column tbody>tr.selected>.sorting_1,table.dataTable.order-column tbody>tr.selected>.sorting_2,table.dataTable.order-column tbody>tr.selected>.sorting_3,table.dataTable.order-column tbody>tr>.selected,table.dataTable.display tbody>tr.selected>.sorting_1,table.dataTable.display tbody>tr.selected>.sorting_2,table.dataTable.display tbody>tr.selected>.sorting_3,table.dataTable.display tbody>tr>.selected{background-color:#acbad5}table.dataTable.display tbody>tr.odd.selected>.sorting_1,table.dataTable.order-column.stripe tbody>tr.odd.selected>.sorting_1{background-color:#a6b4cd}table.dataTable.display tbody>tr.odd.selected>.sorting_2,table.dataTable.order-column.stripe tbody>tr.odd.selected>.sorting_2{background-color:#a8b5cf}table.dataTable.display tbody>tr.odd.selected>.sorting_3,table.dataTable.order-column.stripe tbody>tr.odd.selected>.sorting_3{background-color:#a9b7d1}table.dataTable.display tbody>tr.even.selected>.sorting_1,table.dataTable.order-column.stripe tbody>tr.even.selected>.sorting_1{background-color:#acbad5}table.dataTable.display tbody>tr.even.selected>.sorting_2,table.dataTable.order-column.stripe tbody>tr.even.selected>.sorting_2{background-color:#aebcd6}table.dataTable.display tbody>tr.even.selected>.sorting_3,table.dataTable.order-column.stripe tbody>tr.even.selected>.sorting_3{background-color:#afbdd8}table.dataTable.display tbody>tr.odd>.selected,table.dataTable.order-column.stripe tbody>tr.odd>.selected{background-color:#a6b4cd}table.dataTable.display tbody>tr.even>.selected,table.dataTable.order-column.stripe tbody>tr.even>.selected{background-color:#acbad5}table.dataTable.display tbody>tr.selected:hover>.sorting_1,table.dataTable.order-column.hover tbody>tr.selected:hover>.sorting_1{background-color:#a2aec7}table.dataTable.display tbody>tr.selected:hover>.sorting_2,table.dataTable.order-column.hover tbody>tr.selected:hover>.sorting_2{background-color:#a3b0c9}table.dataTable.display tbody>tr.selected:hover>.sorting_3,table.dataTable.order-column.hover tbody>tr.selected:hover>.sorting_3{background-color:#a5b2cb}table.dataTable.display tbody>tr:hover>.selected,table.dataTable.display tbody>tr>.selected:hover,table.dataTable.order-column.hover tbody>tr:hover>.selected,table.dataTable.order-column.hover tbody>tr>.selected:hover{background-color:#a2aec7}table.dataTable tbody td.select-checkbox,table.dataTable tbody th.select-checkbox{position:relative}table.dataTable tbody td.select-checkbox:before,table.dataTable tbody td.select-checkbox:after,table.dataTable tbody th.select-checkbox:before,table.dataTable tbody th.select-checkbox:after{display:block;position:absolute;top:1.2em;left:50%;width:12px;height:12px;box-sizing:border-box}table.dataTable tbody td.select-checkbox:before,table.dataTable tbody th.select-checkbox:before{content:' ';margin-top:-6px;margin-left:-6px;border:1px solid black;border-radius:3px}table.dataTable tr.selected td.select-checkbox:after,table.dataTable tr.selected th.select-checkbox:after{content:'\2714';margin-top:-11px;margin-left:-4px;text-align:center;text-shadow:1px 1px #B0BED9, -1px -1px #B0BED9, 1px -1px #B0BED9, -1px 1px #B0BED9}div.dataTables_wrapper span.select-info,div.dataTables_wrapper span.select-item{margin-left:0.5em}@media screen and (max-width: 640px){div.dataTables_wrapper span.select-info,div.dataTables_wrapper span.select-item{margin-left:0;display:block}}
diff --git a/DataTables/Select-1.3.1/css/select.semanticui.css b/DataTables/Select-1.3.1/css/select.semanticui.css
deleted file mode 100644
index ac5cf76..0000000
--- a/DataTables/Select-1.3.1/css/select.semanticui.css
+++ /dev/null
@@ -1,110 +0,0 @@
-table.dataTable tbody > tr.selected,
-table.dataTable tbody > tr > .selected {
-  background-color: rgba(0, 0, 0, 0.05);
-}
-table.dataTable.stripe tbody > tr.odd.selected,
-table.dataTable.stripe tbody > tr.odd > .selected, table.dataTable.display tbody > tr.odd.selected,
-table.dataTable.display tbody > tr.odd > .selected {
-  background-color: rgba(0, 0, 0, 0.072325);
-}
-table.dataTable.hover tbody > tr.selected:hover,
-table.dataTable.hover tbody > tr > .selected:hover, table.dataTable.display tbody > tr.selected:hover,
-table.dataTable.display tbody > tr > .selected:hover {
-  background-color: rgba(0, 0, 0, 0.0842);
-}
-table.dataTable.order-column tbody > tr.selected > .sorting_1,
-table.dataTable.order-column tbody > tr.selected > .sorting_2,
-table.dataTable.order-column tbody > tr.selected > .sorting_3,
-table.dataTable.order-column tbody > tr > .selected, table.dataTable.display tbody > tr.selected > .sorting_1,
-table.dataTable.display tbody > tr.selected > .sorting_2,
-table.dataTable.display tbody > tr.selected > .sorting_3,
-table.dataTable.display tbody > tr > .selected {
-  background-color: rgba(0, 0, 0, 0.069);
-}
-table.dataTable.display tbody > tr.odd.selected > .sorting_1, table.dataTable.order-column.stripe tbody > tr.odd.selected > .sorting_1 {
-  background-color: rgba(0, 0, 0, 0.1013);
-}
-table.dataTable.display tbody > tr.odd.selected > .sorting_2, table.dataTable.order-column.stripe tbody > tr.odd.selected > .sorting_2 {
-  background-color: rgba(0, 0, 0, 0.09465);
-}
-table.dataTable.display tbody > tr.odd.selected > .sorting_3, table.dataTable.order-column.stripe tbody > tr.odd.selected > .sorting_3 {
-  background-color: rgba(0, 0, 0, 0.08705);
-}
-table.dataTable.display tbody > tr.even.selected > .sorting_1, table.dataTable.order-column.stripe tbody > tr.even.selected > .sorting_1 {
-  background-color: rgba(0, 0, 0, 0.069);
-}
-table.dataTable.display tbody > tr.even.selected > .sorting_2, table.dataTable.order-column.stripe tbody > tr.even.selected > .sorting_2 {
-  background-color: rgba(0, 0, 0, 0.0614);
-}
-table.dataTable.display tbody > tr.even.selected > .sorting_3, table.dataTable.order-column.stripe tbody > tr.even.selected > .sorting_3 {
-  background-color: rgba(0, 0, 0, 0.0538);
-}
-table.dataTable.display tbody > tr.odd > .selected, table.dataTable.order-column.stripe tbody > tr.odd > .selected {
-  background-color: rgba(0, 0, 0, 0.1013);
-}
-table.dataTable.display tbody > tr.even > .selected, table.dataTable.order-column.stripe tbody > tr.even > .selected {
-  background-color: rgba(0, 0, 0, 0.069);
-}
-table.dataTable.display tbody > tr.selected:hover > .sorting_1, table.dataTable.order-column.hover tbody > tr.selected:hover > .sorting_1 {
-  background-color: rgba(0, 0, 0, 0.1279);
-}
-table.dataTable.display tbody > tr.selected:hover > .sorting_2, table.dataTable.order-column.hover tbody > tr.selected:hover > .sorting_2 {
-  background-color: rgba(0, 0, 0, 0.12125);
-}
-table.dataTable.display tbody > tr.selected:hover > .sorting_3, table.dataTable.order-column.hover tbody > tr.selected:hover > .sorting_3 {
-  background-color: rgba(0, 0, 0, 0.10985);
-}
-table.dataTable.display tbody > tr:hover > .selected,
-table.dataTable.display tbody > tr > .selected:hover, table.dataTable.order-column.hover tbody > tr:hover > .selected,
-table.dataTable.order-column.hover tbody > tr > .selected:hover {
-  background-color: rgba(0, 0, 0, 0.1279);
-}
-table.dataTable tbody td.select-checkbox,
-table.dataTable tbody th.select-checkbox {
-  position: relative;
-}
-table.dataTable tbody td.select-checkbox:before, table.dataTable tbody td.select-checkbox:after,
-table.dataTable tbody th.select-checkbox:before,
-table.dataTable tbody th.select-checkbox:after {
-  display: block;
-  position: absolute;
-  top: 1.2em;
-  left: 50%;
-  width: 12px;
-  height: 12px;
-  box-sizing: border-box;
-}
-table.dataTable tbody td.select-checkbox:before,
-table.dataTable tbody th.select-checkbox:before {
-  content: ' ';
-  margin-top: -6px;
-  margin-left: -6px;
-  border: 1px solid black;
-  border-radius: 3px;
-}
-table.dataTable tr.selected td.select-checkbox:after,
-table.dataTable tr.selected th.select-checkbox:after {
-  content: '\2714';
-  margin-top: -11px;
-  margin-left: -4px;
-  text-align: center;
-  text-shadow: 1px 1px #B0BED9, -1px -1px #B0BED9, 1px -1px #B0BED9, -1px 1px #B0BED9;
-}
-
-div.dataTables_wrapper span.select-info,
-div.dataTables_wrapper span.select-item {
-  margin-left: 0.5em;
-}
-
-@media screen and (max-width: 640px) {
-  div.dataTables_wrapper span.select-info,
-  div.dataTables_wrapper span.select-item {
-    margin-left: 0;
-    display: block;
-  }
-}
-table.dataTable tbody tr.selected,
-table.dataTable tbody th.selected,
-table.dataTable tbody td.selected {
-  color: rgba(0, 0, 0, 0.95);
-}
diff --git a/DataTables/Select-1.3.1/css/select.semanticui.min.css b/DataTables/Select-1.3.1/css/select.semanticui.min.css
deleted file mode 100644
index 97f18f6..0000000
--- a/DataTables/Select-1.3.1/css/select.semanticui.min.css
+++ /dev/null
@@ -1 +0,0 @@
-table.dataTable tbody>tr.selected,table.dataTable tbody>tr>.selected{background-color:rgba(0,0,0,0.05)}table.dataTable.stripe tbody>tr.odd.selected,table.dataTable.stripe tbody>tr.odd>.selected,table.dataTable.display tbody>tr.odd.selected,table.dataTable.display tbody>tr.odd>.selected{background-color:rgba(0,0,0,0.072325)}table.dataTable.hover tbody>tr.selected:hover,table.dataTable.hover tbody>tr>.selected:hover,table.dataTable.display tbody>tr.selected:hover,table.dataTable.display tbody>tr>.selected:hover{background-color:rgba(0,0,0,0.0842)}table.dataTable.order-column tbody>tr.selected>.sorting_1,table.dataTable.order-column tbody>tr.selected>.sorting_2,table.dataTable.order-column tbody>tr.selected>.sorting_3,table.dataTable.order-column tbody>tr>.selected,table.dataTable.display tbody>tr.selected>.sorting_1,table.dataTable.display tbody>tr.selected>.sorting_2,table.dataTable.display tbody>tr.selected>.sorting_3,table.dataTable.display tbody>tr>.selected{background-color:rgba(0,0,0,0.069)}table.dataTable.display tbody>tr.odd.selected>.sorting_1,table.dataTable.order-column.stripe tbody>tr.odd.selected>.sorting_1{background-color:rgba(0,0,0,0.1013)}table.dataTable.display tbody>tr.odd.selected>.sorting_2,table.dataTable.order-column.stripe tbody>tr.odd.selected>.sorting_2{background-color:rgba(0,0,0,0.09465)}table.dataTable.display tbody>tr.odd.selected>.sorting_3,table.dataTable.order-column.stripe tbody>tr.odd.selected>.sorting_3{background-color:rgba(0,0,0,0.08705)}table.dataTable.display tbody>tr.even.selected>.sorting_1,table.dataTable.order-column.stripe tbody>tr.even.selected>.sorting_1{background-color:rgba(0,0,0,0.069)}table.dataTable.display tbody>tr.even.selected>.sorting_2,table.dataTable.order-column.stripe tbody>tr.even.selected>.sorting_2{background-color:rgba(0,0,0,0.0614)}table.dataTable.display tbody>tr.even.selected>.sorting_3,table.dataTable.order-column.stripe tbody>tr.even.selected>.sorting_3{background-color:rgba(0,0,0,0.0538)}table.dataTable.display tbody>tr.odd>.selected,table.dataTable.order-column.stripe tbody>tr.odd>.selected{background-color:rgba(0,0,0,0.1013)}table.dataTable.display tbody>tr.even>.selected,table.dataTable.order-column.stripe tbody>tr.even>.selected{background-color:rgba(0,0,0,0.069)}table.dataTable.display tbody>tr.selected:hover>.sorting_1,table.dataTable.order-column.hover tbody>tr.selected:hover>.sorting_1{background-color:rgba(0,0,0,0.1279)}table.dataTable.display tbody>tr.selected:hover>.sorting_2,table.dataTable.order-column.hover tbody>tr.selected:hover>.sorting_2{background-color:rgba(0,0,0,0.12125)}table.dataTable.display tbody>tr.selected:hover>.sorting_3,table.dataTable.order-column.hover tbody>tr.selected:hover>.sorting_3{background-color:rgba(0,0,0,0.10985)}table.dataTable.display tbody>tr:hover>.selected,table.dataTable.display tbody>tr>.selected:hover,table.dataTable.order-column.hover tbody>tr:hover>.selected,table.dataTable.order-column.hover tbody>tr>.selected:hover{background-color:rgba(0,0,0,0.1279)}table.dataTable tbody td.select-checkbox,table.dataTable tbody th.select-checkbox{position:relative}table.dataTable tbody td.select-checkbox:before,table.dataTable tbody td.select-checkbox:after,table.dataTable tbody th.select-checkbox:before,table.dataTable tbody th.select-checkbox:after{display:block;position:absolute;top:1.2em;left:50%;width:12px;height:12px;box-sizing:border-box}table.dataTable tbody td.select-checkbox:before,table.dataTable tbody th.select-checkbox:before{content:' ';margin-top:-6px;margin-left:-6px;border:1px solid black;border-radius:3px}table.dataTable tr.selected td.select-checkbox:after,table.dataTable tr.selected th.select-checkbox:after{content:'\2714';margin-top:-11px;margin-left:-4px;text-align:center;text-shadow:1px 1px #B0BED9, -1px -1px #B0BED9, 1px -1px #B0BED9, -1px 1px #B0BED9}div.dataTables_wrapper span.select-info,div.dataTables_wrapper span.select-item{margin-left:0.5em}@media screen and (max-width: 640px){div.dataTables_wrapper span.select-info,div.dataTables_wrapper span.select-item{margin-left:0;display:block}}table.dataTable tbody tr.selected,table.dataTable tbody th.selected,table.dataTable tbody td.selected{color:rgba(0,0,0,0.95)}
diff --git a/DataTables/Select-1.3.1/js/dataTables.select.js b/DataTables/Select-1.3.1/js/dataTables.select.js
deleted file mode 100644
index 50f4bc0..0000000
--- a/DataTables/Select-1.3.1/js/dataTables.select.js
+++ /dev/null
@@ -1,1206 +0,0 @@
-/*! Select for DataTables 1.3.1
- * 2015-2019 SpryMedia Ltd - datatables.net/license/mit
- */
-
-/**
- * @summary     Select for DataTables
- * @description A collection of API methods, events and buttons for DataTables
- *   that provides selection options of the items in a DataTable
- * @version     1.3.1
- * @file        dataTables.select.js
- * @author      SpryMedia Ltd (www.sprymedia.co.uk)
- * @contact     datatables.net/forums
- * @copyright   Copyright 2015-2019 SpryMedia Ltd.
- *
- * This source file is free software, available under the following license:
- *   MIT license - http://datatables.net/license/mit
- *
- * This source file is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
- * or FITNESS FOR A PARTICULAR PURPOSE. See the license files for details.
- *
- * For details please refer to: http://www.datatables.net/extensions/select
- */
-(function( factory ){
-	if ( typeof define === 'function' && define.amd ) {
-		// AMD
-		define( ['jquery', 'datatables.net'], function ( $ ) {
-			return factory( $, window, document );
-		} );
-	}
-	else if ( typeof exports === 'object' ) {
-		// CommonJS
-		module.exports = function (root, $) {
-			if ( ! root ) {
-				root = window;
-			}
-
-			if ( ! $ || ! $.fn.dataTable ) {
-				$ = require('datatables.net')(root, $).$;
-			}
-
-			return factory( $, root, root.document );
-		};
-	}
-	else {
-		// Browser
-		factory( jQuery, window, document );
-	}
-}(function( $, window, document, undefined ) {
-'use strict';
-var DataTable = $.fn.dataTable;
-
-
-// Version information for debugger
-DataTable.select = {};
-
-DataTable.select.version = '1.3.1';
-
-DataTable.select.init = function ( dt ) {
-	var ctx = dt.settings()[0];
-	var init = ctx.oInit.select;
-	var defaults = DataTable.defaults.select;
-	var opts = init === undefined ?
-		defaults :
-		init;
-
-	// Set defaults
-	var items = 'row';
-	var style = 'api';
-	var blurable = false;
-	var toggleable = true;
-	var info = true;
-	var selector = 'td, th';
-	var className = 'selected';
-	var setStyle = false;
-
-	ctx._select = {};
-
-	// Initialisation customisations
-	if ( opts === true ) {
-		style = 'os';
-		setStyle = true;
-	}
-	else if ( typeof opts === 'string' ) {
-		style = opts;
-		setStyle = true;
-	}
-	else if ( $.isPlainObject( opts ) ) {
-		if ( opts.blurable !== undefined ) {
-			blurable = opts.blurable;
-		}
-		
-		if ( opts.toggleable !== undefined ) {
-			toggleable = opts.toggleable;
-		}
-
-		if ( opts.info !== undefined ) {
-			info = opts.info;
-		}
-
-		if ( opts.items !== undefined ) {
-			items = opts.items;
-		}
-
-		if ( opts.style !== undefined ) {
-			style = opts.style;
-			setStyle = true;
-		}
-		else {
-			style = 'os';
-			setStyle = true;
-		}
-
-		if ( opts.selector !== undefined ) {
-			selector = opts.selector;
-		}
-
-		if ( opts.className !== undefined ) {
-			className = opts.className;
-		}
-	}
-
-	dt.select.selector( selector );
-	dt.select.items( items );
-	dt.select.style( style );
-	dt.select.blurable( blurable );
-	dt.select.toggleable( toggleable );
-	dt.select.info( info );
-	ctx._select.className = className;
-
-
-	// Sort table based on selected rows. Requires Select Datatables extension
-	$.fn.dataTable.ext.order['select-checkbox'] = function ( settings, col ) {
-		return this.api().column( col, {order: 'index'} ).nodes().map( function ( td ) {
-			if ( settings._select.items === 'row' ) {
-				return $( td ).parent().hasClass( settings._select.className );
-			} else if ( settings._select.items === 'cell' ) {
-				return $( td ).hasClass( settings._select.className );
-			}
-			return false;
-		});
-	};
-
-	// If the init options haven't enabled select, but there is a selectable
-	// class name, then enable
-	if ( ! setStyle && $( dt.table().node() ).hasClass( 'selectable' ) ) {
-		dt.select.style( 'os' );
-	}
-};
-
-/*
-
-Select is a collection of API methods, event handlers, event emitters and
-buttons (for the `Buttons` extension) for DataTables. It provides the following
-features, with an overview of how they are implemented:
-
-## Selection of rows, columns and cells. Whether an item is selected or not is
-   stored in:
-
-* rows: a `_select_selected` property which contains a boolean value of the
-  DataTables' `aoData` object for each row
-* columns: a `_select_selected` property which contains a boolean value of the
-  DataTables' `aoColumns` object for each column
-* cells: a `_selected_cells` property which contains an array of boolean values
-  of the `aoData` object for each row. The array is the same length as the
-  columns array, with each element of it representing a cell.
-
-This method of using boolean flags allows Select to operate when nodes have not
-been created for rows / cells (DataTables' defer rendering feature).
-
-## API methods
-
-A range of API methods are available for triggering selection and de-selection
-of rows. Methods are also available to configure the selection events that can
-be triggered by an end user (such as which items are to be selected). To a large
-extent, these of API methods *is* Select. It is basically a collection of helper
-functions that can be used to select items in a DataTable.
-
-Configuration of select is held in the object `_select` which is attached to the
-DataTables settings object on initialisation. Select being available on a table
-is not optional when Select is loaded, but its default is for selection only to
-be available via the API - so the end user wouldn't be able to select rows
-without additional configuration.
-
-The `_select` object contains the following properties:
-
-```
-{
-	items:string       - Can be `rows`, `columns` or `cells`. Defines what item 
-	                     will be selected if the user is allowed to activate row
-	                     selection using the mouse.
-	style:string       - Can be `none`, `single`, `multi` or `os`. Defines the
-	                     interaction style when selecting items
-	blurable:boolean   - If row selection can be cleared by clicking outside of
-	                     the table
-	toggleable:boolean - If row selection can be cancelled by repeated clicking
-	                     on the row
-	info:boolean       - If the selection summary should be shown in the table
-	                     information elements
-}
-```
-
-In addition to the API methods, Select also extends the DataTables selector
-options for rows, columns and cells adding a `selected` option to the selector
-options object, allowing the developer to select only selected items or
-unselected items.
-
-## Mouse selection of items
-
-Clicking on items can be used to select items. This is done by a simple event
-handler that will select the items using the API methods.
-
- */
-
-
-/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- * Local functions
- */
-
-/**
- * Add one or more cells to the selection when shift clicking in OS selection
- * style cell selection.
- *
- * Cell range is more complicated than row and column as we want to select
- * in the visible grid rather than by index in sequence. For example, if you
- * click first in cell 1-1 and then shift click in 2-2 - cells 1-2 and 2-1
- * should also be selected (and not 1-3, 1-4. etc)
- * 
- * @param  {DataTable.Api} dt   DataTable
- * @param  {object}        idx  Cell index to select to
- * @param  {object}        last Cell index to select from
- * @private
- */
-function cellRange( dt, idx, last )
-{
-	var indexes;
-	var columnIndexes;
-	var rowIndexes;
-	var selectColumns = function ( start, end ) {
-		if ( start > end ) {
-			var tmp = end;
-			end = start;
-			start = tmp;
-		}
-		
-		var record = false;
-		return dt.columns( ':visible' ).indexes().filter( function (i) {
-			if ( i === start ) {
-				record = true;
-			}
-			
-			if ( i === end ) { // not else if, as start might === end
-				record = false;
-				return true;
-			}
-
-			return record;
-		} );
-	};
-
-	var selectRows = function ( start, end ) {
-		var indexes = dt.rows( { search: 'applied' } ).indexes();
-
-		// Which comes first - might need to swap
-		if ( indexes.indexOf( start ) > indexes.indexOf( end ) ) {
-			var tmp = end;
-			end = start;
-			start = tmp;
-		}
-
-		var record = false;
-		return indexes.filter( function (i) {
-			if ( i === start ) {
-				record = true;
-			}
-			
-			if ( i === end ) {
-				record = false;
-				return true;
-			}
-
-			return record;
-		} );
-	};
-
-	if ( ! dt.cells( { selected: true } ).any() && ! last ) {
-		// select from the top left cell to this one
-		columnIndexes = selectColumns( 0, idx.column );
-		rowIndexes = selectRows( 0 , idx.row );
-	}
-	else {
-		// Get column indexes between old and new
-		columnIndexes = selectColumns( last.column, idx.column );
-		rowIndexes = selectRows( last.row , idx.row );
-	}
-
-	indexes = dt.cells( rowIndexes, columnIndexes ).flatten();
-
-	if ( ! dt.cells( idx, { selected: true } ).any() ) {
-		// Select range
-		dt.cells( indexes ).select();
-	}
-	else {
-		// Deselect range
-		dt.cells( indexes ).deselect();
-	}
-}
-
-/**
- * Disable mouse selection by removing the selectors
- *
- * @param {DataTable.Api} dt DataTable to remove events from
- * @private
- */
-function disableMouseSelection( dt )
-{
-	var ctx = dt.settings()[0];
-	var selector = ctx._select.selector;
-
-	$( dt.table().container() )
-		.off( 'mousedown.dtSelect', selector )
-		.off( 'mouseup.dtSelect', selector )
-		.off( 'click.dtSelect', selector );
-
-	$('body').off( 'click.dtSelect' + _safeId(dt.table().node()) );
-}
-
-/**
- * Attach mouse listeners to the table to allow mouse selection of items
- *
- * @param {DataTable.Api} dt DataTable to remove events from
- * @private
- */
-function enableMouseSelection ( dt )
-{
-	var container = $( dt.table().container() );
-	var ctx = dt.settings()[0];
-	var selector = ctx._select.selector;
-	var matchSelection;
-
-	container
-		.on( 'mousedown.dtSelect', selector, function(e) {
-			// Disallow text selection for shift clicking on the table so multi
-			// element selection doesn't look terrible!
-			if ( e.shiftKey || e.metaKey || e.ctrlKey ) {
-				container
-					.css( '-moz-user-select', 'none' )
-					.one('selectstart.dtSelect', selector, function () {
-						return false;
-					} );
-			}
-
-			if ( window.getSelection ) {
-				matchSelection = window.getSelection();
-			}
-		} )
-		.on( 'mouseup.dtSelect', selector, function() {
-			// Allow text selection to occur again, Mozilla style (tested in FF
-			// 35.0.1 - still required)
-			container.css( '-moz-user-select', '' );
-		} )
-		.on( 'click.dtSelect', selector, function ( e ) {
-			var items = dt.select.items();
-			var idx;
-
-			// If text was selected (click and drag), then we shouldn't change
-			// the row's selected state
-			if ( matchSelection ) {
-				var selection = window.getSelection();
-
-				// If the element that contains the selection is not in the table, we can ignore it
-				// This can happen if the developer selects text from the click event
-				if ( ! selection.anchorNode || $(selection.anchorNode).closest('table')[0] === dt.table().node() ) {
-					if ( selection !== matchSelection ) {
-						return;
-					}
-				}
-			}
-
-			var ctx = dt.settings()[0];
-			var wrapperClass = $.trim(dt.settings()[0].oClasses.sWrapper).replace(/ +/g, '.');
-
-			// Ignore clicks inside a sub-table
-			if ( $(e.target).closest('div.'+wrapperClass)[0] != dt.table().container() ) {
-				return;
-			}
-
-			var cell = dt.cell( $(e.target).closest('td, th') );
-
-			// Check the cell actually belongs to the host DataTable (so child
-			// rows, etc, are ignored)
-			if ( ! cell.any() ) {
-				return;
-			}
-
-			var event = $.Event('user-select.dt');
-			eventTrigger( dt, event, [ items, cell, e ] );
-
-			if ( event.isDefaultPrevented() ) {
-				return;
-			}
-
-			var cellIndex = cell.index();
-			if ( items === 'row' ) {
-				idx = cellIndex.row;
-				typeSelect( e, dt, ctx, 'row', idx );
-			}
-			else if ( items === 'column' ) {
-				idx = cell.index().column;
-				typeSelect( e, dt, ctx, 'column', idx );
-			}
-			else if ( items === 'cell' ) {
-				idx = cell.index();
-				typeSelect( e, dt, ctx, 'cell', idx );
-			}
-
-			ctx._select_lastCell = cellIndex;
-		} );
-
-	// Blurable
-	$('body').on( 'click.dtSelect' + _safeId(dt.table().node()), function ( e ) {
-		if ( ctx._select.blurable ) {
-			// If the click was inside the DataTables container, don't blur
-			if ( $(e.target).parents().filter( dt.table().container() ).length ) {
-				return;
-			}
-
-			// Ignore elements which have been removed from the DOM (i.e. paging
-			// buttons)
-			if ( $(e.target).parents('html').length === 0 ) {
-			 	return;
-			}
-
-			// Don't blur in Editor form
-			if ( $(e.target).parents('div.DTE').length ) {
-				return;
-			}
-
-			clear( ctx, true );
-		}
-	} );
-}
-
-/**
- * Trigger an event on a DataTable
- *
- * @param {DataTable.Api} api      DataTable to trigger events on
- * @param  {boolean}      selected true if selected, false if deselected
- * @param  {string}       type     Item type acting on
- * @param  {boolean}      any      Require that there are values before
- *     triggering
- * @private
- */
-function eventTrigger ( api, type, args, any )
-{
-	if ( any && ! api.flatten().length ) {
-		return;
-	}
-
-	if ( typeof type === 'string' ) {
-		type = type +'.dt';
-	}
-
-	args.unshift( api );
-
-	$(api.table().node()).trigger( type, args );
-}
-
-/**
- * Update the information element of the DataTable showing information about the
- * items selected. This is done by adding tags to the existing text
- * 
- * @param {DataTable.Api} api DataTable to update
- * @private
- */
-function info ( api )
-{
-	var ctx = api.settings()[0];
-
-	if ( ! ctx._select.info || ! ctx.aanFeatures.i ) {
-		return;
-	}
-
-	if ( api.select.style() === 'api' ) {
-		return;
-	}
-
-	var rows    = api.rows( { selected: true } ).flatten().length;
-	var columns = api.columns( { selected: true } ).flatten().length;
-	var cells   = api.cells( { selected: true } ).flatten().length;
-
-	var add = function ( el, name, num ) {
-		el.append( $('<span class="select-item"/>').append( api.i18n(
-			'select.'+name+'s',
-			{ _: '%d '+name+'s selected', 0: '', 1: '1 '+name+' selected' },
-			num
-		) ) );
-	};
-
-	// Internal knowledge of DataTables to loop over all information elements
-	$.each( ctx.aanFeatures.i, function ( i, el ) {
-		el = $(el);
-
-		var output  = $('<span class="select-info"/>');
-		add( output, 'row', rows );
-		add( output, 'column', columns );
-		add( output, 'cell', cells  );
-
-		var exisiting = el.children('span.select-info');
-		if ( exisiting.length ) {
-			exisiting.remove();
-		}
-
-		if ( output.text() !== '' ) {
-			el.append( output );
-		}
-	} );
-}
-
-/**
- * Initialisation of a new table. Attach event handlers and callbacks to allow
- * Select to operate correctly.
- *
- * This will occur _after_ the initial DataTables initialisation, although
- * before Ajax data is rendered, if there is ajax data
- *
- * @param  {DataTable.settings} ctx Settings object to operate on
- * @private
- */
-function init ( ctx ) {
-	var api = new DataTable.Api( ctx );
-
-	// Row callback so that classes can be added to rows and cells if the item
-	// was selected before the element was created. This will happen with the
-	// `deferRender` option enabled.
-	// 
-	// This method of attaching to `aoRowCreatedCallback` is a hack until
-	// DataTables has proper events for row manipulation If you are reviewing
-	// this code to create your own plug-ins, please do not do this!
-	ctx.aoRowCreatedCallback.push( {
-		fn: function ( row, data, index ) {
-			var i, ien;
-			var d = ctx.aoData[ index ];
-
-			// Row
-			if ( d._select_selected ) {
-				$( row ).addClass( ctx._select.className );
-			}
-
-			// Cells and columns - if separated out, we would need to do two
-			// loops, so it makes sense to combine them into a single one
-			for ( i=0, ien=ctx.aoColumns.length ; i<ien ; i++ ) {
-				if ( ctx.aoColumns[i]._select_selected || (d._selected_cells && d._selected_cells[i]) ) {
-					$(d.anCells[i]).addClass( ctx._select.className );
-				}
-			}
-		},
-		sName: 'select-deferRender'
-	} );
-
-	// On Ajax reload we want to reselect all rows which are currently selected,
-	// if there is an rowId (i.e. a unique value to identify each row with)
-	api.on( 'preXhr.dt.dtSelect', function () {
-		// note that column selection doesn't need to be cached and then
-		// reselected, as they are already selected
-		var rows = api.rows( { selected: true } ).ids( true ).filter( function ( d ) {
-			return d !== undefined;
-		} );
-
-		var cells = api.cells( { selected: true } ).eq(0).map( function ( cellIdx ) {
-			var id = api.row( cellIdx.row ).id( true );
-			return id ?
-				{ row: id, column: cellIdx.column } :
-				undefined;
-		} ).filter( function ( d ) {
-			return d !== undefined;
-		} );
-
-		// On the next draw, reselect the currently selected items
-		api.one( 'draw.dt.dtSelect', function () {
-			api.rows( rows ).select();
-
-			// `cells` is not a cell index selector, so it needs a loop
-			if ( cells.any() ) {
-				cells.each( function ( id ) {
-					api.cells( id.row, id.column ).select();
-				} );
-			}
-		} );
-	} );
-
-	// Update the table information element with selected item summary
-	api.on( 'draw.dtSelect.dt select.dtSelect.dt deselect.dtSelect.dt info.dt', function () {
-		info( api );
-	} );
-
-	// Clean up and release
-	api.on( 'destroy.dtSelect', function () {
-		disableMouseSelection( api );
-		api.off( '.dtSelect' );
-	} );
-}
-
-/**
- * Add one or more items (rows or columns) to the selection when shift clicking
- * in OS selection style
- *
- * @param  {DataTable.Api} dt   DataTable
- * @param  {string}        type Row or column range selector
- * @param  {object}        idx  Item index to select to
- * @param  {object}        last Item index to select from
- * @private
- */
-function rowColumnRange( dt, type, idx, last )
-{
-	// Add a range of rows from the last selected row to this one
-	var indexes = dt[type+'s']( { search: 'applied' } ).indexes();
-	var idx1 = $.inArray( last, indexes );
-	var idx2 = $.inArray( idx, indexes );
-
-	if ( ! dt[type+'s']( { selected: true } ).any() && idx1 === -1 ) {
-		// select from top to here - slightly odd, but both Windows and Mac OS
-		// do this
-		indexes.splice( $.inArray( idx, indexes )+1, indexes.length );
-	}
-	else {
-		// reverse so we can shift click 'up' as well as down
-		if ( idx1 > idx2 ) {
-			var tmp = idx2;
-			idx2 = idx1;
-			idx1 = tmp;
-		}
-
-		indexes.splice( idx2+1, indexes.length );
-		indexes.splice( 0, idx1 );
-	}
-
-	if ( ! dt[type]( idx, { selected: true } ).any() ) {
-		// Select range
-		dt[type+'s']( indexes ).select();
-	}
-	else {
-		// Deselect range - need to keep the clicked on row selected
-		indexes.splice( $.inArray( idx, indexes ), 1 );
-		dt[type+'s']( indexes ).deselect();
-	}
-}
-
-/**
- * Clear all selected items
- *
- * @param  {DataTable.settings} ctx Settings object of the host DataTable
- * @param  {boolean} [force=false] Force the de-selection to happen, regardless
- *     of selection style
- * @private
- */
-function clear( ctx, force )
-{
-	if ( force || ctx._select.style === 'single' ) {
-		var api = new DataTable.Api( ctx );
-		
-		api.rows( { selected: true } ).deselect();
-		api.columns( { selected: true } ).deselect();
-		api.cells( { selected: true } ).deselect();
-	}
-}
-
-/**
- * Select items based on the current configuration for style and items.
- *
- * @param  {object}             e    Mouse event object
- * @param  {DataTables.Api}     dt   DataTable
- * @param  {DataTable.settings} ctx  Settings object of the host DataTable
- * @param  {string}             type Items to select
- * @param  {int|object}         idx  Index of the item to select
- * @private
- */
-function typeSelect ( e, dt, ctx, type, idx )
-{
-	var style = dt.select.style();
-	var toggleable = dt.select.toggleable();
-	var isSelected = dt[type]( idx, { selected: true } ).any();
-	
-	if ( isSelected && ! toggleable ) {
-		return;
-	}
-
-	if ( style === 'os' ) {
-		if ( e.ctrlKey || e.metaKey ) {
-			// Add or remove from the selection
-			dt[type]( idx ).select( ! isSelected );
-		}
-		else if ( e.shiftKey ) {
-			if ( type === 'cell' ) {
-				cellRange( dt, idx, ctx._select_lastCell || null );
-			}
-			else {
-				rowColumnRange( dt, type, idx, ctx._select_lastCell ?
-					ctx._select_lastCell[type] :
-					null
-				);
-			}
-		}
-		else {
-			// No cmd or shift click - deselect if selected, or select
-			// this row only
-			var selected = dt[type+'s']( { selected: true } );
-
-			if ( isSelected && selected.flatten().length === 1 ) {
-				dt[type]( idx ).deselect();
-			}
-			else {
-				selected.deselect();
-				dt[type]( idx ).select();
-			}
-		}
-	} else if ( style == 'multi+shift' ) {
-		if ( e.shiftKey ) {
-			if ( type === 'cell' ) {
-				cellRange( dt, idx, ctx._select_lastCell || null );
-			}
-			else {
-				rowColumnRange( dt, type, idx, ctx._select_lastCell ?
-					ctx._select_lastCell[type] :
-					null
-				);
-			}
-		}
-		else {
-			dt[ type ]( idx ).select( ! isSelected );
-		}
-	}
-	else {
-		dt[ type ]( idx ).select( ! isSelected );
-	}
-}
-
-function _safeId( node ) {
-	return node.id.replace(/[^a-zA-Z0-9\-\_]/g, '-');
-}
-
-
-
-/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- * DataTables selectors
- */
-
-// row and column are basically identical just assigned to different properties
-// and checking a different array, so we can dynamically create the functions to
-// reduce the code size
-$.each( [
-	{ type: 'row', prop: 'aoData' },
-	{ type: 'column', prop: 'aoColumns' }
-], function ( i, o ) {
-	DataTable.ext.selector[ o.type ].push( function ( settings, opts, indexes ) {
-		var selected = opts.selected;
-		var data;
-		var out = [];
-
-		if ( selected !== true && selected !== false ) {
-			return indexes;
-		}
-
-		for ( var i=0, ien=indexes.length ; i<ien ; i++ ) {
-			data = settings[ o.prop ][ indexes[i] ];
-
-			if ( (selected === true && data._select_selected === true) ||
-			     (selected === false && ! data._select_selected )
-			) {
-				out.push( indexes[i] );
-			}
-		}
-
-		return out;
-	} );
-} );
-
-DataTable.ext.selector.cell.push( function ( settings, opts, cells ) {
-	var selected = opts.selected;
-	var rowData;
-	var out = [];
-
-	if ( selected === undefined ) {
-		return cells;
-	}
-
-	for ( var i=0, ien=cells.length ; i<ien ; i++ ) {
-		rowData = settings.aoData[ cells[i].row ];
-
-		if ( (selected === true && rowData._selected_cells && rowData._selected_cells[ cells[i].column ] === true) ||
-		     (selected === false && ( ! rowData._selected_cells || ! rowData._selected_cells[ cells[i].column ] ) )
-		) {
-			out.push( cells[i] );
-		}
-	}
-
-	return out;
-} );
-
-
-
-/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- * DataTables API
- *
- * For complete documentation, please refer to the docs/api directory or the
- * DataTables site
- */
-
-// Local variables to improve compression
-var apiRegister = DataTable.Api.register;
-var apiRegisterPlural = DataTable.Api.registerPlural;
-
-apiRegister( 'select()', function () {
-	return this.iterator( 'table', function ( ctx ) {
-		DataTable.select.init( new DataTable.Api( ctx ) );
-	} );
-} );
-
-apiRegister( 'select.blurable()', function ( flag ) {
-	if ( flag === undefined ) {
-		return this.context[0]._select.blurable;
-	}
-
-	return this.iterator( 'table', function ( ctx ) {
-		ctx._select.blurable = flag;
-	} );
-} );
-
-apiRegister( 'select.toggleable()', function ( flag ) {
-	if ( flag === undefined ) {
-		return this.context[0]._select.toggleable;
-	}
-
-	return this.iterator( 'table', function ( ctx ) {
-		ctx._select.toggleable = flag;
-	} );
-} );
-
-apiRegister( 'select.info()', function ( flag ) {
-	if ( info === undefined ) {
-		return this.context[0]._select.info;
-	}
-
-	return this.iterator( 'table', function ( ctx ) {
-		ctx._select.info = flag;
-	} );
-} );
-
-apiRegister( 'select.items()', function ( items ) {
-	if ( items === undefined ) {
-		return this.context[0]._select.items;
-	}
-
-	return this.iterator( 'table', function ( ctx ) {
-		ctx._select.items = items;
-
-		eventTrigger( new DataTable.Api( ctx ), 'selectItems', [ items ] );
-	} );
-} );
-
-// Takes effect from the _next_ selection. None disables future selection, but
-// does not clear the current selection. Use the `deselect` methods for that
-apiRegister( 'select.style()', function ( style ) {
-	if ( style === undefined ) {
-		return this.context[0]._select.style;
-	}
-
-	return this.iterator( 'table', function ( ctx ) {
-		ctx._select.style = style;
-
-		if ( ! ctx._select_init ) {
-			init( ctx );
-		}
-
-		// Add / remove mouse event handlers. They aren't required when only
-		// API selection is available
-		var dt = new DataTable.Api( ctx );
-		disableMouseSelection( dt );
-		
-		if ( style !== 'api' ) {
-			enableMouseSelection( dt );
-		}
-
-		eventTrigger( new DataTable.Api( ctx ), 'selectStyle', [ style ] );
-	} );
-} );
-
-apiRegister( 'select.selector()', function ( selector ) {
-	if ( selector === undefined ) {
-		return this.context[0]._select.selector;
-	}
-
-	return this.iterator( 'table', function ( ctx ) {
-		disableMouseSelection( new DataTable.Api( ctx ) );
-
-		ctx._select.selector = selector;
-
-		if ( ctx._select.style !== 'api' ) {
-			enableMouseSelection( new DataTable.Api( ctx ) );
-		}
-	} );
-} );
-
-
-
-apiRegisterPlural( 'rows().select()', 'row().select()', function ( select ) {
-	var api = this;
-
-	if ( select === false ) {
-		return this.deselect();
-	}
-
-	this.iterator( 'row', function ( ctx, idx ) {
-		clear( ctx );
-
-		ctx.aoData[ idx ]._select_selected = true;
-		$( ctx.aoData[ idx ].nTr ).addClass( ctx._select.className );
-	} );
-
-	this.iterator( 'table', function ( ctx, i ) {
-		eventTrigger( api, 'select', [ 'row', api[i] ], true );
-	} );
-
-	return this;
-} );
-
-apiRegisterPlural( 'columns().select()', 'column().select()', function ( select ) {
-	var api = this;
-
-	if ( select === false ) {
-		return this.deselect();
-	}
-
-	this.iterator( 'column', function ( ctx, idx ) {
-		clear( ctx );
-
-		ctx.aoColumns[ idx ]._select_selected = true;
-
-		var column = new DataTable.Api( ctx ).column( idx );
-
-		$( column.header() ).addClass( ctx._select.className );
-		$( column.footer() ).addClass( ctx._select.className );
-
-		column.nodes().to$().addClass( ctx._select.className );
-	} );
-
-	this.iterator( 'table', function ( ctx, i ) {
-		eventTrigger( api, 'select', [ 'column', api[i] ], true );
-	} );
-
-	return this;
-} );
-
-apiRegisterPlural( 'cells().select()', 'cell().select()', function ( select ) {
-	var api = this;
-
-	if ( select === false ) {
-		return this.deselect();
-	}
-
-	this.iterator( 'cell', function ( ctx, rowIdx, colIdx ) {
-		clear( ctx );
-
-		var data = ctx.aoData[ rowIdx ];
-
-		if ( data._selected_cells === undefined ) {
-			data._selected_cells = [];
-		}
-
-		data._selected_cells[ colIdx ] = true;
-
-		if ( data.anCells ) {
-			$( data.anCells[ colIdx ] ).addClass( ctx._select.className );
-		}
-	} );
-
-	this.iterator( 'table', function ( ctx, i ) {
-		eventTrigger( api, 'select', [ 'cell', api[i] ], true );
-	} );
-
-	return this;
-} );
-
-
-apiRegisterPlural( 'rows().deselect()', 'row().deselect()', function () {
-	var api = this;
-
-	this.iterator( 'row', function ( ctx, idx ) {
-		ctx.aoData[ idx ]._select_selected = false;
-		$( ctx.aoData[ idx ].nTr ).removeClass( ctx._select.className );
-	} );
-
-	this.iterator( 'table', function ( ctx, i ) {
-		eventTrigger( api, 'deselect', [ 'row', api[i] ], true );
-	} );
-
-	return this;
-} );
-
-apiRegisterPlural( 'columns().deselect()', 'column().deselect()', function () {
-	var api = this;
-
-	this.iterator( 'column', function ( ctx, idx ) {
-		ctx.aoColumns[ idx ]._select_selected = false;
-
-		var api = new DataTable.Api( ctx );
-		var column = api.column( idx );
-
-		$( column.header() ).removeClass( ctx._select.className );
-		$( column.footer() ).removeClass( ctx._select.className );
-
-		// Need to loop over each cell, rather than just using
-		// `column().nodes()` as cells which are individually selected should
-		// not have the `selected` class removed from them
-		api.cells( null, idx ).indexes().each( function (cellIdx) {
-			var data = ctx.aoData[ cellIdx.row ];
-			var cellSelected = data._selected_cells;
-
-			if ( data.anCells && (! cellSelected || ! cellSelected[ cellIdx.column ]) ) {
-				$( data.anCells[ cellIdx.column  ] ).removeClass( ctx._select.className );
-			}
-		} );
-	} );
-
-	this.iterator( 'table', function ( ctx, i ) {
-		eventTrigger( api, 'deselect', [ 'column', api[i] ], true );
-	} );
-
-	return this;
-} );
-
-apiRegisterPlural( 'cells().deselect()', 'cell().deselect()', function () {
-	var api = this;
-
-	this.iterator( 'cell', function ( ctx, rowIdx, colIdx ) {
-		var data = ctx.aoData[ rowIdx ];
-
-		data._selected_cells[ colIdx ] = false;
-
-		// Remove class only if the cells exist, and the cell is not column
-		// selected, in which case the class should remain (since it is selected
-		// in the column)
-		if ( data.anCells && ! ctx.aoColumns[ colIdx ]._select_selected ) {
-			$( data.anCells[ colIdx ] ).removeClass( ctx._select.className );
-		}
-	} );
-
-	this.iterator( 'table', function ( ctx, i ) {
-		eventTrigger( api, 'deselect', [ 'cell', api[i] ], true );
-	} );
-
-	return this;
-} );
-
-
-
-/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- * Buttons
- */
-function i18n( label, def ) {
-	return function (dt) {
-		return dt.i18n( 'buttons.'+label, def );
-	};
-}
-
-// Common events with suitable namespaces
-function namespacedEvents ( config ) {
-	var unique = config._eventNamespace;
-
-	return 'draw.dt.DT'+unique+' select.dt.DT'+unique+' deselect.dt.DT'+unique;
-}
-
-function enabled ( dt, config ) {
-	if ( $.inArray( 'rows', config.limitTo ) !== -1 && dt.rows( { selected: true } ).any() ) {
-		return true;
-	}
-
-	if ( $.inArray( 'columns', config.limitTo ) !== -1 && dt.columns( { selected: true } ).any() ) {
-		return true;
-	}
-
-	if ( $.inArray( 'cells', config.limitTo ) !== -1 && dt.cells( { selected: true } ).any() ) {
-		return true;
-	}
-
-	return false;
-}
-
-var _buttonNamespace = 0;
-
-$.extend( DataTable.ext.buttons, {
-	selected: {
-		text: i18n( 'selected', 'Selected' ),
-		className: 'buttons-selected',
-		limitTo: [ 'rows', 'columns', 'cells' ],
-		init: function ( dt, node, config ) {
-			var that = this;
-			config._eventNamespace = '.select'+(_buttonNamespace++);
-
-			// .DT namespace listeners are removed by DataTables automatically
-			// on table destroy
-			dt.on( namespacedEvents(config), function () {
-				that.enable( enabled(dt, config) );
-			} );
-
-			this.disable();
-		},
-		destroy: function ( dt, node, config ) {
-			dt.off( config._eventNamespace );
-		}
-	},
-	selectedSingle: {
-		text: i18n( 'selectedSingle', 'Selected single' ),
-		className: 'buttons-selected-single',
-		init: function ( dt, node, config ) {
-			var that = this;
-			config._eventNamespace = '.select'+(_buttonNamespace++);
-
-			dt.on( namespacedEvents(config), function () {
-				var count = dt.rows( { selected: true } ).flatten().length +
-				            dt.columns( { selected: true } ).flatten().length +
-				            dt.cells( { selected: true } ).flatten().length;
-
-				that.enable( count === 1 );
-			} );
-
-			this.disable();
-		},
-		destroy: function ( dt, node, config ) {
-			dt.off( config._eventNamespace );
-		}
-	},
-	selectAll: {
-		text: i18n( 'selectAll', 'Select all' ),
-		className: 'buttons-select-all',
-		action: function () {
-			var items = this.select.items();
-			this[ items+'s' ]().select();
-		}
-	},
-	selectNone: {
-		text: i18n( 'selectNone', 'Deselect all' ),
-		className: 'buttons-select-none',
-		action: function () {
-			clear( this.settings()[0], true );
-		},
-		init: function ( dt, node, config ) {
-			var that = this;
-			config._eventNamespace = '.select'+(_buttonNamespace++);
-
-			dt.on( namespacedEvents(config), function () {
-				var count = dt.rows( { selected: true } ).flatten().length +
-				            dt.columns( { selected: true } ).flatten().length +
-				            dt.cells( { selected: true } ).flatten().length;
-
-				that.enable( count > 0 );
-			} );
-
-			this.disable();
-		},
-		destroy: function ( dt, node, config ) {
-			dt.off( config._eventNamespace );
-		}
-	}
-} );
-
-$.each( [ 'Row', 'Column', 'Cell' ], function ( i, item ) {
-	var lc = item.toLowerCase();
-
-	DataTable.ext.buttons[ 'select'+item+'s' ] = {
-		text: i18n( 'select'+item+'s', 'Select '+lc+'s' ),
-		className: 'buttons-select-'+lc+'s',
-		action: function () {
-			this.select.items( lc );
-		},
-		init: function ( dt ) {
-			var that = this;
-
-			dt.on( 'selectItems.dt.DT', function ( e, ctx, items ) {
-				that.active( items === lc );
-			} );
-		}
-	};
-} );
-
-
-
-/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- * Initialisation
- */
-
-// DataTables creation - check if select has been defined in the options. Note
-// this required that the table be in the document! If it isn't then something
-// needs to trigger this method unfortunately. The next major release of
-// DataTables will rework the events and address this.
-$(document).on( 'preInit.dt.dtSelect', function (e, ctx) {
-	if ( e.namespace !== 'dt' ) {
-		return;
-	}
-
-	DataTable.select.init( new DataTable.Api( ctx ) );
-} );
-
-
-return DataTable.select;
-}));
diff --git a/DataTables/Select-1.3.1/js/dataTables.select.min.js b/DataTables/Select-1.3.1/js/dataTables.select.min.js
deleted file mode 100644
index 3765f6c..0000000
--- a/DataTables/Select-1.3.1/js/dataTables.select.min.js
+++ /dev/null
@@ -1,38 +0,0 @@
-/*!
-   Copyright 2015-2019 SpryMedia Ltd.
-
- This source file is free software, available under the following license:
-   MIT license - http://datatables.net/license/mit
-
- This source file is distributed in the hope that it will be useful, but
- WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
- or FITNESS FOR A PARTICULAR PURPOSE. See the license files for details.
-
- For details please refer to: http://www.datatables.net/extensions/select
- Select for DataTables 1.3.1
- 2015-2019 SpryMedia Ltd - datatables.net/license/mit
-*/
-(function(f){"function"===typeof define&&define.amd?define(["jquery","datatables.net"],function(k){return f(k,window,document)}):"object"===typeof exports?module.exports=function(k,p){k||(k=window);p&&p.fn.dataTable||(p=require("datatables.net")(k,p).$);return f(p,k,k.document)}:f(jQuery,window,document)})(function(f,k,p,h){function z(a,b,c){var d=function(c,b){if(c>b){var d=b;b=c;c=d}var e=!1;return a.columns(":visible").indexes().filter(function(a){a===c&&(e=!0);return a===b?(e=!1,!0):e})};var e=
-function(c,b){var d=a.rows({search:"applied"}).indexes();if(d.indexOf(c)>d.indexOf(b)){var e=b;b=c;c=e}var f=!1;return d.filter(function(a){a===c&&(f=!0);return a===b?(f=!1,!0):f})};a.cells({selected:!0}).any()||c?(d=d(c.column,b.column),c=e(c.row,b.row)):(d=d(0,b.column),c=e(0,b.row));c=a.cells(c,d).flatten();a.cells(b,{selected:!0}).any()?a.cells(c).deselect():a.cells(c).select()}function v(a){var b=a.settings()[0]._select.selector;f(a.table().container()).off("mousedown.dtSelect",b).off("mouseup.dtSelect",
-b).off("click.dtSelect",b);f("body").off("click.dtSelect"+a.table().node().id.replace(/[^a-zA-Z0-9\-_]/g,"-"))}function A(a){var b=f(a.table().container()),c=a.settings()[0],d=c._select.selector,e;b.on("mousedown.dtSelect",d,function(a){if(a.shiftKey||a.metaKey||a.ctrlKey)b.css("-moz-user-select","none").one("selectstart.dtSelect",d,function(){return!1});k.getSelection&&(e=k.getSelection())}).on("mouseup.dtSelect",d,function(){b.css("-moz-user-select","")}).on("click.dtSelect",d,function(c){var b=
-a.select.items();if(e){var d=k.getSelection();if((!d.anchorNode||f(d.anchorNode).closest("table")[0]===a.table().node())&&d!==e)return}d=a.settings()[0];var l=f.trim(a.settings()[0].oClasses.sWrapper).replace(/ +/g,".");if(f(c.target).closest("div."+l)[0]==a.table().container()&&(l=a.cell(f(c.target).closest("td, th")),l.any())){var g=f.Event("user-select.dt");m(a,g,[b,l,c]);g.isDefaultPrevented()||(g=l.index(),"row"===b?(b=g.row,w(c,a,d,"row",b)):"column"===b?(b=l.index().column,w(c,a,d,"column",
-b)):"cell"===b&&(b=l.index(),w(c,a,d,"cell",b)),d._select_lastCell=g)}});f("body").on("click.dtSelect"+a.table().node().id.replace(/[^a-zA-Z0-9\-_]/g,"-"),function(b){!c._select.blurable||f(b.target).parents().filter(a.table().container()).length||0===f(b.target).parents("html").length||f(b.target).parents("div.DTE").length||r(c,!0)})}function m(a,b,c,d){if(!d||a.flatten().length)"string"===typeof b&&(b+=".dt"),c.unshift(a),f(a.table().node()).trigger(b,c)}function B(a){var b=a.settings()[0];if(b._select.info&&
-b.aanFeatures.i&&"api"!==a.select.style()){var c=a.rows({selected:!0}).flatten().length,d=a.columns({selected:!0}).flatten().length,e=a.cells({selected:!0}).flatten().length,l=function(b,c,d){b.append(f('<span class="select-item"/>').append(a.i18n("select."+c+"s",{_:"%d "+c+"s selected",0:"",1:"1 "+c+" selected"},d)))};f.each(b.aanFeatures.i,function(b,a){a=f(a);b=f('<span class="select-info"/>');l(b,"row",c);l(b,"column",d);l(b,"cell",e);var g=a.children("span.select-info");g.length&&g.remove();
-""!==b.text()&&a.append(b)})}}function D(a){var b=new g.Api(a);a.aoRowCreatedCallback.push({fn:function(b,d,e){d=a.aoData[e];d._select_selected&&f(b).addClass(a._select.className);b=0;for(e=a.aoColumns.length;b<e;b++)(a.aoColumns[b]._select_selected||d._selected_cells&&d._selected_cells[b])&&f(d.anCells[b]).addClass(a._select.className)},sName:"select-deferRender"});b.on("preXhr.dt.dtSelect",function(){var a=b.rows({selected:!0}).ids(!0).filter(function(b){return b!==h}),d=b.cells({selected:!0}).eq(0).map(function(a){var c=
-b.row(a.row).id(!0);return c?{row:c,column:a.column}:h}).filter(function(b){return b!==h});b.one("draw.dt.dtSelect",function(){b.rows(a).select();d.any()&&d.each(function(a){b.cells(a.row,a.column).select()})})});b.on("draw.dtSelect.dt select.dtSelect.dt deselect.dtSelect.dt info.dt",function(){B(b)});b.on("destroy.dtSelect",function(){v(b);b.off(".dtSelect")})}function C(a,b,c,d){var e=a[b+"s"]({search:"applied"}).indexes();d=f.inArray(d,e);var g=f.inArray(c,e);if(a[b+"s"]({selected:!0}).any()||
--1!==d){if(d>g){var u=g;g=d;d=u}e.splice(g+1,e.length);e.splice(0,d)}else e.splice(f.inArray(c,e)+1,e.length);a[b](c,{selected:!0}).any()?(e.splice(f.inArray(c,e),1),a[b+"s"](e).deselect()):a[b+"s"](e).select()}function r(a,b){if(b||"single"===a._select.style)a=new g.Api(a),a.rows({selected:!0}).deselect(),a.columns({selected:!0}).deselect(),a.cells({selected:!0}).deselect()}function w(a,b,c,d,e){var f=b.select.style(),g=b.select.toggleable(),h=b[d](e,{selected:!0}).any();if(!h||g)"os"===f?a.ctrlKey||
-a.metaKey?b[d](e).select(!h):a.shiftKey?"cell"===d?z(b,e,c._select_lastCell||null):C(b,d,e,c._select_lastCell?c._select_lastCell[d]:null):(a=b[d+"s"]({selected:!0}),h&&1===a.flatten().length?b[d](e).deselect():(a.deselect(),b[d](e).select())):"multi+shift"==f?a.shiftKey?"cell"===d?z(b,e,c._select_lastCell||null):C(b,d,e,c._select_lastCell?c._select_lastCell[d]:null):b[d](e).select(!h):b[d](e).select(!h)}function t(a,b){return function(c){return c.i18n("buttons."+a,b)}}function x(a){a=a._eventNamespace;
-return"draw.dt.DT"+a+" select.dt.DT"+a+" deselect.dt.DT"+a}function E(a,b){return-1!==f.inArray("rows",b.limitTo)&&a.rows({selected:!0}).any()||-1!==f.inArray("columns",b.limitTo)&&a.columns({selected:!0}).any()||-1!==f.inArray("cells",b.limitTo)&&a.cells({selected:!0}).any()?!0:!1}var g=f.fn.dataTable;g.select={};g.select.version="1.3.1";g.select.init=function(a){var b=a.settings()[0],c=b.oInit.select,d=g.defaults.select;c=c===h?d:c;d="row";var e="api",l=!1,u=!0,k=!0,m="td, th",p="selected",n=!1;
-b._select={};!0===c?(e="os",n=!0):"string"===typeof c?(e=c,n=!0):f.isPlainObject(c)&&(c.blurable!==h&&(l=c.blurable),c.toggleable!==h&&(u=c.toggleable),c.info!==h&&(k=c.info),c.items!==h&&(d=c.items),e=c.style!==h?c.style:"os",n=!0,c.selector!==h&&(m=c.selector),c.className!==h&&(p=c.className));a.select.selector(m);a.select.items(d);a.select.style(e);a.select.blurable(l);a.select.toggleable(u);a.select.info(k);b._select.className=p;f.fn.dataTable.ext.order["select-checkbox"]=function(b,a){return this.api().column(a,
-{order:"index"}).nodes().map(function(a){return"row"===b._select.items?f(a).parent().hasClass(b._select.className):"cell"===b._select.items?f(a).hasClass(b._select.className):!1})};!n&&f(a.table().node()).hasClass("selectable")&&a.select.style("os")};f.each([{type:"row",prop:"aoData"},{type:"column",prop:"aoColumns"}],function(a,b){g.ext.selector[b.type].push(function(a,d,e){d=d.selected;var c=[];if(!0!==d&&!1!==d)return e;for(var f=0,g=e.length;f<g;f++){var h=a[b.prop][e[f]];(!0===d&&!0===h._select_selected||
-!1===d&&!h._select_selected)&&c.push(e[f])}return c})});g.ext.selector.cell.push(function(a,b,c){b=b.selected;var d=[];if(b===h)return c;for(var e=0,f=c.length;e<f;e++){var g=a.aoData[c[e].row];(!0===b&&g._selected_cells&&!0===g._selected_cells[c[e].column]||!(!1!==b||g._selected_cells&&g._selected_cells[c[e].column]))&&d.push(c[e])}return d});var n=g.Api.register,q=g.Api.registerPlural;n("select()",function(){return this.iterator("table",function(a){g.select.init(new g.Api(a))})});n("select.blurable()",
-function(a){return a===h?this.context[0]._select.blurable:this.iterator("table",function(b){b._select.blurable=a})});n("select.toggleable()",function(a){return a===h?this.context[0]._select.toggleable:this.iterator("table",function(b){b._select.toggleable=a})});n("select.info()",function(a){return B===h?this.context[0]._select.info:this.iterator("table",function(b){b._select.info=a})});n("select.items()",function(a){return a===h?this.context[0]._select.items:this.iterator("table",function(b){b._select.items=
-a;m(new g.Api(b),"selectItems",[a])})});n("select.style()",function(a){return a===h?this.context[0]._select.style:this.iterator("table",function(b){b._select.style=a;b._select_init||D(b);var c=new g.Api(b);v(c);"api"!==a&&A(c);m(new g.Api(b),"selectStyle",[a])})});n("select.selector()",function(a){return a===h?this.context[0]._select.selector:this.iterator("table",function(b){v(new g.Api(b));b._select.selector=a;"api"!==b._select.style&&A(new g.Api(b))})});q("rows().select()","row().select()",function(a){var b=
-this;if(!1===a)return this.deselect();this.iterator("row",function(b,a){r(b);b.aoData[a]._select_selected=!0;f(b.aoData[a].nTr).addClass(b._select.className)});this.iterator("table",function(a,d){m(b,"select",["row",b[d]],!0)});return this});q("columns().select()","column().select()",function(a){var b=this;if(!1===a)return this.deselect();this.iterator("column",function(b,a){r(b);b.aoColumns[a]._select_selected=!0;a=(new g.Api(b)).column(a);f(a.header()).addClass(b._select.className);f(a.footer()).addClass(b._select.className);
-a.nodes().to$().addClass(b._select.className)});this.iterator("table",function(a,d){m(b,"select",["column",b[d]],!0)});return this});q("cells().select()","cell().select()",function(a){var b=this;if(!1===a)return this.deselect();this.iterator("cell",function(b,a,e){r(b);a=b.aoData[a];a._selected_cells===h&&(a._selected_cells=[]);a._selected_cells[e]=!0;a.anCells&&f(a.anCells[e]).addClass(b._select.className)});this.iterator("table",function(a,d){m(b,"select",["cell",b[d]],!0)});return this});q("rows().deselect()",
-"row().deselect()",function(){var a=this;this.iterator("row",function(a,c){a.aoData[c]._select_selected=!1;f(a.aoData[c].nTr).removeClass(a._select.className)});this.iterator("table",function(b,c){m(a,"deselect",["row",a[c]],!0)});return this});q("columns().deselect()","column().deselect()",function(){var a=this;this.iterator("column",function(a,c){a.aoColumns[c]._select_selected=!1;var b=new g.Api(a),e=b.column(c);f(e.header()).removeClass(a._select.className);f(e.footer()).removeClass(a._select.className);
-b.cells(null,c).indexes().each(function(b){var c=a.aoData[b.row],d=c._selected_cells;!c.anCells||d&&d[b.column]||f(c.anCells[b.column]).removeClass(a._select.className)})});this.iterator("table",function(b,c){m(a,"deselect",["column",a[c]],!0)});return this});q("cells().deselect()","cell().deselect()",function(){var a=this;this.iterator("cell",function(a,c,d){c=a.aoData[c];c._selected_cells[d]=!1;c.anCells&&!a.aoColumns[d]._select_selected&&f(c.anCells[d]).removeClass(a._select.className)});this.iterator("table",
-function(b,c){m(a,"deselect",["cell",a[c]],!0)});return this});var y=0;f.extend(g.ext.buttons,{selected:{text:t("selected","Selected"),className:"buttons-selected",limitTo:["rows","columns","cells"],init:function(a,b,c){var d=this;c._eventNamespace=".select"+y++;a.on(x(c),function(){d.enable(E(a,c))});this.disable()},destroy:function(a,b,c){a.off(c._eventNamespace)}},selectedSingle:{text:t("selectedSingle","Selected single"),className:"buttons-selected-single",init:function(a,b,c){var d=this;c._eventNamespace=
-".select"+y++;a.on(x(c),function(){var b=a.rows({selected:!0}).flatten().length+a.columns({selected:!0}).flatten().length+a.cells({selected:!0}).flatten().length;d.enable(1===b)});this.disable()},destroy:function(a,b,c){a.off(c._eventNamespace)}},selectAll:{text:t("selectAll","Select all"),className:"buttons-select-all",action:function(){this[this.select.items()+"s"]().select()}},selectNone:{text:t("selectNone","Deselect all"),className:"buttons-select-none",action:function(){r(this.settings()[0],
-!0)},init:function(a,b,c){var d=this;c._eventNamespace=".select"+y++;a.on(x(c),function(){var b=a.rows({selected:!0}).flatten().length+a.columns({selected:!0}).flatten().length+a.cells({selected:!0}).flatten().length;d.enable(0<b)});this.disable()},destroy:function(a,b,c){a.off(c._eventNamespace)}}});f.each(["Row","Column","Cell"],function(a,b){var c=b.toLowerCase();g.ext.buttons["select"+b+"s"]={text:t("select"+b+"s","Select "+c+"s"),className:"buttons-select-"+c+"s",action:function(){this.select.items(c)},
-init:function(a){var b=this;a.on("selectItems.dt.DT",function(a,d,e){b.active(e===c)})}}});f(p).on("preInit.dt.dtSelect",function(a,b){"dt"===a.namespace&&g.select.init(new g.Api(b))});return g.select});
diff --git a/DataTables/Select-1.3.1/js/select.bootstrap.js b/DataTables/Select-1.3.1/js/select.bootstrap.js
deleted file mode 100644
index 352e342..0000000
--- a/DataTables/Select-1.3.1/js/select.bootstrap.js
+++ /dev/null
@@ -1,38 +0,0 @@
-/*! Bootstrap 3 styling wrapper for Select
- * ©2018 SpryMedia Ltd - datatables.net/license
- */
-
-(function( factory ){
-	if ( typeof define === 'function' && define.amd ) {
-		// AMD
-		define( ['jquery', 'datatables.net-bs', 'datatables.net-select'], function ( $ ) {
-			return factory( $, window, document );
-		} );
-	}
-	else if ( typeof exports === 'object' ) {
-		// CommonJS
-		module.exports = function (root, $) {
-			if ( ! root ) {
-				root = window;
-			}
-
-			if ( ! $ || ! $.fn.dataTable ) {
-				$ = require('datatables.net-bs')(root, $).$;
-			}
-
-			if ( ! $.fn.dataTable.select ) {
-				require('datatables.net-select')(root, $);
-			}
-
-			return factory( $, root, root.document );
-		};
-	}
-	else {
-		// Browser
-		factory( jQuery, window, document );
-	}
-}(function( $, window, document, undefined ) {
-
-return $.fn.dataTable;
-
-}));
\ No newline at end of file
diff --git a/DataTables/Select-1.3.1/js/select.bootstrap.min.js b/DataTables/Select-1.3.1/js/select.bootstrap.min.js
deleted file mode 100644
index b9027df..0000000
--- a/DataTables/Select-1.3.1/js/select.bootstrap.min.js
+++ /dev/null
@@ -1,5 +0,0 @@
-/*!
- Bootstrap 3 styling wrapper for Select
- ©2018 SpryMedia Ltd - datatables.net/license
-*/
-(function(c){"function"===typeof define&&define.amd?define(["jquery","datatables.net-bs","datatables.net-select"],function(a){return c(a,window,document)}):"object"===typeof exports?module.exports=function(a,b){a||(a=window);b&&b.fn.dataTable||(b=require("datatables.net-bs")(a,b).$);b.fn.dataTable.select||require("datatables.net-select")(a,b);return c(b,a,a.document)}:c(jQuery,window,document)})(function(c,a,b,d){return c.fn.dataTable});
diff --git a/DataTables/Select-1.3.1/js/select.bootstrap4.js b/DataTables/Select-1.3.1/js/select.bootstrap4.js
deleted file mode 100644
index 4457f84..0000000
--- a/DataTables/Select-1.3.1/js/select.bootstrap4.js
+++ /dev/null
@@ -1,38 +0,0 @@
-/*! Bootstrap 4 styling wrapper for Select
- * ©2018 SpryMedia Ltd - datatables.net/license
- */
-
-(function( factory ){
-	if ( typeof define === 'function' && define.amd ) {
-		// AMD
-		define( ['jquery', 'datatables.net-bs4', 'datatables.net-select'], function ( $ ) {
-			return factory( $, window, document );
-		} );
-	}
-	else if ( typeof exports === 'object' ) {
-		// CommonJS
-		module.exports = function (root, $) {
-			if ( ! root ) {
-				root = window;
-			}
-
-			if ( ! $ || ! $.fn.dataTable ) {
-				$ = require('datatables.net-bs4')(root, $).$;
-			}
-
-			if ( ! $.fn.dataTable.select ) {
-				require('datatables.net-select')(root, $);
-			}
-
-			return factory( $, root, root.document );
-		};
-	}
-	else {
-		// Browser
-		factory( jQuery, window, document );
-	}
-}(function( $, window, document, undefined ) {
-
-return $.fn.dataTable;
-
-}));
\ No newline at end of file
diff --git a/DataTables/Select-1.3.1/js/select.bootstrap4.min.js b/DataTables/Select-1.3.1/js/select.bootstrap4.min.js
deleted file mode 100644
index a46d1f1..0000000
--- a/DataTables/Select-1.3.1/js/select.bootstrap4.min.js
+++ /dev/null
@@ -1,5 +0,0 @@
-/*!
- Bootstrap 4 styling wrapper for Select
- ©2018 SpryMedia Ltd - datatables.net/license
-*/
-(function(c){"function"===typeof define&&define.amd?define(["jquery","datatables.net-bs4","datatables.net-select"],function(a){return c(a,window,document)}):"object"===typeof exports?module.exports=function(a,b){a||(a=window);b&&b.fn.dataTable||(b=require("datatables.net-bs4")(a,b).$);b.fn.dataTable.select||require("datatables.net-select")(a,b);return c(b,a,a.document)}:c(jQuery,window,document)})(function(c,a,b,d){return c.fn.dataTable});
diff --git a/DataTables/Select-1.3.1/js/select.dataTables.js b/DataTables/Select-1.3.1/js/select.dataTables.js
deleted file mode 100644
index ed2260f..0000000
--- a/DataTables/Select-1.3.1/js/select.dataTables.js
+++ /dev/null
@@ -1,38 +0,0 @@
-/*! DataTables styling wrapper for Select
- * ©2018 SpryMedia Ltd - datatables.net/license
- */
-
-(function( factory ){
-	if ( typeof define === 'function' && define.amd ) {
-		// AMD
-		define( ['jquery', 'datatables.net-dt', 'datatables.net-select'], function ( $ ) {
-			return factory( $, window, document );
-		} );
-	}
-	else if ( typeof exports === 'object' ) {
-		// CommonJS
-		module.exports = function (root, $) {
-			if ( ! root ) {
-				root = window;
-			}
-
-			if ( ! $ || ! $.fn.dataTable ) {
-				$ = require('datatables.net-dt')(root, $).$;
-			}
-
-			if ( ! $.fn.dataTable.select ) {
-				require('datatables.net-select')(root, $);
-			}
-
-			return factory( $, root, root.document );
-		};
-	}
-	else {
-		// Browser
-		factory( jQuery, window, document );
-	}
-}(function( $, window, document, undefined ) {
-
-return $.fn.dataTable;
-
-}));
\ No newline at end of file
diff --git a/DataTables/Select-1.3.1/js/select.foundation.js b/DataTables/Select-1.3.1/js/select.foundation.js
deleted file mode 100644
index 2528d41..0000000
--- a/DataTables/Select-1.3.1/js/select.foundation.js
+++ /dev/null
@@ -1,38 +0,0 @@
-/*! Foundation styling wrapper for Select
- * ©2018 SpryMedia Ltd - datatables.net/license
- */
-
-(function( factory ){
-	if ( typeof define === 'function' && define.amd ) {
-		// AMD
-		define( ['jquery', 'datatables.net-zf', 'datatables.net-select'], function ( $ ) {
-			return factory( $, window, document );
-		} );
-	}
-	else if ( typeof exports === 'object' ) {
-		// CommonJS
-		module.exports = function (root, $) {
-			if ( ! root ) {
-				root = window;
-			}
-
-			if ( ! $ || ! $.fn.dataTable ) {
-				$ = require('datatables.net-zf')(root, $).$;
-			}
-
-			if ( ! $.fn.dataTable.select ) {
-				require('datatables.net-select')(root, $);
-			}
-
-			return factory( $, root, root.document );
-		};
-	}
-	else {
-		// Browser
-		factory( jQuery, window, document );
-	}
-}(function( $, window, document, undefined ) {
-
-return $.fn.dataTable;
-
-}));
\ No newline at end of file
diff --git a/DataTables/Select-1.3.1/js/select.foundation.min.js b/DataTables/Select-1.3.1/js/select.foundation.min.js
deleted file mode 100644
index 4bace9e..0000000
--- a/DataTables/Select-1.3.1/js/select.foundation.min.js
+++ /dev/null
@@ -1,5 +0,0 @@
-/*!
- Foundation styling wrapper for Select
- ©2018 SpryMedia Ltd - datatables.net/license
-*/
-(function(c){"function"===typeof define&&define.amd?define(["jquery","datatables.net-zf","datatables.net-select"],function(a){return c(a,window,document)}):"object"===typeof exports?module.exports=function(a,b){a||(a=window);b&&b.fn.dataTable||(b=require("datatables.net-zf")(a,b).$);b.fn.dataTable.select||require("datatables.net-select")(a,b);return c(b,a,a.document)}:c(jQuery,window,document)})(function(c,a,b,d){return c.fn.dataTable});
diff --git a/DataTables/Select-1.3.1/js/select.jqueryui.js b/DataTables/Select-1.3.1/js/select.jqueryui.js
deleted file mode 100644
index 50607d1..0000000
--- a/DataTables/Select-1.3.1/js/select.jqueryui.js
+++ /dev/null
@@ -1,38 +0,0 @@
-/*! jQuery UI styling wrapper for Select
- * ©2018 SpryMedia Ltd - datatables.net/license
- */
-
-(function( factory ){
-	if ( typeof define === 'function' && define.amd ) {
-		// AMD
-		define( ['jquery', 'datatables.net-jqui', 'datatables.net-select'], function ( $ ) {
-			return factory( $, window, document );
-		} );
-	}
-	else if ( typeof exports === 'object' ) {
-		// CommonJS
-		module.exports = function (root, $) {
-			if ( ! root ) {
-				root = window;
-			}
-
-			if ( ! $ || ! $.fn.dataTable ) {
-				$ = require('datatables.net-jqui')(root, $).$;
-			}
-
-			if ( ! $.fn.dataTable.select ) {
-				require('datatables.net-select')(root, $);
-			}
-
-			return factory( $, root, root.document );
-		};
-	}
-	else {
-		// Browser
-		factory( jQuery, window, document );
-	}
-}(function( $, window, document, undefined ) {
-
-return $.fn.dataTable;
-
-}));
\ No newline at end of file
diff --git a/DataTables/Select-1.3.1/js/select.jqueryui.min.js b/DataTables/Select-1.3.1/js/select.jqueryui.min.js
deleted file mode 100644
index b72b8a1..0000000
--- a/DataTables/Select-1.3.1/js/select.jqueryui.min.js
+++ /dev/null
@@ -1,5 +0,0 @@
-/*!
- jQuery UI styling wrapper for Select
- ©2018 SpryMedia Ltd - datatables.net/license
-*/
-(function(c){"function"===typeof define&&define.amd?define(["jquery","datatables.net-jqui","datatables.net-select"],function(a){return c(a,window,document)}):"object"===typeof exports?module.exports=function(a,b){a||(a=window);b&&b.fn.dataTable||(b=require("datatables.net-jqui")(a,b).$);b.fn.dataTable.select||require("datatables.net-select")(a,b);return c(b,a,a.document)}:c(jQuery,window,document)})(function(c,a,b,d){return c.fn.dataTable});
diff --git a/DataTables/Select-1.3.1/js/select.semanticui.js b/DataTables/Select-1.3.1/js/select.semanticui.js
deleted file mode 100644
index 881bd31..0000000
--- a/DataTables/Select-1.3.1/js/select.semanticui.js
+++ /dev/null
@@ -1,38 +0,0 @@
-/*! Semanic UI styling wrapper for Select
- * ©2018 SpryMedia Ltd - datatables.net/license
- */
-
-(function( factory ){
-	if ( typeof define === 'function' && define.amd ) {
-		// AMD
-		define( ['jquery', 'datatables.net-se', 'datatables.net-select'], function ( $ ) {
-			return factory( $, window, document );
-		} );
-	}
-	else if ( typeof exports === 'object' ) {
-		// CommonJS
-		module.exports = function (root, $) {
-			if ( ! root ) {
-				root = window;
-			}
-
-			if ( ! $ || ! $.fn.dataTable ) {
-				$ = require('datatables.net-se')(root, $).$;
-			}
-
-			if ( ! $.fn.dataTable.select ) {
-				require('datatables.net-select')(root, $);
-			}
-
-			return factory( $, root, root.document );
-		};
-	}
-	else {
-		// Browser
-		factory( jQuery, window, document );
-	}
-}(function( $, window, document, undefined ) {
-
-return $.fn.dataTable;
-
-}));
\ No newline at end of file
diff --git a/DataTables/Select-1.3.1/js/select.semanticui.min.js b/DataTables/Select-1.3.1/js/select.semanticui.min.js
deleted file mode 100644
index b9c071c..0000000
--- a/DataTables/Select-1.3.1/js/select.semanticui.min.js
+++ /dev/null
@@ -1,5 +0,0 @@
-/*!
- Semanic UI styling wrapper for Select
- ©2018 SpryMedia Ltd - datatables.net/license
-*/
-(function(c){"function"===typeof define&&define.amd?define(["jquery","datatables.net-se","datatables.net-select"],function(a){return c(a,window,document)}):"object"===typeof exports?module.exports=function(a,b){a||(a=window);b&&b.fn.dataTable||(b=require("datatables.net-se")(a,b).$);b.fn.dataTable.select||require("datatables.net-select")(a,b);return c(b,a,a.document)}:c(jQuery,window,document)})(function(c,a,b,d){return c.fn.dataTable});
diff --git a/DataTables/datatables.css b/DataTables/datatables.css
deleted file mode 100644
index 82177fb..0000000
--- a/DataTables/datatables.css
+++ /dev/null
@@ -1,727 +0,0 @@
-/*
- * This combined file was created by the DataTables downloader builder:
- *   https://datatables.net/download
- *
- * To rebuild or modify this file with the latest versions of the included
- * software please visit:
- *   https://datatables.net/download/#bs4/dt-1.10.21/b-1.6.2/r-2.2.5/sl-1.3.1
- *
- * Included libraries:
- *   DataTables 1.10.21, Buttons 1.6.2, Responsive 2.2.5, Select 1.3.1
- */
-
-table.dataTable {
-  clear: both;
-  margin-top: 6px !important;
-  margin-bottom: 6px !important;
-  max-width: none !important;
-  border-collapse: separate !important;
-  border-spacing: 0;
-}
-table.dataTable td,
-table.dataTable th {
-  -webkit-box-sizing: content-box;
-  box-sizing: content-box;
-}
-table.dataTable td.dataTables_empty,
-table.dataTable th.dataTables_empty {
-  text-align: center;
-}
-table.dataTable.nowrap th,
-table.dataTable.nowrap td {
-  white-space: nowrap;
-}
-
-div.dataTables_wrapper div.dataTables_length label {
-  font-weight: normal;
-  text-align: left;
-  white-space: nowrap;
-}
-div.dataTables_wrapper div.dataTables_length select {
-  width: auto;
-  display: inline-block;
-}
-div.dataTables_wrapper div.dataTables_filter {
-  text-align: right;
-}
-div.dataTables_wrapper div.dataTables_filter label {
-  font-weight: normal;
-  white-space: nowrap;
-  text-align: left;
-}
-div.dataTables_wrapper div.dataTables_filter input {
-  margin-left: 0.5em;
-  display: inline-block;
-  width: auto;
-}
-div.dataTables_wrapper div.dataTables_info {
-  padding-top: 0.85em;
-  white-space: nowrap;
-}
-div.dataTables_wrapper div.dataTables_paginate {
-  margin: 0;
-  white-space: nowrap;
-  text-align: right;
-}
-div.dataTables_wrapper div.dataTables_paginate ul.pagination {
-  margin: 2px 0;
-  white-space: nowrap;
-  justify-content: flex-end;
-}
-div.dataTables_wrapper div.dataTables_processing {
-  position: absolute;
-  top: 50%;
-  left: 50%;
-  width: 200px;
-  margin-left: -100px;
-  margin-top: -26px;
-  text-align: center;
-  padding: 1em 0;
-}
-
-table.dataTable thead > tr > th.sorting_asc, table.dataTable thead > tr > th.sorting_desc, table.dataTable thead > tr > th.sorting,
-table.dataTable thead > tr > td.sorting_asc,
-table.dataTable thead > tr > td.sorting_desc,
-table.dataTable thead > tr > td.sorting {
-  padding-right: 30px;
-}
-table.dataTable thead > tr > th:active,
-table.dataTable thead > tr > td:active {
-  outline: none;
-}
-table.dataTable thead .sorting,
-table.dataTable thead .sorting_asc,
-table.dataTable thead .sorting_desc,
-table.dataTable thead .sorting_asc_disabled,
-table.dataTable thead .sorting_desc_disabled {
-  cursor: pointer;
-  position: relative;
-}
-table.dataTable thead .sorting:before, table.dataTable thead .sorting:after,
-table.dataTable thead .sorting_asc:before,
-table.dataTable thead .sorting_asc:after,
-table.dataTable thead .sorting_desc:before,
-table.dataTable thead .sorting_desc:after,
-table.dataTable thead .sorting_asc_disabled:before,
-table.dataTable thead .sorting_asc_disabled:after,
-table.dataTable thead .sorting_desc_disabled:before,
-table.dataTable thead .sorting_desc_disabled:after {
-  position: absolute;
-  bottom: 0.9em;
-  display: block;
-  opacity: 0.3;
-}
-table.dataTable thead .sorting:before,
-table.dataTable thead .sorting_asc:before,
-table.dataTable thead .sorting_desc:before,
-table.dataTable thead .sorting_asc_disabled:before,
-table.dataTable thead .sorting_desc_disabled:before {
-  right: 1em;
-  content: "\2191";
-}
-table.dataTable thead .sorting:after,
-table.dataTable thead .sorting_asc:after,
-table.dataTable thead .sorting_desc:after,
-table.dataTable thead .sorting_asc_disabled:after,
-table.dataTable thead .sorting_desc_disabled:after {
-  right: 0.5em;
-  content: "\2193";
-}
-table.dataTable thead .sorting_asc:before,
-table.dataTable thead .sorting_desc:after {
-  opacity: 1;
-}
-table.dataTable thead .sorting_asc_disabled:before,
-table.dataTable thead .sorting_desc_disabled:after {
-  opacity: 0;
-}
-
-div.dataTables_scrollHead table.dataTable {
-  margin-bottom: 0 !important;
-}
-
-div.dataTables_scrollBody table {
-  border-top: none;
-  margin-top: 0 !important;
-  margin-bottom: 0 !important;
-}
-div.dataTables_scrollBody table thead .sorting:before,
-div.dataTables_scrollBody table thead .sorting_asc:before,
-div.dataTables_scrollBody table thead .sorting_desc:before,
-div.dataTables_scrollBody table thead .sorting:after,
-div.dataTables_scrollBody table thead .sorting_asc:after,
-div.dataTables_scrollBody table thead .sorting_desc:after {
-  display: none;
-}
-div.dataTables_scrollBody table tbody tr:first-child th,
-div.dataTables_scrollBody table tbody tr:first-child td {
-  border-top: none;
-}
-
-div.dataTables_scrollFoot > .dataTables_scrollFootInner {
-  box-sizing: content-box;
-}
-div.dataTables_scrollFoot > .dataTables_scrollFootInner > table {
-  margin-top: 0 !important;
-  border-top: none;
-}
-
-@media screen and (max-width: 767px) {
-  div.dataTables_wrapper div.dataTables_length,
-  div.dataTables_wrapper div.dataTables_filter,
-  div.dataTables_wrapper div.dataTables_info,
-  div.dataTables_wrapper div.dataTables_paginate {
-    text-align: center;
-  }
-  div.dataTables_wrapper div.dataTables_paginate ul.pagination {
-    justify-content: center !important;
-  }
-}
-table.dataTable.table-sm > thead > tr > th :not(.sorting_disabled) {
-  padding-right: 20px;
-}
-table.dataTable.table-sm .sorting:before,
-table.dataTable.table-sm .sorting_asc:before,
-table.dataTable.table-sm .sorting_desc:before {
-  top: 5px;
-  right: 0.85em;
-}
-table.dataTable.table-sm .sorting:after,
-table.dataTable.table-sm .sorting_asc:after,
-table.dataTable.table-sm .sorting_desc:after {
-  top: 5px;
-}
-
-table.table-bordered.dataTable {
-  border-right-width: 0;
-}
-table.table-bordered.dataTable th,
-table.table-bordered.dataTable td {
-  border-left-width: 0;
-}
-table.table-bordered.dataTable th:last-child, table.table-bordered.dataTable th:last-child,
-table.table-bordered.dataTable td:last-child,
-table.table-bordered.dataTable td:last-child {
-  border-right-width: 1px;
-}
-table.table-bordered.dataTable tbody th,
-table.table-bordered.dataTable tbody td {
-  border-bottom-width: 0;
-}
-
-div.dataTables_scrollHead table.table-bordered {
-  border-bottom-width: 0;
-}
-
-div.table-responsive > div.dataTables_wrapper > div.row {
-  margin: 0;
-}
-div.table-responsive > div.dataTables_wrapper > div.row > div[class^="col-"]:first-child {
-  padding-left: 0;
-}
-div.table-responsive > div.dataTables_wrapper > div.row > div[class^="col-"]:last-child {
-  padding-right: 0;
-}
-
-
-@keyframes dtb-spinner {
-  100% {
-    transform: rotate(360deg);
-  }
-}
-@-o-keyframes dtb-spinner {
-  100% {
-    -o-transform: rotate(360deg);
-    transform: rotate(360deg);
-  }
-}
-@-ms-keyframes dtb-spinner {
-  100% {
-    -ms-transform: rotate(360deg);
-    transform: rotate(360deg);
-  }
-}
-@-webkit-keyframes dtb-spinner {
-  100% {
-    -webkit-transform: rotate(360deg);
-    transform: rotate(360deg);
-  }
-}
-@-moz-keyframes dtb-spinner {
-  100% {
-    -moz-transform: rotate(360deg);
-    transform: rotate(360deg);
-  }
-}
-div.dt-button-info {
-  position: fixed;
-  top: 50%;
-  left: 50%;
-  width: 400px;
-  margin-top: -100px;
-  margin-left: -200px;
-  background-color: white;
-  border: 2px solid #111;
-  box-shadow: 3px 3px 8px rgba(0, 0, 0, 0.3);
-  border-radius: 3px;
-  text-align: center;
-  z-index: 21;
-}
-div.dt-button-info h2 {
-  padding: 0.5em;
-  margin: 0;
-  font-weight: normal;
-  border-bottom: 1px solid #ddd;
-  background-color: #f3f3f3;
-}
-div.dt-button-info > div {
-  padding: 1em;
-}
-
-div.dt-button-collection-title {
-  text-align: center;
-  padding: 0.3em 0 0.5em;
-  font-size: 0.9em;
-}
-
-div.dt-button-collection-title:empty {
-  display: none;
-}
-
-div.dt-button-collection {
-  position: absolute;
-  z-index: 2001;
-}
-div.dt-button-collection div.dropdown-menu {
-  display: block;
-  z-index: 2002;
-  min-width: 100%;
-}
-div.dt-button-collection div.dt-button-collection-title {
-  background-color: white;
-  border: 1px solid rgba(0, 0, 0, 0.15);
-}
-div.dt-button-collection.fixed {
-  position: fixed;
-  top: 50%;
-  left: 50%;
-  margin-left: -75px;
-  border-radius: 0;
-}
-div.dt-button-collection.fixed.two-column {
-  margin-left: -200px;
-}
-div.dt-button-collection.fixed.three-column {
-  margin-left: -225px;
-}
-div.dt-button-collection.fixed.four-column {
-  margin-left: -300px;
-}
-div.dt-button-collection > :last-child {
-  display: block !important;
-  -webkit-column-gap: 8px;
-  -moz-column-gap: 8px;
-  -ms-column-gap: 8px;
-  -o-column-gap: 8px;
-  column-gap: 8px;
-}
-div.dt-button-collection > :last-child > * {
-  -webkit-column-break-inside: avoid;
-  break-inside: avoid;
-}
-div.dt-button-collection.two-column {
-  width: 400px;
-}
-div.dt-button-collection.two-column > :last-child {
-  padding-bottom: 1px;
-  -webkit-column-count: 2;
-  -moz-column-count: 2;
-  -ms-column-count: 2;
-  -o-column-count: 2;
-  column-count: 2;
-}
-div.dt-button-collection.three-column {
-  width: 450px;
-}
-div.dt-button-collection.three-column > :last-child {
-  padding-bottom: 1px;
-  -webkit-column-count: 3;
-  -moz-column-count: 3;
-  -ms-column-count: 3;
-  -o-column-count: 3;
-  column-count: 3;
-}
-div.dt-button-collection.four-column {
-  width: 600px;
-}
-div.dt-button-collection.four-column > :last-child {
-  padding-bottom: 1px;
-  -webkit-column-count: 4;
-  -moz-column-count: 4;
-  -ms-column-count: 4;
-  -o-column-count: 4;
-  column-count: 4;
-}
-div.dt-button-collection .dt-button {
-  border-radius: 0;
-}
-div.dt-button-collection.fixed {
-  max-width: none;
-}
-div.dt-button-collection.fixed:before, div.dt-button-collection.fixed:after {
-  display: none;
-}
-
-div.dt-button-background {
-  position: fixed;
-  top: 0;
-  left: 0;
-  width: 100%;
-  height: 100%;
-  z-index: 999;
-}
-
-@media screen and (max-width: 767px) {
-  div.dt-buttons {
-    float: none;
-    width: 100%;
-    text-align: center;
-    margin-bottom: 0.5em;
-  }
-  div.dt-buttons a.btn {
-    float: none;
-  }
-}
-div.dt-buttons button.btn.processing,
-div.dt-buttons div.btn.processing,
-div.dt-buttons a.btn.processing {
-  color: rgba(0, 0, 0, 0.2);
-}
-div.dt-buttons button.btn.processing:after,
-div.dt-buttons div.btn.processing:after,
-div.dt-buttons a.btn.processing:after {
-  position: absolute;
-  top: 50%;
-  left: 50%;
-  width: 16px;
-  height: 16px;
-  margin: -8px 0 0 -8px;
-  box-sizing: border-box;
-  display: block;
-  content: ' ';
-  border: 2px solid #282828;
-  border-radius: 50%;
-  border-left-color: transparent;
-  border-right-color: transparent;
-  animation: dtb-spinner 1500ms infinite linear;
-  -o-animation: dtb-spinner 1500ms infinite linear;
-  -ms-animation: dtb-spinner 1500ms infinite linear;
-  -webkit-animation: dtb-spinner 1500ms infinite linear;
-  -moz-animation: dtb-spinner 1500ms infinite linear;
-}
-
-
-table.dataTable.dtr-inline.collapsed > tbody > tr > td.child,
-table.dataTable.dtr-inline.collapsed > tbody > tr > th.child,
-table.dataTable.dtr-inline.collapsed > tbody > tr > td.dataTables_empty {
-  cursor: default !important;
-}
-table.dataTable.dtr-inline.collapsed > tbody > tr > td.child:before,
-table.dataTable.dtr-inline.collapsed > tbody > tr > th.child:before,
-table.dataTable.dtr-inline.collapsed > tbody > tr > td.dataTables_empty:before {
-  display: none !important;
-}
-table.dataTable.dtr-inline.collapsed > tbody > tr[role="row"] > td.dtr-control,
-table.dataTable.dtr-inline.collapsed > tbody > tr[role="row"] > th.dtr-control {
-  position: relative;
-  padding-left: 30px;
-  cursor: pointer;
-}
-table.dataTable.dtr-inline.collapsed > tbody > tr[role="row"] > td.dtr-control:before,
-table.dataTable.dtr-inline.collapsed > tbody > tr[role="row"] > th.dtr-control:before {
-  top: 50%;
-  left: 5px;
-  height: 14px;
-  width: 14px;
-  margin-top: -9px;
-  display: block;
-  position: absolute;
-  color: white;
-  border: 2px solid white;
-  border-radius: 14px;
-  box-shadow: 0 0 3px #444;
-  box-sizing: content-box;
-  text-align: center;
-  text-indent: 0 !important;
-  font-family: 'Courier New', Courier, monospace;
-  line-height: 14px;
-  content: '+';
-  background-color: #0275d8;
-}
-table.dataTable.dtr-inline.collapsed > tbody > tr.parent > td.dtr-control:before,
-table.dataTable.dtr-inline.collapsed > tbody > tr.parent > th.dtr-control:before {
-  content: '-';
-  background-color: #d33333;
-}
-table.dataTable.dtr-inline.collapsed.compact > tbody > tr > td.dtr-control,
-table.dataTable.dtr-inline.collapsed.compact > tbody > tr > th.dtr-control {
-  padding-left: 27px;
-}
-table.dataTable.dtr-inline.collapsed.compact > tbody > tr > td.dtr-control:before,
-table.dataTable.dtr-inline.collapsed.compact > tbody > tr > th.dtr-control:before {
-  left: 4px;
-  height: 14px;
-  width: 14px;
-  border-radius: 14px;
-  line-height: 14px;
-  text-indent: 3px;
-}
-table.dataTable.dtr-column > tbody > tr > td.control,
-table.dataTable.dtr-column > tbody > tr > th.control {
-  position: relative;
-  cursor: pointer;
-}
-table.dataTable.dtr-column > tbody > tr > td.control:before,
-table.dataTable.dtr-column > tbody > tr > th.control:before {
-  top: 50%;
-  left: 50%;
-  height: 16px;
-  width: 16px;
-  margin-top: -10px;
-  margin-left: -10px;
-  display: block;
-  position: absolute;
-  color: white;
-  border: 2px solid white;
-  border-radius: 14px;
-  box-shadow: 0 0 3px #444;
-  box-sizing: content-box;
-  text-align: center;
-  text-indent: 0 !important;
-  font-family: 'Courier New', Courier, monospace;
-  line-height: 14px;
-  content: '+';
-  background-color: #0275d8;
-}
-table.dataTable.dtr-column > tbody > tr.parent td.control:before,
-table.dataTable.dtr-column > tbody > tr.parent th.control:before {
-  content: '-';
-  background-color: #d33333;
-}
-table.dataTable > tbody > tr.child {
-  padding: 0.5em 1em;
-}
-table.dataTable > tbody > tr.child:hover {
-  background: transparent !important;
-}
-table.dataTable > tbody > tr.child ul.dtr-details {
-  display: inline-block;
-  list-style-type: none;
-  margin: 0;
-  padding: 0;
-}
-table.dataTable > tbody > tr.child ul.dtr-details > li {
-  border-bottom: 1px solid #efefef;
-  padding: 0.5em 0;
-}
-table.dataTable > tbody > tr.child ul.dtr-details > li:first-child {
-  padding-top: 0;
-}
-table.dataTable > tbody > tr.child ul.dtr-details > li:last-child {
-  border-bottom: none;
-}
-table.dataTable > tbody > tr.child span.dtr-title {
-  display: inline-block;
-  min-width: 75px;
-  font-weight: bold;
-}
-
-div.dtr-modal {
-  position: fixed;
-  box-sizing: border-box;
-  top: 0;
-  left: 0;
-  height: 100%;
-  width: 100%;
-  z-index: 100;
-  padding: 10em 1em;
-}
-div.dtr-modal div.dtr-modal-display {
-  position: absolute;
-  top: 0;
-  left: 0;
-  bottom: 0;
-  right: 0;
-  width: 50%;
-  height: 50%;
-  overflow: auto;
-  margin: auto;
-  z-index: 102;
-  overflow: auto;
-  background-color: #f5f5f7;
-  border: 1px solid black;
-  border-radius: 0.5em;
-  box-shadow: 0 12px 30px rgba(0, 0, 0, 0.6);
-}
-div.dtr-modal div.dtr-modal-content {
-  position: relative;
-  padding: 1em;
-}
-div.dtr-modal div.dtr-modal-close {
-  position: absolute;
-  top: 6px;
-  right: 6px;
-  width: 22px;
-  height: 22px;
-  border: 1px solid #eaeaea;
-  background-color: #f9f9f9;
-  text-align: center;
-  border-radius: 3px;
-  cursor: pointer;
-  z-index: 12;
-}
-div.dtr-modal div.dtr-modal-close:hover {
-  background-color: #eaeaea;
-}
-div.dtr-modal div.dtr-modal-background {
-  position: fixed;
-  top: 0;
-  left: 0;
-  right: 0;
-  bottom: 0;
-  z-index: 101;
-  background: rgba(0, 0, 0, 0.6);
-}
-
-@media screen and (max-width: 767px) {
-  div.dtr-modal div.dtr-modal-display {
-    width: 95%;
-  }
-}
-div.dtr-bs-modal table.table tr:first-child td {
-  border-top: none;
-}
-
-table.dataTable.dtr-inline.collapsed.table-sm > tbody > tr > td:first-child:before,
-table.dataTable.dtr-inline.collapsed.table-sm > tbody > tr > th:first-child:before {
-  top: 5px;
-}
-
-
-table.dataTable tbody > tr.selected,
-table.dataTable tbody > tr > .selected {
-  background-color: #0275d8;
-}
-table.dataTable.stripe tbody > tr.odd.selected,
-table.dataTable.stripe tbody > tr.odd > .selected, table.dataTable.display tbody > tr.odd.selected,
-table.dataTable.display tbody > tr.odd > .selected {
-  background-color: #0272d3;
-}
-table.dataTable.hover tbody > tr.selected:hover,
-table.dataTable.hover tbody > tr > .selected:hover, table.dataTable.display tbody > tr.selected:hover,
-table.dataTable.display tbody > tr > .selected:hover {
-  background-color: #0271d0;
-}
-table.dataTable.order-column tbody > tr.selected > .sorting_1,
-table.dataTable.order-column tbody > tr.selected > .sorting_2,
-table.dataTable.order-column tbody > tr.selected > .sorting_3,
-table.dataTable.order-column tbody > tr > .selected, table.dataTable.display tbody > tr.selected > .sorting_1,
-table.dataTable.display tbody > tr.selected > .sorting_2,
-table.dataTable.display tbody > tr.selected > .sorting_3,
-table.dataTable.display tbody > tr > .selected {
-  background-color: #0273d4;
-}
-table.dataTable.display tbody > tr.odd.selected > .sorting_1, table.dataTable.order-column.stripe tbody > tr.odd.selected > .sorting_1 {
-  background-color: #026fcc;
-}
-table.dataTable.display tbody > tr.odd.selected > .sorting_2, table.dataTable.order-column.stripe tbody > tr.odd.selected > .sorting_2 {
-  background-color: #0270ce;
-}
-table.dataTable.display tbody > tr.odd.selected > .sorting_3, table.dataTable.order-column.stripe tbody > tr.odd.selected > .sorting_3 {
-  background-color: #0270d0;
-}
-table.dataTable.display tbody > tr.even.selected > .sorting_1, table.dataTable.order-column.stripe tbody > tr.even.selected > .sorting_1 {
-  background-color: #0273d4;
-}
-table.dataTable.display tbody > tr.even.selected > .sorting_2, table.dataTable.order-column.stripe tbody > tr.even.selected > .sorting_2 {
-  background-color: #0274d5;
-}
-table.dataTable.display tbody > tr.even.selected > .sorting_3, table.dataTable.order-column.stripe tbody > tr.even.selected > .sorting_3 {
-  background-color: #0275d7;
-}
-table.dataTable.display tbody > tr.odd > .selected, table.dataTable.order-column.stripe tbody > tr.odd > .selected {
-  background-color: #026fcc;
-}
-table.dataTable.display tbody > tr.even > .selected, table.dataTable.order-column.stripe tbody > tr.even > .selected {
-  background-color: #0273d4;
-}
-table.dataTable.display tbody > tr.selected:hover > .sorting_1, table.dataTable.order-column.hover tbody > tr.selected:hover > .sorting_1 {
-  background-color: #026bc6;
-}
-table.dataTable.display tbody > tr.selected:hover > .sorting_2, table.dataTable.order-column.hover tbody > tr.selected:hover > .sorting_2 {
-  background-color: #026cc8;
-}
-table.dataTable.display tbody > tr.selected:hover > .sorting_3, table.dataTable.order-column.hover tbody > tr.selected:hover > .sorting_3 {
-  background-color: #026eca;
-}
-table.dataTable.display tbody > tr:hover > .selected,
-table.dataTable.display tbody > tr > .selected:hover, table.dataTable.order-column.hover tbody > tr:hover > .selected,
-table.dataTable.order-column.hover tbody > tr > .selected:hover {
-  background-color: #026bc6;
-}
-table.dataTable tbody td.select-checkbox,
-table.dataTable tbody th.select-checkbox {
-  position: relative;
-}
-table.dataTable tbody td.select-checkbox:before, table.dataTable tbody td.select-checkbox:after,
-table.dataTable tbody th.select-checkbox:before,
-table.dataTable tbody th.select-checkbox:after {
-  display: block;
-  position: absolute;
-  top: 1.2em;
-  left: 50%;
-  width: 12px;
-  height: 12px;
-  box-sizing: border-box;
-}
-table.dataTable tbody td.select-checkbox:before,
-table.dataTable tbody th.select-checkbox:before {
-  content: ' ';
-  margin-top: -6px;
-  margin-left: -6px;
-  border: 1px solid black;
-  border-radius: 3px;
-}
-table.dataTable tr.selected td.select-checkbox:after,
-table.dataTable tr.selected th.select-checkbox:after {
-  content: '\2714';
-  margin-top: -11px;
-  margin-left: -4px;
-  text-align: center;
-  text-shadow: 1px 1px #B0BED9, -1px -1px #B0BED9, 1px -1px #B0BED9, -1px 1px #B0BED9;
-}
-
-div.dataTables_wrapper span.select-info,
-div.dataTables_wrapper span.select-item {
-  margin-left: 0.5em;
-}
-
-@media screen and (max-width: 640px) {
-  div.dataTables_wrapper span.select-info,
-  div.dataTables_wrapper span.select-item {
-    margin-left: 0;
-    display: block;
-  }
-}
-table.dataTable tbody tr.selected,
-table.dataTable tbody th.selected,
-table.dataTable tbody td.selected {
-  color: white;
-}
-table.dataTable tbody tr.selected a,
-table.dataTable tbody th.selected a,
-table.dataTable tbody td.selected a {
-  color: #a2d4ed;
-}
-
-
diff --git a/DataTables/datatables.js b/DataTables/datatables.js
deleted file mode 100644
index 1b80812..0000000
--- a/DataTables/datatables.js
+++ /dev/null
@@ -1,20412 +0,0 @@
-/*
- * This combined file was created by the DataTables downloader builder:
- *   https://datatables.net/download
- *
- * To rebuild or modify this file with the latest versions of the included
- * software please visit:
- *   https://datatables.net/download/#bs4/dt-1.10.21/b-1.6.2/r-2.2.5/sl-1.3.1
- *
- * Included libraries:
- *   DataTables 1.10.21, Buttons 1.6.2, Responsive 2.2.5, Select 1.3.1
- */
-
-/*! DataTables 1.10.21
- * ©2008-2020 SpryMedia Ltd - datatables.net/license
- */
-
-/**
- * @summary     DataTables
- * @description Paginate, search and order HTML tables
- * @version     1.10.21
- * @file        jquery.dataTables.js
- * @author      SpryMedia Ltd
- * @contact     www.datatables.net
- * @copyright   Copyright 2008-2020 SpryMedia Ltd.
- *
- * This source file is free software, available under the following license:
- *   MIT license - http://datatables.net/license
- *
- * This source file is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
- * or FITNESS FOR A PARTICULAR PURPOSE. See the license files for details.
- *
- * For details please refer to: http://www.datatables.net
- */
-
-/*jslint evil: true, undef: true, browser: true */
-/*globals $,require,jQuery,define,_selector_run,_selector_opts,_selector_first,_selector_row_indexes,_ext,_Api,_api_register,_api_registerPlural,_re_new_lines,_re_html,_re_formatted_numeric,_re_escape_regex,_empty,_intVal,_numToDecimal,_isNumber,_isHtml,_htmlNumeric,_pluck,_pluck_order,_range,_stripHtml,_unique,_fnBuildAjax,_fnAjaxUpdate,_fnAjaxParameters,_fnAjaxUpdateDraw,_fnAjaxDataSrc,_fnAddColumn,_fnColumnOptions,_fnAdjustColumnSizing,_fnVisibleToColumnIndex,_fnColumnIndexToVisible,_fnVisbleColumns,_fnGetColumns,_fnColumnTypes,_fnApplyColumnDefs,_fnHungarianMap,_fnCamelToHungarian,_fnLanguageCompat,_fnBrowserDetect,_fnAddData,_fnAddTr,_fnNodeToDataIndex,_fnNodeToColumnIndex,_fnGetCellData,_fnSetCellData,_fnSplitObjNotation,_fnGetObjectDataFn,_fnSetObjectDataFn,_fnGetDataMaster,_fnClearTable,_fnDeleteIndex,_fnInvalidate,_fnGetRowElements,_fnCreateTr,_fnBuildHead,_fnDrawHead,_fnDraw,_fnReDraw,_fnAddOptionsHtml,_fnDetectHeader,_fnGetUniqueThs,_fnFeatureHtmlFilter,_fnFilterComplete,_fnFilterCustom,_fnFilterColumn,_fnFilter,_fnFilterCreateSearch,_fnEscapeRegex,_fnFilterData,_fnFeatureHtmlInfo,_fnUpdateInfo,_fnInfoMacros,_fnInitialise,_fnInitComplete,_fnLengthChange,_fnFeatureHtmlLength,_fnFeatureHtmlPaginate,_fnPageChange,_fnFeatureHtmlProcessing,_fnProcessingDisplay,_fnFeatureHtmlTable,_fnScrollDraw,_fnApplyToChildren,_fnCalculateColumnWidths,_fnThrottle,_fnConvertToWidth,_fnGetWidestNode,_fnGetMaxLenString,_fnStringToCss,_fnSortFlatten,_fnSort,_fnSortAria,_fnSortListener,_fnSortAttachListener,_fnSortingClasses,_fnSortData,_fnSaveState,_fnLoadState,_fnSettingsFromNode,_fnLog,_fnMap,_fnBindAction,_fnCallbackReg,_fnCallbackFire,_fnLengthOverflow,_fnRenderer,_fnDataSource,_fnRowAttributes*/
-
-(function( factory ) {
-	"use strict";
-
-	if ( typeof define === 'function' && define.amd ) {
-		// AMD
-		define( ['jquery'], function ( $ ) {
-			return factory( $, window, document );
-		} );
-	}
-	else if ( typeof exports === 'object' ) {
-		// CommonJS
-		module.exports = function (root, $) {
-			if ( ! root ) {
-				// CommonJS environments without a window global must pass a
-				// root. This will give an error otherwise
-				root = window;
-			}
-
-			if ( ! $ ) {
-				$ = typeof window !== 'undefined' ? // jQuery's factory checks for a global window
-					require('jquery') :
-					require('jquery')( root );
-			}
-
-			return factory( $, root, root.document );
-		};
-	}
-	else {
-		// Browser
-		factory( jQuery, window, document );
-	}
-}
-(function( $, window, document, undefined ) {
-	"use strict";
-
-	/**
-	 * DataTables is a plug-in for the jQuery Javascript library. It is a highly
-	 * flexible tool, based upon the foundations of progressive enhancement,
-	 * which will add advanced interaction controls to any HTML table. For a
-	 * full list of features please refer to
-	 * [DataTables.net](href="http://datatables.net).
-	 *
-	 * Note that the `DataTable` object is not a global variable but is aliased
-	 * to `jQuery.fn.DataTable` and `jQuery.fn.dataTable` through which it may
-	 * be  accessed.
-	 *
-	 *  @class
-	 *  @param {object} [init={}] Configuration object for DataTables. Options
-	 *    are defined by {@link DataTable.defaults}
-	 *  @requires jQuery 1.7+
-	 *
-	 *  @example
-	 *    // Basic initialisation
-	 *    $(document).ready( function {
-	 *      $('#example').dataTable();
-	 *    } );
-	 *
-	 *  @example
-	 *    // Initialisation with configuration options - in this case, disable
-	 *    // pagination and sorting.
-	 *    $(document).ready( function {
-	 *      $('#example').dataTable( {
-	 *        "paginate": false,
-	 *        "sort": false
-	 *      } );
-	 *    } );
-	 */
-	var DataTable = function ( options )
-	{
-		/**
-		 * Perform a jQuery selector action on the table's TR elements (from the tbody) and
-		 * return the resulting jQuery object.
-		 *  @param {string|node|jQuery} sSelector jQuery selector or node collection to act on
-		 *  @param {object} [oOpts] Optional parameters for modifying the rows to be included
-		 *  @param {string} [oOpts.filter=none] Select TR elements that meet the current filter
-		 *    criterion ("applied") or all TR elements (i.e. no filter).
-		 *  @param {string} [oOpts.order=current] Order of the TR elements in the processed array.
-		 *    Can be either 'current', whereby the current sorting of the table is used, or
-		 *    'original' whereby the original order the data was read into the table is used.
-		 *  @param {string} [oOpts.page=all] Limit the selection to the currently displayed page
-		 *    ("current") or not ("all"). If 'current' is given, then order is assumed to be
-		 *    'current' and filter is 'applied', regardless of what they might be given as.
-		 *  @returns {object} jQuery object, filtered by the given selector.
-		 *  @dtopt API
-		 *  @deprecated Since v1.10
-		 *
-		 *  @example
-		 *    $(document).ready(function() {
-		 *      var oTable = $('#example').dataTable();
-		 *
-		 *      // Highlight every second row
-		 *      oTable.$('tr:odd').css('backgroundColor', 'blue');
-		 *    } );
-		 *
-		 *  @example
-		 *    $(document).ready(function() {
-		 *      var oTable = $('#example').dataTable();
-		 *
-		 *      // Filter to rows with 'Webkit' in them, add a background colour and then
-		 *      // remove the filter, thus highlighting the 'Webkit' rows only.
-		 *      oTable.fnFilter('Webkit');
-		 *      oTable.$('tr', {"search": "applied"}).css('backgroundColor', 'blue');
-		 *      oTable.fnFilter('');
-		 *    } );
-		 */
-		this.$ = function ( sSelector, oOpts )
-		{
-			return this.api(true).$( sSelector, oOpts );
-		};
-		
-		
-		/**
-		 * Almost identical to $ in operation, but in this case returns the data for the matched
-		 * rows - as such, the jQuery selector used should match TR row nodes or TD/TH cell nodes
-		 * rather than any descendants, so the data can be obtained for the row/cell. If matching
-		 * rows are found, the data returned is the original data array/object that was used to
-		 * create the row (or a generated array if from a DOM source).
-		 *
-		 * This method is often useful in-combination with $ where both functions are given the
-		 * same parameters and the array indexes will match identically.
-		 *  @param {string|node|jQuery} sSelector jQuery selector or node collection to act on
-		 *  @param {object} [oOpts] Optional parameters for modifying the rows to be included
-		 *  @param {string} [oOpts.filter=none] Select elements that meet the current filter
-		 *    criterion ("applied") or all elements (i.e. no filter).
-		 *  @param {string} [oOpts.order=current] Order of the data in the processed array.
-		 *    Can be either 'current', whereby the current sorting of the table is used, or
-		 *    'original' whereby the original order the data was read into the table is used.
-		 *  @param {string} [oOpts.page=all] Limit the selection to the currently displayed page
-		 *    ("current") or not ("all"). If 'current' is given, then order is assumed to be
-		 *    'current' and filter is 'applied', regardless of what they might be given as.
-		 *  @returns {array} Data for the matched elements. If any elements, as a result of the
-		 *    selector, were not TR, TD or TH elements in the DataTable, they will have a null
-		 *    entry in the array.
-		 *  @dtopt API
-		 *  @deprecated Since v1.10
-		 *
-		 *  @example
-		 *    $(document).ready(function() {
-		 *      var oTable = $('#example').dataTable();
-		 *
-		 *      // Get the data from the first row in the table
-		 *      var data = oTable._('tr:first');
-		 *
-		 *      // Do something useful with the data
-		 *      alert( "First cell is: "+data[0] );
-		 *    } );
-		 *
-		 *  @example
-		 *    $(document).ready(function() {
-		 *      var oTable = $('#example').dataTable();
-		 *
-		 *      // Filter to 'Webkit' and get all data for
-		 *      oTable.fnFilter('Webkit');
-		 *      var data = oTable._('tr', {"search": "applied"});
-		 *
-		 *      // Do something with the data
-		 *      alert( data.length+" rows matched the search" );
-		 *    } );
-		 */
-		this._ = function ( sSelector, oOpts )
-		{
-			return this.api(true).rows( sSelector, oOpts ).data();
-		};
-		
-		
-		/**
-		 * Create a DataTables Api instance, with the currently selected tables for
-		 * the Api's context.
-		 * @param {boolean} [traditional=false] Set the API instance's context to be
-		 *   only the table referred to by the `DataTable.ext.iApiIndex` option, as was
-		 *   used in the API presented by DataTables 1.9- (i.e. the traditional mode),
-		 *   or if all tables captured in the jQuery object should be used.
-		 * @return {DataTables.Api}
-		 */
-		this.api = function ( traditional )
-		{
-			return traditional ?
-				new _Api(
-					_fnSettingsFromNode( this[ _ext.iApiIndex ] )
-				) :
-				new _Api( this );
-		};
-		
-		
-		/**
-		 * Add a single new row or multiple rows of data to the table. Please note
-		 * that this is suitable for client-side processing only - if you are using
-		 * server-side processing (i.e. "bServerSide": true), then to add data, you
-		 * must add it to the data source, i.e. the server-side, through an Ajax call.
-		 *  @param {array|object} data The data to be added to the table. This can be:
-		 *    <ul>
-		 *      <li>1D array of data - add a single row with the data provided</li>
-		 *      <li>2D array of arrays - add multiple rows in a single call</li>
-		 *      <li>object - data object when using <i>mData</i></li>
-		 *      <li>array of objects - multiple data objects when using <i>mData</i></li>
-		 *    </ul>
-		 *  @param {bool} [redraw=true] redraw the table or not
-		 *  @returns {array} An array of integers, representing the list of indexes in
-		 *    <i>aoData</i> ({@link DataTable.models.oSettings}) that have been added to
-		 *    the table.
-		 *  @dtopt API
-		 *  @deprecated Since v1.10
-		 *
-		 *  @example
-		 *    // Global var for counter
-		 *    var giCount = 2;
-		 *
-		 *    $(document).ready(function() {
-		 *      $('#example').dataTable();
-		 *    } );
-		 *
-		 *    function fnClickAddRow() {
-		 *      $('#example').dataTable().fnAddData( [
-		 *        giCount+".1",
-		 *        giCount+".2",
-		 *        giCount+".3",
-		 *        giCount+".4" ]
-		 *      );
-		 *
-		 *      giCount++;
-		 *    }
-		 */
-		this.fnAddData = function( data, redraw )
-		{
-			var api = this.api( true );
-		
-			/* Check if we want to add multiple rows or not */
-			var rows = $.isArray(data) && ( $.isArray(data[0]) || $.isPlainObject(data[0]) ) ?
-				api.rows.add( data ) :
-				api.row.add( data );
-		
-			if ( redraw === undefined || redraw ) {
-				api.draw();
-			}
-		
-			return rows.flatten().toArray();
-		};
-		
-		
-		/**
-		 * This function will make DataTables recalculate the column sizes, based on the data
-		 * contained in the table and the sizes applied to the columns (in the DOM, CSS or
-		 * through the sWidth parameter). This can be useful when the width of the table's
-		 * parent element changes (for example a window resize).
-		 *  @param {boolean} [bRedraw=true] Redraw the table or not, you will typically want to
-		 *  @dtopt API
-		 *  @deprecated Since v1.10
-		 *
-		 *  @example
-		 *    $(document).ready(function() {
-		 *      var oTable = $('#example').dataTable( {
-		 *        "sScrollY": "200px",
-		 *        "bPaginate": false
-		 *      } );
-		 *
-		 *      $(window).on('resize', function () {
-		 *        oTable.fnAdjustColumnSizing();
-		 *      } );
-		 *    } );
-		 */
-		this.fnAdjustColumnSizing = function ( bRedraw )
-		{
-			var api = this.api( true ).columns.adjust();
-			var settings = api.settings()[0];
-			var scroll = settings.oScroll;
-		
-			if ( bRedraw === undefined || bRedraw ) {
-				api.draw( false );
-			}
-			else if ( scroll.sX !== "" || scroll.sY !== "" ) {
-				/* If not redrawing, but scrolling, we want to apply the new column sizes anyway */
-				_fnScrollDraw( settings );
-			}
-		};
-		
-		
-		/**
-		 * Quickly and simply clear a table
-		 *  @param {bool} [bRedraw=true] redraw the table or not
-		 *  @dtopt API
-		 *  @deprecated Since v1.10
-		 *
-		 *  @example
-		 *    $(document).ready(function() {
-		 *      var oTable = $('#example').dataTable();
-		 *
-		 *      // Immediately 'nuke' the current rows (perhaps waiting for an Ajax callback...)
-		 *      oTable.fnClearTable();
-		 *    } );
-		 */
-		this.fnClearTable = function( bRedraw )
-		{
-			var api = this.api( true ).clear();
-		
-			if ( bRedraw === undefined || bRedraw ) {
-				api.draw();
-			}
-		};
-		
-		
-		/**
-		 * The exact opposite of 'opening' a row, this function will close any rows which
-		 * are currently 'open'.
-		 *  @param {node} nTr the table row to 'close'
-		 *  @returns {int} 0 on success, or 1 if failed (can't find the row)
-		 *  @dtopt API
-		 *  @deprecated Since v1.10
-		 *
-		 *  @example
-		 *    $(document).ready(function() {
-		 *      var oTable;
-		 *
-		 *      // 'open' an information row when a row is clicked on
-		 *      $('#example tbody tr').click( function () {
-		 *        if ( oTable.fnIsOpen(this) ) {
-		 *          oTable.fnClose( this );
-		 *        } else {
-		 *          oTable.fnOpen( this, "Temporary row opened", "info_row" );
-		 *        }
-		 *      } );
-		 *
-		 *      oTable = $('#example').dataTable();
-		 *    } );
-		 */
-		this.fnClose = function( nTr )
-		{
-			this.api( true ).row( nTr ).child.hide();
-		};
-		
-		
-		/**
-		 * Remove a row for the table
-		 *  @param {mixed} target The index of the row from aoData to be deleted, or
-		 *    the TR element you want to delete
-		 *  @param {function|null} [callBack] Callback function
-		 *  @param {bool} [redraw=true] Redraw the table or not
-		 *  @returns {array} The row that was deleted
-		 *  @dtopt API
-		 *  @deprecated Since v1.10
-		 *
-		 *  @example
-		 *    $(document).ready(function() {
-		 *      var oTable = $('#example').dataTable();
-		 *
-		 *      // Immediately remove the first row
-		 *      oTable.fnDeleteRow( 0 );
-		 *    } );
-		 */
-		this.fnDeleteRow = function( target, callback, redraw )
-		{
-			var api = this.api( true );
-			var rows = api.rows( target );
-			var settings = rows.settings()[0];
-			var data = settings.aoData[ rows[0][0] ];
-		
-			rows.remove();
-		
-			if ( callback ) {
-				callback.call( this, settings, data );
-			}
-		
-			if ( redraw === undefined || redraw ) {
-				api.draw();
-			}
-		
-			return data;
-		};
-		
-		
-		/**
-		 * Restore the table to it's original state in the DOM by removing all of DataTables
-		 * enhancements, alterations to the DOM structure of the table and event listeners.
-		 *  @param {boolean} [remove=false] Completely remove the table from the DOM
-		 *  @dtopt API
-		 *  @deprecated Since v1.10
-		 *
-		 *  @example
-		 *    $(document).ready(function() {
-		 *      // This example is fairly pointless in reality, but shows how fnDestroy can be used
-		 *      var oTable = $('#example').dataTable();
-		 *      oTable.fnDestroy();
-		 *    } );
-		 */
-		this.fnDestroy = function ( remove )
-		{
-			this.api( true ).destroy( remove );
-		};
-		
-		
-		/**
-		 * Redraw the table
-		 *  @param {bool} [complete=true] Re-filter and resort (if enabled) the table before the draw.
-		 *  @dtopt API
-		 *  @deprecated Since v1.10
-		 *
-		 *  @example
-		 *    $(document).ready(function() {
-		 *      var oTable = $('#example').dataTable();
-		 *
-		 *      // Re-draw the table - you wouldn't want to do it here, but it's an example :-)
-		 *      oTable.fnDraw();
-		 *    } );
-		 */
-		this.fnDraw = function( complete )
-		{
-			// Note that this isn't an exact match to the old call to _fnDraw - it takes
-			// into account the new data, but can hold position.
-			this.api( true ).draw( complete );
-		};
-		
-		
-		/**
-		 * Filter the input based on data
-		 *  @param {string} sInput String to filter the table on
-		 *  @param {int|null} [iColumn] Column to limit filtering to
-		 *  @param {bool} [bRegex=false] Treat as regular expression or not
-		 *  @param {bool} [bSmart=true] Perform smart filtering or not
-		 *  @param {bool} [bShowGlobal=true] Show the input global filter in it's input box(es)
-		 *  @param {bool} [bCaseInsensitive=true] Do case-insensitive matching (true) or not (false)
-		 *  @dtopt API
-		 *  @deprecated Since v1.10
-		 *
-		 *  @example
-		 *    $(document).ready(function() {
-		 *      var oTable = $('#example').dataTable();
-		 *
-		 *      // Sometime later - filter...
-		 *      oTable.fnFilter( 'test string' );
-		 *    } );
-		 */
-		this.fnFilter = function( sInput, iColumn, bRegex, bSmart, bShowGlobal, bCaseInsensitive )
-		{
-			var api = this.api( true );
-		
-			if ( iColumn === null || iColumn === undefined ) {
-				api.search( sInput, bRegex, bSmart, bCaseInsensitive );
-			}
-			else {
-				api.column( iColumn ).search( sInput, bRegex, bSmart, bCaseInsensitive );
-			}
-		
-			api.draw();
-		};
-		
-		
-		/**
-		 * Get the data for the whole table, an individual row or an individual cell based on the
-		 * provided parameters.
-		 *  @param {int|node} [src] A TR row node, TD/TH cell node or an integer. If given as
-		 *    a TR node then the data source for the whole row will be returned. If given as a
-		 *    TD/TH cell node then iCol will be automatically calculated and the data for the
-		 *    cell returned. If given as an integer, then this is treated as the aoData internal
-		 *    data index for the row (see fnGetPosition) and the data for that row used.
-		 *  @param {int} [col] Optional column index that you want the data of.
-		 *  @returns {array|object|string} If mRow is undefined, then the data for all rows is
-		 *    returned. If mRow is defined, just data for that row, and is iCol is
-		 *    defined, only data for the designated cell is returned.
-		 *  @dtopt API
-		 *  @deprecated Since v1.10
-		 *
-		 *  @example
-		 *    // Row data
-		 *    $(document).ready(function() {
-		 *      oTable = $('#example').dataTable();
-		 *
-		 *      oTable.$('tr').click( function () {
-		 *        var data = oTable.fnGetData( this );
-		 *        // ... do something with the array / object of data for the row
-		 *      } );
-		 *    } );
-		 *
-		 *  @example
-		 *    // Individual cell data
-		 *    $(document).ready(function() {
-		 *      oTable = $('#example').dataTable();
-		 *
-		 *      oTable.$('td').click( function () {
-		 *        var sData = oTable.fnGetData( this );
-		 *        alert( 'The cell clicked on had the value of '+sData );
-		 *      } );
-		 *    } );
-		 */
-		this.fnGetData = function( src, col )
-		{
-			var api = this.api( true );
-		
-			if ( src !== undefined ) {
-				var type = src.nodeName ? src.nodeName.toLowerCase() : '';
-		
-				return col !== undefined || type == 'td' || type == 'th' ?
-					api.cell( src, col ).data() :
-					api.row( src ).data() || null;
-			}
-		
-			return api.data().toArray();
-		};
-		
-		
-		/**
-		 * Get an array of the TR nodes that are used in the table's body. Note that you will
-		 * typically want to use the '$' API method in preference to this as it is more
-		 * flexible.
-		 *  @param {int} [iRow] Optional row index for the TR element you want
-		 *  @returns {array|node} If iRow is undefined, returns an array of all TR elements
-		 *    in the table's body, or iRow is defined, just the TR element requested.
-		 *  @dtopt API
-		 *  @deprecated Since v1.10
-		 *
-		 *  @example
-		 *    $(document).ready(function() {
-		 *      var oTable = $('#example').dataTable();
-		 *
-		 *      // Get the nodes from the table
-		 *      var nNodes = oTable.fnGetNodes( );
-		 *    } );
-		 */
-		this.fnGetNodes = function( iRow )
-		{
-			var api = this.api( true );
-		
-			return iRow !== undefined ?
-				api.row( iRow ).node() :
-				api.rows().nodes().flatten().toArray();
-		};
-		
-		
-		/**
-		 * Get the array indexes of a particular cell from it's DOM element
-		 * and column index including hidden columns
-		 *  @param {node} node this can either be a TR, TD or TH in the table's body
-		 *  @returns {int} If nNode is given as a TR, then a single index is returned, or
-		 *    if given as a cell, an array of [row index, column index (visible),
-		 *    column index (all)] is given.
-		 *  @dtopt API
-		 *  @deprecated Since v1.10
-		 *
-		 *  @example
-		 *    $(document).ready(function() {
-		 *      $('#example tbody td').click( function () {
-		 *        // Get the position of the current data from the node
-		 *        var aPos = oTable.fnGetPosition( this );
-		 *
-		 *        // Get the data array for this row
-		 *        var aData = oTable.fnGetData( aPos[0] );
-		 *
-		 *        // Update the data array and return the value
-		 *        aData[ aPos[1] ] = 'clicked';
-		 *        this.innerHTML = 'clicked';
-		 *      } );
-		 *
-		 *      // Init DataTables
-		 *      oTable = $('#example').dataTable();
-		 *    } );
-		 */
-		this.fnGetPosition = function( node )
-		{
-			var api = this.api( true );
-			var nodeName = node.nodeName.toUpperCase();
-		
-			if ( nodeName == 'TR' ) {
-				return api.row( node ).index();
-			}
-			else if ( nodeName == 'TD' || nodeName == 'TH' ) {
-				var cell = api.cell( node ).index();
-		
-				return [
-					cell.row,
-					cell.columnVisible,
-					cell.column
-				];
-			}
-			return null;
-		};
-		
-		
-		/**
-		 * Check to see if a row is 'open' or not.
-		 *  @param {node} nTr the table row to check
-		 *  @returns {boolean} true if the row is currently open, false otherwise
-		 *  @dtopt API
-		 *  @deprecated Since v1.10
-		 *
-		 *  @example
-		 *    $(document).ready(function() {
-		 *      var oTable;
-		 *
-		 *      // 'open' an information row when a row is clicked on
-		 *      $('#example tbody tr').click( function () {
-		 *        if ( oTable.fnIsOpen(this) ) {
-		 *          oTable.fnClose( this );
-		 *        } else {
-		 *          oTable.fnOpen( this, "Temporary row opened", "info_row" );
-		 *        }
-		 *      } );
-		 *
-		 *      oTable = $('#example').dataTable();
-		 *    } );
-		 */
-		this.fnIsOpen = function( nTr )
-		{
-			return this.api( true ).row( nTr ).child.isShown();
-		};
-		
-		
-		/**
-		 * This function will place a new row directly after a row which is currently
-		 * on display on the page, with the HTML contents that is passed into the
-		 * function. This can be used, for example, to ask for confirmation that a
-		 * particular record should be deleted.
-		 *  @param {node} nTr The table row to 'open'
-		 *  @param {string|node|jQuery} mHtml The HTML to put into the row
-		 *  @param {string} sClass Class to give the new TD cell
-		 *  @returns {node} The row opened. Note that if the table row passed in as the
-		 *    first parameter, is not found in the table, this method will silently
-		 *    return.
-		 *  @dtopt API
-		 *  @deprecated Since v1.10
-		 *
-		 *  @example
-		 *    $(document).ready(function() {
-		 *      var oTable;
-		 *
-		 *      // 'open' an information row when a row is clicked on
-		 *      $('#example tbody tr').click( function () {
-		 *        if ( oTable.fnIsOpen(this) ) {
-		 *          oTable.fnClose( this );
-		 *        } else {
-		 *          oTable.fnOpen( this, "Temporary row opened", "info_row" );
-		 *        }
-		 *      } );
-		 *
-		 *      oTable = $('#example').dataTable();
-		 *    } );
-		 */
-		this.fnOpen = function( nTr, mHtml, sClass )
-		{
-			return this.api( true )
-				.row( nTr )
-				.child( mHtml, sClass )
-				.show()
-				.child()[0];
-		};
-		
-		
-		/**
-		 * Change the pagination - provides the internal logic for pagination in a simple API
-		 * function. With this function you can have a DataTables table go to the next,
-		 * previous, first or last pages.
-		 *  @param {string|int} mAction Paging action to take: "first", "previous", "next" or "last"
-		 *    or page number to jump to (integer), note that page 0 is the first page.
-		 *  @param {bool} [bRedraw=true] Redraw the table or not
-		 *  @dtopt API
-		 *  @deprecated Since v1.10
-		 *
-		 *  @example
-		 *    $(document).ready(function() {
-		 *      var oTable = $('#example').dataTable();
-		 *      oTable.fnPageChange( 'next' );
-		 *    } );
-		 */
-		this.fnPageChange = function ( mAction, bRedraw )
-		{
-			var api = this.api( true ).page( mAction );
-		
-			if ( bRedraw === undefined || bRedraw ) {
-				api.draw(false);
-			}
-		};
-		
-		
-		/**
-		 * Show a particular column
-		 *  @param {int} iCol The column whose display should be changed
-		 *  @param {bool} bShow Show (true) or hide (false) the column
-		 *  @param {bool} [bRedraw=true] Redraw the table or not
-		 *  @dtopt API
-		 *  @deprecated Since v1.10
-		 *
-		 *  @example
-		 *    $(document).ready(function() {
-		 *      var oTable = $('#example').dataTable();
-		 *
-		 *      // Hide the second column after initialisation
-		 *      oTable.fnSetColumnVis( 1, false );
-		 *    } );
-		 */
-		this.fnSetColumnVis = function ( iCol, bShow, bRedraw )
-		{
-			var api = this.api( true ).column( iCol ).visible( bShow );
-		
-			if ( bRedraw === undefined || bRedraw ) {
-				api.columns.adjust().draw();
-			}
-		};
-		
-		
-		/**
-		 * Get the settings for a particular table for external manipulation
-		 *  @returns {object} DataTables settings object. See
-		 *    {@link DataTable.models.oSettings}
-		 *  @dtopt API
-		 *  @deprecated Since v1.10
-		 *
-		 *  @example
-		 *    $(document).ready(function() {
-		 *      var oTable = $('#example').dataTable();
-		 *      var oSettings = oTable.fnSettings();
-		 *
-		 *      // Show an example parameter from the settings
-		 *      alert( oSettings._iDisplayStart );
-		 *    } );
-		 */
-		this.fnSettings = function()
-		{
-			return _fnSettingsFromNode( this[_ext.iApiIndex] );
-		};
-		
-		
-		/**
-		 * Sort the table by a particular column
-		 *  @param {int} iCol the data index to sort on. Note that this will not match the
-		 *    'display index' if you have hidden data entries
-		 *  @dtopt API
-		 *  @deprecated Since v1.10
-		 *
-		 *  @example
-		 *    $(document).ready(function() {
-		 *      var oTable = $('#example').dataTable();
-		 *
-		 *      // Sort immediately with columns 0 and 1
-		 *      oTable.fnSort( [ [0,'asc'], [1,'asc'] ] );
-		 *    } );
-		 */
-		this.fnSort = function( aaSort )
-		{
-			this.api( true ).order( aaSort ).draw();
-		};
-		
-		
-		/**
-		 * Attach a sort listener to an element for a given column
-		 *  @param {node} nNode the element to attach the sort listener to
-		 *  @param {int} iColumn the column that a click on this node will sort on
-		 *  @param {function} [fnCallback] callback function when sort is run
-		 *  @dtopt API
-		 *  @deprecated Since v1.10
-		 *
-		 *  @example
-		 *    $(document).ready(function() {
-		 *      var oTable = $('#example').dataTable();
-		 *
-		 *      // Sort on column 1, when 'sorter' is clicked on
-		 *      oTable.fnSortListener( document.getElementById('sorter'), 1 );
-		 *    } );
-		 */
-		this.fnSortListener = function( nNode, iColumn, fnCallback )
-		{
-			this.api( true ).order.listener( nNode, iColumn, fnCallback );
-		};
-		
-		
-		/**
-		 * Update a table cell or row - this method will accept either a single value to
-		 * update the cell with, an array of values with one element for each column or
-		 * an object in the same format as the original data source. The function is
-		 * self-referencing in order to make the multi column updates easier.
-		 *  @param {object|array|string} mData Data to update the cell/row with
-		 *  @param {node|int} mRow TR element you want to update or the aoData index
-		 *  @param {int} [iColumn] The column to update, give as null or undefined to
-		 *    update a whole row.
-		 *  @param {bool} [bRedraw=true] Redraw the table or not
-		 *  @param {bool} [bAction=true] Perform pre-draw actions or not
-		 *  @returns {int} 0 on success, 1 on error
-		 *  @dtopt API
-		 *  @deprecated Since v1.10
-		 *
-		 *  @example
-		 *    $(document).ready(function() {
-		 *      var oTable = $('#example').dataTable();
-		 *      oTable.fnUpdate( 'Example update', 0, 0 ); // Single cell
-		 *      oTable.fnUpdate( ['a', 'b', 'c', 'd', 'e'], $('tbody tr')[0] ); // Row
-		 *    } );
-		 */
-		this.fnUpdate = function( mData, mRow, iColumn, bRedraw, bAction )
-		{
-			var api = this.api( true );
-		
-			if ( iColumn === undefined || iColumn === null ) {
-				api.row( mRow ).data( mData );
-			}
-			else {
-				api.cell( mRow, iColumn ).data( mData );
-			}
-		
-			if ( bAction === undefined || bAction ) {
-				api.columns.adjust();
-			}
-		
-			if ( bRedraw === undefined || bRedraw ) {
-				api.draw();
-			}
-			return 0;
-		};
-		
-		
-		/**
-		 * Provide a common method for plug-ins to check the version of DataTables being used, in order
-		 * to ensure compatibility.
-		 *  @param {string} sVersion Version string to check for, in the format "X.Y.Z". Note that the
-		 *    formats "X" and "X.Y" are also acceptable.
-		 *  @returns {boolean} true if this version of DataTables is greater or equal to the required
-		 *    version, or false if this version of DataTales is not suitable
-		 *  @method
-		 *  @dtopt API
-		 *  @deprecated Since v1.10
-		 *
-		 *  @example
-		 *    $(document).ready(function() {
-		 *      var oTable = $('#example').dataTable();
-		 *      alert( oTable.fnVersionCheck( '1.9.0' ) );
-		 *    } );
-		 */
-		this.fnVersionCheck = _ext.fnVersionCheck;
-		
-
-		var _that = this;
-		var emptyInit = options === undefined;
-		var len = this.length;
-
-		if ( emptyInit ) {
-			options = {};
-		}
-
-		this.oApi = this.internal = _ext.internal;
-
-		// Extend with old style plug-in API methods
-		for ( var fn in DataTable.ext.internal ) {
-			if ( fn ) {
-				this[fn] = _fnExternApiFunc(fn);
-			}
-		}
-
-		this.each(function() {
-			// For each initialisation we want to give it a clean initialisation
-			// object that can be bashed around
-			var o = {};
-			var oInit = len > 1 ? // optimisation for single table case
-				_fnExtend( o, options, true ) :
-				options;
-
-			/*global oInit,_that,emptyInit*/
-			var i=0, iLen, j, jLen, k, kLen;
-			var sId = this.getAttribute( 'id' );
-			var bInitHandedOff = false;
-			var defaults = DataTable.defaults;
-			var $this = $(this);
-			
-			
-			/* Sanity check */
-			if ( this.nodeName.toLowerCase() != 'table' )
-			{
-				_fnLog( null, 0, 'Non-table node initialisation ('+this.nodeName+')', 2 );
-				return;
-			}
-			
-			/* Backwards compatibility for the defaults */
-			_fnCompatOpts( defaults );
-			_fnCompatCols( defaults.column );
-			
-			/* Convert the camel-case defaults to Hungarian */
-			_fnCamelToHungarian( defaults, defaults, true );
-			_fnCamelToHungarian( defaults.column, defaults.column, true );
-			
-			/* Setting up the initialisation object */
-			_fnCamelToHungarian( defaults, $.extend( oInit, $this.data() ), true );
-			
-			
-			
-			/* Check to see if we are re-initialising a table */
-			var allSettings = DataTable.settings;
-			for ( i=0, iLen=allSettings.length ; i<iLen ; i++ )
-			{
-				var s = allSettings[i];
-			
-				/* Base check on table node */
-				if (
-					s.nTable == this ||
-					(s.nTHead && s.nTHead.parentNode == this) ||
-					(s.nTFoot && s.nTFoot.parentNode == this)
-				) {
-					var bRetrieve = oInit.bRetrieve !== undefined ? oInit.bRetrieve : defaults.bRetrieve;
-					var bDestroy = oInit.bDestroy !== undefined ? oInit.bDestroy : defaults.bDestroy;
-			
-					if ( emptyInit || bRetrieve )
-					{
-						return s.oInstance;
-					}
-					else if ( bDestroy )
-					{
-						s.oInstance.fnDestroy();
-						break;
-					}
-					else
-					{
-						_fnLog( s, 0, 'Cannot reinitialise DataTable', 3 );
-						return;
-					}
-				}
-			
-				/* If the element we are initialising has the same ID as a table which was previously
-				 * initialised, but the table nodes don't match (from before) then we destroy the old
-				 * instance by simply deleting it. This is under the assumption that the table has been
-				 * destroyed by other methods. Anyone using non-id selectors will need to do this manually
-				 */
-				if ( s.sTableId == this.id )
-				{
-					allSettings.splice( i, 1 );
-					break;
-				}
-			}
-			
-			/* Ensure the table has an ID - required for accessibility */
-			if ( sId === null || sId === "" )
-			{
-				sId = "DataTables_Table_"+(DataTable.ext._unique++);
-				this.id = sId;
-			}
-			
-			/* Create the settings object for this table and set some of the default parameters */
-			var oSettings = $.extend( true, {}, DataTable.models.oSettings, {
-				"sDestroyWidth": $this[0].style.width,
-				"sInstance":     sId,
-				"sTableId":      sId
-			} );
-			oSettings.nTable = this;
-			oSettings.oApi   = _that.internal;
-			oSettings.oInit  = oInit;
-			
-			allSettings.push( oSettings );
-			
-			// Need to add the instance after the instance after the settings object has been added
-			// to the settings array, so we can self reference the table instance if more than one
-			oSettings.oInstance = (_that.length===1) ? _that : $this.dataTable();
-			
-			// Backwards compatibility, before we apply all the defaults
-			_fnCompatOpts( oInit );
-			_fnLanguageCompat( oInit.oLanguage );
-			
-			// If the length menu is given, but the init display length is not, use the length menu
-			if ( oInit.aLengthMenu && ! oInit.iDisplayLength )
-			{
-				oInit.iDisplayLength = $.isArray( oInit.aLengthMenu[0] ) ?
-					oInit.aLengthMenu[0][0] : oInit.aLengthMenu[0];
-			}
-			
-			// Apply the defaults and init options to make a single init object will all
-			// options defined from defaults and instance options.
-			oInit = _fnExtend( $.extend( true, {}, defaults ), oInit );
-			
-			
-			// Map the initialisation options onto the settings object
-			_fnMap( oSettings.oFeatures, oInit, [
-				"bPaginate",
-				"bLengthChange",
-				"bFilter",
-				"bSort",
-				"bSortMulti",
-				"bInfo",
-				"bProcessing",
-				"bAutoWidth",
-				"bSortClasses",
-				"bServerSide",
-				"bDeferRender"
-			] );
-			_fnMap( oSettings, oInit, [
-				"asStripeClasses",
-				"ajax",
-				"fnServerData",
-				"fnFormatNumber",
-				"sServerMethod",
-				"aaSorting",
-				"aaSortingFixed",
-				"aLengthMenu",
-				"sPaginationType",
-				"sAjaxSource",
-				"sAjaxDataProp",
-				"iStateDuration",
-				"sDom",
-				"bSortCellsTop",
-				"iTabIndex",
-				"fnStateLoadCallback",
-				"fnStateSaveCallback",
-				"renderer",
-				"searchDelay",
-				"rowId",
-				[ "iCookieDuration", "iStateDuration" ], // backwards compat
-				[ "oSearch", "oPreviousSearch" ],
-				[ "aoSearchCols", "aoPreSearchCols" ],
-				[ "iDisplayLength", "_iDisplayLength" ]
-			] );
-			_fnMap( oSettings.oScroll, oInit, [
-				[ "sScrollX", "sX" ],
-				[ "sScrollXInner", "sXInner" ],
-				[ "sScrollY", "sY" ],
-				[ "bScrollCollapse", "bCollapse" ]
-			] );
-			_fnMap( oSettings.oLanguage, oInit, "fnInfoCallback" );
-			
-			/* Callback functions which are array driven */
-			_fnCallbackReg( oSettings, 'aoDrawCallback',       oInit.fnDrawCallback,      'user' );
-			_fnCallbackReg( oSettings, 'aoServerParams',       oInit.fnServerParams,      'user' );
-			_fnCallbackReg( oSettings, 'aoStateSaveParams',    oInit.fnStateSaveParams,   'user' );
-			_fnCallbackReg( oSettings, 'aoStateLoadParams',    oInit.fnStateLoadParams,   'user' );
-			_fnCallbackReg( oSettings, 'aoStateLoaded',        oInit.fnStateLoaded,       'user' );
-			_fnCallbackReg( oSettings, 'aoRowCallback',        oInit.fnRowCallback,       'user' );
-			_fnCallbackReg( oSettings, 'aoRowCreatedCallback', oInit.fnCreatedRow,        'user' );
-			_fnCallbackReg( oSettings, 'aoHeaderCallback',     oInit.fnHeaderCallback,    'user' );
-			_fnCallbackReg( oSettings, 'aoFooterCallback',     oInit.fnFooterCallback,    'user' );
-			_fnCallbackReg( oSettings, 'aoInitComplete',       oInit.fnInitComplete,      'user' );
-			_fnCallbackReg( oSettings, 'aoPreDrawCallback',    oInit.fnPreDrawCallback,   'user' );
-			
-			oSettings.rowIdFn = _fnGetObjectDataFn( oInit.rowId );
-			
-			/* Browser support detection */
-			_fnBrowserDetect( oSettings );
-			
-			var oClasses = oSettings.oClasses;
-			
-			$.extend( oClasses, DataTable.ext.classes, oInit.oClasses );
-			$this.addClass( oClasses.sTable );
-			
-			
-			if ( oSettings.iInitDisplayStart === undefined )
-			{
-				/* Display start point, taking into account the save saving */
-				oSettings.iInitDisplayStart = oInit.iDisplayStart;
-				oSettings._iDisplayStart = oInit.iDisplayStart;
-			}
-			
-			if ( oInit.iDeferLoading !== null )
-			{
-				oSettings.bDeferLoading = true;
-				var tmp = $.isArray( oInit.iDeferLoading );
-				oSettings._iRecordsDisplay = tmp ? oInit.iDeferLoading[0] : oInit.iDeferLoading;
-				oSettings._iRecordsTotal = tmp ? oInit.iDeferLoading[1] : oInit.iDeferLoading;
-			}
-			
-			/* Language definitions */
-			var oLanguage = oSettings.oLanguage;
-			$.extend( true, oLanguage, oInit.oLanguage );
-			
-			if ( oLanguage.sUrl )
-			{
-				/* Get the language definitions from a file - because this Ajax call makes the language
-				 * get async to the remainder of this function we use bInitHandedOff to indicate that
-				 * _fnInitialise will be fired by the returned Ajax handler, rather than the constructor
-				 */
-				$.ajax( {
-					dataType: 'json',
-					url: oLanguage.sUrl,
-					success: function ( json ) {
-						_fnLanguageCompat( json );
-						_fnCamelToHungarian( defaults.oLanguage, json );
-						$.extend( true, oLanguage, json );
-						_fnInitialise( oSettings );
-					},
-					error: function () {
-						// Error occurred loading language file, continue on as best we can
-						_fnInitialise( oSettings );
-					}
-				} );
-				bInitHandedOff = true;
-			}
-			
-			/*
-			 * Stripes
-			 */
-			if ( oInit.asStripeClasses === null )
-			{
-				oSettings.asStripeClasses =[
-					oClasses.sStripeOdd,
-					oClasses.sStripeEven
-				];
-			}
-			
-			/* Remove row stripe classes if they are already on the table row */
-			var stripeClasses = oSettings.asStripeClasses;
-			var rowOne = $this.children('tbody').find('tr').eq(0);
-			if ( $.inArray( true, $.map( stripeClasses, function(el, i) {
-				return rowOne.hasClass(el);
-			} ) ) !== -1 ) {
-				$('tbody tr', this).removeClass( stripeClasses.join(' ') );
-				oSettings.asDestroyStripes = stripeClasses.slice();
-			}
-			
-			/*
-			 * Columns
-			 * See if we should load columns automatically or use defined ones
-			 */
-			var anThs = [];
-			var aoColumnsInit;
-			var nThead = this.getElementsByTagName('thead');
-			if ( nThead.length !== 0 )
-			{
-				_fnDetectHeader( oSettings.aoHeader, nThead[0] );
-				anThs = _fnGetUniqueThs( oSettings );
-			}
-			
-			/* If not given a column array, generate one with nulls */
-			if ( oInit.aoColumns === null )
-			{
-				aoColumnsInit = [];
-				for ( i=0, iLen=anThs.length ; i<iLen ; i++ )
-				{
-					aoColumnsInit.push( null );
-				}
-			}
-			else
-			{
-				aoColumnsInit = oInit.aoColumns;
-			}
-			
-			/* Add the columns */
-			for ( i=0, iLen=aoColumnsInit.length ; i<iLen ; i++ )
-			{
-				_fnAddColumn( oSettings, anThs ? anThs[i] : null );
-			}
-			
-			/* Apply the column definitions */
-			_fnApplyColumnDefs( oSettings, oInit.aoColumnDefs, aoColumnsInit, function (iCol, oDef) {
-				_fnColumnOptions( oSettings, iCol, oDef );
-			} );
-			
-			/* HTML5 attribute detection - build an mData object automatically if the
-			 * attributes are found
-			 */
-			if ( rowOne.length ) {
-				var a = function ( cell, name ) {
-					return cell.getAttribute( 'data-'+name ) !== null ? name : null;
-				};
-			
-				$( rowOne[0] ).children('th, td').each( function (i, cell) {
-					var col = oSettings.aoColumns[i];
-			
-					if ( col.mData === i ) {
-						var sort = a( cell, 'sort' ) || a( cell, 'order' );
-						var filter = a( cell, 'filter' ) || a( cell, 'search' );
-			
-						if ( sort !== null || filter !== null ) {
-							col.mData = {
-								_:      i+'.display',
-								sort:   sort !== null   ? i+'.@data-'+sort   : undefined,
-								type:   sort !== null   ? i+'.@data-'+sort   : undefined,
-								filter: filter !== null ? i+'.@data-'+filter : undefined
-							};
-			
-							_fnColumnOptions( oSettings, i );
-						}
-					}
-				} );
-			}
-			
-			var features = oSettings.oFeatures;
-			var loadedInit = function () {
-				/*
-				 * Sorting
-				 * @todo For modularisation (1.11) this needs to do into a sort start up handler
-				 */
-			
-				// If aaSorting is not defined, then we use the first indicator in asSorting
-				// in case that has been altered, so the default sort reflects that option
-				if ( oInit.aaSorting === undefined ) {
-					var sorting = oSettings.aaSorting;
-					for ( i=0, iLen=sorting.length ; i<iLen ; i++ ) {
-						sorting[i][1] = oSettings.aoColumns[ i ].asSorting[0];
-					}
-				}
-			
-				/* Do a first pass on the sorting classes (allows any size changes to be taken into
-				 * account, and also will apply sorting disabled classes if disabled
-				 */
-				_fnSortingClasses( oSettings );
-			
-				if ( features.bSort ) {
-					_fnCallbackReg( oSettings, 'aoDrawCallback', function () {
-						if ( oSettings.bSorted ) {
-							var aSort = _fnSortFlatten( oSettings );
-							var sortedColumns = {};
-			
-							$.each( aSort, function (i, val) {
-								sortedColumns[ val.src ] = val.dir;
-							} );
-			
-							_fnCallbackFire( oSettings, null, 'order', [oSettings, aSort, sortedColumns] );
-							_fnSortAria( oSettings );
-						}
-					} );
-				}
-			
-				_fnCallbackReg( oSettings, 'aoDrawCallback', function () {
-					if ( oSettings.bSorted || _fnDataSource( oSettings ) === 'ssp' || features.bDeferRender ) {
-						_fnSortingClasses( oSettings );
-					}
-				}, 'sc' );
-			
-			
-				/*
-				 * Final init
-				 * Cache the header, body and footer as required, creating them if needed
-				 */
-			
-				// Work around for Webkit bug 83867 - store the caption-side before removing from doc
-				var captions = $this.children('caption').each( function () {
-					this._captionSide = $(this).css('caption-side');
-				} );
-			
-				var thead = $this.children('thead');
-				if ( thead.length === 0 ) {
-					thead = $('<thead/>').appendTo($this);
-				}
-				oSettings.nTHead = thead[0];
-			
-				var tbody = $this.children('tbody');
-				if ( tbody.length === 0 ) {
-					tbody = $('<tbody/>').appendTo($this);
-				}
-				oSettings.nTBody = tbody[0];
-			
-				var tfoot = $this.children('tfoot');
-				if ( tfoot.length === 0 && captions.length > 0 && (oSettings.oScroll.sX !== "" || oSettings.oScroll.sY !== "") ) {
-					// If we are a scrolling table, and no footer has been given, then we need to create
-					// a tfoot element for the caption element to be appended to
-					tfoot = $('<tfoot/>').appendTo($this);
-				}
-			
-				if ( tfoot.length === 0 || tfoot.children().length === 0 ) {
-					$this.addClass( oClasses.sNoFooter );
-				}
-				else if ( tfoot.length > 0 ) {
-					oSettings.nTFoot = tfoot[0];
-					_fnDetectHeader( oSettings.aoFooter, oSettings.nTFoot );
-				}
-			
-				/* Check if there is data passing into the constructor */
-				if ( oInit.aaData ) {
-					for ( i=0 ; i<oInit.aaData.length ; i++ ) {
-						_fnAddData( oSettings, oInit.aaData[ i ] );
-					}
-				}
-				else if ( oSettings.bDeferLoading || _fnDataSource( oSettings ) == 'dom' ) {
-					/* Grab the data from the page - only do this when deferred loading or no Ajax
-					 * source since there is no point in reading the DOM data if we are then going
-					 * to replace it with Ajax data
-					 */
-					_fnAddTr( oSettings, $(oSettings.nTBody).children('tr') );
-				}
-			
-				/* Copy the data index array */
-				oSettings.aiDisplay = oSettings.aiDisplayMaster.slice();
-			
-				/* Initialisation complete - table can be drawn */
-				oSettings.bInitialised = true;
-			
-				/* Check if we need to initialise the table (it might not have been handed off to the
-				 * language processor)
-				 */
-				if ( bInitHandedOff === false ) {
-					_fnInitialise( oSettings );
-				}
-			};
-			
-			/* Must be done after everything which can be overridden by the state saving! */
-			if ( oInit.bStateSave )
-			{
-				features.bStateSave = true;
-				_fnCallbackReg( oSettings, 'aoDrawCallback', _fnSaveState, 'state_save' );
-				_fnLoadState( oSettings, oInit, loadedInit );
-			}
-			else {
-				loadedInit();
-			}
-			
-		} );
-		_that = null;
-		return this;
-	};
-
-	
-	/*
-	 * It is useful to have variables which are scoped locally so only the
-	 * DataTables functions can access them and they don't leak into global space.
-	 * At the same time these functions are often useful over multiple files in the
-	 * core and API, so we list, or at least document, all variables which are used
-	 * by DataTables as private variables here. This also ensures that there is no
-	 * clashing of variable names and that they can easily referenced for reuse.
-	 */
-	
-	
-	// Defined else where
-	//  _selector_run
-	//  _selector_opts
-	//  _selector_first
-	//  _selector_row_indexes
-	
-	var _ext; // DataTable.ext
-	var _Api; // DataTable.Api
-	var _api_register; // DataTable.Api.register
-	var _api_registerPlural; // DataTable.Api.registerPlural
-	
-	var _re_dic = {};
-	var _re_new_lines = /[\r\n\u2028]/g;
-	var _re_html = /<.*?>/g;
-	
-	// This is not strict ISO8601 - Date.parse() is quite lax, although
-	// implementations differ between browsers.
-	var _re_date = /^\d{2,4}[\.\/\-]\d{1,2}[\.\/\-]\d{1,2}([T ]{1}\d{1,2}[:\.]\d{2}([\.:]\d{2})?)?$/;
-	
-	// Escape regular expression special characters
-	var _re_escape_regex = new RegExp( '(\\' + [ '/', '.', '*', '+', '?', '|', '(', ')', '[', ']', '{', '}', '\\', '$', '^', '-' ].join('|\\') + ')', 'g' );
-	
-	// http://en.wikipedia.org/wiki/Foreign_exchange_market
-	// - \u20BD - Russian ruble.
-	// - \u20a9 - South Korean Won
-	// - \u20BA - Turkish Lira
-	// - \u20B9 - Indian Rupee
-	// - R - Brazil (R$) and South Africa
-	// - fr - Swiss Franc
-	// - kr - Swedish krona, Norwegian krone and Danish krone
-	// - \u2009 is thin space and \u202F is narrow no-break space, both used in many
-	// - Ƀ - Bitcoin
-	// - Ξ - Ethereum
-	//   standards as thousands separators.
-	var _re_formatted_numeric = /[',$£€¥%\u2009\u202F\u20BD\u20a9\u20BArfkɃΞ]/gi;
-	
-	
-	var _empty = function ( d ) {
-		return !d || d === true || d === '-' ? true : false;
-	};
-	
-	
-	var _intVal = function ( s ) {
-		var integer = parseInt( s, 10 );
-		return !isNaN(integer) && isFinite(s) ? integer : null;
-	};
-	
-	// Convert from a formatted number with characters other than `.` as the
-	// decimal place, to a Javascript number
-	var _numToDecimal = function ( num, decimalPoint ) {
-		// Cache created regular expressions for speed as this function is called often
-		if ( ! _re_dic[ decimalPoint ] ) {
-			_re_dic[ decimalPoint ] = new RegExp( _fnEscapeRegex( decimalPoint ), 'g' );
-		}
-		return typeof num === 'string' && decimalPoint !== '.' ?
-			num.replace( /\./g, '' ).replace( _re_dic[ decimalPoint ], '.' ) :
-			num;
-	};
-	
-	
-	var _isNumber = function ( d, decimalPoint, formatted ) {
-		var strType = typeof d === 'string';
-	
-		// If empty return immediately so there must be a number if it is a
-		// formatted string (this stops the string "k", or "kr", etc being detected
-		// as a formatted number for currency
-		if ( _empty( d ) ) {
-			return true;
-		}
-	
-		if ( decimalPoint && strType ) {
-			d = _numToDecimal( d, decimalPoint );
-		}
-	
-		if ( formatted && strType ) {
-			d = d.replace( _re_formatted_numeric, '' );
-		}
-	
-		return !isNaN( parseFloat(d) ) && isFinite( d );
-	};
-	
-	
-	// A string without HTML in it can be considered to be HTML still
-	var _isHtml = function ( d ) {
-		return _empty( d ) || typeof d === 'string';
-	};
-	
-	
-	var _htmlNumeric = function ( d, decimalPoint, formatted ) {
-		if ( _empty( d ) ) {
-			return true;
-		}
-	
-		var html = _isHtml( d );
-		return ! html ?
-			null :
-			_isNumber( _stripHtml( d ), decimalPoint, formatted ) ?
-				true :
-				null;
-	};
-	
-	
-	var _pluck = function ( a, prop, prop2 ) {
-		var out = [];
-		var i=0, ien=a.length;
-	
-		// Could have the test in the loop for slightly smaller code, but speed
-		// is essential here
-		if ( prop2 !== undefined ) {
-			for ( ; i<ien ; i++ ) {
-				if ( a[i] && a[i][ prop ] ) {
-					out.push( a[i][ prop ][ prop2 ] );
-				}
-			}
-		}
-		else {
-			for ( ; i<ien ; i++ ) {
-				if ( a[i] ) {
-					out.push( a[i][ prop ] );
-				}
-			}
-		}
-	
-		return out;
-	};
-	
-	
-	// Basically the same as _pluck, but rather than looping over `a` we use `order`
-	// as the indexes to pick from `a`
-	var _pluck_order = function ( a, order, prop, prop2 )
-	{
-		var out = [];
-		var i=0, ien=order.length;
-	
-		// Could have the test in the loop for slightly smaller code, but speed
-		// is essential here
-		if ( prop2 !== undefined ) {
-			for ( ; i<ien ; i++ ) {
-				if ( a[ order[i] ][ prop ] ) {
-					out.push( a[ order[i] ][ prop ][ prop2 ] );
-				}
-			}
-		}
-		else {
-			for ( ; i<ien ; i++ ) {
-				out.push( a[ order[i] ][ prop ] );
-			}
-		}
-	
-		return out;
-	};
-	
-	
-	var _range = function ( len, start )
-	{
-		var out = [];
-		var end;
-	
-		if ( start === undefined ) {
-			start = 0;
-			end = len;
-		}
-		else {
-			end = start;
-			start = len;
-		}
-	
-		for ( var i=start ; i<end ; i++ ) {
-			out.push( i );
-		}
-	
-		return out;
-	};
-	
-	
-	var _removeEmpty = function ( a )
-	{
-		var out = [];
-	
-		for ( var i=0, ien=a.length ; i<ien ; i++ ) {
-			if ( a[i] ) { // careful - will remove all falsy values!
-				out.push( a[i] );
-			}
-		}
-	
-		return out;
-	};
-	
-	
-	var _stripHtml = function ( d ) {
-		return d.replace( _re_html, '' );
-	};
-	
-	
-	/**
-	 * Determine if all values in the array are unique. This means we can short
-	 * cut the _unique method at the cost of a single loop. A sorted array is used
-	 * to easily check the values.
-	 *
-	 * @param  {array} src Source array
-	 * @return {boolean} true if all unique, false otherwise
-	 * @ignore
-	 */
-	var _areAllUnique = function ( src ) {
-		if ( src.length < 2 ) {
-			return true;
-		}
-	
-		var sorted = src.slice().sort();
-		var last = sorted[0];
-	
-		for ( var i=1, ien=sorted.length ; i<ien ; i++ ) {
-			if ( sorted[i] === last ) {
-				return false;
-			}
-	
-			last = sorted[i];
-		}
-	
-		return true;
-	};
-	
-	
-	/**
-	 * Find the unique elements in a source array.
-	 *
-	 * @param  {array} src Source array
-	 * @return {array} Array of unique items
-	 * @ignore
-	 */
-	var _unique = function ( src )
-	{
-		if ( _areAllUnique( src ) ) {
-			return src.slice();
-		}
-	
-		// A faster unique method is to use object keys to identify used values,
-		// but this doesn't work with arrays or objects, which we must also
-		// consider. See jsperf.com/compare-array-unique-versions/4 for more
-		// information.
-		var
-			out = [],
-			val,
-			i, ien=src.length,
-			j, k=0;
-	
-		again: for ( i=0 ; i<ien ; i++ ) {
-			val = src[i];
-	
-			for ( j=0 ; j<k ; j++ ) {
-				if ( out[j] === val ) {
-					continue again;
-				}
-			}
-	
-			out.push( val );
-			k++;
-		}
-	
-		return out;
-	};
-	
-	
-	/**
-	 * DataTables utility methods
-	 * 
-	 * This namespace provides helper methods that DataTables uses internally to
-	 * create a DataTable, but which are not exclusively used only for DataTables.
-	 * These methods can be used by extension authors to save the duplication of
-	 * code.
-	 *
-	 *  @namespace
-	 */
-	DataTable.util = {
-		/**
-		 * Throttle the calls to a function. Arguments and context are maintained
-		 * for the throttled function.
-		 *
-		 * @param {function} fn Function to be called
-		 * @param {integer} freq Call frequency in mS
-		 * @return {function} Wrapped function
-		 */
-		throttle: function ( fn, freq ) {
-			var
-				frequency = freq !== undefined ? freq : 200,
-				last,
-				timer;
-	
-			return function () {
-				var
-					that = this,
-					now  = +new Date(),
-					args = arguments;
-	
-				if ( last && now < last + frequency ) {
-					clearTimeout( timer );
-	
-					timer = setTimeout( function () {
-						last = undefined;
-						fn.apply( that, args );
-					}, frequency );
-				}
-				else {
-					last = now;
-					fn.apply( that, args );
-				}
-			};
-		},
-	
-	
-		/**
-		 * Escape a string such that it can be used in a regular expression
-		 *
-		 *  @param {string} val string to escape
-		 *  @returns {string} escaped string
-		 */
-		escapeRegex: function ( val ) {
-			return val.replace( _re_escape_regex, '\\$1' );
-		}
-	};
-	
-	
-	
-	/**
-	 * Create a mapping object that allows camel case parameters to be looked up
-	 * for their Hungarian counterparts. The mapping is stored in a private
-	 * parameter called `_hungarianMap` which can be accessed on the source object.
-	 *  @param {object} o
-	 *  @memberof DataTable#oApi
-	 */
-	function _fnHungarianMap ( o )
-	{
-		var
-			hungarian = 'a aa ai ao as b fn i m o s ',
-			match,
-			newKey,
-			map = {};
-	
-		$.each( o, function (key, val) {
-			match = key.match(/^([^A-Z]+?)([A-Z])/);
-	
-			if ( match && hungarian.indexOf(match[1]+' ') !== -1 )
-			{
-				newKey = key.replace( match[0], match[2].toLowerCase() );
-				map[ newKey ] = key;
-	
-				if ( match[1] === 'o' )
-				{
-					_fnHungarianMap( o[key] );
-				}
-			}
-		} );
-	
-		o._hungarianMap = map;
-	}
-	
-	
-	/**
-	 * Convert from camel case parameters to Hungarian, based on a Hungarian map
-	 * created by _fnHungarianMap.
-	 *  @param {object} src The model object which holds all parameters that can be
-	 *    mapped.
-	 *  @param {object} user The object to convert from camel case to Hungarian.
-	 *  @param {boolean} force When set to `true`, properties which already have a
-	 *    Hungarian value in the `user` object will be overwritten. Otherwise they
-	 *    won't be.
-	 *  @memberof DataTable#oApi
-	 */
-	function _fnCamelToHungarian ( src, user, force )
-	{
-		if ( ! src._hungarianMap ) {
-			_fnHungarianMap( src );
-		}
-	
-		var hungarianKey;
-	
-		$.each( user, function (key, val) {
-			hungarianKey = src._hungarianMap[ key ];
-	
-			if ( hungarianKey !== undefined && (force || user[hungarianKey] === undefined) )
-			{
-				// For objects, we need to buzz down into the object to copy parameters
-				if ( hungarianKey.charAt(0) === 'o' )
-				{
-					// Copy the camelCase options over to the hungarian
-					if ( ! user[ hungarianKey ] ) {
-						user[ hungarianKey ] = {};
-					}
-					$.extend( true, user[hungarianKey], user[key] );
-	
-					_fnCamelToHungarian( src[hungarianKey], user[hungarianKey], force );
-				}
-				else {
-					user[hungarianKey] = user[ key ];
-				}
-			}
-		} );
-	}
-	
-	
-	/**
-	 * Language compatibility - when certain options are given, and others aren't, we
-	 * need to duplicate the values over, in order to provide backwards compatibility
-	 * with older language files.
-	 *  @param {object} oSettings dataTables settings object
-	 *  @memberof DataTable#oApi
-	 */
-	function _fnLanguageCompat( lang )
-	{
-		// Note the use of the Hungarian notation for the parameters in this method as
-		// this is called after the mapping of camelCase to Hungarian
-		var defaults = DataTable.defaults.oLanguage;
-	
-		// Default mapping
-		var defaultDecimal = defaults.sDecimal;
-		if ( defaultDecimal ) {
-			_addNumericSort( defaultDecimal );
-		}
-	
-		if ( lang ) {
-			var zeroRecords = lang.sZeroRecords;
-	
-			// Backwards compatibility - if there is no sEmptyTable given, then use the same as
-			// sZeroRecords - assuming that is given.
-			if ( ! lang.sEmptyTable && zeroRecords &&
-				defaults.sEmptyTable === "No data available in table" )
-			{
-				_fnMap( lang, lang, 'sZeroRecords', 'sEmptyTable' );
-			}
-	
-			// Likewise with loading records
-			if ( ! lang.sLoadingRecords && zeroRecords &&
-				defaults.sLoadingRecords === "Loading..." )
-			{
-				_fnMap( lang, lang, 'sZeroRecords', 'sLoadingRecords' );
-			}
-	
-			// Old parameter name of the thousands separator mapped onto the new
-			if ( lang.sInfoThousands ) {
-				lang.sThousands = lang.sInfoThousands;
-			}
-	
-			var decimal = lang.sDecimal;
-			if ( decimal && defaultDecimal !== decimal ) {
-				_addNumericSort( decimal );
-			}
-		}
-	}
-	
-	
-	/**
-	 * Map one parameter onto another
-	 *  @param {object} o Object to map
-	 *  @param {*} knew The new parameter name
-	 *  @param {*} old The old parameter name
-	 */
-	var _fnCompatMap = function ( o, knew, old ) {
-		if ( o[ knew ] !== undefined ) {
-			o[ old ] = o[ knew ];
-		}
-	};
-	
-	
-	/**
-	 * Provide backwards compatibility for the main DT options. Note that the new
-	 * options are mapped onto the old parameters, so this is an external interface
-	 * change only.
-	 *  @param {object} init Object to map
-	 */
-	function _fnCompatOpts ( init )
-	{
-		_fnCompatMap( init, 'ordering',      'bSort' );
-		_fnCompatMap( init, 'orderMulti',    'bSortMulti' );
-		_fnCompatMap( init, 'orderClasses',  'bSortClasses' );
-		_fnCompatMap( init, 'orderCellsTop', 'bSortCellsTop' );
-		_fnCompatMap( init, 'order',         'aaSorting' );
-		_fnCompatMap( init, 'orderFixed',    'aaSortingFixed' );
-		_fnCompatMap( init, 'paging',        'bPaginate' );
-		_fnCompatMap( init, 'pagingType',    'sPaginationType' );
-		_fnCompatMap( init, 'pageLength',    'iDisplayLength' );
-		_fnCompatMap( init, 'searching',     'bFilter' );
-	
-		// Boolean initialisation of x-scrolling
-		if ( typeof init.sScrollX === 'boolean' ) {
-			init.sScrollX = init.sScrollX ? '100%' : '';
-		}
-		if ( typeof init.scrollX === 'boolean' ) {
-			init.scrollX = init.scrollX ? '100%' : '';
-		}
-	
-		// Column search objects are in an array, so it needs to be converted
-		// element by element
-		var searchCols = init.aoSearchCols;
-	
-		if ( searchCols ) {
-			for ( var i=0, ien=searchCols.length ; i<ien ; i++ ) {
-				if ( searchCols[i] ) {
-					_fnCamelToHungarian( DataTable.models.oSearch, searchCols[i] );
-				}
-			}
-		}
-	}
-	
-	
-	/**
-	 * Provide backwards compatibility for column options. Note that the new options
-	 * are mapped onto the old parameters, so this is an external interface change
-	 * only.
-	 *  @param {object} init Object to map
-	 */
-	function _fnCompatCols ( init )
-	{
-		_fnCompatMap( init, 'orderable',     'bSortable' );
-		_fnCompatMap( init, 'orderData',     'aDataSort' );
-		_fnCompatMap( init, 'orderSequence', 'asSorting' );
-		_fnCompatMap( init, 'orderDataType', 'sortDataType' );
-	
-		// orderData can be given as an integer
-		var dataSort = init.aDataSort;
-		if ( typeof dataSort === 'number' && ! $.isArray( dataSort ) ) {
-			init.aDataSort = [ dataSort ];
-		}
-	}
-	
-	
-	/**
-	 * Browser feature detection for capabilities, quirks
-	 *  @param {object} settings dataTables settings object
-	 *  @memberof DataTable#oApi
-	 */
-	function _fnBrowserDetect( settings )
-	{
-		// We don't need to do this every time DataTables is constructed, the values
-		// calculated are specific to the browser and OS configuration which we
-		// don't expect to change between initialisations
-		if ( ! DataTable.__browser ) {
-			var browser = {};
-			DataTable.__browser = browser;
-	
-			// Scrolling feature / quirks detection
-			var n = $('<div/>')
-				.css( {
-					position: 'fixed',
-					top: 0,
-					left: $(window).scrollLeft()*-1, // allow for scrolling
-					height: 1,
-					width: 1,
-					overflow: 'hidden'
-				} )
-				.append(
-					$('<div/>')
-						.css( {
-							position: 'absolute',
-							top: 1,
-							left: 1,
-							width: 100,
-							overflow: 'scroll'
-						} )
-						.append(
-							$('<div/>')
-								.css( {
-									width: '100%',
-									height: 10
-								} )
-						)
-				)
-				.appendTo( 'body' );
-	
-			var outer = n.children();
-			var inner = outer.children();
-	
-			// Numbers below, in order, are:
-			// inner.offsetWidth, inner.clientWidth, outer.offsetWidth, outer.clientWidth
-			//
-			// IE6 XP:                           100 100 100  83
-			// IE7 Vista:                        100 100 100  83
-			// IE 8+ Windows:                     83  83 100  83
-			// Evergreen Windows:                 83  83 100  83
-			// Evergreen Mac with scrollbars:     85  85 100  85
-			// Evergreen Mac without scrollbars: 100 100 100 100
-	
-			// Get scrollbar width
-			browser.barWidth = outer[0].offsetWidth - outer[0].clientWidth;
-	
-			// IE6/7 will oversize a width 100% element inside a scrolling element, to
-			// include the width of the scrollbar, while other browsers ensure the inner
-			// element is contained without forcing scrolling
-			browser.bScrollOversize = inner[0].offsetWidth === 100 && outer[0].clientWidth !== 100;
-	
-			// In rtl text layout, some browsers (most, but not all) will place the
-			// scrollbar on the left, rather than the right.
-			browser.bScrollbarLeft = Math.round( inner.offset().left ) !== 1;
-	
-			// IE8- don't provide height and width for getBoundingClientRect
-			browser.bBounding = n[0].getBoundingClientRect().width ? true : false;
-	
-			n.remove();
-		}
-	
-		$.extend( settings.oBrowser, DataTable.__browser );
-		settings.oScroll.iBarWidth = DataTable.__browser.barWidth;
-	}
-	
-	
-	/**
-	 * Array.prototype reduce[Right] method, used for browsers which don't support
-	 * JS 1.6. Done this way to reduce code size, since we iterate either way
-	 *  @param {object} settings dataTables settings object
-	 *  @memberof DataTable#oApi
-	 */
-	function _fnReduce ( that, fn, init, start, end, inc )
-	{
-		var
-			i = start,
-			value,
-			isSet = false;
-	
-		if ( init !== undefined ) {
-			value = init;
-			isSet = true;
-		}
-	
-		while ( i !== end ) {
-			if ( ! that.hasOwnProperty(i) ) {
-				continue;
-			}
-	
-			value = isSet ?
-				fn( value, that[i], i, that ) :
-				that[i];
-	
-			isSet = true;
-			i += inc;
-		}
-	
-		return value;
-	}
-	
-	/**
-	 * Add a column to the list used for the table with default values
-	 *  @param {object} oSettings dataTables settings object
-	 *  @param {node} nTh The th element for this column
-	 *  @memberof DataTable#oApi
-	 */
-	function _fnAddColumn( oSettings, nTh )
-	{
-		// Add column to aoColumns array
-		var oDefaults = DataTable.defaults.column;
-		var iCol = oSettings.aoColumns.length;
-		var oCol = $.extend( {}, DataTable.models.oColumn, oDefaults, {
-			"nTh": nTh ? nTh : document.createElement('th'),
-			"sTitle":    oDefaults.sTitle    ? oDefaults.sTitle    : nTh ? nTh.innerHTML : '',
-			"aDataSort": oDefaults.aDataSort ? oDefaults.aDataSort : [iCol],
-			"mData": oDefaults.mData ? oDefaults.mData : iCol,
-			idx: iCol
-		} );
-		oSettings.aoColumns.push( oCol );
-	
-		// Add search object for column specific search. Note that the `searchCols[ iCol ]`
-		// passed into extend can be undefined. This allows the user to give a default
-		// with only some of the parameters defined, and also not give a default
-		var searchCols = oSettings.aoPreSearchCols;
-		searchCols[ iCol ] = $.extend( {}, DataTable.models.oSearch, searchCols[ iCol ] );
-	
-		// Use the default column options function to initialise classes etc
-		_fnColumnOptions( oSettings, iCol, $(nTh).data() );
-	}
-	
-	
-	/**
-	 * Apply options for a column
-	 *  @param {object} oSettings dataTables settings object
-	 *  @param {int} iCol column index to consider
-	 *  @param {object} oOptions object with sType, bVisible and bSearchable etc
-	 *  @memberof DataTable#oApi
-	 */
-	function _fnColumnOptions( oSettings, iCol, oOptions )
-	{
-		var oCol = oSettings.aoColumns[ iCol ];
-		var oClasses = oSettings.oClasses;
-		var th = $(oCol.nTh);
-	
-		// Try to get width information from the DOM. We can't get it from CSS
-		// as we'd need to parse the CSS stylesheet. `width` option can override
-		if ( ! oCol.sWidthOrig ) {
-			// Width attribute
-			oCol.sWidthOrig = th.attr('width') || null;
-	
-			// Style attribute
-			var t = (th.attr('style') || '').match(/width:\s*(\d+[pxem%]+)/);
-			if ( t ) {
-				oCol.sWidthOrig = t[1];
-			}
-		}
-	
-		/* User specified column options */
-		if ( oOptions !== undefined && oOptions !== null )
-		{
-			// Backwards compatibility
-			_fnCompatCols( oOptions );
-	
-			// Map camel case parameters to their Hungarian counterparts
-			_fnCamelToHungarian( DataTable.defaults.column, oOptions, true );
-	
-			/* Backwards compatibility for mDataProp */
-			if ( oOptions.mDataProp !== undefined && !oOptions.mData )
-			{
-				oOptions.mData = oOptions.mDataProp;
-			}
-	
-			if ( oOptions.sType )
-			{
-				oCol._sManualType = oOptions.sType;
-			}
-	
-			// `class` is a reserved word in Javascript, so we need to provide
-			// the ability to use a valid name for the camel case input
-			if ( oOptions.className && ! oOptions.sClass )
-			{
-				oOptions.sClass = oOptions.className;
-			}
-			if ( oOptions.sClass ) {
-				th.addClass( oOptions.sClass );
-			}
-	
-			$.extend( oCol, oOptions );
-			_fnMap( oCol, oOptions, "sWidth", "sWidthOrig" );
-	
-			/* iDataSort to be applied (backwards compatibility), but aDataSort will take
-			 * priority if defined
-			 */
-			if ( oOptions.iDataSort !== undefined )
-			{
-				oCol.aDataSort = [ oOptions.iDataSort ];
-			}
-			_fnMap( oCol, oOptions, "aDataSort" );
-		}
-	
-		/* Cache the data get and set functions for speed */
-		var mDataSrc = oCol.mData;
-		var mData = _fnGetObjectDataFn( mDataSrc );
-		var mRender = oCol.mRender ? _fnGetObjectDataFn( oCol.mRender ) : null;
-	
-		var attrTest = function( src ) {
-			return typeof src === 'string' && src.indexOf('@') !== -1;
-		};
-		oCol._bAttrSrc = $.isPlainObject( mDataSrc ) && (
-			attrTest(mDataSrc.sort) || attrTest(mDataSrc.type) || attrTest(mDataSrc.filter)
-		);
-		oCol._setter = null;
-	
-		oCol.fnGetData = function (rowData, type, meta) {
-			var innerData = mData( rowData, type, undefined, meta );
-	
-			return mRender && type ?
-				mRender( innerData, type, rowData, meta ) :
-				innerData;
-		};
-		oCol.fnSetData = function ( rowData, val, meta ) {
-			return _fnSetObjectDataFn( mDataSrc )( rowData, val, meta );
-		};
-	
-		// Indicate if DataTables should read DOM data as an object or array
-		// Used in _fnGetRowElements
-		if ( typeof mDataSrc !== 'number' ) {
-			oSettings._rowReadObject = true;
-		}
-	
-		/* Feature sorting overrides column specific when off */
-		if ( !oSettings.oFeatures.bSort )
-		{
-			oCol.bSortable = false;
-			th.addClass( oClasses.sSortableNone ); // Have to add class here as order event isn't called
-		}
-	
-		/* Check that the class assignment is correct for sorting */
-		var bAsc = $.inArray('asc', oCol.asSorting) !== -1;
-		var bDesc = $.inArray('desc', oCol.asSorting) !== -1;
-		if ( !oCol.bSortable || (!bAsc && !bDesc) )
-		{
-			oCol.sSortingClass = oClasses.sSortableNone;
-			oCol.sSortingClassJUI = "";
-		}
-		else if ( bAsc && !bDesc )
-		{
-			oCol.sSortingClass = oClasses.sSortableAsc;
-			oCol.sSortingClassJUI = oClasses.sSortJUIAscAllowed;
-		}
-		else if ( !bAsc && bDesc )
-		{
-			oCol.sSortingClass = oClasses.sSortableDesc;
-			oCol.sSortingClassJUI = oClasses.sSortJUIDescAllowed;
-		}
-		else
-		{
-			oCol.sSortingClass = oClasses.sSortable;
-			oCol.sSortingClassJUI = oClasses.sSortJUI;
-		}
-	}
-	
-	
-	/**
-	 * Adjust the table column widths for new data. Note: you would probably want to
-	 * do a redraw after calling this function!
-	 *  @param {object} settings dataTables settings object
-	 *  @memberof DataTable#oApi
-	 */
-	function _fnAdjustColumnSizing ( settings )
-	{
-		/* Not interested in doing column width calculation if auto-width is disabled */
-		if ( settings.oFeatures.bAutoWidth !== false )
-		{
-			var columns = settings.aoColumns;
-	
-			_fnCalculateColumnWidths( settings );
-			for ( var i=0 , iLen=columns.length ; i<iLen ; i++ )
-			{
-				columns[i].nTh.style.width = columns[i].sWidth;
-			}
-		}
-	
-		var scroll = settings.oScroll;
-		if ( scroll.sY !== '' || scroll.sX !== '')
-		{
-			_fnScrollDraw( settings );
-		}
-	
-		_fnCallbackFire( settings, null, 'column-sizing', [settings] );
-	}
-	
-	
-	/**
-	 * Covert the index of a visible column to the index in the data array (take account
-	 * of hidden columns)
-	 *  @param {object} oSettings dataTables settings object
-	 *  @param {int} iMatch Visible column index to lookup
-	 *  @returns {int} i the data index
-	 *  @memberof DataTable#oApi
-	 */
-	function _fnVisibleToColumnIndex( oSettings, iMatch )
-	{
-		var aiVis = _fnGetColumns( oSettings, 'bVisible' );
-	
-		return typeof aiVis[iMatch] === 'number' ?
-			aiVis[iMatch] :
-			null;
-	}
-	
-	
-	/**
-	 * Covert the index of an index in the data array and convert it to the visible
-	 *   column index (take account of hidden columns)
-	 *  @param {int} iMatch Column index to lookup
-	 *  @param {object} oSettings dataTables settings object
-	 *  @returns {int} i the data index
-	 *  @memberof DataTable#oApi
-	 */
-	function _fnColumnIndexToVisible( oSettings, iMatch )
-	{
-		var aiVis = _fnGetColumns( oSettings, 'bVisible' );
-		var iPos = $.inArray( iMatch, aiVis );
-	
-		return iPos !== -1 ? iPos : null;
-	}
-	
-	
-	/**
-	 * Get the number of visible columns
-	 *  @param {object} oSettings dataTables settings object
-	 *  @returns {int} i the number of visible columns
-	 *  @memberof DataTable#oApi
-	 */
-	function _fnVisbleColumns( oSettings )
-	{
-		var vis = 0;
-	
-		// No reduce in IE8, use a loop for now
-		$.each( oSettings.aoColumns, function ( i, col ) {
-			if ( col.bVisible && $(col.nTh).css('display') !== 'none' ) {
-				vis++;
-			}
-		} );
-	
-		return vis;
-	}
-	
-	
-	/**
-	 * Get an array of column indexes that match a given property
-	 *  @param {object} oSettings dataTables settings object
-	 *  @param {string} sParam Parameter in aoColumns to look for - typically
-	 *    bVisible or bSearchable
-	 *  @returns {array} Array of indexes with matched properties
-	 *  @memberof DataTable#oApi
-	 */
-	function _fnGetColumns( oSettings, sParam )
-	{
-		var a = [];
-	
-		$.map( oSettings.aoColumns, function(val, i) {
-			if ( val[sParam] ) {
-				a.push( i );
-			}
-		} );
-	
-		return a;
-	}
-	
-	
-	/**
-	 * Calculate the 'type' of a column
-	 *  @param {object} settings dataTables settings object
-	 *  @memberof DataTable#oApi
-	 */
-	function _fnColumnTypes ( settings )
-	{
-		var columns = settings.aoColumns;
-		var data = settings.aoData;
-		var types = DataTable.ext.type.detect;
-		var i, ien, j, jen, k, ken;
-		var col, cell, detectedType, cache;
-	
-		// For each column, spin over the 
-		for ( i=0, ien=columns.length ; i<ien ; i++ ) {
-			col = columns[i];
-			cache = [];
-	
-			if ( ! col.sType && col._sManualType ) {
-				col.sType = col._sManualType;
-			}
-			else if ( ! col.sType ) {
-				for ( j=0, jen=types.length ; j<jen ; j++ ) {
-					for ( k=0, ken=data.length ; k<ken ; k++ ) {
-						// Use a cache array so we only need to get the type data
-						// from the formatter once (when using multiple detectors)
-						if ( cache[k] === undefined ) {
-							cache[k] = _fnGetCellData( settings, k, i, 'type' );
-						}
-	
-						detectedType = types[j]( cache[k], settings );
-	
-						// If null, then this type can't apply to this column, so
-						// rather than testing all cells, break out. There is an
-						// exception for the last type which is `html`. We need to
-						// scan all rows since it is possible to mix string and HTML
-						// types
-						if ( ! detectedType && j !== types.length-1 ) {
-							break;
-						}
-	
-						// Only a single match is needed for html type since it is
-						// bottom of the pile and very similar to string
-						if ( detectedType === 'html' ) {
-							break;
-						}
-					}
-	
-					// Type is valid for all data points in the column - use this
-					// type
-					if ( detectedType ) {
-						col.sType = detectedType;
-						break;
-					}
-				}
-	
-				// Fall back - if no type was detected, always use string
-				if ( ! col.sType ) {
-					col.sType = 'string';
-				}
-			}
-		}
-	}
-	
-	
-	/**
-	 * Take the column definitions and static columns arrays and calculate how
-	 * they relate to column indexes. The callback function will then apply the
-	 * definition found for a column to a suitable configuration object.
-	 *  @param {object} oSettings dataTables settings object
-	 *  @param {array} aoColDefs The aoColumnDefs array that is to be applied
-	 *  @param {array} aoCols The aoColumns array that defines columns individually
-	 *  @param {function} fn Callback function - takes two parameters, the calculated
-	 *    column index and the definition for that column.
-	 *  @memberof DataTable#oApi
-	 */
-	function _fnApplyColumnDefs( oSettings, aoColDefs, aoCols, fn )
-	{
-		var i, iLen, j, jLen, k, kLen, def;
-		var columns = oSettings.aoColumns;
-	
-		// Column definitions with aTargets
-		if ( aoColDefs )
-		{
-			/* Loop over the definitions array - loop in reverse so first instance has priority */
-			for ( i=aoColDefs.length-1 ; i>=0 ; i-- )
-			{
-				def = aoColDefs[i];
-	
-				/* Each definition can target multiple columns, as it is an array */
-				var aTargets = def.targets !== undefined ?
-					def.targets :
-					def.aTargets;
-	
-				if ( ! $.isArray( aTargets ) )
-				{
-					aTargets = [ aTargets ];
-				}
-	
-				for ( j=0, jLen=aTargets.length ; j<jLen ; j++ )
-				{
-					if ( typeof aTargets[j] === 'number' && aTargets[j] >= 0 )
-					{
-						/* Add columns that we don't yet know about */
-						while( columns.length <= aTargets[j] )
-						{
-							_fnAddColumn( oSettings );
-						}
-	
-						/* Integer, basic index */
-						fn( aTargets[j], def );
-					}
-					else if ( typeof aTargets[j] === 'number' && aTargets[j] < 0 )
-					{
-						/* Negative integer, right to left column counting */
-						fn( columns.length+aTargets[j], def );
-					}
-					else if ( typeof aTargets[j] === 'string' )
-					{
-						/* Class name matching on TH element */
-						for ( k=0, kLen=columns.length ; k<kLen ; k++ )
-						{
-							if ( aTargets[j] == "_all" ||
-							     $(columns[k].nTh).hasClass( aTargets[j] ) )
-							{
-								fn( k, def );
-							}
-						}
-					}
-				}
-			}
-		}
-	
-		// Statically defined columns array
-		if ( aoCols )
-		{
-			for ( i=0, iLen=aoCols.length ; i<iLen ; i++ )
-			{
-				fn( i, aoCols[i] );
-			}
-		}
-	}
-	
-	/**
-	 * Add a data array to the table, creating DOM node etc. This is the parallel to
-	 * _fnGatherData, but for adding rows from a Javascript source, rather than a
-	 * DOM source.
-	 *  @param {object} oSettings dataTables settings object
-	 *  @param {array} aData data array to be added
-	 *  @param {node} [nTr] TR element to add to the table - optional. If not given,
-	 *    DataTables will create a row automatically
-	 *  @param {array} [anTds] Array of TD|TH elements for the row - must be given
-	 *    if nTr is.
-	 *  @returns {int} >=0 if successful (index of new aoData entry), -1 if failed
-	 *  @memberof DataTable#oApi
-	 */
-	function _fnAddData ( oSettings, aDataIn, nTr, anTds )
-	{
-		/* Create the object for storing information about this new row */
-		var iRow = oSettings.aoData.length;
-		var oData = $.extend( true, {}, DataTable.models.oRow, {
-			src: nTr ? 'dom' : 'data',
-			idx: iRow
-		} );
-	
-		oData._aData = aDataIn;
-		oSettings.aoData.push( oData );
-	
-		/* Create the cells */
-		var nTd, sThisType;
-		var columns = oSettings.aoColumns;
-	
-		// Invalidate the column types as the new data needs to be revalidated
-		for ( var i=0, iLen=columns.length ; i<iLen ; i++ )
-		{
-			columns[i].sType = null;
-		}
-	
-		/* Add to the display array */
-		oSettings.aiDisplayMaster.push( iRow );
-	
-		var id = oSettings.rowIdFn( aDataIn );
-		if ( id !== undefined ) {
-			oSettings.aIds[ id ] = oData;
-		}
-	
-		/* Create the DOM information, or register it if already present */
-		if ( nTr || ! oSettings.oFeatures.bDeferRender )
-		{
-			_fnCreateTr( oSettings, iRow, nTr, anTds );
-		}
-	
-		return iRow;
-	}
-	
-	
-	/**
-	 * Add one or more TR elements to the table. Generally we'd expect to
-	 * use this for reading data from a DOM sourced table, but it could be
-	 * used for an TR element. Note that if a TR is given, it is used (i.e.
-	 * it is not cloned).
-	 *  @param {object} settings dataTables settings object
-	 *  @param {array|node|jQuery} trs The TR element(s) to add to the table
-	 *  @returns {array} Array of indexes for the added rows
-	 *  @memberof DataTable#oApi
-	 */
-	function _fnAddTr( settings, trs )
-	{
-		var row;
-	
-		// Allow an individual node to be passed in
-		if ( ! (trs instanceof $) ) {
-			trs = $(trs);
-		}
-	
-		return trs.map( function (i, el) {
-			row = _fnGetRowElements( settings, el );
-			return _fnAddData( settings, row.data, el, row.cells );
-		} );
-	}
-	
-	
-	/**
-	 * Take a TR element and convert it to an index in aoData
-	 *  @param {object} oSettings dataTables settings object
-	 *  @param {node} n the TR element to find
-	 *  @returns {int} index if the node is found, null if not
-	 *  @memberof DataTable#oApi
-	 */
-	function _fnNodeToDataIndex( oSettings, n )
-	{
-		return (n._DT_RowIndex!==undefined) ? n._DT_RowIndex : null;
-	}
-	
-	
-	/**
-	 * Take a TD element and convert it into a column data index (not the visible index)
-	 *  @param {object} oSettings dataTables settings object
-	 *  @param {int} iRow The row number the TD/TH can be found in
-	 *  @param {node} n The TD/TH element to find
-	 *  @returns {int} index if the node is found, -1 if not
-	 *  @memberof DataTable#oApi
-	 */
-	function _fnNodeToColumnIndex( oSettings, iRow, n )
-	{
-		return $.inArray( n, oSettings.aoData[ iRow ].anCells );
-	}
-	
-	
-	/**
-	 * Get the data for a given cell from the internal cache, taking into account data mapping
-	 *  @param {object} settings dataTables settings object
-	 *  @param {int} rowIdx aoData row id
-	 *  @param {int} colIdx Column index
-	 *  @param {string} type data get type ('display', 'type' 'filter' 'sort')
-	 *  @returns {*} Cell data
-	 *  @memberof DataTable#oApi
-	 */
-	function _fnGetCellData( settings, rowIdx, colIdx, type )
-	{
-		var draw           = settings.iDraw;
-		var col            = settings.aoColumns[colIdx];
-		var rowData        = settings.aoData[rowIdx]._aData;
-		var defaultContent = col.sDefaultContent;
-		var cellData       = col.fnGetData( rowData, type, {
-			settings: settings,
-			row:      rowIdx,
-			col:      colIdx
-		} );
-	
-		if ( cellData === undefined ) {
-			if ( settings.iDrawError != draw && defaultContent === null ) {
-				_fnLog( settings, 0, "Requested unknown parameter "+
-					(typeof col.mData=='function' ? '{function}' : "'"+col.mData+"'")+
-					" for row "+rowIdx+", column "+colIdx, 4 );
-				settings.iDrawError = draw;
-			}
-			return defaultContent;
-		}
-	
-		// When the data source is null and a specific data type is requested (i.e.
-		// not the original data), we can use default column data
-		if ( (cellData === rowData || cellData === null) && defaultContent !== null && type !== undefined ) {
-			cellData = defaultContent;
-		}
-		else if ( typeof cellData === 'function' ) {
-			// If the data source is a function, then we run it and use the return,
-			// executing in the scope of the data object (for instances)
-			return cellData.call( rowData );
-		}
-	
-		if ( cellData === null && type == 'display' ) {
-			return '';
-		}
-		return cellData;
-	}
-	
-	
-	/**
-	 * Set the value for a specific cell, into the internal data cache
-	 *  @param {object} settings dataTables settings object
-	 *  @param {int} rowIdx aoData row id
-	 *  @param {int} colIdx Column index
-	 *  @param {*} val Value to set
-	 *  @memberof DataTable#oApi
-	 */
-	function _fnSetCellData( settings, rowIdx, colIdx, val )
-	{
-		var col     = settings.aoColumns[colIdx];
-		var rowData = settings.aoData[rowIdx]._aData;
-	
-		col.fnSetData( rowData, val, {
-			settings: settings,
-			row:      rowIdx,
-			col:      colIdx
-		}  );
-	}
-	
-	
-	// Private variable that is used to match action syntax in the data property object
-	var __reArray = /\[.*?\]$/;
-	var __reFn = /\(\)$/;
-	
-	/**
-	 * Split string on periods, taking into account escaped periods
-	 * @param  {string} str String to split
-	 * @return {array} Split string
-	 */
-	function _fnSplitObjNotation( str )
-	{
-		return $.map( str.match(/(\\.|[^\.])+/g) || [''], function ( s ) {
-			return s.replace(/\\\./g, '.');
-		} );
-	}
-	
-	
-	/**
-	 * Return a function that can be used to get data from a source object, taking
-	 * into account the ability to use nested objects as a source
-	 *  @param {string|int|function} mSource The data source for the object
-	 *  @returns {function} Data get function
-	 *  @memberof DataTable#oApi
-	 */
-	function _fnGetObjectDataFn( mSource )
-	{
-		if ( $.isPlainObject( mSource ) )
-		{
-			/* Build an object of get functions, and wrap them in a single call */
-			var o = {};
-			$.each( mSource, function (key, val) {
-				if ( val ) {
-					o[key] = _fnGetObjectDataFn( val );
-				}
-			} );
-	
-			return function (data, type, row, meta) {
-				var t = o[type] || o._;
-				return t !== undefined ?
-					t(data, type, row, meta) :
-					data;
-			};
-		}
-		else if ( mSource === null )
-		{
-			/* Give an empty string for rendering / sorting etc */
-			return function (data) { // type, row and meta also passed, but not used
-				return data;
-			};
-		}
-		else if ( typeof mSource === 'function' )
-		{
-			return function (data, type, row, meta) {
-				return mSource( data, type, row, meta );
-			};
-		}
-		else if ( typeof mSource === 'string' && (mSource.indexOf('.') !== -1 ||
-			      mSource.indexOf('[') !== -1 || mSource.indexOf('(') !== -1) )
-		{
-			/* If there is a . in the source string then the data source is in a
-			 * nested object so we loop over the data for each level to get the next
-			 * level down. On each loop we test for undefined, and if found immediately
-			 * return. This allows entire objects to be missing and sDefaultContent to
-			 * be used if defined, rather than throwing an error
-			 */
-			var fetchData = function (data, type, src) {
-				var arrayNotation, funcNotation, out, innerSrc;
-	
-				if ( src !== "" )
-				{
-					var a = _fnSplitObjNotation( src );
-	
-					for ( var i=0, iLen=a.length ; i<iLen ; i++ )
-					{
-						// Check if we are dealing with special notation
-						arrayNotation = a[i].match(__reArray);
-						funcNotation = a[i].match(__reFn);
-	
-						if ( arrayNotation )
-						{
-							// Array notation
-							a[i] = a[i].replace(__reArray, '');
-	
-							// Condition allows simply [] to be passed in
-							if ( a[i] !== "" ) {
-								data = data[ a[i] ];
-							}
-							out = [];
-	
-							// Get the remainder of the nested object to get
-							a.splice( 0, i+1 );
-							innerSrc = a.join('.');
-	
-							// Traverse each entry in the array getting the properties requested
-							if ( $.isArray( data ) ) {
-								for ( var j=0, jLen=data.length ; j<jLen ; j++ ) {
-									out.push( fetchData( data[j], type, innerSrc ) );
-								}
-							}
-	
-							// If a string is given in between the array notation indicators, that
-							// is used to join the strings together, otherwise an array is returned
-							var join = arrayNotation[0].substring(1, arrayNotation[0].length-1);
-							data = (join==="") ? out : out.join(join);
-	
-							// The inner call to fetchData has already traversed through the remainder
-							// of the source requested, so we exit from the loop
-							break;
-						}
-						else if ( funcNotation )
-						{
-							// Function call
-							a[i] = a[i].replace(__reFn, '');
-							data = data[ a[i] ]();
-							continue;
-						}
-	
-						if ( data === null || data[ a[i] ] === undefined )
-						{
-							return undefined;
-						}
-						data = data[ a[i] ];
-					}
-				}
-	
-				return data;
-			};
-	
-			return function (data, type) { // row and meta also passed, but not used
-				return fetchData( data, type, mSource );
-			};
-		}
-		else
-		{
-			/* Array or flat object mapping */
-			return function (data, type) { // row and meta also passed, but not used
-				return data[mSource];
-			};
-		}
-	}
-	
-	
-	/**
-	 * Return a function that can be used to set data from a source object, taking
-	 * into account the ability to use nested objects as a source
-	 *  @param {string|int|function} mSource The data source for the object
-	 *  @returns {function} Data set function
-	 *  @memberof DataTable#oApi
-	 */
-	function _fnSetObjectDataFn( mSource )
-	{
-		if ( $.isPlainObject( mSource ) )
-		{
-			/* Unlike get, only the underscore (global) option is used for for
-			 * setting data since we don't know the type here. This is why an object
-			 * option is not documented for `mData` (which is read/write), but it is
-			 * for `mRender` which is read only.
-			 */
-			return _fnSetObjectDataFn( mSource._ );
-		}
-		else if ( mSource === null )
-		{
-			/* Nothing to do when the data source is null */
-			return function () {};
-		}
-		else if ( typeof mSource === 'function' )
-		{
-			return function (data, val, meta) {
-				mSource( data, 'set', val, meta );
-			};
-		}
-		else if ( typeof mSource === 'string' && (mSource.indexOf('.') !== -1 ||
-			      mSource.indexOf('[') !== -1 || mSource.indexOf('(') !== -1) )
-		{
-			/* Like the get, we need to get data from a nested object */
-			var setData = function (data, val, src) {
-				var a = _fnSplitObjNotation( src ), b;
-				var aLast = a[a.length-1];
-				var arrayNotation, funcNotation, o, innerSrc;
-	
-				for ( var i=0, iLen=a.length-1 ; i<iLen ; i++ )
-				{
-					// Check if we are dealing with an array notation request
-					arrayNotation = a[i].match(__reArray);
-					funcNotation = a[i].match(__reFn);
-	
-					if ( arrayNotation )
-					{
-						a[i] = a[i].replace(__reArray, '');
-						data[ a[i] ] = [];
-	
-						// Get the remainder of the nested object to set so we can recurse
-						b = a.slice();
-						b.splice( 0, i+1 );
-						innerSrc = b.join('.');
-	
-						// Traverse each entry in the array setting the properties requested
-						if ( $.isArray( val ) )
-						{
-							for ( var j=0, jLen=val.length ; j<jLen ; j++ )
-							{
-								o = {};
-								setData( o, val[j], innerSrc );
-								data[ a[i] ].push( o );
-							}
-						}
-						else
-						{
-							// We've been asked to save data to an array, but it
-							// isn't array data to be saved. Best that can be done
-							// is to just save the value.
-							data[ a[i] ] = val;
-						}
-	
-						// The inner call to setData has already traversed through the remainder
-						// of the source and has set the data, thus we can exit here
-						return;
-					}
-					else if ( funcNotation )
-					{
-						// Function call
-						a[i] = a[i].replace(__reFn, '');
-						data = data[ a[i] ]( val );
-					}
-	
-					// If the nested object doesn't currently exist - since we are
-					// trying to set the value - create it
-					if ( data[ a[i] ] === null || data[ a[i] ] === undefined )
-					{
-						data[ a[i] ] = {};
-					}
-					data = data[ a[i] ];
-				}
-	
-				// Last item in the input - i.e, the actual set
-				if ( aLast.match(__reFn ) )
-				{
-					// Function call
-					data = data[ aLast.replace(__reFn, '') ]( val );
-				}
-				else
-				{
-					// If array notation is used, we just want to strip it and use the property name
-					// and assign the value. If it isn't used, then we get the result we want anyway
-					data[ aLast.replace(__reArray, '') ] = val;
-				}
-			};
-	
-			return function (data, val) { // meta is also passed in, but not used
-				return setData( data, val, mSource );
-			};
-		}
-		else
-		{
-			/* Array or flat object mapping */
-			return function (data, val) { // meta is also passed in, but not used
-				data[mSource] = val;
-			};
-		}
-	}
-	
-	
-	/**
-	 * Return an array with the full table data
-	 *  @param {object} oSettings dataTables settings object
-	 *  @returns array {array} aData Master data array
-	 *  @memberof DataTable#oApi
-	 */
-	function _fnGetDataMaster ( settings )
-	{
-		return _pluck( settings.aoData, '_aData' );
-	}
-	
-	
-	/**
-	 * Nuke the table
-	 *  @param {object} oSettings dataTables settings object
-	 *  @memberof DataTable#oApi
-	 */
-	function _fnClearTable( settings )
-	{
-		settings.aoData.length = 0;
-		settings.aiDisplayMaster.length = 0;
-		settings.aiDisplay.length = 0;
-		settings.aIds = {};
-	}
-	
-	
-	 /**
-	 * Take an array of integers (index array) and remove a target integer (value - not
-	 * the key!)
-	 *  @param {array} a Index array to target
-	 *  @param {int} iTarget value to find
-	 *  @memberof DataTable#oApi
-	 */
-	function _fnDeleteIndex( a, iTarget, splice )
-	{
-		var iTargetIndex = -1;
-	
-		for ( var i=0, iLen=a.length ; i<iLen ; i++ )
-		{
-			if ( a[i] == iTarget )
-			{
-				iTargetIndex = i;
-			}
-			else if ( a[i] > iTarget )
-			{
-				a[i]--;
-			}
-		}
-	
-		if ( iTargetIndex != -1 && splice === undefined )
-		{
-			a.splice( iTargetIndex, 1 );
-		}
-	}
-	
-	
-	/**
-	 * Mark cached data as invalid such that a re-read of the data will occur when
-	 * the cached data is next requested. Also update from the data source object.
-	 *
-	 * @param {object} settings DataTables settings object
-	 * @param {int}    rowIdx   Row index to invalidate
-	 * @param {string} [src]    Source to invalidate from: undefined, 'auto', 'dom'
-	 *     or 'data'
-	 * @param {int}    [colIdx] Column index to invalidate. If undefined the whole
-	 *     row will be invalidated
-	 * @memberof DataTable#oApi
-	 *
-	 * @todo For the modularisation of v1.11 this will need to become a callback, so
-	 *   the sort and filter methods can subscribe to it. That will required
-	 *   initialisation options for sorting, which is why it is not already baked in
-	 */
-	function _fnInvalidate( settings, rowIdx, src, colIdx )
-	{
-		var row = settings.aoData[ rowIdx ];
-		var i, ien;
-		var cellWrite = function ( cell, col ) {
-			// This is very frustrating, but in IE if you just write directly
-			// to innerHTML, and elements that are overwritten are GC'ed,
-			// even if there is a reference to them elsewhere
-			while ( cell.childNodes.length ) {
-				cell.removeChild( cell.firstChild );
-			}
-	
-			cell.innerHTML = _fnGetCellData( settings, rowIdx, col, 'display' );
-		};
-	
-		// Are we reading last data from DOM or the data object?
-		if ( src === 'dom' || ((! src || src === 'auto') && row.src === 'dom') ) {
-			// Read the data from the DOM
-			row._aData = _fnGetRowElements(
-					settings, row, colIdx, colIdx === undefined ? undefined : row._aData
-				)
-				.data;
-		}
-		else {
-			// Reading from data object, update the DOM
-			var cells = row.anCells;
-	
-			if ( cells ) {
-				if ( colIdx !== undefined ) {
-					cellWrite( cells[colIdx], colIdx );
-				}
-				else {
-					for ( i=0, ien=cells.length ; i<ien ; i++ ) {
-						cellWrite( cells[i], i );
-					}
-				}
-			}
-		}
-	
-		// For both row and cell invalidation, the cached data for sorting and
-		// filtering is nulled out
-		row._aSortData = null;
-		row._aFilterData = null;
-	
-		// Invalidate the type for a specific column (if given) or all columns since
-		// the data might have changed
-		var cols = settings.aoColumns;
-		if ( colIdx !== undefined ) {
-			cols[ colIdx ].sType = null;
-		}
-		else {
-			for ( i=0, ien=cols.length ; i<ien ; i++ ) {
-				cols[i].sType = null;
-			}
-	
-			// Update DataTables special `DT_*` attributes for the row
-			_fnRowAttributes( settings, row );
-		}
-	}
-	
-	
-	/**
-	 * Build a data source object from an HTML row, reading the contents of the
-	 * cells that are in the row.
-	 *
-	 * @param {object} settings DataTables settings object
-	 * @param {node|object} TR element from which to read data or existing row
-	 *   object from which to re-read the data from the cells
-	 * @param {int} [colIdx] Optional column index
-	 * @param {array|object} [d] Data source object. If `colIdx` is given then this
-	 *   parameter should also be given and will be used to write the data into.
-	 *   Only the column in question will be written
-	 * @returns {object} Object with two parameters: `data` the data read, in
-	 *   document order, and `cells` and array of nodes (they can be useful to the
-	 *   caller, so rather than needing a second traversal to get them, just return
-	 *   them from here).
-	 * @memberof DataTable#oApi
-	 */
-	function _fnGetRowElements( settings, row, colIdx, d )
-	{
-		var
-			tds = [],
-			td = row.firstChild,
-			name, col, o, i=0, contents,
-			columns = settings.aoColumns,
-			objectRead = settings._rowReadObject;
-	
-		// Allow the data object to be passed in, or construct
-		d = d !== undefined ?
-			d :
-			objectRead ?
-				{} :
-				[];
-	
-		var attr = function ( str, td  ) {
-			if ( typeof str === 'string' ) {
-				var idx = str.indexOf('@');
-	
-				if ( idx !== -1 ) {
-					var attr = str.substring( idx+1 );
-					var setter = _fnSetObjectDataFn( str );
-					setter( d, td.getAttribute( attr ) );
-				}
-			}
-		};
-	
-		// Read data from a cell and store into the data object
-		var cellProcess = function ( cell ) {
-			if ( colIdx === undefined || colIdx === i ) {
-				col = columns[i];
-				contents = $.trim(cell.innerHTML);
-	
-				if ( col && col._bAttrSrc ) {
-					var setter = _fnSetObjectDataFn( col.mData._ );
-					setter( d, contents );
-	
-					attr( col.mData.sort, cell );
-					attr( col.mData.type, cell );
-					attr( col.mData.filter, cell );
-				}
-				else {
-					// Depending on the `data` option for the columns the data can
-					// be read to either an object or an array.
-					if ( objectRead ) {
-						if ( ! col._setter ) {
-							// Cache the setter function
-							col._setter = _fnSetObjectDataFn( col.mData );
-						}
-						col._setter( d, contents );
-					}
-					else {
-						d[i] = contents;
-					}
-				}
-			}
-	
-			i++;
-		};
-	
-		if ( td ) {
-			// `tr` element was passed in
-			while ( td ) {
-				name = td.nodeName.toUpperCase();
-	
-				if ( name == "TD" || name == "TH" ) {
-					cellProcess( td );
-					tds.push( td );
-				}
-	
-				td = td.nextSibling;
-			}
-		}
-		else {
-			// Existing row object passed in
-			tds = row.anCells;
-	
-			for ( var j=0, jen=tds.length ; j<jen ; j++ ) {
-				cellProcess( tds[j] );
-			}
-		}
-	
-		// Read the ID from the DOM if present
-		var rowNode = row.firstChild ? row : row.nTr;
-	
-		if ( rowNode ) {
-			var id = rowNode.getAttribute( 'id' );
-	
-			if ( id ) {
-				_fnSetObjectDataFn( settings.rowId )( d, id );
-			}
-		}
-	
-		return {
-			data: d,
-			cells: tds
-		};
-	}
-	/**
-	 * Create a new TR element (and it's TD children) for a row
-	 *  @param {object} oSettings dataTables settings object
-	 *  @param {int} iRow Row to consider
-	 *  @param {node} [nTrIn] TR element to add to the table - optional. If not given,
-	 *    DataTables will create a row automatically
-	 *  @param {array} [anTds] Array of TD|TH elements for the row - must be given
-	 *    if nTr is.
-	 *  @memberof DataTable#oApi
-	 */
-	function _fnCreateTr ( oSettings, iRow, nTrIn, anTds )
-	{
-		var
-			row = oSettings.aoData[iRow],
-			rowData = row._aData,
-			cells = [],
-			nTr, nTd, oCol,
-			i, iLen, create;
-	
-		if ( row.nTr === null )
-		{
-			nTr = nTrIn || document.createElement('tr');
-	
-			row.nTr = nTr;
-			row.anCells = cells;
-	
-			/* Use a private property on the node to allow reserve mapping from the node
-			 * to the aoData array for fast look up
-			 */
-			nTr._DT_RowIndex = iRow;
-	
-			/* Special parameters can be given by the data source to be used on the row */
-			_fnRowAttributes( oSettings, row );
-	
-			/* Process each column */
-			for ( i=0, iLen=oSettings.aoColumns.length ; i<iLen ; i++ )
-			{
-				oCol = oSettings.aoColumns[i];
-				create = nTrIn ? false : true;
-	
-				nTd = create ? document.createElement( oCol.sCellType ) : anTds[i];
-				nTd._DT_CellIndex = {
-					row: iRow,
-					column: i
-				};
-				
-				cells.push( nTd );
-	
-				// Need to create the HTML if new, or if a rendering function is defined
-				if ( create || ((!nTrIn || oCol.mRender || oCol.mData !== i) &&
-					 (!$.isPlainObject(oCol.mData) || oCol.mData._ !== i+'.display')
-				)) {
-					nTd.innerHTML = _fnGetCellData( oSettings, iRow, i, 'display' );
-				}
-	
-				/* Add user defined class */
-				if ( oCol.sClass )
-				{
-					nTd.className += ' '+oCol.sClass;
-				}
-	
-				// Visibility - add or remove as required
-				if ( oCol.bVisible && ! nTrIn )
-				{
-					nTr.appendChild( nTd );
-				}
-				else if ( ! oCol.bVisible && nTrIn )
-				{
-					nTd.parentNode.removeChild( nTd );
-				}
-	
-				if ( oCol.fnCreatedCell )
-				{
-					oCol.fnCreatedCell.call( oSettings.oInstance,
-						nTd, _fnGetCellData( oSettings, iRow, i ), rowData, iRow, i
-					);
-				}
-			}
-	
-			_fnCallbackFire( oSettings, 'aoRowCreatedCallback', null, [nTr, rowData, iRow, cells] );
-		}
-	
-		// Remove once webkit bug 131819 and Chromium bug 365619 have been resolved
-		// and deployed
-		row.nTr.setAttribute( 'role', 'row' );
-	}
-	
-	
-	/**
-	 * Add attributes to a row based on the special `DT_*` parameters in a data
-	 * source object.
-	 *  @param {object} settings DataTables settings object
-	 *  @param {object} DataTables row object for the row to be modified
-	 *  @memberof DataTable#oApi
-	 */
-	function _fnRowAttributes( settings, row )
-	{
-		var tr = row.nTr;
-		var data = row._aData;
-	
-		if ( tr ) {
-			var id = settings.rowIdFn( data );
-	
-			if ( id ) {
-				tr.id = id;
-			}
-	
-			if ( data.DT_RowClass ) {
-				// Remove any classes added by DT_RowClass before
-				var a = data.DT_RowClass.split(' ');
-				row.__rowc = row.__rowc ?
-					_unique( row.__rowc.concat( a ) ) :
-					a;
-	
-				$(tr)
-					.removeClass( row.__rowc.join(' ') )
-					.addClass( data.DT_RowClass );
-			}
-	
-			if ( data.DT_RowAttr ) {
-				$(tr).attr( data.DT_RowAttr );
-			}
-	
-			if ( data.DT_RowData ) {
-				$(tr).data( data.DT_RowData );
-			}
-		}
-	}
-	
-	
-	/**
-	 * Create the HTML header for the table
-	 *  @param {object} oSettings dataTables settings object
-	 *  @memberof DataTable#oApi
-	 */
-	function _fnBuildHead( oSettings )
-	{
-		var i, ien, cell, row, column;
-		var thead = oSettings.nTHead;
-		var tfoot = oSettings.nTFoot;
-		var createHeader = $('th, td', thead).length === 0;
-		var classes = oSettings.oClasses;
-		var columns = oSettings.aoColumns;
-	
-		if ( createHeader ) {
-			row = $('<tr/>').appendTo( thead );
-		}
-	
-		for ( i=0, ien=columns.length ; i<ien ; i++ ) {
-			column = columns[i];
-			cell = $( column.nTh ).addClass( column.sClass );
-	
-			if ( createHeader ) {
-				cell.appendTo( row );
-			}
-	
-			// 1.11 move into sorting
-			if ( oSettings.oFeatures.bSort ) {
-				cell.addClass( column.sSortingClass );
-	
-				if ( column.bSortable !== false ) {
-					cell
-						.attr( 'tabindex', oSettings.iTabIndex )
-						.attr( 'aria-controls', oSettings.sTableId );
-	
-					_fnSortAttachListener( oSettings, column.nTh, i );
-				}
-			}
-	
-			if ( column.sTitle != cell[0].innerHTML ) {
-				cell.html( column.sTitle );
-			}
-	
-			_fnRenderer( oSettings, 'header' )(
-				oSettings, cell, column, classes
-			);
-		}
-	
-		if ( createHeader ) {
-			_fnDetectHeader( oSettings.aoHeader, thead );
-		}
-		
-		/* ARIA role for the rows */
-	 	$(thead).find('>tr').attr('role', 'row');
-	
-		/* Deal with the footer - add classes if required */
-		$(thead).find('>tr>th, >tr>td').addClass( classes.sHeaderTH );
-		$(tfoot).find('>tr>th, >tr>td').addClass( classes.sFooterTH );
-	
-		// Cache the footer cells. Note that we only take the cells from the first
-		// row in the footer. If there is more than one row the user wants to
-		// interact with, they need to use the table().foot() method. Note also this
-		// allows cells to be used for multiple columns using colspan
-		if ( tfoot !== null ) {
-			var cells = oSettings.aoFooter[0];
-	
-			for ( i=0, ien=cells.length ; i<ien ; i++ ) {
-				column = columns[i];
-				column.nTf = cells[i].cell;
-	
-				if ( column.sClass ) {
-					$(column.nTf).addClass( column.sClass );
-				}
-			}
-		}
-	}
-	
-	
-	/**
-	 * Draw the header (or footer) element based on the column visibility states. The
-	 * methodology here is to use the layout array from _fnDetectHeader, modified for
-	 * the instantaneous column visibility, to construct the new layout. The grid is
-	 * traversed over cell at a time in a rows x columns grid fashion, although each
-	 * cell insert can cover multiple elements in the grid - which is tracks using the
-	 * aApplied array. Cell inserts in the grid will only occur where there isn't
-	 * already a cell in that position.
-	 *  @param {object} oSettings dataTables settings object
-	 *  @param array {objects} aoSource Layout array from _fnDetectHeader
-	 *  @param {boolean} [bIncludeHidden=false] If true then include the hidden columns in the calc,
-	 *  @memberof DataTable#oApi
-	 */
-	function _fnDrawHead( oSettings, aoSource, bIncludeHidden )
-	{
-		var i, iLen, j, jLen, k, kLen, n, nLocalTr;
-		var aoLocal = [];
-		var aApplied = [];
-		var iColumns = oSettings.aoColumns.length;
-		var iRowspan, iColspan;
-	
-		if ( ! aoSource )
-		{
-			return;
-		}
-	
-		if (  bIncludeHidden === undefined )
-		{
-			bIncludeHidden = false;
-		}
-	
-		/* Make a copy of the master layout array, but without the visible columns in it */
-		for ( i=0, iLen=aoSource.length ; i<iLen ; i++ )
-		{
-			aoLocal[i] = aoSource[i].slice();
-			aoLocal[i].nTr = aoSource[i].nTr;
-	
-			/* Remove any columns which are currently hidden */
-			for ( j=iColumns-1 ; j>=0 ; j-- )
-			{
-				if ( !oSettings.aoColumns[j].bVisible && !bIncludeHidden )
-				{
-					aoLocal[i].splice( j, 1 );
-				}
-			}
-	
-			/* Prep the applied array - it needs an element for each row */
-			aApplied.push( [] );
-		}
-	
-		for ( i=0, iLen=aoLocal.length ; i<iLen ; i++ )
-		{
-			nLocalTr = aoLocal[i].nTr;
-	
-			/* All cells are going to be replaced, so empty out the row */
-			if ( nLocalTr )
-			{
-				while( (n = nLocalTr.firstChild) )
-				{
-					nLocalTr.removeChild( n );
-				}
-			}
-	
-			for ( j=0, jLen=aoLocal[i].length ; j<jLen ; j++ )
-			{
-				iRowspan = 1;
-				iColspan = 1;
-	
-				/* Check to see if there is already a cell (row/colspan) covering our target
-				 * insert point. If there is, then there is nothing to do.
-				 */
-				if ( aApplied[i][j] === undefined )
-				{
-					nLocalTr.appendChild( aoLocal[i][j].cell );
-					aApplied[i][j] = 1;
-	
-					/* Expand the cell to cover as many rows as needed */
-					while ( aoLocal[i+iRowspan] !== undefined &&
-					        aoLocal[i][j].cell == aoLocal[i+iRowspan][j].cell )
-					{
-						aApplied[i+iRowspan][j] = 1;
-						iRowspan++;
-					}
-	
-					/* Expand the cell to cover as many columns as needed */
-					while ( aoLocal[i][j+iColspan] !== undefined &&
-					        aoLocal[i][j].cell == aoLocal[i][j+iColspan].cell )
-					{
-						/* Must update the applied array over the rows for the columns */
-						for ( k=0 ; k<iRowspan ; k++ )
-						{
-							aApplied[i+k][j+iColspan] = 1;
-						}
-						iColspan++;
-					}
-	
-					/* Do the actual expansion in the DOM */
-					$(aoLocal[i][j].cell)
-						.attr('rowspan', iRowspan)
-						.attr('colspan', iColspan);
-				}
-			}
-		}
-	}
-	
-	
-	/**
-	 * Insert the required TR nodes into the table for display
-	 *  @param {object} oSettings dataTables settings object
-	 *  @memberof DataTable#oApi
-	 */
-	function _fnDraw( oSettings )
-	{
-		/* Provide a pre-callback function which can be used to cancel the draw is false is returned */
-		var aPreDraw = _fnCallbackFire( oSettings, 'aoPreDrawCallback', 'preDraw', [oSettings] );
-		if ( $.inArray( false, aPreDraw ) !== -1 )
-		{
-			_fnProcessingDisplay( oSettings, false );
-			return;
-		}
-	
-		var i, iLen, n;
-		var anRows = [];
-		var iRowCount = 0;
-		var asStripeClasses = oSettings.asStripeClasses;
-		var iStripes = asStripeClasses.length;
-		var iOpenRows = oSettings.aoOpenRows.length;
-		var oLang = oSettings.oLanguage;
-		var iInitDisplayStart = oSettings.iInitDisplayStart;
-		var bServerSide = _fnDataSource( oSettings ) == 'ssp';
-		var aiDisplay = oSettings.aiDisplay;
-	
-		oSettings.bDrawing = true;
-	
-		/* Check and see if we have an initial draw position from state saving */
-		if ( iInitDisplayStart !== undefined && iInitDisplayStart !== -1 )
-		{
-			oSettings._iDisplayStart = bServerSide ?
-				iInitDisplayStart :
-				iInitDisplayStart >= oSettings.fnRecordsDisplay() ?
-					0 :
-					iInitDisplayStart;
-	
-			oSettings.iInitDisplayStart = -1;
-		}
-	
-		var iDisplayStart = oSettings._iDisplayStart;
-		var iDisplayEnd = oSettings.fnDisplayEnd();
-	
-		/* Server-side processing draw intercept */
-		if ( oSettings.bDeferLoading )
-		{
-			oSettings.bDeferLoading = false;
-			oSettings.iDraw++;
-			_fnProcessingDisplay( oSettings, false );
-		}
-		else if ( !bServerSide )
-		{
-			oSettings.iDraw++;
-		}
-		else if ( !oSettings.bDestroying && !_fnAjaxUpdate( oSettings ) )
-		{
-			return;
-		}
-	
-		if ( aiDisplay.length !== 0 )
-		{
-			var iStart = bServerSide ? 0 : iDisplayStart;
-			var iEnd = bServerSide ? oSettings.aoData.length : iDisplayEnd;
-	
-			for ( var j=iStart ; j<iEnd ; j++ )
-			{
-				var iDataIndex = aiDisplay[j];
-				var aoData = oSettings.aoData[ iDataIndex ];
-				if ( aoData.nTr === null )
-				{
-					_fnCreateTr( oSettings, iDataIndex );
-				}
-	
-				var nRow = aoData.nTr;
-	
-				/* Remove the old striping classes and then add the new one */
-				if ( iStripes !== 0 )
-				{
-					var sStripe = asStripeClasses[ iRowCount % iStripes ];
-					if ( aoData._sRowStripe != sStripe )
-					{
-						$(nRow).removeClass( aoData._sRowStripe ).addClass( sStripe );
-						aoData._sRowStripe = sStripe;
-					}
-				}
-	
-				// Row callback functions - might want to manipulate the row
-				// iRowCount and j are not currently documented. Are they at all
-				// useful?
-				_fnCallbackFire( oSettings, 'aoRowCallback', null,
-					[nRow, aoData._aData, iRowCount, j, iDataIndex] );
-	
-				anRows.push( nRow );
-				iRowCount++;
-			}
-		}
-		else
-		{
-			/* Table is empty - create a row with an empty message in it */
-			var sZero = oLang.sZeroRecords;
-			if ( oSettings.iDraw == 1 &&  _fnDataSource( oSettings ) == 'ajax' )
-			{
-				sZero = oLang.sLoadingRecords;
-			}
-			else if ( oLang.sEmptyTable && oSettings.fnRecordsTotal() === 0 )
-			{
-				sZero = oLang.sEmptyTable;
-			}
-	
-			anRows[ 0 ] = $( '<tr/>', { 'class': iStripes ? asStripeClasses[0] : '' } )
-				.append( $('<td />', {
-					'valign':  'top',
-					'colSpan': _fnVisbleColumns( oSettings ),
-					'class':   oSettings.oClasses.sRowEmpty
-				} ).html( sZero ) )[0];
-		}
-	
-		/* Header and footer callbacks */
-		_fnCallbackFire( oSettings, 'aoHeaderCallback', 'header', [ $(oSettings.nTHead).children('tr')[0],
-			_fnGetDataMaster( oSettings ), iDisplayStart, iDisplayEnd, aiDisplay ] );
-	
-		_fnCallbackFire( oSettings, 'aoFooterCallback', 'footer', [ $(oSettings.nTFoot).children('tr')[0],
-			_fnGetDataMaster( oSettings ), iDisplayStart, iDisplayEnd, aiDisplay ] );
-	
-		var body = $(oSettings.nTBody);
-	
-		body.children().detach();
-		body.append( $(anRows) );
-	
-		/* Call all required callback functions for the end of a draw */
-		_fnCallbackFire( oSettings, 'aoDrawCallback', 'draw', [oSettings] );
-	
-		/* Draw is complete, sorting and filtering must be as well */
-		oSettings.bSorted = false;
-		oSettings.bFiltered = false;
-		oSettings.bDrawing = false;
-	}
-	
-	
-	/**
-	 * Redraw the table - taking account of the various features which are enabled
-	 *  @param {object} oSettings dataTables settings object
-	 *  @param {boolean} [holdPosition] Keep the current paging position. By default
-	 *    the paging is reset to the first page
-	 *  @memberof DataTable#oApi
-	 */
-	function _fnReDraw( settings, holdPosition )
-	{
-		var
-			features = settings.oFeatures,
-			sort     = features.bSort,
-			filter   = features.bFilter;
-	
-		if ( sort ) {
-			_fnSort( settings );
-		}
-	
-		if ( filter ) {
-			_fnFilterComplete( settings, settings.oPreviousSearch );
-		}
-		else {
-			// No filtering, so we want to just use the display master
-			settings.aiDisplay = settings.aiDisplayMaster.slice();
-		}
-	
-		if ( holdPosition !== true ) {
-			settings._iDisplayStart = 0;
-		}
-	
-		// Let any modules know about the draw hold position state (used by
-		// scrolling internally)
-		settings._drawHold = holdPosition;
-	
-		_fnDraw( settings );
-	
-		settings._drawHold = false;
-	}
-	
-	
-	/**
-	 * Add the options to the page HTML for the table
-	 *  @param {object} oSettings dataTables settings object
-	 *  @memberof DataTable#oApi
-	 */
-	function _fnAddOptionsHtml ( oSettings )
-	{
-		var classes = oSettings.oClasses;
-		var table = $(oSettings.nTable);
-		var holding = $('<div/>').insertBefore( table ); // Holding element for speed
-		var features = oSettings.oFeatures;
-	
-		// All DataTables are wrapped in a div
-		var insert = $('<div/>', {
-			id:      oSettings.sTableId+'_wrapper',
-			'class': classes.sWrapper + (oSettings.nTFoot ? '' : ' '+classes.sNoFooter)
-		} );
-	
-		oSettings.nHolding = holding[0];
-		oSettings.nTableWrapper = insert[0];
-		oSettings.nTableReinsertBefore = oSettings.nTable.nextSibling;
-	
-		/* Loop over the user set positioning and place the elements as needed */
-		var aDom = oSettings.sDom.split('');
-		var featureNode, cOption, nNewNode, cNext, sAttr, j;
-		for ( var i=0 ; i<aDom.length ; i++ )
-		{
-			featureNode = null;
-			cOption = aDom[i];
-	
-			if ( cOption == '<' )
-			{
-				/* New container div */
-				nNewNode = $('<div/>')[0];
-	
-				/* Check to see if we should append an id and/or a class name to the container */
-				cNext = aDom[i+1];
-				if ( cNext == "'" || cNext == '"' )
-				{
-					sAttr = "";
-					j = 2;
-					while ( aDom[i+j] != cNext )
-					{
-						sAttr += aDom[i+j];
-						j++;
-					}
-	
-					/* Replace jQuery UI constants @todo depreciated */
-					if ( sAttr == "H" )
-					{
-						sAttr = classes.sJUIHeader;
-					}
-					else if ( sAttr == "F" )
-					{
-						sAttr = classes.sJUIFooter;
-					}
-	
-					/* The attribute can be in the format of "#id.class", "#id" or "class" This logic
-					 * breaks the string into parts and applies them as needed
-					 */
-					if ( sAttr.indexOf('.') != -1 )
-					{
-						var aSplit = sAttr.split('.');
-						nNewNode.id = aSplit[0].substr(1, aSplit[0].length-1);
-						nNewNode.className = aSplit[1];
-					}
-					else if ( sAttr.charAt(0) == "#" )
-					{
-						nNewNode.id = sAttr.substr(1, sAttr.length-1);
-					}
-					else
-					{
-						nNewNode.className = sAttr;
-					}
-	
-					i += j; /* Move along the position array */
-				}
-	
-				insert.append( nNewNode );
-				insert = $(nNewNode);
-			}
-			else if ( cOption == '>' )
-			{
-				/* End container div */
-				insert = insert.parent();
-			}
-			// @todo Move options into their own plugins?
-			else if ( cOption == 'l' && features.bPaginate && features.bLengthChange )
-			{
-				/* Length */
-				featureNode = _fnFeatureHtmlLength( oSettings );
-			}
-			else if ( cOption == 'f' && features.bFilter )
-			{
-				/* Filter */
-				featureNode = _fnFeatureHtmlFilter( oSettings );
-			}
-			else if ( cOption == 'r' && features.bProcessing )
-			{
-				/* pRocessing */
-				featureNode = _fnFeatureHtmlProcessing( oSettings );
-			}
-			else if ( cOption == 't' )
-			{
-				/* Table */
-				featureNode = _fnFeatureHtmlTable( oSettings );
-			}
-			else if ( cOption ==  'i' && features.bInfo )
-			{
-				/* Info */
-				featureNode = _fnFeatureHtmlInfo( oSettings );
-			}
-			else if ( cOption == 'p' && features.bPaginate )
-			{
-				/* Pagination */
-				featureNode = _fnFeatureHtmlPaginate( oSettings );
-			}
-			else if ( DataTable.ext.feature.length !== 0 )
-			{
-				/* Plug-in features */
-				var aoFeatures = DataTable.ext.feature;
-				for ( var k=0, kLen=aoFeatures.length ; k<kLen ; k++ )
-				{
-					if ( cOption == aoFeatures[k].cFeature )
-					{
-						featureNode = aoFeatures[k].fnInit( oSettings );
-						break;
-					}
-				}
-			}
-	
-			/* Add to the 2D features array */
-			if ( featureNode )
-			{
-				var aanFeatures = oSettings.aanFeatures;
-	
-				if ( ! aanFeatures[cOption] )
-				{
-					aanFeatures[cOption] = [];
-				}
-	
-				aanFeatures[cOption].push( featureNode );
-				insert.append( featureNode );
-			}
-		}
-	
-		/* Built our DOM structure - replace the holding div with what we want */
-		holding.replaceWith( insert );
-		oSettings.nHolding = null;
-	}
-	
-	
-	/**
-	 * Use the DOM source to create up an array of header cells. The idea here is to
-	 * create a layout grid (array) of rows x columns, which contains a reference
-	 * to the cell that that point in the grid (regardless of col/rowspan), such that
-	 * any column / row could be removed and the new grid constructed
-	 *  @param array {object} aLayout Array to store the calculated layout in
-	 *  @param {node} nThead The header/footer element for the table
-	 *  @memberof DataTable#oApi
-	 */
-	function _fnDetectHeader ( aLayout, nThead )
-	{
-		var nTrs = $(nThead).children('tr');
-		var nTr, nCell;
-		var i, k, l, iLen, jLen, iColShifted, iColumn, iColspan, iRowspan;
-		var bUnique;
-		var fnShiftCol = function ( a, i, j ) {
-			var k = a[i];
-	                while ( k[j] ) {
-				j++;
-			}
-			return j;
-		};
-	
-		aLayout.splice( 0, aLayout.length );
-	
-		/* We know how many rows there are in the layout - so prep it */
-		for ( i=0, iLen=nTrs.length ; i<iLen ; i++ )
-		{
-			aLayout.push( [] );
-		}
-	
-		/* Calculate a layout array */
-		for ( i=0, iLen=nTrs.length ; i<iLen ; i++ )
-		{
-			nTr = nTrs[i];
-			iColumn = 0;
-	
-			/* For every cell in the row... */
-			nCell = nTr.firstChild;
-			while ( nCell ) {
-				if ( nCell.nodeName.toUpperCase() == "TD" ||
-				     nCell.nodeName.toUpperCase() == "TH" )
-				{
-					/* Get the col and rowspan attributes from the DOM and sanitise them */
-					iColspan = nCell.getAttribute('colspan') * 1;
-					iRowspan = nCell.getAttribute('rowspan') * 1;
-					iColspan = (!iColspan || iColspan===0 || iColspan===1) ? 1 : iColspan;
-					iRowspan = (!iRowspan || iRowspan===0 || iRowspan===1) ? 1 : iRowspan;
-	
-					/* There might be colspan cells already in this row, so shift our target
-					 * accordingly
-					 */
-					iColShifted = fnShiftCol( aLayout, i, iColumn );
-	
-					/* Cache calculation for unique columns */
-					bUnique = iColspan === 1 ? true : false;
-	
-					/* If there is col / rowspan, copy the information into the layout grid */
-					for ( l=0 ; l<iColspan ; l++ )
-					{
-						for ( k=0 ; k<iRowspan ; k++ )
-						{
-							aLayout[i+k][iColShifted+l] = {
-								"cell": nCell,
-								"unique": bUnique
-							};
-							aLayout[i+k].nTr = nTr;
-						}
-					}
-				}
-				nCell = nCell.nextSibling;
-			}
-		}
-	}
-	
-	
-	/**
-	 * Get an array of unique th elements, one for each column
-	 *  @param {object} oSettings dataTables settings object
-	 *  @param {node} nHeader automatically detect the layout from this node - optional
-	 *  @param {array} aLayout thead/tfoot layout from _fnDetectHeader - optional
-	 *  @returns array {node} aReturn list of unique th's
-	 *  @memberof DataTable#oApi
-	 */
-	function _fnGetUniqueThs ( oSettings, nHeader, aLayout )
-	{
-		var aReturn = [];
-		if ( !aLayout )
-		{
-			aLayout = oSettings.aoHeader;
-			if ( nHeader )
-			{
-				aLayout = [];
-				_fnDetectHeader( aLayout, nHeader );
-			}
-		}
-	
-		for ( var i=0, iLen=aLayout.length ; i<iLen ; i++ )
-		{
-			for ( var j=0, jLen=aLayout[i].length ; j<jLen ; j++ )
-			{
-				if ( aLayout[i][j].unique &&
-					 (!aReturn[j] || !oSettings.bSortCellsTop) )
-				{
-					aReturn[j] = aLayout[i][j].cell;
-				}
-			}
-		}
-	
-		return aReturn;
-	}
-	
-	/**
-	 * Create an Ajax call based on the table's settings, taking into account that
-	 * parameters can have multiple forms, and backwards compatibility.
-	 *
-	 * @param {object} oSettings dataTables settings object
-	 * @param {array} data Data to send to the server, required by
-	 *     DataTables - may be augmented by developer callbacks
-	 * @param {function} fn Callback function to run when data is obtained
-	 */
-	function _fnBuildAjax( oSettings, data, fn )
-	{
-		// Compatibility with 1.9-, allow fnServerData and event to manipulate
-		_fnCallbackFire( oSettings, 'aoServerParams', 'serverParams', [data] );
-	
-		// Convert to object based for 1.10+ if using the old array scheme which can
-		// come from server-side processing or serverParams
-		if ( data && $.isArray(data) ) {
-			var tmp = {};
-			var rbracket = /(.*?)\[\]$/;
-	
-			$.each( data, function (key, val) {
-				var match = val.name.match(rbracket);
-	
-				if ( match ) {
-					// Support for arrays
-					var name = match[0];
-	
-					if ( ! tmp[ name ] ) {
-						tmp[ name ] = [];
-					}
-					tmp[ name ].push( val.value );
-				}
-				else {
-					tmp[val.name] = val.value;
-				}
-			} );
-			data = tmp;
-		}
-	
-		var ajaxData;
-		var ajax = oSettings.ajax;
-		var instance = oSettings.oInstance;
-		var callback = function ( json ) {
-			_fnCallbackFire( oSettings, null, 'xhr', [oSettings, json, oSettings.jqXHR] );
-			fn( json );
-		};
-	
-		if ( $.isPlainObject( ajax ) && ajax.data )
-		{
-			ajaxData = ajax.data;
-	
-			var newData = typeof ajaxData === 'function' ?
-				ajaxData( data, oSettings ) :  // fn can manipulate data or return
-				ajaxData;                      // an object object or array to merge
-	
-			// If the function returned something, use that alone
-			data = typeof ajaxData === 'function' && newData ?
-				newData :
-				$.extend( true, data, newData );
-	
-			// Remove the data property as we've resolved it already and don't want
-			// jQuery to do it again (it is restored at the end of the function)
-			delete ajax.data;
-		}
-	
-		var baseAjax = {
-			"data": data,
-			"success": function (json) {
-				var error = json.error || json.sError;
-				if ( error ) {
-					_fnLog( oSettings, 0, error );
-				}
-	
-				oSettings.json = json;
-				callback( json );
-			},
-			"dataType": "json",
-			"cache": false,
-			"type": oSettings.sServerMethod,
-			"error": function (xhr, error, thrown) {
-				var ret = _fnCallbackFire( oSettings, null, 'xhr', [oSettings, null, oSettings.jqXHR] );
-	
-				if ( $.inArray( true, ret ) === -1 ) {
-					if ( error == "parsererror" ) {
-						_fnLog( oSettings, 0, 'Invalid JSON response', 1 );
-					}
-					else if ( xhr.readyState === 4 ) {
-						_fnLog( oSettings, 0, 'Ajax error', 7 );
-					}
-				}
-	
-				_fnProcessingDisplay( oSettings, false );
-			}
-		};
-	
-		// Store the data submitted for the API
-		oSettings.oAjaxData = data;
-	
-		// Allow plug-ins and external processes to modify the data
-		_fnCallbackFire( oSettings, null, 'preXhr', [oSettings, data] );
-	
-		if ( oSettings.fnServerData )
-		{
-			// DataTables 1.9- compatibility
-			oSettings.fnServerData.call( instance,
-				oSettings.sAjaxSource,
-				$.map( data, function (val, key) { // Need to convert back to 1.9 trad format
-					return { name: key, value: val };
-				} ),
-				callback,
-				oSettings
-			);
-		}
-		else if ( oSettings.sAjaxSource || typeof ajax === 'string' )
-		{
-			// DataTables 1.9- compatibility
-			oSettings.jqXHR = $.ajax( $.extend( baseAjax, {
-				url: ajax || oSettings.sAjaxSource
-			} ) );
-		}
-		else if ( typeof ajax === 'function' )
-		{
-			// Is a function - let the caller define what needs to be done
-			oSettings.jqXHR = ajax.call( instance, data, callback, oSettings );
-		}
-		else
-		{
-			// Object to extend the base settings
-			oSettings.jqXHR = $.ajax( $.extend( baseAjax, ajax ) );
-	
-			// Restore for next time around
-			ajax.data = ajaxData;
-		}
-	}
-	
-	
-	/**
-	 * Update the table using an Ajax call
-	 *  @param {object} settings dataTables settings object
-	 *  @returns {boolean} Block the table drawing or not
-	 *  @memberof DataTable#oApi
-	 */
-	function _fnAjaxUpdate( settings )
-	{
-		if ( settings.bAjaxDataGet ) {
-			settings.iDraw++;
-			_fnProcessingDisplay( settings, true );
-	
-			_fnBuildAjax(
-				settings,
-				_fnAjaxParameters( settings ),
-				function(json) {
-					_fnAjaxUpdateDraw( settings, json );
-				}
-			);
-	
-			return false;
-		}
-		return true;
-	}
-	
-	
-	/**
-	 * Build up the parameters in an object needed for a server-side processing
-	 * request. Note that this is basically done twice, is different ways - a modern
-	 * method which is used by default in DataTables 1.10 which uses objects and
-	 * arrays, or the 1.9- method with is name / value pairs. 1.9 method is used if
-	 * the sAjaxSource option is used in the initialisation, or the legacyAjax
-	 * option is set.
-	 *  @param {object} oSettings dataTables settings object
-	 *  @returns {bool} block the table drawing or not
-	 *  @memberof DataTable#oApi
-	 */
-	function _fnAjaxParameters( settings )
-	{
-		var
-			columns = settings.aoColumns,
-			columnCount = columns.length,
-			features = settings.oFeatures,
-			preSearch = settings.oPreviousSearch,
-			preColSearch = settings.aoPreSearchCols,
-			i, data = [], dataProp, column, columnSearch,
-			sort = _fnSortFlatten( settings ),
-			displayStart = settings._iDisplayStart,
-			displayLength = features.bPaginate !== false ?
-				settings._iDisplayLength :
-				-1;
-	
-		var param = function ( name, value ) {
-			data.push( { 'name': name, 'value': value } );
-		};
-	
-		// DataTables 1.9- compatible method
-		param( 'sEcho',          settings.iDraw );
-		param( 'iColumns',       columnCount );
-		param( 'sColumns',       _pluck( columns, 'sName' ).join(',') );
-		param( 'iDisplayStart',  displayStart );
-		param( 'iDisplayLength', displayLength );
-	
-		// DataTables 1.10+ method
-		var d = {
-			draw:    settings.iDraw,
-			columns: [],
-			order:   [],
-			start:   displayStart,
-			length:  displayLength,
-			search:  {
-				value: preSearch.sSearch,
-				regex: preSearch.bRegex
-			}
-		};
-	
-		for ( i=0 ; i<columnCount ; i++ ) {
-			column = columns[i];
-			columnSearch = preColSearch[i];
-			dataProp = typeof column.mData=="function" ? 'function' : column.mData ;
-	
-			d.columns.push( {
-				data:       dataProp,
-				name:       column.sName,
-				searchable: column.bSearchable,
-				orderable:  column.bSortable,
-				search:     {
-					value: columnSearch.sSearch,
-					regex: columnSearch.bRegex
-				}
-			} );
-	
-			param( "mDataProp_"+i, dataProp );
-	
-			if ( features.bFilter ) {
-				param( 'sSearch_'+i,     columnSearch.sSearch );
-				param( 'bRegex_'+i,      columnSearch.bRegex );
-				param( 'bSearchable_'+i, column.bSearchable );
-			}
-	
-			if ( features.bSort ) {
-				param( 'bSortable_'+i, column.bSortable );
-			}
-		}
-	
-		if ( features.bFilter ) {
-			param( 'sSearch', preSearch.sSearch );
-			param( 'bRegex', preSearch.bRegex );
-		}
-	
-		if ( features.bSort ) {
-			$.each( sort, function ( i, val ) {
-				d.order.push( { column: val.col, dir: val.dir } );
-	
-				param( 'iSortCol_'+i, val.col );
-				param( 'sSortDir_'+i, val.dir );
-			} );
-	
-			param( 'iSortingCols', sort.length );
-		}
-	
-		// If the legacy.ajax parameter is null, then we automatically decide which
-		// form to use, based on sAjaxSource
-		var legacy = DataTable.ext.legacy.ajax;
-		if ( legacy === null ) {
-			return settings.sAjaxSource ? data : d;
-		}
-	
-		// Otherwise, if legacy has been specified then we use that to decide on the
-		// form
-		return legacy ? data : d;
-	}
-	
-	
-	/**
-	 * Data the data from the server (nuking the old) and redraw the table
-	 *  @param {object} oSettings dataTables settings object
-	 *  @param {object} json json data return from the server.
-	 *  @param {string} json.sEcho Tracking flag for DataTables to match requests
-	 *  @param {int} json.iTotalRecords Number of records in the data set, not accounting for filtering
-	 *  @param {int} json.iTotalDisplayRecords Number of records in the data set, accounting for filtering
-	 *  @param {array} json.aaData The data to display on this page
-	 *  @param {string} [json.sColumns] Column ordering (sName, comma separated)
-	 *  @memberof DataTable#oApi
-	 */
-	function _fnAjaxUpdateDraw ( settings, json )
-	{
-		// v1.10 uses camelCase variables, while 1.9 uses Hungarian notation.
-		// Support both
-		var compat = function ( old, modern ) {
-			return json[old] !== undefined ? json[old] : json[modern];
-		};
-	
-		var data = _fnAjaxDataSrc( settings, json );
-		var draw            = compat( 'sEcho',                'draw' );
-		var recordsTotal    = compat( 'iTotalRecords',        'recordsTotal' );
-		var recordsFiltered = compat( 'iTotalDisplayRecords', 'recordsFiltered' );
-	
-		if ( draw !== undefined ) {
-			// Protect against out of sequence returns
-			if ( draw*1 < settings.iDraw ) {
-				return;
-			}
-			settings.iDraw = draw * 1;
-		}
-	
-		_fnClearTable( settings );
-		settings._iRecordsTotal   = parseInt(recordsTotal, 10);
-		settings._iRecordsDisplay = parseInt(recordsFiltered, 10);
-	
-		for ( var i=0, ien=data.length ; i<ien ; i++ ) {
-			_fnAddData( settings, data[i] );
-		}
-		settings.aiDisplay = settings.aiDisplayMaster.slice();
-	
-		settings.bAjaxDataGet = false;
-		_fnDraw( settings );
-	
-		if ( ! settings._bInitComplete ) {
-			_fnInitComplete( settings, json );
-		}
-	
-		settings.bAjaxDataGet = true;
-		_fnProcessingDisplay( settings, false );
-	}
-	
-	
-	/**
-	 * Get the data from the JSON data source to use for drawing a table. Using
-	 * `_fnGetObjectDataFn` allows the data to be sourced from a property of the
-	 * source object, or from a processing function.
-	 *  @param {object} oSettings dataTables settings object
-	 *  @param  {object} json Data source object / array from the server
-	 *  @return {array} Array of data to use
-	 */
-	function _fnAjaxDataSrc ( oSettings, json )
-	{
-		var dataSrc = $.isPlainObject( oSettings.ajax ) && oSettings.ajax.dataSrc !== undefined ?
-			oSettings.ajax.dataSrc :
-			oSettings.sAjaxDataProp; // Compatibility with 1.9-.
-	
-		// Compatibility with 1.9-. In order to read from aaData, check if the
-		// default has been changed, if not, check for aaData
-		if ( dataSrc === 'data' ) {
-			return json.aaData || json[dataSrc];
-		}
-	
-		return dataSrc !== "" ?
-			_fnGetObjectDataFn( dataSrc )( json ) :
-			json;
-	}
-	
-	/**
-	 * Generate the node required for filtering text
-	 *  @returns {node} Filter control element
-	 *  @param {object} oSettings dataTables settings object
-	 *  @memberof DataTable#oApi
-	 */
-	function _fnFeatureHtmlFilter ( settings )
-	{
-		var classes = settings.oClasses;
-		var tableId = settings.sTableId;
-		var language = settings.oLanguage;
-		var previousSearch = settings.oPreviousSearch;
-		var features = settings.aanFeatures;
-		var input = '<input type="search" class="'+classes.sFilterInput+'"/>';
-	
-		var str = language.sSearch;
-		str = str.match(/_INPUT_/) ?
-			str.replace('_INPUT_', input) :
-			str+input;
-	
-		var filter = $('<div/>', {
-				'id': ! features.f ? tableId+'_filter' : null,
-				'class': classes.sFilter
-			} )
-			.append( $('<label/>' ).append( str ) );
-	
-		var searchFn = function() {
-			/* Update all other filter input elements for the new display */
-			var n = features.f;
-			var val = !this.value ? "" : this.value; // mental IE8 fix :-(
-	
-			/* Now do the filter */
-			if ( val != previousSearch.sSearch ) {
-				_fnFilterComplete( settings, {
-					"sSearch": val,
-					"bRegex": previousSearch.bRegex,
-					"bSmart": previousSearch.bSmart ,
-					"bCaseInsensitive": previousSearch.bCaseInsensitive
-				} );
-	
-				// Need to redraw, without resorting
-				settings._iDisplayStart = 0;
-				_fnDraw( settings );
-			}
-		};
-	
-		var searchDelay = settings.searchDelay !== null ?
-			settings.searchDelay :
-			_fnDataSource( settings ) === 'ssp' ?
-				400 :
-				0;
-	
-		var jqFilter = $('input', filter)
-			.val( previousSearch.sSearch )
-			.attr( 'placeholder', language.sSearchPlaceholder )
-			.on(
-				'keyup.DT search.DT input.DT paste.DT cut.DT',
-				searchDelay ?
-					_fnThrottle( searchFn, searchDelay ) :
-					searchFn
-			)
-			.on( 'mouseup', function(e) {
-				// Edge fix! Edge 17 does not trigger anything other than mouse events when clicking
-				// on the clear icon (Edge bug 17584515). This is safe in other browsers as `searchFn`
-				// checks the value to see if it has changed. In other browsers it won't have.
-				setTimeout( function () {
-					searchFn.call(jqFilter[0]);
-				}, 10);
-			} )
-			.on( 'keypress.DT', function(e) {
-				/* Prevent form submission */
-				if ( e.keyCode == 13 ) {
-					return false;
-				}
-			} )
-			.attr('aria-controls', tableId);
-	
-		// Update the input elements whenever the table is filtered
-		$(settings.nTable).on( 'search.dt.DT', function ( ev, s ) {
-			if ( settings === s ) {
-				// IE9 throws an 'unknown error' if document.activeElement is used
-				// inside an iframe or frame...
-				try {
-					if ( jqFilter[0] !== document.activeElement ) {
-						jqFilter.val( previousSearch.sSearch );
-					}
-				}
-				catch ( e ) {}
-			}
-		} );
-	
-		return filter[0];
-	}
-	
-	
-	/**
-	 * Filter the table using both the global filter and column based filtering
-	 *  @param {object} oSettings dataTables settings object
-	 *  @param {object} oSearch search information
-	 *  @param {int} [iForce] force a research of the master array (1) or not (undefined or 0)
-	 *  @memberof DataTable#oApi
-	 */
-	function _fnFilterComplete ( oSettings, oInput, iForce )
-	{
-		var oPrevSearch = oSettings.oPreviousSearch;
-		var aoPrevSearch = oSettings.aoPreSearchCols;
-		var fnSaveFilter = function ( oFilter ) {
-			/* Save the filtering values */
-			oPrevSearch.sSearch = oFilter.sSearch;
-			oPrevSearch.bRegex = oFilter.bRegex;
-			oPrevSearch.bSmart = oFilter.bSmart;
-			oPrevSearch.bCaseInsensitive = oFilter.bCaseInsensitive;
-		};
-		var fnRegex = function ( o ) {
-			// Backwards compatibility with the bEscapeRegex option
-			return o.bEscapeRegex !== undefined ? !o.bEscapeRegex : o.bRegex;
-		};
-	
-		// Resolve any column types that are unknown due to addition or invalidation
-		// @todo As per sort - can this be moved into an event handler?
-		_fnColumnTypes( oSettings );
-	
-		/* In server-side processing all filtering is done by the server, so no point hanging around here */
-		if ( _fnDataSource( oSettings ) != 'ssp' )
-		{
-			/* Global filter */
-			_fnFilter( oSettings, oInput.sSearch, iForce, fnRegex(oInput), oInput.bSmart, oInput.bCaseInsensitive );
-			fnSaveFilter( oInput );
-	
-			/* Now do the individual column filter */
-			for ( var i=0 ; i<aoPrevSearch.length ; i++ )
-			{
-				_fnFilterColumn( oSettings, aoPrevSearch[i].sSearch, i, fnRegex(aoPrevSearch[i]),
-					aoPrevSearch[i].bSmart, aoPrevSearch[i].bCaseInsensitive );
-			}
-	
-			/* Custom filtering */
-			_fnFilterCustom( oSettings );
-		}
-		else
-		{
-			fnSaveFilter( oInput );
-		}
-	
-		/* Tell the draw function we have been filtering */
-		oSettings.bFiltered = true;
-		_fnCallbackFire( oSettings, null, 'search', [oSettings] );
-	}
-	
-	
-	/**
-	 * Apply custom filtering functions
-	 *  @param {object} oSettings dataTables settings object
-	 *  @memberof DataTable#oApi
-	 */
-	function _fnFilterCustom( settings )
-	{
-		var filters = DataTable.ext.search;
-		var displayRows = settings.aiDisplay;
-		var row, rowIdx;
-	
-		for ( var i=0, ien=filters.length ; i<ien ; i++ ) {
-			var rows = [];
-	
-			// Loop over each row and see if it should be included
-			for ( var j=0, jen=displayRows.length ; j<jen ; j++ ) {
-				rowIdx = displayRows[ j ];
-				row = settings.aoData[ rowIdx ];
-	
-				if ( filters[i]( settings, row._aFilterData, rowIdx, row._aData, j ) ) {
-					rows.push( rowIdx );
-				}
-			}
-	
-			// So the array reference doesn't break set the results into the
-			// existing array
-			displayRows.length = 0;
-			$.merge( displayRows, rows );
-		}
-	}
-	
-	
-	/**
-	 * Filter the table on a per-column basis
-	 *  @param {object} oSettings dataTables settings object
-	 *  @param {string} sInput string to filter on
-	 *  @param {int} iColumn column to filter
-	 *  @param {bool} bRegex treat search string as a regular expression or not
-	 *  @param {bool} bSmart use smart filtering or not
-	 *  @param {bool} bCaseInsensitive Do case insenstive matching or not
-	 *  @memberof DataTable#oApi
-	 */
-	function _fnFilterColumn ( settings, searchStr, colIdx, regex, smart, caseInsensitive )
-	{
-		if ( searchStr === '' ) {
-			return;
-		}
-	
-		var data;
-		var out = [];
-		var display = settings.aiDisplay;
-		var rpSearch = _fnFilterCreateSearch( searchStr, regex, smart, caseInsensitive );
-	
-		for ( var i=0 ; i<display.length ; i++ ) {
-			data = settings.aoData[ display[i] ]._aFilterData[ colIdx ];
-	
-			if ( rpSearch.test( data ) ) {
-				out.push( display[i] );
-			}
-		}
-	
-		settings.aiDisplay = out;
-	}
-	
-	
-	/**
-	 * Filter the data table based on user input and draw the table
-	 *  @param {object} settings dataTables settings object
-	 *  @param {string} input string to filter on
-	 *  @param {int} force optional - force a research of the master array (1) or not (undefined or 0)
-	 *  @param {bool} regex treat as a regular expression or not
-	 *  @param {bool} smart perform smart filtering or not
-	 *  @param {bool} caseInsensitive Do case insenstive matching or not
-	 *  @memberof DataTable#oApi
-	 */
-	function _fnFilter( settings, input, force, regex, smart, caseInsensitive )
-	{
-		var rpSearch = _fnFilterCreateSearch( input, regex, smart, caseInsensitive );
-		var prevSearch = settings.oPreviousSearch.sSearch;
-		var displayMaster = settings.aiDisplayMaster;
-		var display, invalidated, i;
-		var filtered = [];
-	
-		// Need to take account of custom filtering functions - always filter
-		if ( DataTable.ext.search.length !== 0 ) {
-			force = true;
-		}
-	
-		// Check if any of the rows were invalidated
-		invalidated = _fnFilterData( settings );
-	
-		// If the input is blank - we just want the full data set
-		if ( input.length <= 0 ) {
-			settings.aiDisplay = displayMaster.slice();
-		}
-		else {
-			// New search - start from the master array
-			if ( invalidated ||
-				 force ||
-				 regex ||
-				 prevSearch.length > input.length ||
-				 input.indexOf(prevSearch) !== 0 ||
-				 settings.bSorted // On resort, the display master needs to be
-				                  // re-filtered since indexes will have changed
-			) {
-				settings.aiDisplay = displayMaster.slice();
-			}
-	
-			// Search the display array
-			display = settings.aiDisplay;
-	
-			for ( i=0 ; i<display.length ; i++ ) {
-				if ( rpSearch.test( settings.aoData[ display[i] ]._sFilterRow ) ) {
-					filtered.push( display[i] );
-				}
-			}
-	
-			settings.aiDisplay = filtered;
-		}
-	}
-	
-	
-	/**
-	 * Build a regular expression object suitable for searching a table
-	 *  @param {string} sSearch string to search for
-	 *  @param {bool} bRegex treat as a regular expression or not
-	 *  @param {bool} bSmart perform smart filtering or not
-	 *  @param {bool} bCaseInsensitive Do case insensitive matching or not
-	 *  @returns {RegExp} constructed object
-	 *  @memberof DataTable#oApi
-	 */
-	function _fnFilterCreateSearch( search, regex, smart, caseInsensitive )
-	{
-		search = regex ?
-			search :
-			_fnEscapeRegex( search );
-		
-		if ( smart ) {
-			/* For smart filtering we want to allow the search to work regardless of
-			 * word order. We also want double quoted text to be preserved, so word
-			 * order is important - a la google. So this is what we want to
-			 * generate:
-			 * 
-			 * ^(?=.*?\bone\b)(?=.*?\btwo three\b)(?=.*?\bfour\b).*$
-			 */
-			var a = $.map( search.match( /"[^"]+"|[^ ]+/g ) || [''], function ( word ) {
-				if ( word.charAt(0) === '"' ) {
-					var m = word.match( /^"(.*)"$/ );
-					word = m ? m[1] : word;
-				}
-	
-				return word.replace('"', '');
-			} );
-	
-			search = '^(?=.*?'+a.join( ')(?=.*?' )+').*$';
-		}
-	
-		return new RegExp( search, caseInsensitive ? 'i' : '' );
-	}
-	
-	
-	/**
-	 * Escape a string such that it can be used in a regular expression
-	 *  @param {string} sVal string to escape
-	 *  @returns {string} escaped string
-	 *  @memberof DataTable#oApi
-	 */
-	var _fnEscapeRegex = DataTable.util.escapeRegex;
-	
-	var __filter_div = $('<div>')[0];
-	var __filter_div_textContent = __filter_div.textContent !== undefined;
-	
-	// Update the filtering data for each row if needed (by invalidation or first run)
-	function _fnFilterData ( settings )
-	{
-		var columns = settings.aoColumns;
-		var column;
-		var i, j, ien, jen, filterData, cellData, row;
-		var fomatters = DataTable.ext.type.search;
-		var wasInvalidated = false;
-	
-		for ( i=0, ien=settings.aoData.length ; i<ien ; i++ ) {
-			row = settings.aoData[i];
-	
-			if ( ! row._aFilterData ) {
-				filterData = [];
-	
-				for ( j=0, jen=columns.length ; j<jen ; j++ ) {
-					column = columns[j];
-	
-					if ( column.bSearchable ) {
-						cellData = _fnGetCellData( settings, i, j, 'filter' );
-	
-						if ( fomatters[ column.sType ] ) {
-							cellData = fomatters[ column.sType ]( cellData );
-						}
-	
-						// Search in DataTables 1.10 is string based. In 1.11 this
-						// should be altered to also allow strict type checking.
-						if ( cellData === null ) {
-							cellData = '';
-						}
-	
-						if ( typeof cellData !== 'string' && cellData.toString ) {
-							cellData = cellData.toString();
-						}
-					}
-					else {
-						cellData = '';
-					}
-	
-					// If it looks like there is an HTML entity in the string,
-					// attempt to decode it so sorting works as expected. Note that
-					// we could use a single line of jQuery to do this, but the DOM
-					// method used here is much faster http://jsperf.com/html-decode
-					if ( cellData.indexOf && cellData.indexOf('&') !== -1 ) {
-						__filter_div.innerHTML = cellData;
-						cellData = __filter_div_textContent ?
-							__filter_div.textContent :
-							__filter_div.innerText;
-					}
-	
-					if ( cellData.replace ) {
-						cellData = cellData.replace(/[\r\n\u2028]/g, '');
-					}
-	
-					filterData.push( cellData );
-				}
-	
-				row._aFilterData = filterData;
-				row._sFilterRow = filterData.join('  ');
-				wasInvalidated = true;
-			}
-		}
-	
-		return wasInvalidated;
-	}
-	
-	
-	/**
-	 * Convert from the internal Hungarian notation to camelCase for external
-	 * interaction
-	 *  @param {object} obj Object to convert
-	 *  @returns {object} Inverted object
-	 *  @memberof DataTable#oApi
-	 */
-	function _fnSearchToCamel ( obj )
-	{
-		return {
-			search:          obj.sSearch,
-			smart:           obj.bSmart,
-			regex:           obj.bRegex,
-			caseInsensitive: obj.bCaseInsensitive
-		};
-	}
-	
-	
-	
-	/**
-	 * Convert from camelCase notation to the internal Hungarian. We could use the
-	 * Hungarian convert function here, but this is cleaner
-	 *  @param {object} obj Object to convert
-	 *  @returns {object} Inverted object
-	 *  @memberof DataTable#oApi
-	 */
-	function _fnSearchToHung ( obj )
-	{
-		return {
-			sSearch:          obj.search,
-			bSmart:           obj.smart,
-			bRegex:           obj.regex,
-			bCaseInsensitive: obj.caseInsensitive
-		};
-	}
-	
-	/**
-	 * Generate the node required for the info display
-	 *  @param {object} oSettings dataTables settings object
-	 *  @returns {node} Information element
-	 *  @memberof DataTable#oApi
-	 */
-	function _fnFeatureHtmlInfo ( settings )
-	{
-		var
-			tid = settings.sTableId,
-			nodes = settings.aanFeatures.i,
-			n = $('<div/>', {
-				'class': settings.oClasses.sInfo,
-				'id': ! nodes ? tid+'_info' : null
-			} );
-	
-		if ( ! nodes ) {
-			// Update display on each draw
-			settings.aoDrawCallback.push( {
-				"fn": _fnUpdateInfo,
-				"sName": "information"
-			} );
-	
-			n
-				.attr( 'role', 'status' )
-				.attr( 'aria-live', 'polite' );
-	
-			// Table is described by our info div
-			$(settings.nTable).attr( 'aria-describedby', tid+'_info' );
-		}
-	
-		return n[0];
-	}
-	
-	
-	/**
-	 * Update the information elements in the display
-	 *  @param {object} settings dataTables settings object
-	 *  @memberof DataTable#oApi
-	 */
-	function _fnUpdateInfo ( settings )
-	{
-		/* Show information about the table */
-		var nodes = settings.aanFeatures.i;
-		if ( nodes.length === 0 ) {
-			return;
-		}
-	
-		var
-			lang  = settings.oLanguage,
-			start = settings._iDisplayStart+1,
-			end   = settings.fnDisplayEnd(),
-			max   = settings.fnRecordsTotal(),
-			total = settings.fnRecordsDisplay(),
-			out   = total ?
-				lang.sInfo :
-				lang.sInfoEmpty;
-	
-		if ( total !== max ) {
-			/* Record set after filtering */
-			out += ' ' + lang.sInfoFiltered;
-		}
-	
-		// Convert the macros
-		out += lang.sInfoPostFix;
-		out = _fnInfoMacros( settings, out );
-	
-		var callback = lang.fnInfoCallback;
-		if ( callback !== null ) {
-			out = callback.call( settings.oInstance,
-				settings, start, end, max, total, out
-			);
-		}
-	
-		$(nodes).html( out );
-	}
-	
-	
-	function _fnInfoMacros ( settings, str )
-	{
-		// When infinite scrolling, we are always starting at 1. _iDisplayStart is used only
-		// internally
-		var
-			formatter  = settings.fnFormatNumber,
-			start      = settings._iDisplayStart+1,
-			len        = settings._iDisplayLength,
-			vis        = settings.fnRecordsDisplay(),
-			all        = len === -1;
-	
-		return str.
-			replace(/_START_/g, formatter.call( settings, start ) ).
-			replace(/_END_/g,   formatter.call( settings, settings.fnDisplayEnd() ) ).
-			replace(/_MAX_/g,   formatter.call( settings, settings.fnRecordsTotal() ) ).
-			replace(/_TOTAL_/g, formatter.call( settings, vis ) ).
-			replace(/_PAGE_/g,  formatter.call( settings, all ? 1 : Math.ceil( start / len ) ) ).
-			replace(/_PAGES_/g, formatter.call( settings, all ? 1 : Math.ceil( vis / len ) ) );
-	}
-	
-	
-	
-	/**
-	 * Draw the table for the first time, adding all required features
-	 *  @param {object} settings dataTables settings object
-	 *  @memberof DataTable#oApi
-	 */
-	function _fnInitialise ( settings )
-	{
-		var i, iLen, iAjaxStart=settings.iInitDisplayStart;
-		var columns = settings.aoColumns, column;
-		var features = settings.oFeatures;
-		var deferLoading = settings.bDeferLoading; // value modified by the draw
-	
-		/* Ensure that the table data is fully initialised */
-		if ( ! settings.bInitialised ) {
-			setTimeout( function(){ _fnInitialise( settings ); }, 200 );
-			return;
-		}
-	
-		/* Show the display HTML options */
-		_fnAddOptionsHtml( settings );
-	
-		/* Build and draw the header / footer for the table */
-		_fnBuildHead( settings );
-		_fnDrawHead( settings, settings.aoHeader );
-		_fnDrawHead( settings, settings.aoFooter );
-	
-		/* Okay to show that something is going on now */
-		_fnProcessingDisplay( settings, true );
-	
-		/* Calculate sizes for columns */
-		if ( features.bAutoWidth ) {
-			_fnCalculateColumnWidths( settings );
-		}
-	
-		for ( i=0, iLen=columns.length ; i<iLen ; i++ ) {
-			column = columns[i];
-	
-			if ( column.sWidth ) {
-				column.nTh.style.width = _fnStringToCss( column.sWidth );
-			}
-		}
-	
-		_fnCallbackFire( settings, null, 'preInit', [settings] );
-	
-		// If there is default sorting required - let's do it. The sort function
-		// will do the drawing for us. Otherwise we draw the table regardless of the
-		// Ajax source - this allows the table to look initialised for Ajax sourcing
-		// data (show 'loading' message possibly)
-		_fnReDraw( settings );
-	
-		// Server-side processing init complete is done by _fnAjaxUpdateDraw
-		var dataSrc = _fnDataSource( settings );
-		if ( dataSrc != 'ssp' || deferLoading ) {
-			// if there is an ajax source load the data
-			if ( dataSrc == 'ajax' ) {
-				_fnBuildAjax( settings, [], function(json) {
-					var aData = _fnAjaxDataSrc( settings, json );
-	
-					// Got the data - add it to the table
-					for ( i=0 ; i<aData.length ; i++ ) {
-						_fnAddData( settings, aData[i] );
-					}
-	
-					// Reset the init display for cookie saving. We've already done
-					// a filter, and therefore cleared it before. So we need to make
-					// it appear 'fresh'
-					settings.iInitDisplayStart = iAjaxStart;
-	
-					_fnReDraw( settings );
-	
-					_fnProcessingDisplay( settings, false );
-					_fnInitComplete( settings, json );
-				}, settings );
-			}
-			else {
-				_fnProcessingDisplay( settings, false );
-				_fnInitComplete( settings );
-			}
-		}
-	}
-	
-	
-	/**
-	 * Draw the table for the first time, adding all required features
-	 *  @param {object} oSettings dataTables settings object
-	 *  @param {object} [json] JSON from the server that completed the table, if using Ajax source
-	 *    with client-side processing (optional)
-	 *  @memberof DataTable#oApi
-	 */
-	function _fnInitComplete ( settings, json )
-	{
-		settings._bInitComplete = true;
-	
-		// When data was added after the initialisation (data or Ajax) we need to
-		// calculate the column sizing
-		if ( json || settings.oInit.aaData ) {
-			_fnAdjustColumnSizing( settings );
-		}
-	
-		_fnCallbackFire( settings, null, 'plugin-init', [settings, json] );
-		_fnCallbackFire( settings, 'aoInitComplete', 'init', [settings, json] );
-	}
-	
-	
-	function _fnLengthChange ( settings, val )
-	{
-		var len = parseInt( val, 10 );
-		settings._iDisplayLength = len;
-	
-		_fnLengthOverflow( settings );
-	
-		// Fire length change event
-		_fnCallbackFire( settings, null, 'length', [settings, len] );
-	}
-	
-	
-	/**
-	 * Generate the node required for user display length changing
-	 *  @param {object} settings dataTables settings object
-	 *  @returns {node} Display length feature node
-	 *  @memberof DataTable#oApi
-	 */
-	function _fnFeatureHtmlLength ( settings )
-	{
-		var
-			classes  = settings.oClasses,
-			tableId  = settings.sTableId,
-			menu     = settings.aLengthMenu,
-			d2       = $.isArray( menu[0] ),
-			lengths  = d2 ? menu[0] : menu,
-			language = d2 ? menu[1] : menu;
-	
-		var select = $('<select/>', {
-			'name':          tableId+'_length',
-			'aria-controls': tableId,
-			'class':         classes.sLengthSelect
-		} );
-	
-		for ( var i=0, ien=lengths.length ; i<ien ; i++ ) {
-			select[0][ i ] = new Option(
-				typeof language[i] === 'number' ?
-					settings.fnFormatNumber( language[i] ) :
-					language[i],
-				lengths[i]
-			);
-		}
-	
-		var div = $('<div><label/></div>').addClass( classes.sLength );
-		if ( ! settings.aanFeatures.l ) {
-			div[0].id = tableId+'_length';
-		}
-	
-		div.children().append(
-			settings.oLanguage.sLengthMenu.replace( '_MENU_', select[0].outerHTML )
-		);
-	
-		// Can't use `select` variable as user might provide their own and the
-		// reference is broken by the use of outerHTML
-		$('select', div)
-			.val( settings._iDisplayLength )
-			.on( 'change.DT', function(e) {
-				_fnLengthChange( settings, $(this).val() );
-				_fnDraw( settings );
-			} );
-	
-		// Update node value whenever anything changes the table's length
-		$(settings.nTable).on( 'length.dt.DT', function (e, s, len) {
-			if ( settings === s ) {
-				$('select', div).val( len );
-			}
-		} );
-	
-		return div[0];
-	}
-	
-	
-	
-	/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
-	 * Note that most of the paging logic is done in
-	 * DataTable.ext.pager
-	 */
-	
-	/**
-	 * Generate the node required for default pagination
-	 *  @param {object} oSettings dataTables settings object
-	 *  @returns {node} Pagination feature node
-	 *  @memberof DataTable#oApi
-	 */
-	function _fnFeatureHtmlPaginate ( settings )
-	{
-		var
-			type   = settings.sPaginationType,
-			plugin = DataTable.ext.pager[ type ],
-			modern = typeof plugin === 'function',
-			redraw = function( settings ) {
-				_fnDraw( settings );
-			},
-			node = $('<div/>').addClass( settings.oClasses.sPaging + type )[0],
-			features = settings.aanFeatures;
-	
-		if ( ! modern ) {
-			plugin.fnInit( settings, node, redraw );
-		}
-	
-		/* Add a draw callback for the pagination on first instance, to update the paging display */
-		if ( ! features.p )
-		{
-			node.id = settings.sTableId+'_paginate';
-	
-			settings.aoDrawCallback.push( {
-				"fn": function( settings ) {
-					if ( modern ) {
-						var
-							start      = settings._iDisplayStart,
-							len        = settings._iDisplayLength,
-							visRecords = settings.fnRecordsDisplay(),
-							all        = len === -1,
-							page = all ? 0 : Math.ceil( start / len ),
-							pages = all ? 1 : Math.ceil( visRecords / len ),
-							buttons = plugin(page, pages),
-							i, ien;
-	
-						for ( i=0, ien=features.p.length ; i<ien ; i++ ) {
-							_fnRenderer( settings, 'pageButton' )(
-								settings, features.p[i], i, buttons, page, pages
-							);
-						}
-					}
-					else {
-						plugin.fnUpdate( settings, redraw );
-					}
-				},
-				"sName": "pagination"
-			} );
-		}
-	
-		return node;
-	}
-	
-	
-	/**
-	 * Alter the display settings to change the page
-	 *  @param {object} settings DataTables settings object
-	 *  @param {string|int} action Paging action to take: "first", "previous",
-	 *    "next" or "last" or page number to jump to (integer)
-	 *  @param [bool] redraw Automatically draw the update or not
-	 *  @returns {bool} true page has changed, false - no change
-	 *  @memberof DataTable#oApi
-	 */
-	function _fnPageChange ( settings, action, redraw )
-	{
-		var
-			start     = settings._iDisplayStart,
-			len       = settings._iDisplayLength,
-			records   = settings.fnRecordsDisplay();
-	
-		if ( records === 0 || len === -1 )
-		{
-			start = 0;
-		}
-		else if ( typeof action === "number" )
-		{
-			start = action * len;
-	
-			if ( start > records )
-			{
-				start = 0;
-			}
-		}
-		else if ( action == "first" )
-		{
-			start = 0;
-		}
-		else if ( action == "previous" )
-		{
-			start = len >= 0 ?
-				start - len :
-				0;
-	
-			if ( start < 0 )
-			{
-			  start = 0;
-			}
-		}
-		else if ( action == "next" )
-		{
-			if ( start + len < records )
-			{
-				start += len;
-			}
-		}
-		else if ( action == "last" )
-		{
-			start = Math.floor( (records-1) / len) * len;
-		}
-		else
-		{
-			_fnLog( settings, 0, "Unknown paging action: "+action, 5 );
-		}
-	
-		var changed = settings._iDisplayStart !== start;
-		settings._iDisplayStart = start;
-	
-		if ( changed ) {
-			_fnCallbackFire( settings, null, 'page', [settings] );
-	
-			if ( redraw ) {
-				_fnDraw( settings );
-			}
-		}
-	
-		return changed;
-	}
-	
-	
-	
-	/**
-	 * Generate the node required for the processing node
-	 *  @param {object} settings dataTables settings object
-	 *  @returns {node} Processing element
-	 *  @memberof DataTable#oApi
-	 */
-	function _fnFeatureHtmlProcessing ( settings )
-	{
-		return $('<div/>', {
-				'id': ! settings.aanFeatures.r ? settings.sTableId+'_processing' : null,
-				'class': settings.oClasses.sProcessing
-			} )
-			.html( settings.oLanguage.sProcessing )
-			.insertBefore( settings.nTable )[0];
-	}
-	
-	
-	/**
-	 * Display or hide the processing indicator
-	 *  @param {object} settings dataTables settings object
-	 *  @param {bool} show Show the processing indicator (true) or not (false)
-	 *  @memberof DataTable#oApi
-	 */
-	function _fnProcessingDisplay ( settings, show )
-	{
-		if ( settings.oFeatures.bProcessing ) {
-			$(settings.aanFeatures.r).css( 'display', show ? 'block' : 'none' );
-		}
-	
-		_fnCallbackFire( settings, null, 'processing', [settings, show] );
-	}
-	
-	/**
-	 * Add any control elements for the table - specifically scrolling
-	 *  @param {object} settings dataTables settings object
-	 *  @returns {node} Node to add to the DOM
-	 *  @memberof DataTable#oApi
-	 */
-	function _fnFeatureHtmlTable ( settings )
-	{
-		var table = $(settings.nTable);
-	
-		// Add the ARIA grid role to the table
-		table.attr( 'role', 'grid' );
-	
-		// Scrolling from here on in
-		var scroll = settings.oScroll;
-	
-		if ( scroll.sX === '' && scroll.sY === '' ) {
-			return settings.nTable;
-		}
-	
-		var scrollX = scroll.sX;
-		var scrollY = scroll.sY;
-		var classes = settings.oClasses;
-		var caption = table.children('caption');
-		var captionSide = caption.length ? caption[0]._captionSide : null;
-		var headerClone = $( table[0].cloneNode(false) );
-		var footerClone = $( table[0].cloneNode(false) );
-		var footer = table.children('tfoot');
-		var _div = '<div/>';
-		var size = function ( s ) {
-			return !s ? null : _fnStringToCss( s );
-		};
-	
-		if ( ! footer.length ) {
-			footer = null;
-		}
-	
-		/*
-		 * The HTML structure that we want to generate in this function is:
-		 *  div - scroller
-		 *    div - scroll head
-		 *      div - scroll head inner
-		 *        table - scroll head table
-		 *          thead - thead
-		 *    div - scroll body
-		 *      table - table (master table)
-		 *        thead - thead clone for sizing
-		 *        tbody - tbody
-		 *    div - scroll foot
-		 *      div - scroll foot inner
-		 *        table - scroll foot table
-		 *          tfoot - tfoot
-		 */
-		var scroller = $( _div, { 'class': classes.sScrollWrapper } )
-			.append(
-				$(_div, { 'class': classes.sScrollHead } )
-					.css( {
-						overflow: 'hidden',
-						position: 'relative',
-						border: 0,
-						width: scrollX ? size(scrollX) : '100%'
-					} )
-					.append(
-						$(_div, { 'class': classes.sScrollHeadInner } )
-							.css( {
-								'box-sizing': 'content-box',
-								width: scroll.sXInner || '100%'
-							} )
-							.append(
-								headerClone
-									.removeAttr('id')
-									.css( 'margin-left', 0 )
-									.append( captionSide === 'top' ? caption : null )
-									.append(
-										table.children('thead')
-									)
-							)
-					)
-			)
-			.append(
-				$(_div, { 'class': classes.sScrollBody } )
-					.css( {
-						position: 'relative',
-						overflow: 'auto',
-						width: size( scrollX )
-					} )
-					.append( table )
-			);
-	
-		if ( footer ) {
-			scroller.append(
-				$(_div, { 'class': classes.sScrollFoot } )
-					.css( {
-						overflow: 'hidden',
-						border: 0,
-						width: scrollX ? size(scrollX) : '100%'
-					} )
-					.append(
-						$(_div, { 'class': classes.sScrollFootInner } )
-							.append(
-								footerClone
-									.removeAttr('id')
-									.css( 'margin-left', 0 )
-									.append( captionSide === 'bottom' ? caption : null )
-									.append(
-										table.children('tfoot')
-									)
-							)
-					)
-			);
-		}
-	
-		var children = scroller.children();
-		var scrollHead = children[0];
-		var scrollBody = children[1];
-		var scrollFoot = footer ? children[2] : null;
-	
-		// When the body is scrolled, then we also want to scroll the headers
-		if ( scrollX ) {
-			$(scrollBody).on( 'scroll.DT', function (e) {
-				var scrollLeft = this.scrollLeft;
-	
-				scrollHead.scrollLeft = scrollLeft;
-	
-				if ( footer ) {
-					scrollFoot.scrollLeft = scrollLeft;
-				}
-			} );
-		}
-	
-		$(scrollBody).css('max-height', scrollY);
-		if (! scroll.bCollapse) {
-			$(scrollBody).css('height', scrollY);
-		}
-	
-		settings.nScrollHead = scrollHead;
-		settings.nScrollBody = scrollBody;
-		settings.nScrollFoot = scrollFoot;
-	
-		// On redraw - align columns
-		settings.aoDrawCallback.push( {
-			"fn": _fnScrollDraw,
-			"sName": "scrolling"
-		} );
-	
-		return scroller[0];
-	}
-	
-	
-	
-	/**
-	 * Update the header, footer and body tables for resizing - i.e. column
-	 * alignment.
-	 *
-	 * Welcome to the most horrible function DataTables. The process that this
-	 * function follows is basically:
-	 *   1. Re-create the table inside the scrolling div
-	 *   2. Take live measurements from the DOM
-	 *   3. Apply the measurements to align the columns
-	 *   4. Clean up
-	 *
-	 *  @param {object} settings dataTables settings object
-	 *  @memberof DataTable#oApi
-	 */
-	function _fnScrollDraw ( settings )
-	{
-		// Given that this is such a monster function, a lot of variables are use
-		// to try and keep the minimised size as small as possible
-		var
-			scroll         = settings.oScroll,
-			scrollX        = scroll.sX,
-			scrollXInner   = scroll.sXInner,
-			scrollY        = scroll.sY,
-			barWidth       = scroll.iBarWidth,
-			divHeader      = $(settings.nScrollHead),
-			divHeaderStyle = divHeader[0].style,
-			divHeaderInner = divHeader.children('div'),
-			divHeaderInnerStyle = divHeaderInner[0].style,
-			divHeaderTable = divHeaderInner.children('table'),
-			divBodyEl      = settings.nScrollBody,
-			divBody        = $(divBodyEl),
-			divBodyStyle   = divBodyEl.style,
-			divFooter      = $(settings.nScrollFoot),
-			divFooterInner = divFooter.children('div'),
-			divFooterTable = divFooterInner.children('table'),
-			header         = $(settings.nTHead),
-			table          = $(settings.nTable),
-			tableEl        = table[0],
-			tableStyle     = tableEl.style,
-			footer         = settings.nTFoot ? $(settings.nTFoot) : null,
-			browser        = settings.oBrowser,
-			ie67           = browser.bScrollOversize,
-			dtHeaderCells  = _pluck( settings.aoColumns, 'nTh' ),
-			headerTrgEls, footerTrgEls,
-			headerSrcEls, footerSrcEls,
-			headerCopy, footerCopy,
-			headerWidths=[], footerWidths=[],
-			headerContent=[], footerContent=[],
-			idx, correction, sanityWidth,
-			zeroOut = function(nSizer) {
-				var style = nSizer.style;
-				style.paddingTop = "0";
-				style.paddingBottom = "0";
-				style.borderTopWidth = "0";
-				style.borderBottomWidth = "0";
-				style.height = 0;
-			};
-	
-		// If the scrollbar visibility has changed from the last draw, we need to
-		// adjust the column sizes as the table width will have changed to account
-		// for the scrollbar
-		var scrollBarVis = divBodyEl.scrollHeight > divBodyEl.clientHeight;
-		
-		if ( settings.scrollBarVis !== scrollBarVis && settings.scrollBarVis !== undefined ) {
-			settings.scrollBarVis = scrollBarVis;
-			_fnAdjustColumnSizing( settings );
-			return; // adjust column sizing will call this function again
-		}
-		else {
-			settings.scrollBarVis = scrollBarVis;
-		}
-	
-		/*
-		 * 1. Re-create the table inside the scrolling div
-		 */
-	
-		// Remove the old minimised thead and tfoot elements in the inner table
-		table.children('thead, tfoot').remove();
-	
-		if ( footer ) {
-			footerCopy = footer.clone().prependTo( table );
-			footerTrgEls = footer.find('tr'); // the original tfoot is in its own table and must be sized
-			footerSrcEls = footerCopy.find('tr');
-		}
-	
-		// Clone the current header and footer elements and then place it into the inner table
-		headerCopy = header.clone().prependTo( table );
-		headerTrgEls = header.find('tr'); // original header is in its own table
-		headerSrcEls = headerCopy.find('tr');
-		headerCopy.find('th, td').removeAttr('tabindex');
-	
-	
-		/*
-		 * 2. Take live measurements from the DOM - do not alter the DOM itself!
-		 */
-	
-		// Remove old sizing and apply the calculated column widths
-		// Get the unique column headers in the newly created (cloned) header. We want to apply the
-		// calculated sizes to this header
-		if ( ! scrollX )
-		{
-			divBodyStyle.width = '100%';
-			divHeader[0].style.width = '100%';
-		}
-	
-		$.each( _fnGetUniqueThs( settings, headerCopy ), function ( i, el ) {
-			idx = _fnVisibleToColumnIndex( settings, i );
-			el.style.width = settings.aoColumns[idx].sWidth;
-		} );
-	
-		if ( footer ) {
-			_fnApplyToChildren( function(n) {
-				n.style.width = "";
-			}, footerSrcEls );
-		}
-	
-		// Size the table as a whole
-		sanityWidth = table.outerWidth();
-		if ( scrollX === "" ) {
-			// No x scrolling
-			tableStyle.width = "100%";
-	
-			// IE7 will make the width of the table when 100% include the scrollbar
-			// - which is shouldn't. When there is a scrollbar we need to take this
-			// into account.
-			if ( ie67 && (table.find('tbody').height() > divBodyEl.offsetHeight ||
-				divBody.css('overflow-y') == "scroll")
-			) {
-				tableStyle.width = _fnStringToCss( table.outerWidth() - barWidth);
-			}
-	
-			// Recalculate the sanity width
-			sanityWidth = table.outerWidth();
-		}
-		else if ( scrollXInner !== "" ) {
-			// legacy x scroll inner has been given - use it
-			tableStyle.width = _fnStringToCss(scrollXInner);
-	
-			// Recalculate the sanity width
-			sanityWidth = table.outerWidth();
-		}
-	
-		// Hidden header should have zero height, so remove padding and borders. Then
-		// set the width based on the real headers
-	
-		// Apply all styles in one pass
-		_fnApplyToChildren( zeroOut, headerSrcEls );
-	
-		// Read all widths in next pass
-		_fnApplyToChildren( function(nSizer) {
-			headerContent.push( nSizer.innerHTML );
-			headerWidths.push( _fnStringToCss( $(nSizer).css('width') ) );
-		}, headerSrcEls );
-	
-		// Apply all widths in final pass
-		_fnApplyToChildren( function(nToSize, i) {
-			// Only apply widths to the DataTables detected header cells - this
-			// prevents complex headers from having contradictory sizes applied
-			if ( $.inArray( nToSize, dtHeaderCells ) !== -1 ) {
-				nToSize.style.width = headerWidths[i];
-			}
-		}, headerTrgEls );
-	
-		$(headerSrcEls).height(0);
-	
-		/* Same again with the footer if we have one */
-		if ( footer )
-		{
-			_fnApplyToChildren( zeroOut, footerSrcEls );
-	
-			_fnApplyToChildren( function(nSizer) {
-				footerContent.push( nSizer.innerHTML );
-				footerWidths.push( _fnStringToCss( $(nSizer).css('width') ) );
-			}, footerSrcEls );
-	
-			_fnApplyToChildren( function(nToSize, i) {
-				nToSize.style.width = footerWidths[i];
-			}, footerTrgEls );
-	
-			$(footerSrcEls).height(0);
-		}
-	
-	
-		/*
-		 * 3. Apply the measurements
-		 */
-	
-		// "Hide" the header and footer that we used for the sizing. We need to keep
-		// the content of the cell so that the width applied to the header and body
-		// both match, but we want to hide it completely. We want to also fix their
-		// width to what they currently are
-		_fnApplyToChildren( function(nSizer, i) {
-			nSizer.innerHTML = '<div class="dataTables_sizing">'+headerContent[i]+'</div>';
-			nSizer.childNodes[0].style.height = "0";
-			nSizer.childNodes[0].style.overflow = "hidden";
-			nSizer.style.width = headerWidths[i];
-		}, headerSrcEls );
-	
-		if ( footer )
-		{
-			_fnApplyToChildren( function(nSizer, i) {
-				nSizer.innerHTML = '<div class="dataTables_sizing">'+footerContent[i]+'</div>';
-				nSizer.childNodes[0].style.height = "0";
-				nSizer.childNodes[0].style.overflow = "hidden";
-				nSizer.style.width = footerWidths[i];
-			}, footerSrcEls );
-		}
-	
-		// Sanity check that the table is of a sensible width. If not then we are going to get
-		// misalignment - try to prevent this by not allowing the table to shrink below its min width
-		if ( table.outerWidth() < sanityWidth )
-		{
-			// The min width depends upon if we have a vertical scrollbar visible or not */
-			correction = ((divBodyEl.scrollHeight > divBodyEl.offsetHeight ||
-				divBody.css('overflow-y') == "scroll")) ?
-					sanityWidth+barWidth :
-					sanityWidth;
-	
-			// IE6/7 are a law unto themselves...
-			if ( ie67 && (divBodyEl.scrollHeight >
-				divBodyEl.offsetHeight || divBody.css('overflow-y') == "scroll")
-			) {
-				tableStyle.width = _fnStringToCss( correction-barWidth );
-			}
-	
-			// And give the user a warning that we've stopped the table getting too small
-			if ( scrollX === "" || scrollXInner !== "" ) {
-				_fnLog( settings, 1, 'Possible column misalignment', 6 );
-			}
-		}
-		else
-		{
-			correction = '100%';
-		}
-	
-		// Apply to the container elements
-		divBodyStyle.width = _fnStringToCss( correction );
-		divHeaderStyle.width = _fnStringToCss( correction );
-	
-		if ( footer ) {
-			settings.nScrollFoot.style.width = _fnStringToCss( correction );
-		}
-	
-	
-		/*
-		 * 4. Clean up
-		 */
-		if ( ! scrollY ) {
-			/* IE7< puts a vertical scrollbar in place (when it shouldn't be) due to subtracting
-			 * the scrollbar height from the visible display, rather than adding it on. We need to
-			 * set the height in order to sort this. Don't want to do it in any other browsers.
-			 */
-			if ( ie67 ) {
-				divBodyStyle.height = _fnStringToCss( tableEl.offsetHeight+barWidth );
-			}
-		}
-	
-		/* Finally set the width's of the header and footer tables */
-		var iOuterWidth = table.outerWidth();
-		divHeaderTable[0].style.width = _fnStringToCss( iOuterWidth );
-		divHeaderInnerStyle.width = _fnStringToCss( iOuterWidth );
-	
-		// Figure out if there are scrollbar present - if so then we need a the header and footer to
-		// provide a bit more space to allow "overflow" scrolling (i.e. past the scrollbar)
-		var bScrolling = table.height() > divBodyEl.clientHeight || divBody.css('overflow-y') == "scroll";
-		var padding = 'padding' + (browser.bScrollbarLeft ? 'Left' : 'Right' );
-		divHeaderInnerStyle[ padding ] = bScrolling ? barWidth+"px" : "0px";
-	
-		if ( footer ) {
-			divFooterTable[0].style.width = _fnStringToCss( iOuterWidth );
-			divFooterInner[0].style.width = _fnStringToCss( iOuterWidth );
-			divFooterInner[0].style[padding] = bScrolling ? barWidth+"px" : "0px";
-		}
-	
-		// Correct DOM ordering for colgroup - comes before the thead
-		table.children('colgroup').insertBefore( table.children('thead') );
-	
-		/* Adjust the position of the header in case we loose the y-scrollbar */
-		divBody.trigger('scroll');
-	
-		// If sorting or filtering has occurred, jump the scrolling back to the top
-		// only if we aren't holding the position
-		if ( (settings.bSorted || settings.bFiltered) && ! settings._drawHold ) {
-			divBodyEl.scrollTop = 0;
-		}
-	}
-	
-	
-	
-	/**
-	 * Apply a given function to the display child nodes of an element array (typically
-	 * TD children of TR rows
-	 *  @param {function} fn Method to apply to the objects
-	 *  @param array {nodes} an1 List of elements to look through for display children
-	 *  @param array {nodes} an2 Another list (identical structure to the first) - optional
-	 *  @memberof DataTable#oApi
-	 */
-	function _fnApplyToChildren( fn, an1, an2 )
-	{
-		var index=0, i=0, iLen=an1.length;
-		var nNode1, nNode2;
-	
-		while ( i < iLen ) {
-			nNode1 = an1[i].firstChild;
-			nNode2 = an2 ? an2[i].firstChild : null;
-	
-			while ( nNode1 ) {
-				if ( nNode1.nodeType === 1 ) {
-					if ( an2 ) {
-						fn( nNode1, nNode2, index );
-					}
-					else {
-						fn( nNode1, index );
-					}
-	
-					index++;
-				}
-	
-				nNode1 = nNode1.nextSibling;
-				nNode2 = an2 ? nNode2.nextSibling : null;
-			}
-	
-			i++;
-		}
-	}
-	
-	
-	
-	var __re_html_remove = /<.*?>/g;
-	
-	
-	/**
-	 * Calculate the width of columns for the table
-	 *  @param {object} oSettings dataTables settings object
-	 *  @memberof DataTable#oApi
-	 */
-	function _fnCalculateColumnWidths ( oSettings )
-	{
-		var
-			table = oSettings.nTable,
-			columns = oSettings.aoColumns,
-			scroll = oSettings.oScroll,
-			scrollY = scroll.sY,
-			scrollX = scroll.sX,
-			scrollXInner = scroll.sXInner,
-			columnCount = columns.length,
-			visibleColumns = _fnGetColumns( oSettings, 'bVisible' ),
-			headerCells = $('th', oSettings.nTHead),
-			tableWidthAttr = table.getAttribute('width'), // from DOM element
-			tableContainer = table.parentNode,
-			userInputs = false,
-			i, column, columnIdx, width, outerWidth,
-			browser = oSettings.oBrowser,
-			ie67 = browser.bScrollOversize;
-	
-		var styleWidth = table.style.width;
-		if ( styleWidth && styleWidth.indexOf('%') !== -1 ) {
-			tableWidthAttr = styleWidth;
-		}
-	
-		/* Convert any user input sizes into pixel sizes */
-		for ( i=0 ; i<visibleColumns.length ; i++ ) {
-			column = columns[ visibleColumns[i] ];
-	
-			if ( column.sWidth !== null ) {
-				column.sWidth = _fnConvertToWidth( column.sWidthOrig, tableContainer );
-	
-				userInputs = true;
-			}
-		}
-	
-		/* If the number of columns in the DOM equals the number that we have to
-		 * process in DataTables, then we can use the offsets that are created by
-		 * the web- browser. No custom sizes can be set in order for this to happen,
-		 * nor scrolling used
-		 */
-		if ( ie67 || ! userInputs && ! scrollX && ! scrollY &&
-		     columnCount == _fnVisbleColumns( oSettings ) &&
-		     columnCount == headerCells.length
-		) {
-			for ( i=0 ; i<columnCount ; i++ ) {
-				var colIdx = _fnVisibleToColumnIndex( oSettings, i );
-	
-				if ( colIdx !== null ) {
-					columns[ colIdx ].sWidth = _fnStringToCss( headerCells.eq(i).width() );
-				}
-			}
-		}
-		else
-		{
-			// Otherwise construct a single row, worst case, table with the widest
-			// node in the data, assign any user defined widths, then insert it into
-			// the DOM and allow the browser to do all the hard work of calculating
-			// table widths
-			var tmpTable = $(table).clone() // don't use cloneNode - IE8 will remove events on the main table
-				.css( 'visibility', 'hidden' )
-				.removeAttr( 'id' );
-	
-			// Clean up the table body
-			tmpTable.find('tbody tr').remove();
-			var tr = $('<tr/>').appendTo( tmpTable.find('tbody') );
-	
-			// Clone the table header and footer - we can't use the header / footer
-			// from the cloned table, since if scrolling is active, the table's
-			// real header and footer are contained in different table tags
-			tmpTable.find('thead, tfoot').remove();
-			tmpTable
-				.append( $(oSettings.nTHead).clone() )
-				.append( $(oSettings.nTFoot).clone() );
-	
-			// Remove any assigned widths from the footer (from scrolling)
-			tmpTable.find('tfoot th, tfoot td').css('width', '');
-	
-			// Apply custom sizing to the cloned header
-			headerCells = _fnGetUniqueThs( oSettings, tmpTable.find('thead')[0] );
-	
-			for ( i=0 ; i<visibleColumns.length ; i++ ) {
-				column = columns[ visibleColumns[i] ];
-	
-				headerCells[i].style.width = column.sWidthOrig !== null && column.sWidthOrig !== '' ?
-					_fnStringToCss( column.sWidthOrig ) :
-					'';
-	
-				// For scrollX we need to force the column width otherwise the
-				// browser will collapse it. If this width is smaller than the
-				// width the column requires, then it will have no effect
-				if ( column.sWidthOrig && scrollX ) {
-					$( headerCells[i] ).append( $('<div/>').css( {
-						width: column.sWidthOrig,
-						margin: 0,
-						padding: 0,
-						border: 0,
-						height: 1
-					} ) );
-				}
-			}
-	
-			// Find the widest cell for each column and put it into the table
-			if ( oSettings.aoData.length ) {
-				for ( i=0 ; i<visibleColumns.length ; i++ ) {
-					columnIdx = visibleColumns[i];
-					column = columns[ columnIdx ];
-	
-					$( _fnGetWidestNode( oSettings, columnIdx ) )
-						.clone( false )
-						.append( column.sContentPadding )
-						.appendTo( tr );
-				}
-			}
-	
-			// Tidy the temporary table - remove name attributes so there aren't
-			// duplicated in the dom (radio elements for example)
-			$('[name]', tmpTable).removeAttr('name');
-	
-			// Table has been built, attach to the document so we can work with it.
-			// A holding element is used, positioned at the top of the container
-			// with minimal height, so it has no effect on if the container scrolls
-			// or not. Otherwise it might trigger scrolling when it actually isn't
-			// needed
-			var holder = $('<div/>').css( scrollX || scrollY ?
-					{
-						position: 'absolute',
-						top: 0,
-						left: 0,
-						height: 1,
-						right: 0,
-						overflow: 'hidden'
-					} :
-					{}
-				)
-				.append( tmpTable )
-				.appendTo( tableContainer );
-	
-			// When scrolling (X or Y) we want to set the width of the table as 
-			// appropriate. However, when not scrolling leave the table width as it
-			// is. This results in slightly different, but I think correct behaviour
-			if ( scrollX && scrollXInner ) {
-				tmpTable.width( scrollXInner );
-			}
-			else if ( scrollX ) {
-				tmpTable.css( 'width', 'auto' );
-				tmpTable.removeAttr('width');
-	
-				// If there is no width attribute or style, then allow the table to
-				// collapse
-				if ( tmpTable.width() < tableContainer.clientWidth && tableWidthAttr ) {
-					tmpTable.width( tableContainer.clientWidth );
-				}
-			}
-			else if ( scrollY ) {
-				tmpTable.width( tableContainer.clientWidth );
-			}
-			else if ( tableWidthAttr ) {
-				tmpTable.width( tableWidthAttr );
-			}
-	
-			// Get the width of each column in the constructed table - we need to
-			// know the inner width (so it can be assigned to the other table's
-			// cells) and the outer width so we can calculate the full width of the
-			// table. This is safe since DataTables requires a unique cell for each
-			// column, but if ever a header can span multiple columns, this will
-			// need to be modified.
-			var total = 0;
-			for ( i=0 ; i<visibleColumns.length ; i++ ) {
-				var cell = $(headerCells[i]);
-				var border = cell.outerWidth() - cell.width();
-	
-				// Use getBounding... where possible (not IE8-) because it can give
-				// sub-pixel accuracy, which we then want to round up!
-				var bounding = browser.bBounding ?
-					Math.ceil( headerCells[i].getBoundingClientRect().width ) :
-					cell.outerWidth();
-	
-				// Total is tracked to remove any sub-pixel errors as the outerWidth
-				// of the table might not equal the total given here (IE!).
-				total += bounding;
-	
-				// Width for each column to use
-				columns[ visibleColumns[i] ].sWidth = _fnStringToCss( bounding - border );
-			}
-	
-			table.style.width = _fnStringToCss( total );
-	
-			// Finished with the table - ditch it
-			holder.remove();
-		}
-	
-		// If there is a width attr, we want to attach an event listener which
-		// allows the table sizing to automatically adjust when the window is
-		// resized. Use the width attr rather than CSS, since we can't know if the
-		// CSS is a relative value or absolute - DOM read is always px.
-		if ( tableWidthAttr ) {
-			table.style.width = _fnStringToCss( tableWidthAttr );
-		}
-	
-		if ( (tableWidthAttr || scrollX) && ! oSettings._reszEvt ) {
-			var bindResize = function () {
-				$(window).on('resize.DT-'+oSettings.sInstance, _fnThrottle( function () {
-					_fnAdjustColumnSizing( oSettings );
-				} ) );
-			};
-	
-			// IE6/7 will crash if we bind a resize event handler on page load.
-			// To be removed in 1.11 which drops IE6/7 support
-			if ( ie67 ) {
-				setTimeout( bindResize, 1000 );
-			}
-			else {
-				bindResize();
-			}
-	
-			oSettings._reszEvt = true;
-		}
-	}
-	
-	
-	/**
-	 * Throttle the calls to a function. Arguments and context are maintained for
-	 * the throttled function
-	 *  @param {function} fn Function to be called
-	 *  @param {int} [freq=200] call frequency in mS
-	 *  @returns {function} wrapped function
-	 *  @memberof DataTable#oApi
-	 */
-	var _fnThrottle = DataTable.util.throttle;
-	
-	
-	/**
-	 * Convert a CSS unit width to pixels (e.g. 2em)
-	 *  @param {string} width width to be converted
-	 *  @param {node} parent parent to get the with for (required for relative widths) - optional
-	 *  @returns {int} width in pixels
-	 *  @memberof DataTable#oApi
-	 */
-	function _fnConvertToWidth ( width, parent )
-	{
-		if ( ! width ) {
-			return 0;
-		}
-	
-		var n = $('<div/>')
-			.css( 'width', _fnStringToCss( width ) )
-			.appendTo( parent || document.body );
-	
-		var val = n[0].offsetWidth;
-		n.remove();
-	
-		return val;
-	}
-	
-	
-	/**
-	 * Get the widest node
-	 *  @param {object} settings dataTables settings object
-	 *  @param {int} colIdx column of interest
-	 *  @returns {node} widest table node
-	 *  @memberof DataTable#oApi
-	 */
-	function _fnGetWidestNode( settings, colIdx )
-	{
-		var idx = _fnGetMaxLenString( settings, colIdx );
-		if ( idx < 0 ) {
-			return null;
-		}
-	
-		var data = settings.aoData[ idx ];
-		return ! data.nTr ? // Might not have been created when deferred rendering
-			$('<td/>').html( _fnGetCellData( settings, idx, colIdx, 'display' ) )[0] :
-			data.anCells[ colIdx ];
-	}
-	
-	
-	/**
-	 * Get the maximum strlen for each data column
-	 *  @param {object} settings dataTables settings object
-	 *  @param {int} colIdx column of interest
-	 *  @returns {string} max string length for each column
-	 *  @memberof DataTable#oApi
-	 */
-	function _fnGetMaxLenString( settings, colIdx )
-	{
-		var s, max=-1, maxIdx = -1;
-	
-		for ( var i=0, ien=settings.aoData.length ; i<ien ; i++ ) {
-			s = _fnGetCellData( settings, i, colIdx, 'display' )+'';
-			s = s.replace( __re_html_remove, '' );
-			s = s.replace( /&nbsp;/g, ' ' );
-	
-			if ( s.length > max ) {
-				max = s.length;
-				maxIdx = i;
-			}
-		}
-	
-		return maxIdx;
-	}
-	
-	
-	/**
-	 * Append a CSS unit (only if required) to a string
-	 *  @param {string} value to css-ify
-	 *  @returns {string} value with css unit
-	 *  @memberof DataTable#oApi
-	 */
-	function _fnStringToCss( s )
-	{
-		if ( s === null ) {
-			return '0px';
-		}
-	
-		if ( typeof s == 'number' ) {
-			return s < 0 ?
-				'0px' :
-				s+'px';
-		}
-	
-		// Check it has a unit character already
-		return s.match(/\d$/) ?
-			s+'px' :
-			s;
-	}
-	
-	
-	
-	function _fnSortFlatten ( settings )
-	{
-		var
-			i, iLen, k, kLen,
-			aSort = [],
-			aiOrig = [],
-			aoColumns = settings.aoColumns,
-			aDataSort, iCol, sType, srcCol,
-			fixed = settings.aaSortingFixed,
-			fixedObj = $.isPlainObject( fixed ),
-			nestedSort = [],
-			add = function ( a ) {
-				if ( a.length && ! $.isArray( a[0] ) ) {
-					// 1D array
-					nestedSort.push( a );
-				}
-				else {
-					// 2D array
-					$.merge( nestedSort, a );
-				}
-			};
-	
-		// Build the sort array, with pre-fix and post-fix options if they have been
-		// specified
-		if ( $.isArray( fixed ) ) {
-			add( fixed );
-		}
-	
-		if ( fixedObj && fixed.pre ) {
-			add( fixed.pre );
-		}
-	
-		add( settings.aaSorting );
-	
-		if (fixedObj && fixed.post ) {
-			add( fixed.post );
-		}
-	
-		for ( i=0 ; i<nestedSort.length ; i++ )
-		{
-			srcCol = nestedSort[i][0];
-			aDataSort = aoColumns[ srcCol ].aDataSort;
-	
-			for ( k=0, kLen=aDataSort.length ; k<kLen ; k++ )
-			{
-				iCol = aDataSort[k];
-				sType = aoColumns[ iCol ].sType || 'string';
-	
-				if ( nestedSort[i]._idx === undefined ) {
-					nestedSort[i]._idx = $.inArray( nestedSort[i][1], aoColumns[iCol].asSorting );
-				}
-	
-				aSort.push( {
-					src:       srcCol,
-					col:       iCol,
-					dir:       nestedSort[i][1],
-					index:     nestedSort[i]._idx,
-					type:      sType,
-					formatter: DataTable.ext.type.order[ sType+"-pre" ]
-				} );
-			}
-		}
-	
-		return aSort;
-	}
-	
-	/**
-	 * Change the order of the table
-	 *  @param {object} oSettings dataTables settings object
-	 *  @memberof DataTable#oApi
-	 *  @todo This really needs split up!
-	 */
-	function _fnSort ( oSettings )
-	{
-		var
-			i, ien, iLen, j, jLen, k, kLen,
-			sDataType, nTh,
-			aiOrig = [],
-			oExtSort = DataTable.ext.type.order,
-			aoData = oSettings.aoData,
-			aoColumns = oSettings.aoColumns,
-			aDataSort, data, iCol, sType, oSort,
-			formatters = 0,
-			sortCol,
-			displayMaster = oSettings.aiDisplayMaster,
-			aSort;
-	
-		// Resolve any column types that are unknown due to addition or invalidation
-		// @todo Can this be moved into a 'data-ready' handler which is called when
-		//   data is going to be used in the table?
-		_fnColumnTypes( oSettings );
-	
-		aSort = _fnSortFlatten( oSettings );
-	
-		for ( i=0, ien=aSort.length ; i<ien ; i++ ) {
-			sortCol = aSort[i];
-	
-			// Track if we can use the fast sort algorithm
-			if ( sortCol.formatter ) {
-				formatters++;
-			}
-	
-			// Load the data needed for the sort, for each cell
-			_fnSortData( oSettings, sortCol.col );
-		}
-	
-		/* No sorting required if server-side or no sorting array */
-		if ( _fnDataSource( oSettings ) != 'ssp' && aSort.length !== 0 )
-		{
-			// Create a value - key array of the current row positions such that we can use their
-			// current position during the sort, if values match, in order to perform stable sorting
-			for ( i=0, iLen=displayMaster.length ; i<iLen ; i++ ) {
-				aiOrig[ displayMaster[i] ] = i;
-			}
-	
-			/* Do the sort - here we want multi-column sorting based on a given data source (column)
-			 * and sorting function (from oSort) in a certain direction. It's reasonably complex to
-			 * follow on it's own, but this is what we want (example two column sorting):
-			 *  fnLocalSorting = function(a,b){
-			 *    var iTest;
-			 *    iTest = oSort['string-asc']('data11', 'data12');
-			 *      if (iTest !== 0)
-			 *        return iTest;
-			 *    iTest = oSort['numeric-desc']('data21', 'data22');
-			 *    if (iTest !== 0)
-			 *      return iTest;
-			 *    return oSort['numeric-asc']( aiOrig[a], aiOrig[b] );
-			 *  }
-			 * Basically we have a test for each sorting column, if the data in that column is equal,
-			 * test the next column. If all columns match, then we use a numeric sort on the row
-			 * positions in the original data array to provide a stable sort.
-			 *
-			 * Note - I know it seems excessive to have two sorting methods, but the first is around
-			 * 15% faster, so the second is only maintained for backwards compatibility with sorting
-			 * methods which do not have a pre-sort formatting function.
-			 */
-			if ( formatters === aSort.length ) {
-				// All sort types have formatting functions
-				displayMaster.sort( function ( a, b ) {
-					var
-						x, y, k, test, sort,
-						len=aSort.length,
-						dataA = aoData[a]._aSortData,
-						dataB = aoData[b]._aSortData;
-	
-					for ( k=0 ; k<len ; k++ ) {
-						sort = aSort[k];
-	
-						x = dataA[ sort.col ];
-						y = dataB[ sort.col ];
-	
-						test = x<y ? -1 : x>y ? 1 : 0;
-						if ( test !== 0 ) {
-							return sort.dir === 'asc' ? test : -test;
-						}
-					}
-	
-					x = aiOrig[a];
-					y = aiOrig[b];
-					return x<y ? -1 : x>y ? 1 : 0;
-				} );
-			}
-			else {
-				// Depreciated - remove in 1.11 (providing a plug-in option)
-				// Not all sort types have formatting methods, so we have to call their sorting
-				// methods.
-				displayMaster.sort( function ( a, b ) {
-					var
-						x, y, k, l, test, sort, fn,
-						len=aSort.length,
-						dataA = aoData[a]._aSortData,
-						dataB = aoData[b]._aSortData;
-	
-					for ( k=0 ; k<len ; k++ ) {
-						sort = aSort[k];
-	
-						x = dataA[ sort.col ];
-						y = dataB[ sort.col ];
-	
-						fn = oExtSort[ sort.type+"-"+sort.dir ] || oExtSort[ "string-"+sort.dir ];
-						test = fn( x, y );
-						if ( test !== 0 ) {
-							return test;
-						}
-					}
-	
-					x = aiOrig[a];
-					y = aiOrig[b];
-					return x<y ? -1 : x>y ? 1 : 0;
-				} );
-			}
-		}
-	
-		/* Tell the draw function that we have sorted the data */
-		oSettings.bSorted = true;
-	}
-	
-	
-	function _fnSortAria ( settings )
-	{
-		var label;
-		var nextSort;
-		var columns = settings.aoColumns;
-		var aSort = _fnSortFlatten( settings );
-		var oAria = settings.oLanguage.oAria;
-	
-		// ARIA attributes - need to loop all columns, to update all (removing old
-		// attributes as needed)
-		for ( var i=0, iLen=columns.length ; i<iLen ; i++ )
-		{
-			var col = columns[i];
-			var asSorting = col.asSorting;
-			var sTitle = col.sTitle.replace( /<.*?>/g, "" );
-			var th = col.nTh;
-	
-			// IE7 is throwing an error when setting these properties with jQuery's
-			// attr() and removeAttr() methods...
-			th.removeAttribute('aria-sort');
-	
-			/* In ARIA only the first sorting column can be marked as sorting - no multi-sort option */
-			if ( col.bSortable ) {
-				if ( aSort.length > 0 && aSort[0].col == i ) {
-					th.setAttribute('aria-sort', aSort[0].dir=="asc" ? "ascending" : "descending" );
-					nextSort = asSorting[ aSort[0].index+1 ] || asSorting[0];
-				}
-				else {
-					nextSort = asSorting[0];
-				}
-	
-				label = sTitle + ( nextSort === "asc" ?
-					oAria.sSortAscending :
-					oAria.sSortDescending
-				);
-			}
-			else {
-				label = sTitle;
-			}
-	
-			th.setAttribute('aria-label', label);
-		}
-	}
-	
-	
-	/**
-	 * Function to run on user sort request
-	 *  @param {object} settings dataTables settings object
-	 *  @param {node} attachTo node to attach the handler to
-	 *  @param {int} colIdx column sorting index
-	 *  @param {boolean} [append=false] Append the requested sort to the existing
-	 *    sort if true (i.e. multi-column sort)
-	 *  @param {function} [callback] callback function
-	 *  @memberof DataTable#oApi
-	 */
-	function _fnSortListener ( settings, colIdx, append, callback )
-	{
-		var col = settings.aoColumns[ colIdx ];
-		var sorting = settings.aaSorting;
-		var asSorting = col.asSorting;
-		var nextSortIdx;
-		var next = function ( a, overflow ) {
-			var idx = a._idx;
-			if ( idx === undefined ) {
-				idx = $.inArray( a[1], asSorting );
-			}
-	
-			return idx+1 < asSorting.length ?
-				idx+1 :
-				overflow ?
-					null :
-					0;
-		};
-	
-		// Convert to 2D array if needed
-		if ( typeof sorting[0] === 'number' ) {
-			sorting = settings.aaSorting = [ sorting ];
-		}
-	
-		// If appending the sort then we are multi-column sorting
-		if ( append && settings.oFeatures.bSortMulti ) {
-			// Are we already doing some kind of sort on this column?
-			var sortIdx = $.inArray( colIdx, _pluck(sorting, '0') );
-	
-			if ( sortIdx !== -1 ) {
-				// Yes, modify the sort
-				nextSortIdx = next( sorting[sortIdx], true );
-	
-				if ( nextSortIdx === null && sorting.length === 1 ) {
-					nextSortIdx = 0; // can't remove sorting completely
-				}
-	
-				if ( nextSortIdx === null ) {
-					sorting.splice( sortIdx, 1 );
-				}
-				else {
-					sorting[sortIdx][1] = asSorting[ nextSortIdx ];
-					sorting[sortIdx]._idx = nextSortIdx;
-				}
-			}
-			else {
-				// No sort on this column yet
-				sorting.push( [ colIdx, asSorting[0], 0 ] );
-				sorting[sorting.length-1]._idx = 0;
-			}
-		}
-		else if ( sorting.length && sorting[0][0] == colIdx ) {
-			// Single column - already sorting on this column, modify the sort
-			nextSortIdx = next( sorting[0] );
-	
-			sorting.length = 1;
-			sorting[0][1] = asSorting[ nextSortIdx ];
-			sorting[0]._idx = nextSortIdx;
-		}
-		else {
-			// Single column - sort only on this column
-			sorting.length = 0;
-			sorting.push( [ colIdx, asSorting[0] ] );
-			sorting[0]._idx = 0;
-		}
-	
-		// Run the sort by calling a full redraw
-		_fnReDraw( settings );
-	
-		// callback used for async user interaction
-		if ( typeof callback == 'function' ) {
-			callback( settings );
-		}
-	}
-	
-	
-	/**
-	 * Attach a sort handler (click) to a node
-	 *  @param {object} settings dataTables settings object
-	 *  @param {node} attachTo node to attach the handler to
-	 *  @param {int} colIdx column sorting index
-	 *  @param {function} [callback] callback function
-	 *  @memberof DataTable#oApi
-	 */
-	function _fnSortAttachListener ( settings, attachTo, colIdx, callback )
-	{
-		var col = settings.aoColumns[ colIdx ];
-	
-		_fnBindAction( attachTo, {}, function (e) {
-			/* If the column is not sortable - don't to anything */
-			if ( col.bSortable === false ) {
-				return;
-			}
-	
-			// If processing is enabled use a timeout to allow the processing
-			// display to be shown - otherwise to it synchronously
-			if ( settings.oFeatures.bProcessing ) {
-				_fnProcessingDisplay( settings, true );
-	
-				setTimeout( function() {
-					_fnSortListener( settings, colIdx, e.shiftKey, callback );
-	
-					// In server-side processing, the draw callback will remove the
-					// processing display
-					if ( _fnDataSource( settings ) !== 'ssp' ) {
-						_fnProcessingDisplay( settings, false );
-					}
-				}, 0 );
-			}
-			else {
-				_fnSortListener( settings, colIdx, e.shiftKey, callback );
-			}
-		} );
-	}
-	
-	
-	/**
-	 * Set the sorting classes on table's body, Note: it is safe to call this function
-	 * when bSort and bSortClasses are false
-	 *  @param {object} oSettings dataTables settings object
-	 *  @memberof DataTable#oApi
-	 */
-	function _fnSortingClasses( settings )
-	{
-		var oldSort = settings.aLastSort;
-		var sortClass = settings.oClasses.sSortColumn;
-		var sort = _fnSortFlatten( settings );
-		var features = settings.oFeatures;
-		var i, ien, colIdx;
-	
-		if ( features.bSort && features.bSortClasses ) {
-			// Remove old sorting classes
-			for ( i=0, ien=oldSort.length ; i<ien ; i++ ) {
-				colIdx = oldSort[i].src;
-	
-				// Remove column sorting
-				$( _pluck( settings.aoData, 'anCells', colIdx ) )
-					.removeClass( sortClass + (i<2 ? i+1 : 3) );
-			}
-	
-			// Add new column sorting
-			for ( i=0, ien=sort.length ; i<ien ; i++ ) {
-				colIdx = sort[i].src;
-	
-				$( _pluck( settings.aoData, 'anCells', colIdx ) )
-					.addClass( sortClass + (i<2 ? i+1 : 3) );
-			}
-		}
-	
-		settings.aLastSort = sort;
-	}
-	
-	
-	// Get the data to sort a column, be it from cache, fresh (populating the
-	// cache), or from a sort formatter
-	function _fnSortData( settings, idx )
-	{
-		// Custom sorting function - provided by the sort data type
-		var column = settings.aoColumns[ idx ];
-		var customSort = DataTable.ext.order[ column.sSortDataType ];
-		var customData;
-	
-		if ( customSort ) {
-			customData = customSort.call( settings.oInstance, settings, idx,
-				_fnColumnIndexToVisible( settings, idx )
-			);
-		}
-	
-		// Use / populate cache
-		var row, cellData;
-		var formatter = DataTable.ext.type.order[ column.sType+"-pre" ];
-	
-		for ( var i=0, ien=settings.aoData.length ; i<ien ; i++ ) {
-			row = settings.aoData[i];
-	
-			if ( ! row._aSortData ) {
-				row._aSortData = [];
-			}
-	
-			if ( ! row._aSortData[idx] || customSort ) {
-				cellData = customSort ?
-					customData[i] : // If there was a custom sort function, use data from there
-					_fnGetCellData( settings, i, idx, 'sort' );
-	
-				row._aSortData[ idx ] = formatter ?
-					formatter( cellData ) :
-					cellData;
-			}
-		}
-	}
-	
-	
-	
-	/**
-	 * Save the state of a table
-	 *  @param {object} oSettings dataTables settings object
-	 *  @memberof DataTable#oApi
-	 */
-	function _fnSaveState ( settings )
-	{
-		if ( !settings.oFeatures.bStateSave || settings.bDestroying )
-		{
-			return;
-		}
-	
-		/* Store the interesting variables */
-		var state = {
-			time:    +new Date(),
-			start:   settings._iDisplayStart,
-			length:  settings._iDisplayLength,
-			order:   $.extend( true, [], settings.aaSorting ),
-			search:  _fnSearchToCamel( settings.oPreviousSearch ),
-			columns: $.map( settings.aoColumns, function ( col, i ) {
-				return {
-					visible: col.bVisible,
-					search: _fnSearchToCamel( settings.aoPreSearchCols[i] )
-				};
-			} )
-		};
-	
-		_fnCallbackFire( settings, "aoStateSaveParams", 'stateSaveParams', [settings, state] );
-	
-		settings.oSavedState = state;
-		settings.fnStateSaveCallback.call( settings.oInstance, settings, state );
-	}
-	
-	
-	/**
-	 * Attempt to load a saved table state
-	 *  @param {object} oSettings dataTables settings object
-	 *  @param {object} oInit DataTables init object so we can override settings
-	 *  @param {function} callback Callback to execute when the state has been loaded
-	 *  @memberof DataTable#oApi
-	 */
-	function _fnLoadState ( settings, oInit, callback )
-	{
-		var i, ien;
-		var columns = settings.aoColumns;
-		var loaded = function ( s ) {
-			if ( ! s || ! s.time ) {
-				callback();
-				return;
-			}
-	
-			// Allow custom and plug-in manipulation functions to alter the saved data set and
-			// cancelling of loading by returning false
-			var abStateLoad = _fnCallbackFire( settings, 'aoStateLoadParams', 'stateLoadParams', [settings, s] );
-			if ( $.inArray( false, abStateLoad ) !== -1 ) {
-				callback();
-				return;
-			}
-	
-			// Reject old data
-			var duration = settings.iStateDuration;
-			if ( duration > 0 && s.time < +new Date() - (duration*1000) ) {
-				callback();
-				return;
-			}
-	
-			// Number of columns have changed - all bets are off, no restore of settings
-			if ( s.columns && columns.length !== s.columns.length ) {
-				callback();
-				return;
-			}
-	
-			// Store the saved state so it might be accessed at any time
-			settings.oLoadedState = $.extend( true, {}, s );
-	
-			// Restore key features - todo - for 1.11 this needs to be done by
-			// subscribed events
-			if ( s.start !== undefined ) {
-				settings._iDisplayStart    = s.start;
-				settings.iInitDisplayStart = s.start;
-			}
-			if ( s.length !== undefined ) {
-				settings._iDisplayLength   = s.length;
-			}
-	
-			// Order
-			if ( s.order !== undefined ) {
-				settings.aaSorting = [];
-				$.each( s.order, function ( i, col ) {
-					settings.aaSorting.push( col[0] >= columns.length ?
-						[ 0, col[1] ] :
-						col
-					);
-				} );
-			}
-	
-			// Search
-			if ( s.search !== undefined ) {
-				$.extend( settings.oPreviousSearch, _fnSearchToHung( s.search ) );
-			}
-	
-			// Columns
-			//
-			if ( s.columns ) {
-				for ( i=0, ien=s.columns.length ; i<ien ; i++ ) {
-					var col = s.columns[i];
-	
-					// Visibility
-					if ( col.visible !== undefined ) {
-						columns[i].bVisible = col.visible;
-					}
-	
-					// Search
-					if ( col.search !== undefined ) {
-						$.extend( settings.aoPreSearchCols[i], _fnSearchToHung( col.search ) );
-					}
-				}
-			}
-	
-			_fnCallbackFire( settings, 'aoStateLoaded', 'stateLoaded', [settings, s] );
-			callback();
-		};
-	
-		if ( ! settings.oFeatures.bStateSave ) {
-			callback();
-			return;
-		}
-	
-		var state = settings.fnStateLoadCallback.call( settings.oInstance, settings, loaded );
-	
-		if ( state !== undefined ) {
-			loaded( state );
-		}
-		// otherwise, wait for the loaded callback to be executed
-	}
-	
-	
-	/**
-	 * Return the settings object for a particular table
-	 *  @param {node} table table we are using as a dataTable
-	 *  @returns {object} Settings object - or null if not found
-	 *  @memberof DataTable#oApi
-	 */
-	function _fnSettingsFromNode ( table )
-	{
-		var settings = DataTable.settings;
-		var idx = $.inArray( table, _pluck( settings, 'nTable' ) );
-	
-		return idx !== -1 ?
-			settings[ idx ] :
-			null;
-	}
-	
-	
-	/**
-	 * Log an error message
-	 *  @param {object} settings dataTables settings object
-	 *  @param {int} level log error messages, or display them to the user
-	 *  @param {string} msg error message
-	 *  @param {int} tn Technical note id to get more information about the error.
-	 *  @memberof DataTable#oApi
-	 */
-	function _fnLog( settings, level, msg, tn )
-	{
-		msg = 'DataTables warning: '+
-			(settings ? 'table id='+settings.sTableId+' - ' : '')+msg;
-	
-		if ( tn ) {
-			msg += '. For more information about this error, please see '+
-			'http://datatables.net/tn/'+tn;
-		}
-	
-		if ( ! level  ) {
-			// Backwards compatibility pre 1.10
-			var ext = DataTable.ext;
-			var type = ext.sErrMode || ext.errMode;
-	
-			if ( settings ) {
-				_fnCallbackFire( settings, null, 'error', [ settings, tn, msg ] );
-			}
-	
-			if ( type == 'alert' ) {
-				alert( msg );
-			}
-			else if ( type == 'throw' ) {
-				throw new Error(msg);
-			}
-			else if ( typeof type == 'function' ) {
-				type( settings, tn, msg );
-			}
-		}
-		else if ( window.console && console.log ) {
-			console.log( msg );
-		}
-	}
-	
-	
-	/**
-	 * See if a property is defined on one object, if so assign it to the other object
-	 *  @param {object} ret target object
-	 *  @param {object} src source object
-	 *  @param {string} name property
-	 *  @param {string} [mappedName] name to map too - optional, name used if not given
-	 *  @memberof DataTable#oApi
-	 */
-	function _fnMap( ret, src, name, mappedName )
-	{
-		if ( $.isArray( name ) ) {
-			$.each( name, function (i, val) {
-				if ( $.isArray( val ) ) {
-					_fnMap( ret, src, val[0], val[1] );
-				}
-				else {
-					_fnMap( ret, src, val );
-				}
-			} );
-	
-			return;
-		}
-	
-		if ( mappedName === undefined ) {
-			mappedName = name;
-		}
-	
-		if ( src[name] !== undefined ) {
-			ret[mappedName] = src[name];
-		}
-	}
-	
-	
-	/**
-	 * Extend objects - very similar to jQuery.extend, but deep copy objects, and
-	 * shallow copy arrays. The reason we need to do this, is that we don't want to
-	 * deep copy array init values (such as aaSorting) since the dev wouldn't be
-	 * able to override them, but we do want to deep copy arrays.
-	 *  @param {object} out Object to extend
-	 *  @param {object} extender Object from which the properties will be applied to
-	 *      out
-	 *  @param {boolean} breakRefs If true, then arrays will be sliced to take an
-	 *      independent copy with the exception of the `data` or `aaData` parameters
-	 *      if they are present. This is so you can pass in a collection to
-	 *      DataTables and have that used as your data source without breaking the
-	 *      references
-	 *  @returns {object} out Reference, just for convenience - out === the return.
-	 *  @memberof DataTable#oApi
-	 *  @todo This doesn't take account of arrays inside the deep copied objects.
-	 */
-	function _fnExtend( out, extender, breakRefs )
-	{
-		var val;
-	
-		for ( var prop in extender ) {
-			if ( extender.hasOwnProperty(prop) ) {
-				val = extender[prop];
-	
-				if ( $.isPlainObject( val ) ) {
-					if ( ! $.isPlainObject( out[prop] ) ) {
-						out[prop] = {};
-					}
-					$.extend( true, out[prop], val );
-				}
-				else if ( breakRefs && prop !== 'data' && prop !== 'aaData' && $.isArray(val) ) {
-					out[prop] = val.slice();
-				}
-				else {
-					out[prop] = val;
-				}
-			}
-		}
-	
-		return out;
-	}
-	
-	
-	/**
-	 * Bind an event handers to allow a click or return key to activate the callback.
-	 * This is good for accessibility since a return on the keyboard will have the
-	 * same effect as a click, if the element has focus.
-	 *  @param {element} n Element to bind the action to
-	 *  @param {object} oData Data object to pass to the triggered function
-	 *  @param {function} fn Callback function for when the event is triggered
-	 *  @memberof DataTable#oApi
-	 */
-	function _fnBindAction( n, oData, fn )
-	{
-		$(n)
-			.on( 'click.DT', oData, function (e) {
-					$(n).trigger('blur'); // Remove focus outline for mouse users
-					fn(e);
-				} )
-			.on( 'keypress.DT', oData, function (e){
-					if ( e.which === 13 ) {
-						e.preventDefault();
-						fn(e);
-					}
-				} )
-			.on( 'selectstart.DT', function () {
-					/* Take the brutal approach to cancelling text selection */
-					return false;
-				} );
-	}
-	
-	
-	/**
-	 * Register a callback function. Easily allows a callback function to be added to
-	 * an array store of callback functions that can then all be called together.
-	 *  @param {object} oSettings dataTables settings object
-	 *  @param {string} sStore Name of the array storage for the callbacks in oSettings
-	 *  @param {function} fn Function to be called back
-	 *  @param {string} sName Identifying name for the callback (i.e. a label)
-	 *  @memberof DataTable#oApi
-	 */
-	function _fnCallbackReg( oSettings, sStore, fn, sName )
-	{
-		if ( fn )
-		{
-			oSettings[sStore].push( {
-				"fn": fn,
-				"sName": sName
-			} );
-		}
-	}
-	
-	
-	/**
-	 * Fire callback functions and trigger events. Note that the loop over the
-	 * callback array store is done backwards! Further note that you do not want to
-	 * fire off triggers in time sensitive applications (for example cell creation)
-	 * as its slow.
-	 *  @param {object} settings dataTables settings object
-	 *  @param {string} callbackArr Name of the array storage for the callbacks in
-	 *      oSettings
-	 *  @param {string} eventName Name of the jQuery custom event to trigger. If
-	 *      null no trigger is fired
-	 *  @param {array} args Array of arguments to pass to the callback function /
-	 *      trigger
-	 *  @memberof DataTable#oApi
-	 */
-	function _fnCallbackFire( settings, callbackArr, eventName, args )
-	{
-		var ret = [];
-	
-		if ( callbackArr ) {
-			ret = $.map( settings[callbackArr].slice().reverse(), function (val, i) {
-				return val.fn.apply( settings.oInstance, args );
-			} );
-		}
-	
-		if ( eventName !== null ) {
-			var e = $.Event( eventName+'.dt' );
-	
-			$(settings.nTable).trigger( e, args );
-	
-			ret.push( e.result );
-		}
-	
-		return ret;
-	}
-	
-	
-	function _fnLengthOverflow ( settings )
-	{
-		var
-			start = settings._iDisplayStart,
-			end = settings.fnDisplayEnd(),
-			len = settings._iDisplayLength;
-	
-		/* If we have space to show extra rows (backing up from the end point - then do so */
-		if ( start >= end )
-		{
-			start = end - len;
-		}
-	
-		// Keep the start record on the current page
-		start -= (start % len);
-	
-		if ( len === -1 || start < 0 )
-		{
-			start = 0;
-		}
-	
-		settings._iDisplayStart = start;
-	}
-	
-	
-	function _fnRenderer( settings, type )
-	{
-		var renderer = settings.renderer;
-		var host = DataTable.ext.renderer[type];
-	
-		if ( $.isPlainObject( renderer ) && renderer[type] ) {
-			// Specific renderer for this type. If available use it, otherwise use
-			// the default.
-			return host[renderer[type]] || host._;
-		}
-		else if ( typeof renderer === 'string' ) {
-			// Common renderer - if there is one available for this type use it,
-			// otherwise use the default
-			return host[renderer] || host._;
-		}
-	
-		// Use the default
-		return host._;
-	}
-	
-	
-	/**
-	 * Detect the data source being used for the table. Used to simplify the code
-	 * a little (ajax) and to make it compress a little smaller.
-	 *
-	 *  @param {object} settings dataTables settings object
-	 *  @returns {string} Data source
-	 *  @memberof DataTable#oApi
-	 */
-	function _fnDataSource ( settings )
-	{
-		if ( settings.oFeatures.bServerSide ) {
-			return 'ssp';
-		}
-		else if ( settings.ajax || settings.sAjaxSource ) {
-			return 'ajax';
-		}
-		return 'dom';
-	}
-	
-
-	
-	
-	/**
-	 * Computed structure of the DataTables API, defined by the options passed to
-	 * `DataTable.Api.register()` when building the API.
-	 *
-	 * The structure is built in order to speed creation and extension of the Api
-	 * objects since the extensions are effectively pre-parsed.
-	 *
-	 * The array is an array of objects with the following structure, where this
-	 * base array represents the Api prototype base:
-	 *
-	 *     [
-	 *       {
-	 *         name:      'data'                -- string   - Property name
-	 *         val:       function () {},       -- function - Api method (or undefined if just an object
-	 *         methodExt: [ ... ],              -- array    - Array of Api object definitions to extend the method result
-	 *         propExt:   [ ... ]               -- array    - Array of Api object definitions to extend the property
-	 *       },
-	 *       {
-	 *         name:     'row'
-	 *         val:       {},
-	 *         methodExt: [ ... ],
-	 *         propExt:   [
-	 *           {
-	 *             name:      'data'
-	 *             val:       function () {},
-	 *             methodExt: [ ... ],
-	 *             propExt:   [ ... ]
-	 *           },
-	 *           ...
-	 *         ]
-	 *       }
-	 *     ]
-	 *
-	 * @type {Array}
-	 * @ignore
-	 */
-	var __apiStruct = [];
-	
-	
-	/**
-	 * `Array.prototype` reference.
-	 *
-	 * @type object
-	 * @ignore
-	 */
-	var __arrayProto = Array.prototype;
-	
-	
-	/**
-	 * Abstraction for `context` parameter of the `Api` constructor to allow it to
-	 * take several different forms for ease of use.
-	 *
-	 * Each of the input parameter types will be converted to a DataTables settings
-	 * object where possible.
-	 *
-	 * @param  {string|node|jQuery|object} mixed DataTable identifier. Can be one
-	 *   of:
-	 *
-	 *   * `string` - jQuery selector. Any DataTables' matching the given selector
-	 *     with be found and used.
-	 *   * `node` - `TABLE` node which has already been formed into a DataTable.
-	 *   * `jQuery` - A jQuery object of `TABLE` nodes.
-	 *   * `object` - DataTables settings object
-	 *   * `DataTables.Api` - API instance
-	 * @return {array|null} Matching DataTables settings objects. `null` or
-	 *   `undefined` is returned if no matching DataTable is found.
-	 * @ignore
-	 */
-	var _toSettings = function ( mixed )
-	{
-		var idx, jq;
-		var settings = DataTable.settings;
-		var tables = $.map( settings, function (el, i) {
-			return el.nTable;
-		} );
-	
-		if ( ! mixed ) {
-			return [];
-		}
-		else if ( mixed.nTable && mixed.oApi ) {
-			// DataTables settings object
-			return [ mixed ];
-		}
-		else if ( mixed.nodeName && mixed.nodeName.toLowerCase() === 'table' ) {
-			// Table node
-			idx = $.inArray( mixed, tables );
-			return idx !== -1 ? [ settings[idx] ] : null;
-		}
-		else if ( mixed && typeof mixed.settings === 'function' ) {
-			return mixed.settings().toArray();
-		}
-		else if ( typeof mixed === 'string' ) {
-			// jQuery selector
-			jq = $(mixed);
-		}
-		else if ( mixed instanceof $ ) {
-			// jQuery object (also DataTables instance)
-			jq = mixed;
-		}
-	
-		if ( jq ) {
-			return jq.map( function(i) {
-				idx = $.inArray( this, tables );
-				return idx !== -1 ? settings[idx] : null;
-			} ).toArray();
-		}
-	};
-	
-	
-	/**
-	 * DataTables API class - used to control and interface with  one or more
-	 * DataTables enhanced tables.
-	 *
-	 * The API class is heavily based on jQuery, presenting a chainable interface
-	 * that you can use to interact with tables. Each instance of the API class has
-	 * a "context" - i.e. the tables that it will operate on. This could be a single
-	 * table, all tables on a page or a sub-set thereof.
-	 *
-	 * Additionally the API is designed to allow you to easily work with the data in
-	 * the tables, retrieving and manipulating it as required. This is done by
-	 * presenting the API class as an array like interface. The contents of the
-	 * array depend upon the actions requested by each method (for example
-	 * `rows().nodes()` will return an array of nodes, while `rows().data()` will
-	 * return an array of objects or arrays depending upon your table's
-	 * configuration). The API object has a number of array like methods (`push`,
-	 * `pop`, `reverse` etc) as well as additional helper methods (`each`, `pluck`,
-	 * `unique` etc) to assist your working with the data held in a table.
-	 *
-	 * Most methods (those which return an Api instance) are chainable, which means
-	 * the return from a method call also has all of the methods available that the
-	 * top level object had. For example, these two calls are equivalent:
-	 *
-	 *     // Not chained
-	 *     api.row.add( {...} );
-	 *     api.draw();
-	 *
-	 *     // Chained
-	 *     api.row.add( {...} ).draw();
-	 *
-	 * @class DataTable.Api
-	 * @param {array|object|string|jQuery} context DataTable identifier. This is
-	 *   used to define which DataTables enhanced tables this API will operate on.
-	 *   Can be one of:
-	 *
-	 *   * `string` - jQuery selector. Any DataTables' matching the given selector
-	 *     with be found and used.
-	 *   * `node` - `TABLE` node which has already been formed into a DataTable.
-	 *   * `jQuery` - A jQuery object of `TABLE` nodes.
-	 *   * `object` - DataTables settings object
-	 * @param {array} [data] Data to initialise the Api instance with.
-	 *
-	 * @example
-	 *   // Direct initialisation during DataTables construction
-	 *   var api = $('#example').DataTable();
-	 *
-	 * @example
-	 *   // Initialisation using a DataTables jQuery object
-	 *   var api = $('#example').dataTable().api();
-	 *
-	 * @example
-	 *   // Initialisation as a constructor
-	 *   var api = new $.fn.DataTable.Api( 'table.dataTable' );
-	 */
-	_Api = function ( context, data )
-	{
-		if ( ! (this instanceof _Api) ) {
-			return new _Api( context, data );
-		}
-	
-		var settings = [];
-		var ctxSettings = function ( o ) {
-			var a = _toSettings( o );
-			if ( a ) {
-				settings.push.apply( settings, a );
-			}
-		};
-	
-		if ( $.isArray( context ) ) {
-			for ( var i=0, ien=context.length ; i<ien ; i++ ) {
-				ctxSettings( context[i] );
-			}
-		}
-		else {
-			ctxSettings( context );
-		}
-	
-		// Remove duplicates
-		this.context = _unique( settings );
-	
-		// Initial data
-		if ( data ) {
-			$.merge( this, data );
-		}
-	
-		// selector
-		this.selector = {
-			rows: null,
-			cols: null,
-			opts: null
-		};
-	
-		_Api.extend( this, this, __apiStruct );
-	};
-	
-	DataTable.Api = _Api;
-	
-	// Don't destroy the existing prototype, just extend it. Required for jQuery 2's
-	// isPlainObject.
-	$.extend( _Api.prototype, {
-		any: function ()
-		{
-			return this.count() !== 0;
-		},
-	
-	
-		concat:  __arrayProto.concat,
-	
-	
-		context: [], // array of table settings objects
-	
-	
-		count: function ()
-		{
-			return this.flatten().length;
-		},
-	
-	
-		each: function ( fn )
-		{
-			for ( var i=0, ien=this.length ; i<ien; i++ ) {
-				fn.call( this, this[i], i, this );
-			}
-	
-			return this;
-		},
-	
-	
-		eq: function ( idx )
-		{
-			var ctx = this.context;
-	
-			return ctx.length > idx ?
-				new _Api( ctx[idx], this[idx] ) :
-				null;
-		},
-	
-	
-		filter: function ( fn )
-		{
-			var a = [];
-	
-			if ( __arrayProto.filter ) {
-				a = __arrayProto.filter.call( this, fn, this );
-			}
-			else {
-				// Compatibility for browsers without EMCA-252-5 (JS 1.6)
-				for ( var i=0, ien=this.length ; i<ien ; i++ ) {
-					if ( fn.call( this, this[i], i, this ) ) {
-						a.push( this[i] );
-					}
-				}
-			}
-	
-			return new _Api( this.context, a );
-		},
-	
-	
-		flatten: function ()
-		{
-			var a = [];
-			return new _Api( this.context, a.concat.apply( a, this.toArray() ) );
-		},
-	
-	
-		join:    __arrayProto.join,
-	
-	
-		indexOf: __arrayProto.indexOf || function (obj, start)
-		{
-			for ( var i=(start || 0), ien=this.length ; i<ien ; i++ ) {
-				if ( this[i] === obj ) {
-					return i;
-				}
-			}
-			return -1;
-		},
-	
-		iterator: function ( flatten, type, fn, alwaysNew ) {
-			var
-				a = [], ret,
-				i, ien, j, jen,
-				context = this.context,
-				rows, items, item,
-				selector = this.selector;
-	
-			// Argument shifting
-			if ( typeof flatten === 'string' ) {
-				alwaysNew = fn;
-				fn = type;
-				type = flatten;
-				flatten = false;
-			}
-	
-			for ( i=0, ien=context.length ; i<ien ; i++ ) {
-				var apiInst = new _Api( context[i] );
-	
-				if ( type === 'table' ) {
-					ret = fn.call( apiInst, context[i], i );
-	
-					if ( ret !== undefined ) {
-						a.push( ret );
-					}
-				}
-				else if ( type === 'columns' || type === 'rows' ) {
-					// this has same length as context - one entry for each table
-					ret = fn.call( apiInst, context[i], this[i], i );
-	
-					if ( ret !== undefined ) {
-						a.push( ret );
-					}
-				}
-				else if ( type === 'column' || type === 'column-rows' || type === 'row' || type === 'cell' ) {
-					// columns and rows share the same structure.
-					// 'this' is an array of column indexes for each context
-					items = this[i];
-	
-					if ( type === 'column-rows' ) {
-						rows = _selector_row_indexes( context[i], selector.opts );
-					}
-	
-					for ( j=0, jen=items.length ; j<jen ; j++ ) {
-						item = items[j];
-	
-						if ( type === 'cell' ) {
-							ret = fn.call( apiInst, context[i], item.row, item.column, i, j );
-						}
-						else {
-							ret = fn.call( apiInst, context[i], item, i, j, rows );
-						}
-	
-						if ( ret !== undefined ) {
-							a.push( ret );
-						}
-					}
-				}
-			}
-	
-			if ( a.length || alwaysNew ) {
-				var api = new _Api( context, flatten ? a.concat.apply( [], a ) : a );
-				var apiSelector = api.selector;
-				apiSelector.rows = selector.rows;
-				apiSelector.cols = selector.cols;
-				apiSelector.opts = selector.opts;
-				return api;
-			}
-			return this;
-		},
-	
-	
-		lastIndexOf: __arrayProto.lastIndexOf || function (obj, start)
-		{
-			// Bit cheeky...
-			return this.indexOf.apply( this.toArray.reverse(), arguments );
-		},
-	
-	
-		length:  0,
-	
-	
-		map: function ( fn )
-		{
-			var a = [];
-	
-			if ( __arrayProto.map ) {
-				a = __arrayProto.map.call( this, fn, this );
-			}
-			else {
-				// Compatibility for browsers without EMCA-252-5 (JS 1.6)
-				for ( var i=0, ien=this.length ; i<ien ; i++ ) {
-					a.push( fn.call( this, this[i], i ) );
-				}
-			}
-	
-			return new _Api( this.context, a );
-		},
-	
-	
-		pluck: function ( prop )
-		{
-			return this.map( function ( el ) {
-				return el[ prop ];
-			} );
-		},
-	
-		pop:     __arrayProto.pop,
-	
-	
-		push:    __arrayProto.push,
-	
-	
-		// Does not return an API instance
-		reduce: __arrayProto.reduce || function ( fn, init )
-		{
-			return _fnReduce( this, fn, init, 0, this.length, 1 );
-		},
-	
-	
-		reduceRight: __arrayProto.reduceRight || function ( fn, init )
-		{
-			return _fnReduce( this, fn, init, this.length-1, -1, -1 );
-		},
-	
-	
-		reverse: __arrayProto.reverse,
-	
-	
-		// Object with rows, columns and opts
-		selector: null,
-	
-	
-		shift:   __arrayProto.shift,
-	
-	
-		slice: function () {
-			return new _Api( this.context, this );
-		},
-	
-	
-		sort:    __arrayProto.sort, // ? name - order?
-	
-	
-		splice:  __arrayProto.splice,
-	
-	
-		toArray: function ()
-		{
-			return __arrayProto.slice.call( this );
-		},
-	
-	
-		to$: function ()
-		{
-			return $( this );
-		},
-	
-	
-		toJQuery: function ()
-		{
-			return $( this );
-		},
-	
-	
-		unique: function ()
-		{
-			return new _Api( this.context, _unique(this) );
-		},
-	
-	
-		unshift: __arrayProto.unshift
-	} );
-	
-	
-	_Api.extend = function ( scope, obj, ext )
-	{
-		// Only extend API instances and static properties of the API
-		if ( ! ext.length || ! obj || ( ! (obj instanceof _Api) && ! obj.__dt_wrapper ) ) {
-			return;
-		}
-	
-		var
-			i, ien,
-			struct,
-			methodScoping = function ( scope, fn, struc ) {
-				return function () {
-					var ret = fn.apply( scope, arguments );
-	
-					// Method extension
-					_Api.extend( ret, ret, struc.methodExt );
-					return ret;
-				};
-			};
-	
-		for ( i=0, ien=ext.length ; i<ien ; i++ ) {
-			struct = ext[i];
-	
-			// Value
-			obj[ struct.name ] = struct.type === 'function' ?
-				methodScoping( scope, struct.val, struct ) :
-				struct.type === 'object' ?
-					{} :
-					struct.val;
-	
-			obj[ struct.name ].__dt_wrapper = true;
-	
-			// Property extension
-			_Api.extend( scope, obj[ struct.name ], struct.propExt );
-		}
-	};
-	
-	
-	// @todo - Is there need for an augment function?
-	// _Api.augment = function ( inst, name )
-	// {
-	// 	// Find src object in the structure from the name
-	// 	var parts = name.split('.');
-	
-	// 	_Api.extend( inst, obj );
-	// };
-	
-	
-	//     [
-	//       {
-	//         name:      'data'                -- string   - Property name
-	//         val:       function () {},       -- function - Api method (or undefined if just an object
-	//         methodExt: [ ... ],              -- array    - Array of Api object definitions to extend the method result
-	//         propExt:   [ ... ]               -- array    - Array of Api object definitions to extend the property
-	//       },
-	//       {
-	//         name:     'row'
-	//         val:       {},
-	//         methodExt: [ ... ],
-	//         propExt:   [
-	//           {
-	//             name:      'data'
-	//             val:       function () {},
-	//             methodExt: [ ... ],
-	//             propExt:   [ ... ]
-	//           },
-	//           ...
-	//         ]
-	//       }
-	//     ]
-	
-	_Api.register = _api_register = function ( name, val )
-	{
-		if ( $.isArray( name ) ) {
-			for ( var j=0, jen=name.length ; j<jen ; j++ ) {
-				_Api.register( name[j], val );
-			}
-			return;
-		}
-	
-		var
-			i, ien,
-			heir = name.split('.'),
-			struct = __apiStruct,
-			key, method;
-	
-		var find = function ( src, name ) {
-			for ( var i=0, ien=src.length ; i<ien ; i++ ) {
-				if ( src[i].name === name ) {
-					return src[i];
-				}
-			}
-			return null;
-		};
-	
-		for ( i=0, ien=heir.length ; i<ien ; i++ ) {
-			method = heir[i].indexOf('()') !== -1;
-			key = method ?
-				heir[i].replace('()', '') :
-				heir[i];
-	
-			var src = find( struct, key );
-			if ( ! src ) {
-				src = {
-					name:      key,
-					val:       {},
-					methodExt: [],
-					propExt:   [],
-					type:      'object'
-				};
-				struct.push( src );
-			}
-	
-			if ( i === ien-1 ) {
-				src.val = val;
-				src.type = typeof val === 'function' ?
-					'function' :
-					$.isPlainObject( val ) ?
-						'object' :
-						'other';
-			}
-			else {
-				struct = method ?
-					src.methodExt :
-					src.propExt;
-			}
-		}
-	};
-	
-	_Api.registerPlural = _api_registerPlural = function ( pluralName, singularName, val ) {
-		_Api.register( pluralName, val );
-	
-		_Api.register( singularName, function () {
-			var ret = val.apply( this, arguments );
-	
-			if ( ret === this ) {
-				// Returned item is the API instance that was passed in, return it
-				return this;
-			}
-			else if ( ret instanceof _Api ) {
-				// New API instance returned, want the value from the first item
-				// in the returned array for the singular result.
-				return ret.length ?
-					$.isArray( ret[0] ) ?
-						new _Api( ret.context, ret[0] ) : // Array results are 'enhanced'
-						ret[0] :
-					undefined;
-			}
-	
-			// Non-API return - just fire it back
-			return ret;
-		} );
-	};
-	
-	
-	/**
-	 * Selector for HTML tables. Apply the given selector to the give array of
-	 * DataTables settings objects.
-	 *
-	 * @param {string|integer} [selector] jQuery selector string or integer
-	 * @param  {array} Array of DataTables settings objects to be filtered
-	 * @return {array}
-	 * @ignore
-	 */
-	var __table_selector = function ( selector, a )
-	{
-		if ( $.isArray(selector) ) {
-			return $.map( selector, function (item) {
-				return __table_selector(item, a);
-			} );
-		}
-	
-		// Integer is used to pick out a table by index
-		if ( typeof selector === 'number' ) {
-			return [ a[ selector ] ];
-		}
-	
-		// Perform a jQuery selector on the table nodes
-		var nodes = $.map( a, function (el, i) {
-			return el.nTable;
-		} );
-	
-		return $(nodes)
-			.filter( selector )
-			.map( function (i) {
-				// Need to translate back from the table node to the settings
-				var idx = $.inArray( this, nodes );
-				return a[ idx ];
-			} )
-			.toArray();
-	};
-	
-	
-	
-	/**
-	 * Context selector for the API's context (i.e. the tables the API instance
-	 * refers to.
-	 *
-	 * @name    DataTable.Api#tables
-	 * @param {string|integer} [selector] Selector to pick which tables the iterator
-	 *   should operate on. If not given, all tables in the current context are
-	 *   used. This can be given as a jQuery selector (for example `':gt(0)'`) to
-	 *   select multiple tables or as an integer to select a single table.
-	 * @returns {DataTable.Api} Returns a new API instance if a selector is given.
-	 */
-	_api_register( 'tables()', function ( selector ) {
-		// A new instance is created if there was a selector specified
-		return selector !== undefined && selector !== null ?
-			new _Api( __table_selector( selector, this.context ) ) :
-			this;
-	} );
-	
-	
-	_api_register( 'table()', function ( selector ) {
-		var tables = this.tables( selector );
-		var ctx = tables.context;
-	
-		// Truncate to the first matched table
-		return ctx.length ?
-			new _Api( ctx[0] ) :
-			tables;
-	} );
-	
-	
-	_api_registerPlural( 'tables().nodes()', 'table().node()' , function () {
-		return this.iterator( 'table', function ( ctx ) {
-			return ctx.nTable;
-		}, 1 );
-	} );
-	
-	
-	_api_registerPlural( 'tables().body()', 'table().body()' , function () {
-		return this.iterator( 'table', function ( ctx ) {
-			return ctx.nTBody;
-		}, 1 );
-	} );
-	
-	
-	_api_registerPlural( 'tables().header()', 'table().header()' , function () {
-		return this.iterator( 'table', function ( ctx ) {
-			return ctx.nTHead;
-		}, 1 );
-	} );
-	
-	
-	_api_registerPlural( 'tables().footer()', 'table().footer()' , function () {
-		return this.iterator( 'table', function ( ctx ) {
-			return ctx.nTFoot;
-		}, 1 );
-	} );
-	
-	
-	_api_registerPlural( 'tables().containers()', 'table().container()' , function () {
-		return this.iterator( 'table', function ( ctx ) {
-			return ctx.nTableWrapper;
-		}, 1 );
-	} );
-	
-	
-	
-	/**
-	 * Redraw the tables in the current context.
-	 */
-	_api_register( 'draw()', function ( paging ) {
-		return this.iterator( 'table', function ( settings ) {
-			if ( paging === 'page' ) {
-				_fnDraw( settings );
-			}
-			else {
-				if ( typeof paging === 'string' ) {
-					paging = paging === 'full-hold' ?
-						false :
-						true;
-				}
-	
-				_fnReDraw( settings, paging===false );
-			}
-		} );
-	} );
-	
-	
-	
-	/**
-	 * Get the current page index.
-	 *
-	 * @return {integer} Current page index (zero based)
-	 *//**
-	 * Set the current page.
-	 *
-	 * Note that if you attempt to show a page which does not exist, DataTables will
-	 * not throw an error, but rather reset the paging.
-	 *
-	 * @param {integer|string} action The paging action to take. This can be one of:
-	 *  * `integer` - The page index to jump to
-	 *  * `string` - An action to take:
-	 *    * `first` - Jump to first page.
-	 *    * `next` - Jump to the next page
-	 *    * `previous` - Jump to previous page
-	 *    * `last` - Jump to the last page.
-	 * @returns {DataTables.Api} this
-	 */
-	_api_register( 'page()', function ( action ) {
-		if ( action === undefined ) {
-			return this.page.info().page; // not an expensive call
-		}
-	
-		// else, have an action to take on all tables
-		return this.iterator( 'table', function ( settings ) {
-			_fnPageChange( settings, action );
-		} );
-	} );
-	
-	
-	/**
-	 * Paging information for the first table in the current context.
-	 *
-	 * If you require paging information for another table, use the `table()` method
-	 * with a suitable selector.
-	 *
-	 * @return {object} Object with the following properties set:
-	 *  * `page` - Current page index (zero based - i.e. the first page is `0`)
-	 *  * `pages` - Total number of pages
-	 *  * `start` - Display index for the first record shown on the current page
-	 *  * `end` - Display index for the last record shown on the current page
-	 *  * `length` - Display length (number of records). Note that generally `start
-	 *    + length = end`, but this is not always true, for example if there are
-	 *    only 2 records to show on the final page, with a length of 10.
-	 *  * `recordsTotal` - Full data set length
-	 *  * `recordsDisplay` - Data set length once the current filtering criterion
-	 *    are applied.
-	 */
-	_api_register( 'page.info()', function ( action ) {
-		if ( this.context.length === 0 ) {
-			return undefined;
-		}
-	
-		var
-			settings   = this.context[0],
-			start      = settings._iDisplayStart,
-			len        = settings.oFeatures.bPaginate ? settings._iDisplayLength : -1,
-			visRecords = settings.fnRecordsDisplay(),
-			all        = len === -1;
-	
-		return {
-			"page":           all ? 0 : Math.floor( start / len ),
-			"pages":          all ? 1 : Math.ceil( visRecords / len ),
-			"start":          start,
-			"end":            settings.fnDisplayEnd(),
-			"length":         len,
-			"recordsTotal":   settings.fnRecordsTotal(),
-			"recordsDisplay": visRecords,
-			"serverSide":     _fnDataSource( settings ) === 'ssp'
-		};
-	} );
-	
-	
-	/**
-	 * Get the current page length.
-	 *
-	 * @return {integer} Current page length. Note `-1` indicates that all records
-	 *   are to be shown.
-	 *//**
-	 * Set the current page length.
-	 *
-	 * @param {integer} Page length to set. Use `-1` to show all records.
-	 * @returns {DataTables.Api} this
-	 */
-	_api_register( 'page.len()', function ( len ) {
-		// Note that we can't call this function 'length()' because `length`
-		// is a Javascript property of functions which defines how many arguments
-		// the function expects.
-		if ( len === undefined ) {
-			return this.context.length !== 0 ?
-				this.context[0]._iDisplayLength :
-				undefined;
-		}
-	
-		// else, set the page length
-		return this.iterator( 'table', function ( settings ) {
-			_fnLengthChange( settings, len );
-		} );
-	} );
-	
-	
-	
-	var __reload = function ( settings, holdPosition, callback ) {
-		// Use the draw event to trigger a callback
-		if ( callback ) {
-			var api = new _Api( settings );
-	
-			api.one( 'draw', function () {
-				callback( api.ajax.json() );
-			} );
-		}
-	
-		if ( _fnDataSource( settings ) == 'ssp' ) {
-			_fnReDraw( settings, holdPosition );
-		}
-		else {
-			_fnProcessingDisplay( settings, true );
-	
-			// Cancel an existing request
-			var xhr = settings.jqXHR;
-			if ( xhr && xhr.readyState !== 4 ) {
-				xhr.abort();
-			}
-	
-			// Trigger xhr
-			_fnBuildAjax( settings, [], function( json ) {
-				_fnClearTable( settings );
-	
-				var data = _fnAjaxDataSrc( settings, json );
-				for ( var i=0, ien=data.length ; i<ien ; i++ ) {
-					_fnAddData( settings, data[i] );
-				}
-	
-				_fnReDraw( settings, holdPosition );
-				_fnProcessingDisplay( settings, false );
-			} );
-		}
-	};
-	
-	
-	/**
-	 * Get the JSON response from the last Ajax request that DataTables made to the
-	 * server. Note that this returns the JSON from the first table in the current
-	 * context.
-	 *
-	 * @return {object} JSON received from the server.
-	 */
-	_api_register( 'ajax.json()', function () {
-		var ctx = this.context;
-	
-		if ( ctx.length > 0 ) {
-			return ctx[0].json;
-		}
-	
-		// else return undefined;
-	} );
-	
-	
-	/**
-	 * Get the data submitted in the last Ajax request
-	 */
-	_api_register( 'ajax.params()', function () {
-		var ctx = this.context;
-	
-		if ( ctx.length > 0 ) {
-			return ctx[0].oAjaxData;
-		}
-	
-		// else return undefined;
-	} );
-	
-	
-	/**
-	 * Reload tables from the Ajax data source. Note that this function will
-	 * automatically re-draw the table when the remote data has been loaded.
-	 *
-	 * @param {boolean} [reset=true] Reset (default) or hold the current paging
-	 *   position. A full re-sort and re-filter is performed when this method is
-	 *   called, which is why the pagination reset is the default action.
-	 * @returns {DataTables.Api} this
-	 */
-	_api_register( 'ajax.reload()', function ( callback, resetPaging ) {
-		return this.iterator( 'table', function (settings) {
-			__reload( settings, resetPaging===false, callback );
-		} );
-	} );
-	
-	
-	/**
-	 * Get the current Ajax URL. Note that this returns the URL from the first
-	 * table in the current context.
-	 *
-	 * @return {string} Current Ajax source URL
-	 *//**
-	 * Set the Ajax URL. Note that this will set the URL for all tables in the
-	 * current context.
-	 *
-	 * @param {string} url URL to set.
-	 * @returns {DataTables.Api} this
-	 */
-	_api_register( 'ajax.url()', function ( url ) {
-		var ctx = this.context;
-	
-		if ( url === undefined ) {
-			// get
-			if ( ctx.length === 0 ) {
-				return undefined;
-			}
-			ctx = ctx[0];
-	
-			return ctx.ajax ?
-				$.isPlainObject( ctx.ajax ) ?
-					ctx.ajax.url :
-					ctx.ajax :
-				ctx.sAjaxSource;
-		}
-	
-		// set
-		return this.iterator( 'table', function ( settings ) {
-			if ( $.isPlainObject( settings.ajax ) ) {
-				settings.ajax.url = url;
-			}
-			else {
-				settings.ajax = url;
-			}
-			// No need to consider sAjaxSource here since DataTables gives priority
-			// to `ajax` over `sAjaxSource`. So setting `ajax` here, renders any
-			// value of `sAjaxSource` redundant.
-		} );
-	} );
-	
-	
-	/**
-	 * Load data from the newly set Ajax URL. Note that this method is only
-	 * available when `ajax.url()` is used to set a URL. Additionally, this method
-	 * has the same effect as calling `ajax.reload()` but is provided for
-	 * convenience when setting a new URL. Like `ajax.reload()` it will
-	 * automatically redraw the table once the remote data has been loaded.
-	 *
-	 * @returns {DataTables.Api} this
-	 */
-	_api_register( 'ajax.url().load()', function ( callback, resetPaging ) {
-		// Same as a reload, but makes sense to present it for easy access after a
-		// url change
-		return this.iterator( 'table', function ( ctx ) {
-			__reload( ctx, resetPaging===false, callback );
-		} );
-	} );
-	
-	
-	
-	
-	var _selector_run = function ( type, selector, selectFn, settings, opts )
-	{
-		var
-			out = [], res,
-			a, i, ien, j, jen,
-			selectorType = typeof selector;
-	
-		// Can't just check for isArray here, as an API or jQuery instance might be
-		// given with their array like look
-		if ( ! selector || selectorType === 'string' || selectorType === 'function' || selector.length === undefined ) {
-			selector = [ selector ];
-		}
-	
-		for ( i=0, ien=selector.length ; i<ien ; i++ ) {
-			// Only split on simple strings - complex expressions will be jQuery selectors
-			a = selector[i] && selector[i].split && ! selector[i].match(/[\[\(:]/) ?
-				selector[i].split(',') :
-				[ selector[i] ];
-	
-			for ( j=0, jen=a.length ; j<jen ; j++ ) {
-				res = selectFn( typeof a[j] === 'string' ? $.trim(a[j]) : a[j] );
-	
-				if ( res && res.length ) {
-					out = out.concat( res );
-				}
-			}
-		}
-	
-		// selector extensions
-		var ext = _ext.selector[ type ];
-		if ( ext.length ) {
-			for ( i=0, ien=ext.length ; i<ien ; i++ ) {
-				out = ext[i]( settings, opts, out );
-			}
-		}
-	
-		return _unique( out );
-	};
-	
-	
-	var _selector_opts = function ( opts )
-	{
-		if ( ! opts ) {
-			opts = {};
-		}
-	
-		// Backwards compatibility for 1.9- which used the terminology filter rather
-		// than search
-		if ( opts.filter && opts.search === undefined ) {
-			opts.search = opts.filter;
-		}
-	
-		return $.extend( {
-			search: 'none',
-			order: 'current',
-			page: 'all'
-		}, opts );
-	};
-	
-	
-	var _selector_first = function ( inst )
-	{
-		// Reduce the API instance to the first item found
-		for ( var i=0, ien=inst.length ; i<ien ; i++ ) {
-			if ( inst[i].length > 0 ) {
-				// Assign the first element to the first item in the instance
-				// and truncate the instance and context
-				inst[0] = inst[i];
-				inst[0].length = 1;
-				inst.length = 1;
-				inst.context = [ inst.context[i] ];
-	
-				return inst;
-			}
-		}
-	
-		// Not found - return an empty instance
-		inst.length = 0;
-		return inst;
-	};
-	
-	
-	var _selector_row_indexes = function ( settings, opts )
-	{
-		var
-			i, ien, tmp, a=[],
-			displayFiltered = settings.aiDisplay,
-			displayMaster = settings.aiDisplayMaster;
-	
-		var
-			search = opts.search,  // none, applied, removed
-			order  = opts.order,   // applied, current, index (original - compatibility with 1.9)
-			page   = opts.page;    // all, current
-	
-		if ( _fnDataSource( settings ) == 'ssp' ) {
-			// In server-side processing mode, most options are irrelevant since
-			// rows not shown don't exist and the index order is the applied order
-			// Removed is a special case - for consistency just return an empty
-			// array
-			return search === 'removed' ?
-				[] :
-				_range( 0, displayMaster.length );
-		}
-		else if ( page == 'current' ) {
-			// Current page implies that order=current and fitler=applied, since it is
-			// fairly senseless otherwise, regardless of what order and search actually
-			// are
-			for ( i=settings._iDisplayStart, ien=settings.fnDisplayEnd() ; i<ien ; i++ ) {
-				a.push( displayFiltered[i] );
-			}
-		}
-		else if ( order == 'current' || order == 'applied' ) {
-			if ( search == 'none') {
-				a = displayMaster.slice();
-			}
-			else if ( search == 'applied' ) {
-				a = displayFiltered.slice();
-			}
-			else if ( search == 'removed' ) {
-				// O(n+m) solution by creating a hash map
-				var displayFilteredMap = {};
-	
-				for ( var i=0, ien=displayFiltered.length ; i<ien ; i++ ) {
-					displayFilteredMap[displayFiltered[i]] = null;
-				}
-	
-				a = $.map( displayMaster, function (el) {
-					return ! displayFilteredMap.hasOwnProperty(el) ?
-						el :
-						null;
-				} );
-			}
-		}
-		else if ( order == 'index' || order == 'original' ) {
-			for ( i=0, ien=settings.aoData.length ; i<ien ; i++ ) {
-				if ( search == 'none' ) {
-					a.push( i );
-				}
-				else { // applied | removed
-					tmp = $.inArray( i, displayFiltered );
-	
-					if ((tmp === -1 && search == 'removed') ||
-						(tmp >= 0   && search == 'applied') )
-					{
-						a.push( i );
-					}
-				}
-			}
-		}
-	
-		return a;
-	};
-	
-	
-	/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
-	 * Rows
-	 *
-	 * {}          - no selector - use all available rows
-	 * {integer}   - row aoData index
-	 * {node}      - TR node
-	 * {string}    - jQuery selector to apply to the TR elements
-	 * {array}     - jQuery array of nodes, or simply an array of TR nodes
-	 *
-	 */
-	var __row_selector = function ( settings, selector, opts )
-	{
-		var rows;
-		var run = function ( sel ) {
-			var selInt = _intVal( sel );
-			var i, ien;
-			var aoData = settings.aoData;
-	
-			// Short cut - selector is a number and no options provided (default is
-			// all records, so no need to check if the index is in there, since it
-			// must be - dev error if the index doesn't exist).
-			if ( selInt !== null && ! opts ) {
-				return [ selInt ];
-			}
-	
-			if ( ! rows ) {
-				rows = _selector_row_indexes( settings, opts );
-			}
-	
-			if ( selInt !== null && $.inArray( selInt, rows ) !== -1 ) {
-				// Selector - integer
-				return [ selInt ];
-			}
-			else if ( sel === null || sel === undefined || sel === '' ) {
-				// Selector - none
-				return rows;
-			}
-	
-			// Selector - function
-			if ( typeof sel === 'function' ) {
-				return $.map( rows, function (idx) {
-					var row = aoData[ idx ];
-					return sel( idx, row._aData, row.nTr ) ? idx : null;
-				} );
-			}
-	
-			// Selector - node
-			if ( sel.nodeName ) {
-				var rowIdx = sel._DT_RowIndex;  // Property added by DT for fast lookup
-				var cellIdx = sel._DT_CellIndex;
-	
-				if ( rowIdx !== undefined ) {
-					// Make sure that the row is actually still present in the table
-					return aoData[ rowIdx ] && aoData[ rowIdx ].nTr === sel ?
-						[ rowIdx ] :
-						[];
-				}
-				else if ( cellIdx ) {
-					return aoData[ cellIdx.row ] && aoData[ cellIdx.row ].nTr === sel.parentNode ?
-						[ cellIdx.row ] :
-						[];
-				}
-				else {
-					var host = $(sel).closest('*[data-dt-row]');
-					return host.length ?
-						[ host.data('dt-row') ] :
-						[];
-				}
-			}
-	
-			// ID selector. Want to always be able to select rows by id, regardless
-			// of if the tr element has been created or not, so can't rely upon
-			// jQuery here - hence a custom implementation. This does not match
-			// Sizzle's fast selector or HTML4 - in HTML5 the ID can be anything,
-			// but to select it using a CSS selector engine (like Sizzle or
-			// querySelect) it would need to need to be escaped for some characters.
-			// DataTables simplifies this for row selectors since you can select
-			// only a row. A # indicates an id any anything that follows is the id -
-			// unescaped.
-			if ( typeof sel === 'string' && sel.charAt(0) === '#' ) {
-				// get row index from id
-				var rowObj = settings.aIds[ sel.replace( /^#/, '' ) ];
-				if ( rowObj !== undefined ) {
-					return [ rowObj.idx ];
-				}
-	
-				// need to fall through to jQuery in case there is DOM id that
-				// matches
-			}
-			
-			// Get nodes in the order from the `rows` array with null values removed
-			var nodes = _removeEmpty(
-				_pluck_order( settings.aoData, rows, 'nTr' )
-			);
-	
-			// Selector - jQuery selector string, array of nodes or jQuery object/
-			// As jQuery's .filter() allows jQuery objects to be passed in filter,
-			// it also allows arrays, so this will cope with all three options
-			return $(nodes)
-				.filter( sel )
-				.map( function () {
-					return this._DT_RowIndex;
-				} )
-				.toArray();
-		};
-	
-		return _selector_run( 'row', selector, run, settings, opts );
-	};
-	
-	
-	_api_register( 'rows()', function ( selector, opts ) {
-		// argument shifting
-		if ( selector === undefined ) {
-			selector = '';
-		}
-		else if ( $.isPlainObject( selector ) ) {
-			opts = selector;
-			selector = '';
-		}
-	
-		opts = _selector_opts( opts );
-	
-		var inst = this.iterator( 'table', function ( settings ) {
-			return __row_selector( settings, selector, opts );
-		}, 1 );
-	
-		// Want argument shifting here and in __row_selector?
-		inst.selector.rows = selector;
-		inst.selector.opts = opts;
-	
-		return inst;
-	} );
-	
-	_api_register( 'rows().nodes()', function () {
-		return this.iterator( 'row', function ( settings, row ) {
-			return settings.aoData[ row ].nTr || undefined;
-		}, 1 );
-	} );
-	
-	_api_register( 'rows().data()', function () {
-		return this.iterator( true, 'rows', function ( settings, rows ) {
-			return _pluck_order( settings.aoData, rows, '_aData' );
-		}, 1 );
-	} );
-	
-	_api_registerPlural( 'rows().cache()', 'row().cache()', function ( type ) {
-		return this.iterator( 'row', function ( settings, row ) {
-			var r = settings.aoData[ row ];
-			return type === 'search' ? r._aFilterData : r._aSortData;
-		}, 1 );
-	} );
-	
-	_api_registerPlural( 'rows().invalidate()', 'row().invalidate()', function ( src ) {
-		return this.iterator( 'row', function ( settings, row ) {
-			_fnInvalidate( settings, row, src );
-		} );
-	} );
-	
-	_api_registerPlural( 'rows().indexes()', 'row().index()', function () {
-		return this.iterator( 'row', function ( settings, row ) {
-			return row;
-		}, 1 );
-	} );
-	
-	_api_registerPlural( 'rows().ids()', 'row().id()', function ( hash ) {
-		var a = [];
-		var context = this.context;
-	
-		// `iterator` will drop undefined values, but in this case we want them
-		for ( var i=0, ien=context.length ; i<ien ; i++ ) {
-			for ( var j=0, jen=this[i].length ; j<jen ; j++ ) {
-				var id = context[i].rowIdFn( context[i].aoData[ this[i][j] ]._aData );
-				a.push( (hash === true ? '#' : '' )+ id );
-			}
-		}
-	
-		return new _Api( context, a );
-	} );
-	
-	_api_registerPlural( 'rows().remove()', 'row().remove()', function () {
-		var that = this;
-	
-		this.iterator( 'row', function ( settings, row, thatIdx ) {
-			var data = settings.aoData;
-			var rowData = data[ row ];
-			var i, ien, j, jen;
-			var loopRow, loopCells;
-	
-			data.splice( row, 1 );
-	
-			// Update the cached indexes
-			for ( i=0, ien=data.length ; i<ien ; i++ ) {
-				loopRow = data[i];
-				loopCells = loopRow.anCells;
-	
-				// Rows
-				if ( loopRow.nTr !== null ) {
-					loopRow.nTr._DT_RowIndex = i;
-				}
-	
-				// Cells
-				if ( loopCells !== null ) {
-					for ( j=0, jen=loopCells.length ; j<jen ; j++ ) {
-						loopCells[j]._DT_CellIndex.row = i;
-					}
-				}
-			}
-	
-			// Delete from the display arrays
-			_fnDeleteIndex( settings.aiDisplayMaster, row );
-			_fnDeleteIndex( settings.aiDisplay, row );
-			_fnDeleteIndex( that[ thatIdx ], row, false ); // maintain local indexes
-	
-			// For server-side processing tables - subtract the deleted row from the count
-			if ( settings._iRecordsDisplay > 0 ) {
-				settings._iRecordsDisplay--;
-			}
-	
-			// Check for an 'overflow' they case for displaying the table
-			_fnLengthOverflow( settings );
-	
-			// Remove the row's ID reference if there is one
-			var id = settings.rowIdFn( rowData._aData );
-			if ( id !== undefined ) {
-				delete settings.aIds[ id ];
-			}
-		} );
-	
-		this.iterator( 'table', function ( settings ) {
-			for ( var i=0, ien=settings.aoData.length ; i<ien ; i++ ) {
-				settings.aoData[i].idx = i;
-			}
-		} );
-	
-		return this;
-	} );
-	
-	
-	_api_register( 'rows.add()', function ( rows ) {
-		var newRows = this.iterator( 'table', function ( settings ) {
-				var row, i, ien;
-				var out = [];
-	
-				for ( i=0, ien=rows.length ; i<ien ; i++ ) {
-					row = rows[i];
-	
-					if ( row.nodeName && row.nodeName.toUpperCase() === 'TR' ) {
-						out.push( _fnAddTr( settings, row )[0] );
-					}
-					else {
-						out.push( _fnAddData( settings, row ) );
-					}
-				}
-	
-				return out;
-			}, 1 );
-	
-		// Return an Api.rows() extended instance, so rows().nodes() etc can be used
-		var modRows = this.rows( -1 );
-		modRows.pop();
-		$.merge( modRows, newRows );
-	
-		return modRows;
-	} );
-	
-	
-	
-	
-	
-	/**
-	 *
-	 */
-	_api_register( 'row()', function ( selector, opts ) {
-		return _selector_first( this.rows( selector, opts ) );
-	} );
-	
-	
-	_api_register( 'row().data()', function ( data ) {
-		var ctx = this.context;
-	
-		if ( data === undefined ) {
-			// Get
-			return ctx.length && this.length ?
-				ctx[0].aoData[ this[0] ]._aData :
-				undefined;
-		}
-	
-		// Set
-		var row = ctx[0].aoData[ this[0] ];
-		row._aData = data;
-	
-		// If the DOM has an id, and the data source is an array
-		if ( $.isArray( data ) && row.nTr && row.nTr.id ) {
-			_fnSetObjectDataFn( ctx[0].rowId )( data, row.nTr.id );
-		}
-	
-		// Automatically invalidate
-		_fnInvalidate( ctx[0], this[0], 'data' );
-	
-		return this;
-	} );
-	
-	
-	_api_register( 'row().node()', function () {
-		var ctx = this.context;
-	
-		return ctx.length && this.length ?
-			ctx[0].aoData[ this[0] ].nTr || null :
-			null;
-	} );
-	
-	
-	_api_register( 'row.add()', function ( row ) {
-		// Allow a jQuery object to be passed in - only a single row is added from
-		// it though - the first element in the set
-		if ( row instanceof $ && row.length ) {
-			row = row[0];
-		}
-	
-		var rows = this.iterator( 'table', function ( settings ) {
-			if ( row.nodeName && row.nodeName.toUpperCase() === 'TR' ) {
-				return _fnAddTr( settings, row )[0];
-			}
-			return _fnAddData( settings, row );
-		} );
-	
-		// Return an Api.rows() extended instance, with the newly added row selected
-		return this.row( rows[0] );
-	} );
-	
-	
-	
-	var __details_add = function ( ctx, row, data, klass )
-	{
-		// Convert to array of TR elements
-		var rows = [];
-		var addRow = function ( r, k ) {
-			// Recursion to allow for arrays of jQuery objects
-			if ( $.isArray( r ) || r instanceof $ ) {
-				for ( var i=0, ien=r.length ; i<ien ; i++ ) {
-					addRow( r[i], k );
-				}
-				return;
-			}
-	
-			// If we get a TR element, then just add it directly - up to the dev
-			// to add the correct number of columns etc
-			if ( r.nodeName && r.nodeName.toLowerCase() === 'tr' ) {
-				rows.push( r );
-			}
-			else {
-				// Otherwise create a row with a wrapper
-				var created = $('<tr><td/></tr>').addClass( k );
-				$('td', created)
-					.addClass( k )
-					.html( r )
-					[0].colSpan = _fnVisbleColumns( ctx );
-	
-				rows.push( created[0] );
-			}
-		};
-	
-		addRow( data, klass );
-	
-		if ( row._details ) {
-			row._details.detach();
-		}
-	
-		row._details = $(rows);
-	
-		// If the children were already shown, that state should be retained
-		if ( row._detailsShow ) {
-			row._details.insertAfter( row.nTr );
-		}
-	};
-	
-	
-	var __details_remove = function ( api, idx )
-	{
-		var ctx = api.context;
-	
-		if ( ctx.length ) {
-			var row = ctx[0].aoData[ idx !== undefined ? idx : api[0] ];
-	
-			if ( row && row._details ) {
-				row._details.remove();
-	
-				row._detailsShow = undefined;
-				row._details = undefined;
-			}
-		}
-	};
-	
-	
-	var __details_display = function ( api, show ) {
-		var ctx = api.context;
-	
-		if ( ctx.length && api.length ) {
-			var row = ctx[0].aoData[ api[0] ];
-	
-			if ( row._details ) {
-				row._detailsShow = show;
-	
-				if ( show ) {
-					row._details.insertAfter( row.nTr );
-				}
-				else {
-					row._details.detach();
-				}
-	
-				__details_events( ctx[0] );
-			}
-		}
-	};
-	
-	
-	var __details_events = function ( settings )
-	{
-		var api = new _Api( settings );
-		var namespace = '.dt.DT_details';
-		var drawEvent = 'draw'+namespace;
-		var colvisEvent = 'column-visibility'+namespace;
-		var destroyEvent = 'destroy'+namespace;
-		var data = settings.aoData;
-	
-		api.off( drawEvent +' '+ colvisEvent +' '+ destroyEvent );
-	
-		if ( _pluck( data, '_details' ).length > 0 ) {
-			// On each draw, insert the required elements into the document
-			api.on( drawEvent, function ( e, ctx ) {
-				if ( settings !== ctx ) {
-					return;
-				}
-	
-				api.rows( {page:'current'} ).eq(0).each( function (idx) {
-					// Internal data grab
-					var row = data[ idx ];
-	
-					if ( row._detailsShow ) {
-						row._details.insertAfter( row.nTr );
-					}
-				} );
-			} );
-	
-			// Column visibility change - update the colspan
-			api.on( colvisEvent, function ( e, ctx, idx, vis ) {
-				if ( settings !== ctx ) {
-					return;
-				}
-	
-				// Update the colspan for the details rows (note, only if it already has
-				// a colspan)
-				var row, visible = _fnVisbleColumns( ctx );
-	
-				for ( var i=0, ien=data.length ; i<ien ; i++ ) {
-					row = data[i];
-	
-					if ( row._details ) {
-						row._details.children('td[colspan]').attr('colspan', visible );
-					}
-				}
-			} );
-	
-			// Table destroyed - nuke any child rows
-			api.on( destroyEvent, function ( e, ctx ) {
-				if ( settings !== ctx ) {
-					return;
-				}
-	
-				for ( var i=0, ien=data.length ; i<ien ; i++ ) {
-					if ( data[i]._details ) {
-						__details_remove( api, i );
-					}
-				}
-			} );
-		}
-	};
-	
-	// Strings for the method names to help minification
-	var _emp = '';
-	var _child_obj = _emp+'row().child';
-	var _child_mth = _child_obj+'()';
-	
-	// data can be:
-	//  tr
-	//  string
-	//  jQuery or array of any of the above
-	_api_register( _child_mth, function ( data, klass ) {
-		var ctx = this.context;
-	
-		if ( data === undefined ) {
-			// get
-			return ctx.length && this.length ?
-				ctx[0].aoData[ this[0] ]._details :
-				undefined;
-		}
-		else if ( data === true ) {
-			// show
-			this.child.show();
-		}
-		else if ( data === false ) {
-			// remove
-			__details_remove( this );
-		}
-		else if ( ctx.length && this.length ) {
-			// set
-			__details_add( ctx[0], ctx[0].aoData[ this[0] ], data, klass );
-		}
-	
-		return this;
-	} );
-	
-	
-	_api_register( [
-		_child_obj+'.show()',
-		_child_mth+'.show()' // only when `child()` was called with parameters (without
-	], function ( show ) {   // it returns an object and this method is not executed)
-		__details_display( this, true );
-		return this;
-	} );
-	
-	
-	_api_register( [
-		_child_obj+'.hide()',
-		_child_mth+'.hide()' // only when `child()` was called with parameters (without
-	], function () {         // it returns an object and this method is not executed)
-		__details_display( this, false );
-		return this;
-	} );
-	
-	
-	_api_register( [
-		_child_obj+'.remove()',
-		_child_mth+'.remove()' // only when `child()` was called with parameters (without
-	], function () {           // it returns an object and this method is not executed)
-		__details_remove( this );
-		return this;
-	} );
-	
-	
-	_api_register( _child_obj+'.isShown()', function () {
-		var ctx = this.context;
-	
-		if ( ctx.length && this.length ) {
-			// _detailsShown as false or undefined will fall through to return false
-			return ctx[0].aoData[ this[0] ]._detailsShow || false;
-		}
-		return false;
-	} );
-	
-	
-	
-	/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
-	 * Columns
-	 *
-	 * {integer}           - column index (>=0 count from left, <0 count from right)
-	 * "{integer}:visIdx"  - visible column index (i.e. translate to column index)  (>=0 count from left, <0 count from right)
-	 * "{integer}:visible" - alias for {integer}:visIdx  (>=0 count from left, <0 count from right)
-	 * "{string}:name"     - column name
-	 * "{string}"          - jQuery selector on column header nodes
-	 *
-	 */
-	
-	// can be an array of these items, comma separated list, or an array of comma
-	// separated lists
-	
-	var __re_column_selector = /^([^:]+):(name|visIdx|visible)$/;
-	
-	
-	// r1 and r2 are redundant - but it means that the parameters match for the
-	// iterator callback in columns().data()
-	var __columnData = function ( settings, column, r1, r2, rows ) {
-		var a = [];
-		for ( var row=0, ien=rows.length ; row<ien ; row++ ) {
-			a.push( _fnGetCellData( settings, rows[row], column ) );
-		}
-		return a;
-	};
-	
-	
-	var __column_selector = function ( settings, selector, opts )
-	{
-		var
-			columns = settings.aoColumns,
-			names = _pluck( columns, 'sName' ),
-			nodes = _pluck( columns, 'nTh' );
-	
-		var run = function ( s ) {
-			var selInt = _intVal( s );
-	
-			// Selector - all
-			if ( s === '' ) {
-				return _range( columns.length );
-			}
-	
-			// Selector - index
-			if ( selInt !== null ) {
-				return [ selInt >= 0 ?
-					selInt : // Count from left
-					columns.length + selInt // Count from right (+ because its a negative value)
-				];
-			}
-	
-			// Selector = function
-			if ( typeof s === 'function' ) {
-				var rows = _selector_row_indexes( settings, opts );
-	
-				return $.map( columns, function (col, idx) {
-					return s(
-							idx,
-							__columnData( settings, idx, 0, 0, rows ),
-							nodes[ idx ]
-						) ? idx : null;
-				} );
-			}
-	
-			// jQuery or string selector
-			var match = typeof s === 'string' ?
-				s.match( __re_column_selector ) :
-				'';
-	
-			if ( match ) {
-				switch( match[2] ) {
-					case 'visIdx':
-					case 'visible':
-						var idx = parseInt( match[1], 10 );
-						// Visible index given, convert to column index
-						if ( idx < 0 ) {
-							// Counting from the right
-							var visColumns = $.map( columns, function (col,i) {
-								return col.bVisible ? i : null;
-							} );
-							return [ visColumns[ visColumns.length + idx ] ];
-						}
-						// Counting from the left
-						return [ _fnVisibleToColumnIndex( settings, idx ) ];
-	
-					case 'name':
-						// match by name. `names` is column index complete and in order
-						return $.map( names, function (name, i) {
-							return name === match[1] ? i : null;
-						} );
-	
-					default:
-						return [];
-				}
-			}
-	
-			// Cell in the table body
-			if ( s.nodeName && s._DT_CellIndex ) {
-				return [ s._DT_CellIndex.column ];
-			}
-	
-			// jQuery selector on the TH elements for the columns
-			var jqResult = $( nodes )
-				.filter( s )
-				.map( function () {
-					return $.inArray( this, nodes ); // `nodes` is column index complete and in order
-				} )
-				.toArray();
-	
-			if ( jqResult.length || ! s.nodeName ) {
-				return jqResult;
-			}
-	
-			// Otherwise a node which might have a `dt-column` data attribute, or be
-			// a child or such an element
-			var host = $(s).closest('*[data-dt-column]');
-			return host.length ?
-				[ host.data('dt-column') ] :
-				[];
-		};
-	
-		return _selector_run( 'column', selector, run, settings, opts );
-	};
-	
-	
-	var __setColumnVis = function ( settings, column, vis ) {
-		var
-			cols = settings.aoColumns,
-			col  = cols[ column ],
-			data = settings.aoData,
-			row, cells, i, ien, tr;
-	
-		// Get
-		if ( vis === undefined ) {
-			return col.bVisible;
-		}
-	
-		// Set
-		// No change
-		if ( col.bVisible === vis ) {
-			return;
-		}
-	
-		if ( vis ) {
-			// Insert column
-			// Need to decide if we should use appendChild or insertBefore
-			var insertBefore = $.inArray( true, _pluck(cols, 'bVisible'), column+1 );
-	
-			for ( i=0, ien=data.length ; i<ien ; i++ ) {
-				tr = data[i].nTr;
-				cells = data[i].anCells;
-	
-				if ( tr ) {
-					// insertBefore can act like appendChild if 2nd arg is null
-					tr.insertBefore( cells[ column ], cells[ insertBefore ] || null );
-				}
-			}
-		}
-		else {
-			// Remove column
-			$( _pluck( settings.aoData, 'anCells', column ) ).detach();
-		}
-	
-		// Common actions
-		col.bVisible = vis;
-	};
-	
-	
-	_api_register( 'columns()', function ( selector, opts ) {
-		// argument shifting
-		if ( selector === undefined ) {
-			selector = '';
-		}
-		else if ( $.isPlainObject( selector ) ) {
-			opts = selector;
-			selector = '';
-		}
-	
-		opts = _selector_opts( opts );
-	
-		var inst = this.iterator( 'table', function ( settings ) {
-			return __column_selector( settings, selector, opts );
-		}, 1 );
-	
-		// Want argument shifting here and in _row_selector?
-		inst.selector.cols = selector;
-		inst.selector.opts = opts;
-	
-		return inst;
-	} );
-	
-	_api_registerPlural( 'columns().header()', 'column().header()', function ( selector, opts ) {
-		return this.iterator( 'column', function ( settings, column ) {
-			return settings.aoColumns[column].nTh;
-		}, 1 );
-	} );
-	
-	_api_registerPlural( 'columns().footer()', 'column().footer()', function ( selector, opts ) {
-		return this.iterator( 'column', function ( settings, column ) {
-			return settings.aoColumns[column].nTf;
-		}, 1 );
-	} );
-	
-	_api_registerPlural( 'columns().data()', 'column().data()', function () {
-		return this.iterator( 'column-rows', __columnData, 1 );
-	} );
-	
-	_api_registerPlural( 'columns().dataSrc()', 'column().dataSrc()', function () {
-		return this.iterator( 'column', function ( settings, column ) {
-			return settings.aoColumns[column].mData;
-		}, 1 );
-	} );
-	
-	_api_registerPlural( 'columns().cache()', 'column().cache()', function ( type ) {
-		return this.iterator( 'column-rows', function ( settings, column, i, j, rows ) {
-			return _pluck_order( settings.aoData, rows,
-				type === 'search' ? '_aFilterData' : '_aSortData', column
-			);
-		}, 1 );
-	} );
-	
-	_api_registerPlural( 'columns().nodes()', 'column().nodes()', function () {
-		return this.iterator( 'column-rows', function ( settings, column, i, j, rows ) {
-			return _pluck_order( settings.aoData, rows, 'anCells', column ) ;
-		}, 1 );
-	} );
-	
-	_api_registerPlural( 'columns().visible()', 'column().visible()', function ( vis, calc ) {
-		var that = this;
-		var ret = this.iterator( 'column', function ( settings, column ) {
-			if ( vis === undefined ) {
-				return settings.aoColumns[ column ].bVisible;
-			} // else
-			__setColumnVis( settings, column, vis );
-		} );
-	
-		// Group the column visibility changes
-		if ( vis !== undefined ) {
-			this.iterator( 'table', function ( settings ) {
-				// Redraw the header after changes
-				_fnDrawHead( settings, settings.aoHeader );
-				_fnDrawHead( settings, settings.aoFooter );
-		
-				// Update colspan for no records display. Child rows and extensions will use their own
-				// listeners to do this - only need to update the empty table item here
-				if ( ! settings.aiDisplay.length ) {
-					$(settings.nTBody).find('td[colspan]').attr('colspan', _fnVisbleColumns(settings));
-				}
-		
-				_fnSaveState( settings );
-	
-				// Second loop once the first is done for events
-				that.iterator( 'column', function ( settings, column ) {
-					_fnCallbackFire( settings, null, 'column-visibility', [settings, column, vis, calc] );
-				} );
-	
-				if ( calc === undefined || calc ) {
-					that.columns.adjust();
-				}
-			});
-		}
-	
-		return ret;
-	} );
-	
-	_api_registerPlural( 'columns().indexes()', 'column().index()', function ( type ) {
-		return this.iterator( 'column', function ( settings, column ) {
-			return type === 'visible' ?
-				_fnColumnIndexToVisible( settings, column ) :
-				column;
-		}, 1 );
-	} );
-	
-	_api_register( 'columns.adjust()', function () {
-		return this.iterator( 'table', function ( settings ) {
-			_fnAdjustColumnSizing( settings );
-		}, 1 );
-	} );
-	
-	_api_register( 'column.index()', function ( type, idx ) {
-		if ( this.context.length !== 0 ) {
-			var ctx = this.context[0];
-	
-			if ( type === 'fromVisible' || type === 'toData' ) {
-				return _fnVisibleToColumnIndex( ctx, idx );
-			}
-			else if ( type === 'fromData' || type === 'toVisible' ) {
-				return _fnColumnIndexToVisible( ctx, idx );
-			}
-		}
-	} );
-	
-	_api_register( 'column()', function ( selector, opts ) {
-		return _selector_first( this.columns( selector, opts ) );
-	} );
-	
-	
-	
-	var __cell_selector = function ( settings, selector, opts )
-	{
-		var data = settings.aoData;
-		var rows = _selector_row_indexes( settings, opts );
-		var cells = _removeEmpty( _pluck_order( data, rows, 'anCells' ) );
-		var allCells = $( [].concat.apply([], cells) );
-		var row;
-		var columns = settings.aoColumns.length;
-		var a, i, ien, j, o, host;
-	
-		var run = function ( s ) {
-			var fnSelector = typeof s === 'function';
-	
-			if ( s === null || s === undefined || fnSelector ) {
-				// All cells and function selectors
-				a = [];
-	
-				for ( i=0, ien=rows.length ; i<ien ; i++ ) {
-					row = rows[i];
-	
-					for ( j=0 ; j<columns ; j++ ) {
-						o = {
-							row: row,
-							column: j
-						};
-	
-						if ( fnSelector ) {
-							// Selector - function
-							host = data[ row ];
-	
-							if ( s( o, _fnGetCellData(settings, row, j), host.anCells ? host.anCells[j] : null ) ) {
-								a.push( o );
-							}
-						}
-						else {
-							// Selector - all
-							a.push( o );
-						}
-					}
-				}
-	
-				return a;
-			}
-			
-			// Selector - index
-			if ( $.isPlainObject( s ) ) {
-				// Valid cell index and its in the array of selectable rows
-				return s.column !== undefined && s.row !== undefined && $.inArray( s.row, rows ) !== -1 ?
-					[s] :
-					[];
-			}
-	
-			// Selector - jQuery filtered cells
-			var jqResult = allCells
-				.filter( s )
-				.map( function (i, el) {
-					return { // use a new object, in case someone changes the values
-						row:    el._DT_CellIndex.row,
-						column: el._DT_CellIndex.column
-	 				};
-				} )
-				.toArray();
-	
-			if ( jqResult.length || ! s.nodeName ) {
-				return jqResult;
-			}
-	
-			// Otherwise the selector is a node, and there is one last option - the
-			// element might be a child of an element which has dt-row and dt-column
-			// data attributes
-			host = $(s).closest('*[data-dt-row]');
-			return host.length ?
-				[ {
-					row: host.data('dt-row'),
-					column: host.data('dt-column')
-				} ] :
-				[];
-		};
-	
-		return _selector_run( 'cell', selector, run, settings, opts );
-	};
-	
-	
-	
-	
-	_api_register( 'cells()', function ( rowSelector, columnSelector, opts ) {
-		// Argument shifting
-		if ( $.isPlainObject( rowSelector ) ) {
-			// Indexes
-			if ( rowSelector.row === undefined ) {
-				// Selector options in first parameter
-				opts = rowSelector;
-				rowSelector = null;
-			}
-			else {
-				// Cell index objects in first parameter
-				opts = columnSelector;
-				columnSelector = null;
-			}
-		}
-		if ( $.isPlainObject( columnSelector ) ) {
-			opts = columnSelector;
-			columnSelector = null;
-		}
-	
-		// Cell selector
-		if ( columnSelector === null || columnSelector === undefined ) {
-			return this.iterator( 'table', function ( settings ) {
-				return __cell_selector( settings, rowSelector, _selector_opts( opts ) );
-			} );
-		}
-	
-		// The default built in options need to apply to row and columns
-		var internalOpts = opts ? {
-			page: opts.page,
-			order: opts.order,
-			search: opts.search
-		} : {};
-	
-		// Row + column selector
-		var columns = this.columns( columnSelector, internalOpts );
-		var rows = this.rows( rowSelector, internalOpts );
-		var i, ien, j, jen;
-	
-		var cellsNoOpts = this.iterator( 'table', function ( settings, idx ) {
-			var a = [];
-	
-			for ( i=0, ien=rows[idx].length ; i<ien ; i++ ) {
-				for ( j=0, jen=columns[idx].length ; j<jen ; j++ ) {
-					a.push( {
-						row:    rows[idx][i],
-						column: columns[idx][j]
-					} );
-				}
-			}
-	
-			return a;
-		}, 1 );
-	
-		// There is currently only one extension which uses a cell selector extension
-		// It is a _major_ performance drag to run this if it isn't needed, so this is
-		// an extension specific check at the moment
-		var cells = opts && opts.selected ?
-			this.cells( cellsNoOpts, opts ) :
-			cellsNoOpts;
-	
-		$.extend( cells.selector, {
-			cols: columnSelector,
-			rows: rowSelector,
-			opts: opts
-		} );
-	
-		return cells;
-	} );
-	
-	
-	_api_registerPlural( 'cells().nodes()', 'cell().node()', function () {
-		return this.iterator( 'cell', function ( settings, row, column ) {
-			var data = settings.aoData[ row ];
-	
-			return data && data.anCells ?
-				data.anCells[ column ] :
-				undefined;
-		}, 1 );
-	} );
-	
-	
-	_api_register( 'cells().data()', function () {
-		return this.iterator( 'cell', function ( settings, row, column ) {
-			return _fnGetCellData( settings, row, column );
-		}, 1 );
-	} );
-	
-	
-	_api_registerPlural( 'cells().cache()', 'cell().cache()', function ( type ) {
-		type = type === 'search' ? '_aFilterData' : '_aSortData';
-	
-		return this.iterator( 'cell', function ( settings, row, column ) {
-			return settings.aoData[ row ][ type ][ column ];
-		}, 1 );
-	} );
-	
-	
-	_api_registerPlural( 'cells().render()', 'cell().render()', function ( type ) {
-		return this.iterator( 'cell', function ( settings, row, column ) {
-			return _fnGetCellData( settings, row, column, type );
-		}, 1 );
-	} );
-	
-	
-	_api_registerPlural( 'cells().indexes()', 'cell().index()', function () {
-		return this.iterator( 'cell', function ( settings, row, column ) {
-			return {
-				row: row,
-				column: column,
-				columnVisible: _fnColumnIndexToVisible( settings, column )
-			};
-		}, 1 );
-	} );
-	
-	
-	_api_registerPlural( 'cells().invalidate()', 'cell().invalidate()', function ( src ) {
-		return this.iterator( 'cell', function ( settings, row, column ) {
-			_fnInvalidate( settings, row, src, column );
-		} );
-	} );
-	
-	
-	
-	_api_register( 'cell()', function ( rowSelector, columnSelector, opts ) {
-		return _selector_first( this.cells( rowSelector, columnSelector, opts ) );
-	} );
-	
-	
-	_api_register( 'cell().data()', function ( data ) {
-		var ctx = this.context;
-		var cell = this[0];
-	
-		if ( data === undefined ) {
-			// Get
-			return ctx.length && cell.length ?
-				_fnGetCellData( ctx[0], cell[0].row, cell[0].column ) :
-				undefined;
-		}
-	
-		// Set
-		_fnSetCellData( ctx[0], cell[0].row, cell[0].column, data );
-		_fnInvalidate( ctx[0], cell[0].row, 'data', cell[0].column );
-	
-		return this;
-	} );
-	
-	
-	
-	/**
-	 * Get current ordering (sorting) that has been applied to the table.
-	 *
-	 * @returns {array} 2D array containing the sorting information for the first
-	 *   table in the current context. Each element in the parent array represents
-	 *   a column being sorted upon (i.e. multi-sorting with two columns would have
-	 *   2 inner arrays). The inner arrays may have 2 or 3 elements. The first is
-	 *   the column index that the sorting condition applies to, the second is the
-	 *   direction of the sort (`desc` or `asc`) and, optionally, the third is the
-	 *   index of the sorting order from the `column.sorting` initialisation array.
-	 *//**
-	 * Set the ordering for the table.
-	 *
-	 * @param {integer} order Column index to sort upon.
-	 * @param {string} direction Direction of the sort to be applied (`asc` or `desc`)
-	 * @returns {DataTables.Api} this
-	 *//**
-	 * Set the ordering for the table.
-	 *
-	 * @param {array} order 1D array of sorting information to be applied.
-	 * @param {array} [...] Optional additional sorting conditions
-	 * @returns {DataTables.Api} this
-	 *//**
-	 * Set the ordering for the table.
-	 *
-	 * @param {array} order 2D array of sorting information to be applied.
-	 * @returns {DataTables.Api} this
-	 */
-	_api_register( 'order()', function ( order, dir ) {
-		var ctx = this.context;
-	
-		if ( order === undefined ) {
-			// get
-			return ctx.length !== 0 ?
-				ctx[0].aaSorting :
-				undefined;
-		}
-	
-		// set
-		if ( typeof order === 'number' ) {
-			// Simple column / direction passed in
-			order = [ [ order, dir ] ];
-		}
-		else if ( order.length && ! $.isArray( order[0] ) ) {
-			// Arguments passed in (list of 1D arrays)
-			order = Array.prototype.slice.call( arguments );
-		}
-		// otherwise a 2D array was passed in
-	
-		return this.iterator( 'table', function ( settings ) {
-			settings.aaSorting = order.slice();
-		} );
-	} );
-	
-	
-	/**
-	 * Attach a sort listener to an element for a given column
-	 *
-	 * @param {node|jQuery|string} node Identifier for the element(s) to attach the
-	 *   listener to. This can take the form of a single DOM node, a jQuery
-	 *   collection of nodes or a jQuery selector which will identify the node(s).
-	 * @param {integer} column the column that a click on this node will sort on
-	 * @param {function} [callback] callback function when sort is run
-	 * @returns {DataTables.Api} this
-	 */
-	_api_register( 'order.listener()', function ( node, column, callback ) {
-		return this.iterator( 'table', function ( settings ) {
-			_fnSortAttachListener( settings, node, column, callback );
-		} );
-	} );
-	
-	
-	_api_register( 'order.fixed()', function ( set ) {
-		if ( ! set ) {
-			var ctx = this.context;
-			var fixed = ctx.length ?
-				ctx[0].aaSortingFixed :
-				undefined;
-	
-			return $.isArray( fixed ) ?
-				{ pre: fixed } :
-				fixed;
-		}
-	
-		return this.iterator( 'table', function ( settings ) {
-			settings.aaSortingFixed = $.extend( true, {}, set );
-		} );
-	} );
-	
-	
-	// Order by the selected column(s)
-	_api_register( [
-		'columns().order()',
-		'column().order()'
-	], function ( dir ) {
-		var that = this;
-	
-		return this.iterator( 'table', function ( settings, i ) {
-			var sort = [];
-	
-			$.each( that[i], function (j, col) {
-				sort.push( [ col, dir ] );
-			} );
-	
-			settings.aaSorting = sort;
-		} );
-	} );
-	
-	
-	
-	_api_register( 'search()', function ( input, regex, smart, caseInsen ) {
-		var ctx = this.context;
-	
-		if ( input === undefined ) {
-			// get
-			return ctx.length !== 0 ?
-				ctx[0].oPreviousSearch.sSearch :
-				undefined;
-		}
-	
-		// set
-		return this.iterator( 'table', function ( settings ) {
-			if ( ! settings.oFeatures.bFilter ) {
-				return;
-			}
-	
-			_fnFilterComplete( settings, $.extend( {}, settings.oPreviousSearch, {
-				"sSearch": input+"",
-				"bRegex":  regex === null ? false : regex,
-				"bSmart":  smart === null ? true  : smart,
-				"bCaseInsensitive": caseInsen === null ? true : caseInsen
-			} ), 1 );
-		} );
-	} );
-	
-	
-	_api_registerPlural(
-		'columns().search()',
-		'column().search()',
-		function ( input, regex, smart, caseInsen ) {
-			return this.iterator( 'column', function ( settings, column ) {
-				var preSearch = settings.aoPreSearchCols;
-	
-				if ( input === undefined ) {
-					// get
-					return preSearch[ column ].sSearch;
-				}
-	
-				// set
-				if ( ! settings.oFeatures.bFilter ) {
-					return;
-				}
-	
-				$.extend( preSearch[ column ], {
-					"sSearch": input+"",
-					"bRegex":  regex === null ? false : regex,
-					"bSmart":  smart === null ? true  : smart,
-					"bCaseInsensitive": caseInsen === null ? true : caseInsen
-				} );
-	
-				_fnFilterComplete( settings, settings.oPreviousSearch, 1 );
-			} );
-		}
-	);
-	
-	/*
-	 * State API methods
-	 */
-	
-	_api_register( 'state()', function () {
-		return this.context.length ?
-			this.context[0].oSavedState :
-			null;
-	} );
-	
-	
-	_api_register( 'state.clear()', function () {
-		return this.iterator( 'table', function ( settings ) {
-			// Save an empty object
-			settings.fnStateSaveCallback.call( settings.oInstance, settings, {} );
-		} );
-	} );
-	
-	
-	_api_register( 'state.loaded()', function () {
-		return this.context.length ?
-			this.context[0].oLoadedState :
-			null;
-	} );
-	
-	
-	_api_register( 'state.save()', function () {
-		return this.iterator( 'table', function ( settings ) {
-			_fnSaveState( settings );
-		} );
-	} );
-	
-	
-	
-	/**
-	 * Provide a common method for plug-ins to check the version of DataTables being
-	 * used, in order to ensure compatibility.
-	 *
-	 *  @param {string} version Version string to check for, in the format "X.Y.Z".
-	 *    Note that the formats "X" and "X.Y" are also acceptable.
-	 *  @returns {boolean} true if this version of DataTables is greater or equal to
-	 *    the required version, or false if this version of DataTales is not
-	 *    suitable
-	 *  @static
-	 *  @dtopt API-Static
-	 *
-	 *  @example
-	 *    alert( $.fn.dataTable.versionCheck( '1.9.0' ) );
-	 */
-	DataTable.versionCheck = DataTable.fnVersionCheck = function( version )
-	{
-		var aThis = DataTable.version.split('.');
-		var aThat = version.split('.');
-		var iThis, iThat;
-	
-		for ( var i=0, iLen=aThat.length ; i<iLen ; i++ ) {
-			iThis = parseInt( aThis[i], 10 ) || 0;
-			iThat = parseInt( aThat[i], 10 ) || 0;
-	
-			// Parts are the same, keep comparing
-			if (iThis === iThat) {
-				continue;
-			}
-	
-			// Parts are different, return immediately
-			return iThis > iThat;
-		}
-	
-		return true;
-	};
-	
-	
-	/**
-	 * Check if a `<table>` node is a DataTable table already or not.
-	 *
-	 *  @param {node|jquery|string} table Table node, jQuery object or jQuery
-	 *      selector for the table to test. Note that if more than more than one
-	 *      table is passed on, only the first will be checked
-	 *  @returns {boolean} true the table given is a DataTable, or false otherwise
-	 *  @static
-	 *  @dtopt API-Static
-	 *
-	 *  @example
-	 *    if ( ! $.fn.DataTable.isDataTable( '#example' ) ) {
-	 *      $('#example').dataTable();
-	 *    }
-	 */
-	DataTable.isDataTable = DataTable.fnIsDataTable = function ( table )
-	{
-		var t = $(table).get(0);
-		var is = false;
-	
-		if ( table instanceof DataTable.Api ) {
-			return true;
-		}
-	
-		$.each( DataTable.settings, function (i, o) {
-			var head = o.nScrollHead ? $('table', o.nScrollHead)[0] : null;
-			var foot = o.nScrollFoot ? $('table', o.nScrollFoot)[0] : null;
-	
-			if ( o.nTable === t || head === t || foot === t ) {
-				is = true;
-			}
-		} );
-	
-		return is;
-	};
-	
-	
-	/**
-	 * Get all DataTable tables that have been initialised - optionally you can
-	 * select to get only currently visible tables.
-	 *
-	 *  @param {boolean} [visible=false] Flag to indicate if you want all (default)
-	 *    or visible tables only.
-	 *  @returns {array} Array of `table` nodes (not DataTable instances) which are
-	 *    DataTables
-	 *  @static
-	 *  @dtopt API-Static
-	 *
-	 *  @example
-	 *    $.each( $.fn.dataTable.tables(true), function () {
-	 *      $(table).DataTable().columns.adjust();
-	 *    } );
-	 */
-	DataTable.tables = DataTable.fnTables = function ( visible )
-	{
-		var api = false;
-	
-		if ( $.isPlainObject( visible ) ) {
-			api = visible.api;
-			visible = visible.visible;
-		}
-	
-		var a = $.map( DataTable.settings, function (o) {
-			if ( !visible || (visible && $(o.nTable).is(':visible')) ) {
-				return o.nTable;
-			}
-		} );
-	
-		return api ?
-			new _Api( a ) :
-			a;
-	};
-	
-	
-	/**
-	 * Convert from camel case parameters to Hungarian notation. This is made public
-	 * for the extensions to provide the same ability as DataTables core to accept
-	 * either the 1.9 style Hungarian notation, or the 1.10+ style camelCase
-	 * parameters.
-	 *
-	 *  @param {object} src The model object which holds all parameters that can be
-	 *    mapped.
-	 *  @param {object} user The object to convert from camel case to Hungarian.
-	 *  @param {boolean} force When set to `true`, properties which already have a
-	 *    Hungarian value in the `user` object will be overwritten. Otherwise they
-	 *    won't be.
-	 */
-	DataTable.camelToHungarian = _fnCamelToHungarian;
-	
-	
-	
-	/**
-	 *
-	 */
-	_api_register( '$()', function ( selector, opts ) {
-		var
-			rows   = this.rows( opts ).nodes(), // Get all rows
-			jqRows = $(rows);
-	
-		return $( [].concat(
-			jqRows.filter( selector ).toArray(),
-			jqRows.find( selector ).toArray()
-		) );
-	} );
-	
-	
-	// jQuery functions to operate on the tables
-	$.each( [ 'on', 'one', 'off' ], function (i, key) {
-		_api_register( key+'()', function ( /* event, handler */ ) {
-			var args = Array.prototype.slice.call(arguments);
-	
-			// Add the `dt` namespace automatically if it isn't already present
-			args[0] = $.map( args[0].split( /\s/ ), function ( e ) {
-				return ! e.match(/\.dt\b/) ?
-					e+'.dt' :
-					e;
-				} ).join( ' ' );
-	
-			var inst = $( this.tables().nodes() );
-			inst[key].apply( inst, args );
-			return this;
-		} );
-	} );
-	
-	
-	_api_register( 'clear()', function () {
-		return this.iterator( 'table', function ( settings ) {
-			_fnClearTable( settings );
-		} );
-	} );
-	
-	
-	_api_register( 'settings()', function () {
-		return new _Api( this.context, this.context );
-	} );
-	
-	
-	_api_register( 'init()', function () {
-		var ctx = this.context;
-		return ctx.length ? ctx[0].oInit : null;
-	} );
-	
-	
-	_api_register( 'data()', function () {
-		return this.iterator( 'table', function ( settings ) {
-			return _pluck( settings.aoData, '_aData' );
-		} ).flatten();
-	} );
-	
-	
-	_api_register( 'destroy()', function ( remove ) {
-		remove = remove || false;
-	
-		return this.iterator( 'table', function ( settings ) {
-			var orig      = settings.nTableWrapper.parentNode;
-			var classes   = settings.oClasses;
-			var table     = settings.nTable;
-			var tbody     = settings.nTBody;
-			var thead     = settings.nTHead;
-			var tfoot     = settings.nTFoot;
-			var jqTable   = $(table);
-			var jqTbody   = $(tbody);
-			var jqWrapper = $(settings.nTableWrapper);
-			var rows      = $.map( settings.aoData, function (r) { return r.nTr; } );
-			var i, ien;
-	
-			// Flag to note that the table is currently being destroyed - no action
-			// should be taken
-			settings.bDestroying = true;
-	
-			// Fire off the destroy callbacks for plug-ins etc
-			_fnCallbackFire( settings, "aoDestroyCallback", "destroy", [settings] );
-	
-			// If not being removed from the document, make all columns visible
-			if ( ! remove ) {
-				new _Api( settings ).columns().visible( true );
-			}
-	
-			// Blitz all `DT` namespaced events (these are internal events, the
-			// lowercase, `dt` events are user subscribed and they are responsible
-			// for removing them
-			jqWrapper.off('.DT').find(':not(tbody *)').off('.DT');
-			$(window).off('.DT-'+settings.sInstance);
-	
-			// When scrolling we had to break the table up - restore it
-			if ( table != thead.parentNode ) {
-				jqTable.children('thead').detach();
-				jqTable.append( thead );
-			}
-	
-			if ( tfoot && table != tfoot.parentNode ) {
-				jqTable.children('tfoot').detach();
-				jqTable.append( tfoot );
-			}
-	
-			settings.aaSorting = [];
-			settings.aaSortingFixed = [];
-			_fnSortingClasses( settings );
-	
-			$( rows ).removeClass( settings.asStripeClasses.join(' ') );
-	
-			$('th, td', thead).removeClass( classes.sSortable+' '+
-				classes.sSortableAsc+' '+classes.sSortableDesc+' '+classes.sSortableNone
-			);
-	
-			// Add the TR elements back into the table in their original order
-			jqTbody.children().detach();
-			jqTbody.append( rows );
-	
-			// Remove the DataTables generated nodes, events and classes
-			var removedMethod = remove ? 'remove' : 'detach';
-			jqTable[ removedMethod ]();
-			jqWrapper[ removedMethod ]();
-	
-			// If we need to reattach the table to the document
-			if ( ! remove && orig ) {
-				// insertBefore acts like appendChild if !arg[1]
-				orig.insertBefore( table, settings.nTableReinsertBefore );
-	
-				// Restore the width of the original table - was read from the style property,
-				// so we can restore directly to that
-				jqTable
-					.css( 'width', settings.sDestroyWidth )
-					.removeClass( classes.sTable );
-	
-				// If the were originally stripe classes - then we add them back here.
-				// Note this is not fool proof (for example if not all rows had stripe
-				// classes - but it's a good effort without getting carried away
-				ien = settings.asDestroyStripes.length;
-	
-				if ( ien ) {
-					jqTbody.children().each( function (i) {
-						$(this).addClass( settings.asDestroyStripes[i % ien] );
-					} );
-				}
-			}
-	
-			/* Remove the settings object from the settings array */
-			var idx = $.inArray( settings, DataTable.settings );
-			if ( idx !== -1 ) {
-				DataTable.settings.splice( idx, 1 );
-			}
-		} );
-	} );
-	
-	
-	// Add the `every()` method for rows, columns and cells in a compact form
-	$.each( [ 'column', 'row', 'cell' ], function ( i, type ) {
-		_api_register( type+'s().every()', function ( fn ) {
-			var opts = this.selector.opts;
-			var api = this;
-	
-			return this.iterator( type, function ( settings, arg1, arg2, arg3, arg4 ) {
-				// Rows and columns:
-				//  arg1 - index
-				//  arg2 - table counter
-				//  arg3 - loop counter
-				//  arg4 - undefined
-				// Cells:
-				//  arg1 - row index
-				//  arg2 - column index
-				//  arg3 - table counter
-				//  arg4 - loop counter
-				fn.call(
-					api[ type ](
-						arg1,
-						type==='cell' ? arg2 : opts,
-						type==='cell' ? opts : undefined
-					),
-					arg1, arg2, arg3, arg4
-				);
-			} );
-		} );
-	} );
-	
-	
-	// i18n method for extensions to be able to use the language object from the
-	// DataTable
-	_api_register( 'i18n()', function ( token, def, plural ) {
-		var ctx = this.context[0];
-		var resolved = _fnGetObjectDataFn( token )( ctx.oLanguage );
-	
-		if ( resolved === undefined ) {
-			resolved = def;
-		}
-	
-		if ( plural !== undefined && $.isPlainObject( resolved ) ) {
-			resolved = resolved[ plural ] !== undefined ?
-				resolved[ plural ] :
-				resolved._;
-		}
-	
-		return resolved.replace( '%d', plural ); // nb: plural might be undefined,
-	} );
-	/**
-	 * Version string for plug-ins to check compatibility. Allowed format is
-	 * `a.b.c-d` where: a:int, b:int, c:int, d:string(dev|beta|alpha). `d` is used
-	 * only for non-release builds. See http://semver.org/ for more information.
-	 *  @member
-	 *  @type string
-	 *  @default Version number
-	 */
-	DataTable.version = "1.10.21";
-
-	/**
-	 * Private data store, containing all of the settings objects that are
-	 * created for the tables on a given page.
-	 *
-	 * Note that the `DataTable.settings` object is aliased to
-	 * `jQuery.fn.dataTableExt` through which it may be accessed and
-	 * manipulated, or `jQuery.fn.dataTable.settings`.
-	 *  @member
-	 *  @type array
-	 *  @default []
-	 *  @private
-	 */
-	DataTable.settings = [];
-
-	/**
-	 * Object models container, for the various models that DataTables has
-	 * available to it. These models define the objects that are used to hold
-	 * the active state and configuration of the table.
-	 *  @namespace
-	 */
-	DataTable.models = {};
-	
-	
-	
-	/**
-	 * Template object for the way in which DataTables holds information about
-	 * search information for the global filter and individual column filters.
-	 *  @namespace
-	 */
-	DataTable.models.oSearch = {
-		/**
-		 * Flag to indicate if the filtering should be case insensitive or not
-		 *  @type boolean
-		 *  @default true
-		 */
-		"bCaseInsensitive": true,
-	
-		/**
-		 * Applied search term
-		 *  @type string
-		 *  @default <i>Empty string</i>
-		 */
-		"sSearch": "",
-	
-		/**
-		 * Flag to indicate if the search term should be interpreted as a
-		 * regular expression (true) or not (false) and therefore and special
-		 * regex characters escaped.
-		 *  @type boolean
-		 *  @default false
-		 */
-		"bRegex": false,
-	
-		/**
-		 * Flag to indicate if DataTables is to use its smart filtering or not.
-		 *  @type boolean
-		 *  @default true
-		 */
-		"bSmart": true
-	};
-	
-	
-	
-	
-	/**
-	 * Template object for the way in which DataTables holds information about
-	 * each individual row. This is the object format used for the settings
-	 * aoData array.
-	 *  @namespace
-	 */
-	DataTable.models.oRow = {
-		/**
-		 * TR element for the row
-		 *  @type node
-		 *  @default null
-		 */
-		"nTr": null,
-	
-		/**
-		 * Array of TD elements for each row. This is null until the row has been
-		 * created.
-		 *  @type array nodes
-		 *  @default []
-		 */
-		"anCells": null,
-	
-		/**
-		 * Data object from the original data source for the row. This is either
-		 * an array if using the traditional form of DataTables, or an object if
-		 * using mData options. The exact type will depend on the passed in
-		 * data from the data source, or will be an array if using DOM a data
-		 * source.
-		 *  @type array|object
-		 *  @default []
-		 */
-		"_aData": [],
-	
-		/**
-		 * Sorting data cache - this array is ostensibly the same length as the
-		 * number of columns (although each index is generated only as it is
-		 * needed), and holds the data that is used for sorting each column in the
-		 * row. We do this cache generation at the start of the sort in order that
-		 * the formatting of the sort data need be done only once for each cell
-		 * per sort. This array should not be read from or written to by anything
-		 * other than the master sorting methods.
-		 *  @type array
-		 *  @default null
-		 *  @private
-		 */
-		"_aSortData": null,
-	
-		/**
-		 * Per cell filtering data cache. As per the sort data cache, used to
-		 * increase the performance of the filtering in DataTables
-		 *  @type array
-		 *  @default null
-		 *  @private
-		 */
-		"_aFilterData": null,
-	
-		/**
-		 * Filtering data cache. This is the same as the cell filtering cache, but
-		 * in this case a string rather than an array. This is easily computed with
-		 * a join on `_aFilterData`, but is provided as a cache so the join isn't
-		 * needed on every search (memory traded for performance)
-		 *  @type array
-		 *  @default null
-		 *  @private
-		 */
-		"_sFilterRow": null,
-	
-		/**
-		 * Cache of the class name that DataTables has applied to the row, so we
-		 * can quickly look at this variable rather than needing to do a DOM check
-		 * on className for the nTr property.
-		 *  @type string
-		 *  @default <i>Empty string</i>
-		 *  @private
-		 */
-		"_sRowStripe": "",
-	
-		/**
-		 * Denote if the original data source was from the DOM, or the data source
-		 * object. This is used for invalidating data, so DataTables can
-		 * automatically read data from the original source, unless uninstructed
-		 * otherwise.
-		 *  @type string
-		 *  @default null
-		 *  @private
-		 */
-		"src": null,
-	
-		/**
-		 * Index in the aoData array. This saves an indexOf lookup when we have the
-		 * object, but want to know the index
-		 *  @type integer
-		 *  @default -1
-		 *  @private
-		 */
-		"idx": -1
-	};
-	
-	
-	/**
-	 * Template object for the column information object in DataTables. This object
-	 * is held in the settings aoColumns array and contains all the information that
-	 * DataTables needs about each individual column.
-	 *
-	 * Note that this object is related to {@link DataTable.defaults.column}
-	 * but this one is the internal data store for DataTables's cache of columns.
-	 * It should NOT be manipulated outside of DataTables. Any configuration should
-	 * be done through the initialisation options.
-	 *  @namespace
-	 */
-	DataTable.models.oColumn = {
-		/**
-		 * Column index. This could be worked out on-the-fly with $.inArray, but it
-		 * is faster to just hold it as a variable
-		 *  @type integer
-		 *  @default null
-		 */
-		"idx": null,
-	
-		/**
-		 * A list of the columns that sorting should occur on when this column
-		 * is sorted. That this property is an array allows multi-column sorting
-		 * to be defined for a column (for example first name / last name columns
-		 * would benefit from this). The values are integers pointing to the
-		 * columns to be sorted on (typically it will be a single integer pointing
-		 * at itself, but that doesn't need to be the case).
-		 *  @type array
-		 */
-		"aDataSort": null,
-	
-		/**
-		 * Define the sorting directions that are applied to the column, in sequence
-		 * as the column is repeatedly sorted upon - i.e. the first value is used
-		 * as the sorting direction when the column if first sorted (clicked on).
-		 * Sort it again (click again) and it will move on to the next index.
-		 * Repeat until loop.
-		 *  @type array
-		 */
-		"asSorting": null,
-	
-		/**
-		 * Flag to indicate if the column is searchable, and thus should be included
-		 * in the filtering or not.
-		 *  @type boolean
-		 */
-		"bSearchable": null,
-	
-		/**
-		 * Flag to indicate if the column is sortable or not.
-		 *  @type boolean
-		 */
-		"bSortable": null,
-	
-		/**
-		 * Flag to indicate if the column is currently visible in the table or not
-		 *  @type boolean
-		 */
-		"bVisible": null,
-	
-		/**
-		 * Store for manual type assignment using the `column.type` option. This
-		 * is held in store so we can manipulate the column's `sType` property.
-		 *  @type string
-		 *  @default null
-		 *  @private
-		 */
-		"_sManualType": null,
-	
-		/**
-		 * Flag to indicate if HTML5 data attributes should be used as the data
-		 * source for filtering or sorting. True is either are.
-		 *  @type boolean
-		 *  @default false
-		 *  @private
-		 */
-		"_bAttrSrc": false,
-	
-		/**
-		 * Developer definable function that is called whenever a cell is created (Ajax source,
-		 * etc) or processed for input (DOM source). This can be used as a compliment to mRender
-		 * allowing you to modify the DOM element (add background colour for example) when the
-		 * element is available.
-		 *  @type function
-		 *  @param {element} nTd The TD node that has been created
-		 *  @param {*} sData The Data for the cell
-		 *  @param {array|object} oData The data for the whole row
-		 *  @param {int} iRow The row index for the aoData data store
-		 *  @default null
-		 */
-		"fnCreatedCell": null,
-	
-		/**
-		 * Function to get data from a cell in a column. You should <b>never</b>
-		 * access data directly through _aData internally in DataTables - always use
-		 * the method attached to this property. It allows mData to function as
-		 * required. This function is automatically assigned by the column
-		 * initialisation method
-		 *  @type function
-		 *  @param {array|object} oData The data array/object for the array
-		 *    (i.e. aoData[]._aData)
-		 *  @param {string} sSpecific The specific data type you want to get -
-		 *    'display', 'type' 'filter' 'sort'
-		 *  @returns {*} The data for the cell from the given row's data
-		 *  @default null
-		 */
-		"fnGetData": null,
-	
-		/**
-		 * Function to set data for a cell in the column. You should <b>never</b>
-		 * set the data directly to _aData internally in DataTables - always use
-		 * this method. It allows mData to function as required. This function
-		 * is automatically assigned by the column initialisation method
-		 *  @type function
-		 *  @param {array|object} oData The data array/object for the array
-		 *    (i.e. aoData[]._aData)
-		 *  @param {*} sValue Value to set
-		 *  @default null
-		 */
-		"fnSetData": null,
-	
-		/**
-		 * Property to read the value for the cells in the column from the data
-		 * source array / object. If null, then the default content is used, if a
-		 * function is given then the return from the function is used.
-		 *  @type function|int|string|null
-		 *  @default null
-		 */
-		"mData": null,
-	
-		/**
-		 * Partner property to mData which is used (only when defined) to get
-		 * the data - i.e. it is basically the same as mData, but without the
-		 * 'set' option, and also the data fed to it is the result from mData.
-		 * This is the rendering method to match the data method of mData.
-		 *  @type function|int|string|null
-		 *  @default null
-		 */
-		"mRender": null,
-	
-		/**
-		 * Unique header TH/TD element for this column - this is what the sorting
-		 * listener is attached to (if sorting is enabled.)
-		 *  @type node
-		 *  @default null
-		 */
-		"nTh": null,
-	
-		/**
-		 * Unique footer TH/TD element for this column (if there is one). Not used
-		 * in DataTables as such, but can be used for plug-ins to reference the
-		 * footer for each column.
-		 *  @type node
-		 *  @default null
-		 */
-		"nTf": null,
-	
-		/**
-		 * The class to apply to all TD elements in the table's TBODY for the column
-		 *  @type string
-		 *  @default null
-		 */
-		"sClass": null,
-	
-		/**
-		 * When DataTables calculates the column widths to assign to each column,
-		 * it finds the longest string in each column and then constructs a
-		 * temporary table and reads the widths from that. The problem with this
-		 * is that "mmm" is much wider then "iiii", but the latter is a longer
-		 * string - thus the calculation can go wrong (doing it properly and putting
-		 * it into an DOM object and measuring that is horribly(!) slow). Thus as
-		 * a "work around" we provide this option. It will append its value to the
-		 * text that is found to be the longest string for the column - i.e. padding.
-		 *  @type string
-		 */
-		"sContentPadding": null,
-	
-		/**
-		 * Allows a default value to be given for a column's data, and will be used
-		 * whenever a null data source is encountered (this can be because mData
-		 * is set to null, or because the data source itself is null).
-		 *  @type string
-		 *  @default null
-		 */
-		"sDefaultContent": null,
-	
-		/**
-		 * Name for the column, allowing reference to the column by name as well as
-		 * by index (needs a lookup to work by name).
-		 *  @type string
-		 */
-		"sName": null,
-	
-		/**
-		 * Custom sorting data type - defines which of the available plug-ins in
-		 * afnSortData the custom sorting will use - if any is defined.
-		 *  @type string
-		 *  @default std
-		 */
-		"sSortDataType": 'std',
-	
-		/**
-		 * Class to be applied to the header element when sorting on this column
-		 *  @type string
-		 *  @default null
-		 */
-		"sSortingClass": null,
-	
-		/**
-		 * Class to be applied to the header element when sorting on this column -
-		 * when jQuery UI theming is used.
-		 *  @type string
-		 *  @default null
-		 */
-		"sSortingClassJUI": null,
-	
-		/**
-		 * Title of the column - what is seen in the TH element (nTh).
-		 *  @type string
-		 */
-		"sTitle": null,
-	
-		/**
-		 * Column sorting and filtering type
-		 *  @type string
-		 *  @default null
-		 */
-		"sType": null,
-	
-		/**
-		 * Width of the column
-		 *  @type string
-		 *  @default null
-		 */
-		"sWidth": null,
-	
-		/**
-		 * Width of the column when it was first "encountered"
-		 *  @type string
-		 *  @default null
-		 */
-		"sWidthOrig": null
-	};
-	
-	
-	/*
-	 * Developer note: The properties of the object below are given in Hungarian
-	 * notation, that was used as the interface for DataTables prior to v1.10, however
-	 * from v1.10 onwards the primary interface is camel case. In order to avoid
-	 * breaking backwards compatibility utterly with this change, the Hungarian
-	 * version is still, internally the primary interface, but is is not documented
-	 * - hence the @name tags in each doc comment. This allows a Javascript function
-	 * to create a map from Hungarian notation to camel case (going the other direction
-	 * would require each property to be listed, which would at around 3K to the size
-	 * of DataTables, while this method is about a 0.5K hit.
-	 *
-	 * Ultimately this does pave the way for Hungarian notation to be dropped
-	 * completely, but that is a massive amount of work and will break current
-	 * installs (therefore is on-hold until v2).
-	 */
-	
-	/**
-	 * Initialisation options that can be given to DataTables at initialisation
-	 * time.
-	 *  @namespace
-	 */
-	DataTable.defaults = {
-		/**
-		 * An array of data to use for the table, passed in at initialisation which
-		 * will be used in preference to any data which is already in the DOM. This is
-		 * particularly useful for constructing tables purely in Javascript, for
-		 * example with a custom Ajax call.
-		 *  @type array
-		 *  @default null
-		 *
-		 *  @dtopt Option
-		 *  @name DataTable.defaults.data
-		 *
-		 *  @example
-		 *    // Using a 2D array data source
-		 *    $(document).ready( function () {
-		 *      $('#example').dataTable( {
-		 *        "data": [
-		 *          ['Trident', 'Internet Explorer 4.0', 'Win 95+', 4, 'X'],
-		 *          ['Trident', 'Internet Explorer 5.0', 'Win 95+', 5, 'C'],
-		 *        ],
-		 *        "columns": [
-		 *          { "title": "Engine" },
-		 *          { "title": "Browser" },
-		 *          { "title": "Platform" },
-		 *          { "title": "Version" },
-		 *          { "title": "Grade" }
-		 *        ]
-		 *      } );
-		 *    } );
-		 *
-		 *  @example
-		 *    // Using an array of objects as a data source (`data`)
-		 *    $(document).ready( function () {
-		 *      $('#example').dataTable( {
-		 *        "data": [
-		 *          {
-		 *            "engine":   "Trident",
-		 *            "browser":  "Internet Explorer 4.0",
-		 *            "platform": "Win 95+",
-		 *            "version":  4,
-		 *            "grade":    "X"
-		 *          },
-		 *          {
-		 *            "engine":   "Trident",
-		 *            "browser":  "Internet Explorer 5.0",
-		 *            "platform": "Win 95+",
-		 *            "version":  5,
-		 *            "grade":    "C"
-		 *          }
-		 *        ],
-		 *        "columns": [
-		 *          { "title": "Engine",   "data": "engine" },
-		 *          { "title": "Browser",  "data": "browser" },
-		 *          { "title": "Platform", "data": "platform" },
-		 *          { "title": "Version",  "data": "version" },
-		 *          { "title": "Grade",    "data": "grade" }
-		 *        ]
-		 *      } );
-		 *    } );
-		 */
-		"aaData": null,
-	
-	
-		/**
-		 * If ordering is enabled, then DataTables will perform a first pass sort on
-		 * initialisation. You can define which column(s) the sort is performed
-		 * upon, and the sorting direction, with this variable. The `sorting` array
-		 * should contain an array for each column to be sorted initially containing
-		 * the column's index and a direction string ('asc' or 'desc').
-		 *  @type array
-		 *  @default [[0,'asc']]
-		 *
-		 *  @dtopt Option
-		 *  @name DataTable.defaults.order
-		 *
-		 *  @example
-		 *    // Sort by 3rd column first, and then 4th column
-		 *    $(document).ready( function() {
-		 *      $('#example').dataTable( {
-		 *        "order": [[2,'asc'], [3,'desc']]
-		 *      } );
-		 *    } );
-		 *
-		 *    // No initial sorting
-		 *    $(document).ready( function() {
-		 *      $('#example').dataTable( {
-		 *        "order": []
-		 *      } );
-		 *    } );
-		 */
-		"aaSorting": [[0,'asc']],
-	
-	
-		/**
-		 * This parameter is basically identical to the `sorting` parameter, but
-		 * cannot be overridden by user interaction with the table. What this means
-		 * is that you could have a column (visible or hidden) which the sorting
-		 * will always be forced on first - any sorting after that (from the user)
-		 * will then be performed as required. This can be useful for grouping rows
-		 * together.
-		 *  @type array
-		 *  @default null
-		 *
-		 *  @dtopt Option
-		 *  @name DataTable.defaults.orderFixed
-		 *
-		 *  @example
-		 *    $(document).ready( function() {
-		 *      $('#example').dataTable( {
-		 *        "orderFixed": [[0,'asc']]
-		 *      } );
-		 *    } )
-		 */
-		"aaSortingFixed": [],
-	
-	
-		/**
-		 * DataTables can be instructed to load data to display in the table from a
-		 * Ajax source. This option defines how that Ajax call is made and where to.
-		 *
-		 * The `ajax` property has three different modes of operation, depending on
-		 * how it is defined. These are:
-		 *
-		 * * `string` - Set the URL from where the data should be loaded from.
-		 * * `object` - Define properties for `jQuery.ajax`.
-		 * * `function` - Custom data get function
-		 *
-		 * `string`
-		 * --------
-		 *
-		 * As a string, the `ajax` property simply defines the URL from which
-		 * DataTables will load data.
-		 *
-		 * `object`
-		 * --------
-		 *
-		 * As an object, the parameters in the object are passed to
-		 * [jQuery.ajax](http://api.jquery.com/jQuery.ajax/) allowing fine control
-		 * of the Ajax request. DataTables has a number of default parameters which
-		 * you can override using this option. Please refer to the jQuery
-		 * documentation for a full description of the options available, although
-		 * the following parameters provide additional options in DataTables or
-		 * require special consideration:
-		 *
-		 * * `data` - As with jQuery, `data` can be provided as an object, but it
-		 *   can also be used as a function to manipulate the data DataTables sends
-		 *   to the server. The function takes a single parameter, an object of
-		 *   parameters with the values that DataTables has readied for sending. An
-		 *   object may be returned which will be merged into the DataTables
-		 *   defaults, or you can add the items to the object that was passed in and
-		 *   not return anything from the function. This supersedes `fnServerParams`
-		 *   from DataTables 1.9-.
-		 *
-		 * * `dataSrc` - By default DataTables will look for the property `data` (or
-		 *   `aaData` for compatibility with DataTables 1.9-) when obtaining data
-		 *   from an Ajax source or for server-side processing - this parameter
-		 *   allows that property to be changed. You can use Javascript dotted
-		 *   object notation to get a data source for multiple levels of nesting, or
-		 *   it my be used as a function. As a function it takes a single parameter,
-		 *   the JSON returned from the server, which can be manipulated as
-		 *   required, with the returned value being that used by DataTables as the
-		 *   data source for the table. This supersedes `sAjaxDataProp` from
-		 *   DataTables 1.9-.
-		 *
-		 * * `success` - Should not be overridden it is used internally in
-		 *   DataTables. To manipulate / transform the data returned by the server
-		 *   use `ajax.dataSrc`, or use `ajax` as a function (see below).
-		 *
-		 * `function`
-		 * ----------
-		 *
-		 * As a function, making the Ajax call is left up to yourself allowing
-		 * complete control of the Ajax request. Indeed, if desired, a method other
-		 * than Ajax could be used to obtain the required data, such as Web storage
-		 * or an AIR database.
-		 *
-		 * The function is given four parameters and no return is required. The
-		 * parameters are:
-		 *
-		 * 1. _object_ - Data to send to the server
-		 * 2. _function_ - Callback function that must be executed when the required
-		 *    data has been obtained. That data should be passed into the callback
-		 *    as the only parameter
-		 * 3. _object_ - DataTables settings object for the table
-		 *
-		 * Note that this supersedes `fnServerData` from DataTables 1.9-.
-		 *
-		 *  @type string|object|function
-		 *  @default null
-		 *
-		 *  @dtopt Option
-		 *  @name DataTable.defaults.ajax
-		 *  @since 1.10.0
-		 *
-		 * @example
-		 *   // Get JSON data from a file via Ajax.
-		 *   // Note DataTables expects data in the form `{ data: [ ...data... ] }` by default).
-		 *   $('#example').dataTable( {
-		 *     "ajax": "data.json"
-		 *   } );
-		 *
-		 * @example
-		 *   // Get JSON data from a file via Ajax, using `dataSrc` to change
-		 *   // `data` to `tableData` (i.e. `{ tableData: [ ...data... ] }`)
-		 *   $('#example').dataTable( {
-		 *     "ajax": {
-		 *       "url": "data.json",
-		 *       "dataSrc": "tableData"
-		 *     }
-		 *   } );
-		 *
-		 * @example
-		 *   // Get JSON data from a file via Ajax, using `dataSrc` to read data
-		 *   // from a plain array rather than an array in an object
-		 *   $('#example').dataTable( {
-		 *     "ajax": {
-		 *       "url": "data.json",
-		 *       "dataSrc": ""
-		 *     }
-		 *   } );
-		 *
-		 * @example
-		 *   // Manipulate the data returned from the server - add a link to data
-		 *   // (note this can, should, be done using `render` for the column - this
-		 *   // is just a simple example of how the data can be manipulated).
-		 *   $('#example').dataTable( {
-		 *     "ajax": {
-		 *       "url": "data.json",
-		 *       "dataSrc": function ( json ) {
-		 *         for ( var i=0, ien=json.length ; i<ien ; i++ ) {
-		 *           json[i][0] = '<a href="/message/'+json[i][0]+'>View message</a>';
-		 *         }
-		 *         return json;
-		 *       }
-		 *     }
-		 *   } );
-		 *
-		 * @example
-		 *   // Add data to the request
-		 *   $('#example').dataTable( {
-		 *     "ajax": {
-		 *       "url": "data.json",
-		 *       "data": function ( d ) {
-		 *         return {
-		 *           "extra_search": $('#extra').val()
-		 *         };
-		 *       }
-		 *     }
-		 *   } );
-		 *
-		 * @example
-		 *   // Send request as POST
-		 *   $('#example').dataTable( {
-		 *     "ajax": {
-		 *       "url": "data.json",
-		 *       "type": "POST"
-		 *     }
-		 *   } );
-		 *
-		 * @example
-		 *   // Get the data from localStorage (could interface with a form for
-		 *   // adding, editing and removing rows).
-		 *   $('#example').dataTable( {
-		 *     "ajax": function (data, callback, settings) {
-		 *       callback(
-		 *         JSON.parse( localStorage.getItem('dataTablesData') )
-		 *       );
-		 *     }
-		 *   } );
-		 */
-		"ajax": null,
-	
-	
-		/**
-		 * This parameter allows you to readily specify the entries in the length drop
-		 * down menu that DataTables shows when pagination is enabled. It can be
-		 * either a 1D array of options which will be used for both the displayed
-		 * option and the value, or a 2D array which will use the array in the first
-		 * position as the value, and the array in the second position as the
-		 * displayed options (useful for language strings such as 'All').
-		 *
-		 * Note that the `pageLength` property will be automatically set to the
-		 * first value given in this array, unless `pageLength` is also provided.
-		 *  @type array
-		 *  @default [ 10, 25, 50, 100 ]
-		 *
-		 *  @dtopt Option
-		 *  @name DataTable.defaults.lengthMenu
-		 *
-		 *  @example
-		 *    $(document).ready( function() {
-		 *      $('#example').dataTable( {
-		 *        "lengthMenu": [[10, 25, 50, -1], [10, 25, 50, "All"]]
-		 *      } );
-		 *    } );
-		 */
-		"aLengthMenu": [ 10, 25, 50, 100 ],
-	
-	
-		/**
-		 * The `columns` option in the initialisation parameter allows you to define
-		 * details about the way individual columns behave. For a full list of
-		 * column options that can be set, please see
-		 * {@link DataTable.defaults.column}. Note that if you use `columns` to
-		 * define your columns, you must have an entry in the array for every single
-		 * column that you have in your table (these can be null if you don't which
-		 * to specify any options).
-		 *  @member
-		 *
-		 *  @name DataTable.defaults.column
-		 */
-		"aoColumns": null,
-	
-		/**
-		 * Very similar to `columns`, `columnDefs` allows you to target a specific
-		 * column, multiple columns, or all columns, using the `targets` property of
-		 * each object in the array. This allows great flexibility when creating
-		 * tables, as the `columnDefs` arrays can be of any length, targeting the
-		 * columns you specifically want. `columnDefs` may use any of the column
-		 * options available: {@link DataTable.defaults.column}, but it _must_
-		 * have `targets` defined in each object in the array. Values in the `targets`
-		 * array may be:
-		 *   <ul>
-		 *     <li>a string - class name will be matched on the TH for the column</li>
-		 *     <li>0 or a positive integer - column index counting from the left</li>
-		 *     <li>a negative integer - column index counting from the right</li>
-		 *     <li>the string "_all" - all columns (i.e. assign a default)</li>
-		 *   </ul>
-		 *  @member
-		 *
-		 *  @name DataTable.defaults.columnDefs
-		 */
-		"aoColumnDefs": null,
-	
-	
-		/**
-		 * Basically the same as `search`, this parameter defines the individual column
-		 * filtering state at initialisation time. The array must be of the same size
-		 * as the number of columns, and each element be an object with the parameters
-		 * `search` and `escapeRegex` (the latter is optional). 'null' is also
-		 * accepted and the default will be used.
-		 *  @type array
-		 *  @default []
-		 *
-		 *  @dtopt Option
-		 *  @name DataTable.defaults.searchCols
-		 *
-		 *  @example
-		 *    $(document).ready( function() {
-		 *      $('#example').dataTable( {
-		 *        "searchCols": [
-		 *          null,
-		 *          { "search": "My filter" },
-		 *          null,
-		 *          { "search": "^[0-9]", "escapeRegex": false }
-		 *        ]
-		 *      } );
-		 *    } )
-		 */
-		"aoSearchCols": [],
-	
-	
-		/**
-		 * An array of CSS classes that should be applied to displayed rows. This
-		 * array may be of any length, and DataTables will apply each class
-		 * sequentially, looping when required.
-		 *  @type array
-		 *  @default null <i>Will take the values determined by the `oClasses.stripe*`
-		 *    options</i>
-		 *
-		 *  @dtopt Option
-		 *  @name DataTable.defaults.stripeClasses
-		 *
-		 *  @example
-		 *    $(document).ready( function() {
-		 *      $('#example').dataTable( {
-		 *        "stripeClasses": [ 'strip1', 'strip2', 'strip3' ]
-		 *      } );
-		 *    } )
-		 */
-		"asStripeClasses": null,
-	
-	
-		/**
-		 * Enable or disable automatic column width calculation. This can be disabled
-		 * as an optimisation (it takes some time to calculate the widths) if the
-		 * tables widths are passed in using `columns`.
-		 *  @type boolean
-		 *  @default true
-		 *
-		 *  @dtopt Features
-		 *  @name DataTable.defaults.autoWidth
-		 *
-		 *  @example
-		 *    $(document).ready( function () {
-		 *      $('#example').dataTable( {
-		 *        "autoWidth": false
-		 *      } );
-		 *    } );
-		 */
-		"bAutoWidth": true,
-	
-	
-		/**
-		 * Deferred rendering can provide DataTables with a huge speed boost when you
-		 * are using an Ajax or JS data source for the table. This option, when set to
-		 * true, will cause DataTables to defer the creation of the table elements for
-		 * each row until they are needed for a draw - saving a significant amount of
-		 * time.
-		 *  @type boolean
-		 *  @default false
-		 *
-		 *  @dtopt Features
-		 *  @name DataTable.defaults.deferRender
-		 *
-		 *  @example
-		 *    $(document).ready( function() {
-		 *      $('#example').dataTable( {
-		 *        "ajax": "sources/arrays.txt",
-		 *        "deferRender": true
-		 *      } );
-		 *    } );
-		 */
-		"bDeferRender": false,
-	
-	
-		/**
-		 * Replace a DataTable which matches the given selector and replace it with
-		 * one which has the properties of the new initialisation object passed. If no
-		 * table matches the selector, then the new DataTable will be constructed as
-		 * per normal.
-		 *  @type boolean
-		 *  @default false
-		 *
-		 *  @dtopt Options
-		 *  @name DataTable.defaults.destroy
-		 *
-		 *  @example
-		 *    $(document).ready( function() {
-		 *      $('#example').dataTable( {
-		 *        "srollY": "200px",
-		 *        "paginate": false
-		 *      } );
-		 *
-		 *      // Some time later....
-		 *      $('#example').dataTable( {
-		 *        "filter": false,
-		 *        "destroy": true
-		 *      } );
-		 *    } );
-		 */
-		"bDestroy": false,
-	
-	
-		/**
-		 * Enable or disable filtering of data. Filtering in DataTables is "smart" in
-		 * that it allows the end user to input multiple words (space separated) and
-		 * will match a row containing those words, even if not in the order that was
-		 * specified (this allow matching across multiple columns). Note that if you
-		 * wish to use filtering in DataTables this must remain 'true' - to remove the
-		 * default filtering input box and retain filtering abilities, please use
-		 * {@link DataTable.defaults.dom}.
-		 *  @type boolean
-		 *  @default true
-		 *
-		 *  @dtopt Features
-		 *  @name DataTable.defaults.searching
-		 *
-		 *  @example
-		 *    $(document).ready( function () {
-		 *      $('#example').dataTable( {
-		 *        "searching": false
-		 *      } );
-		 *    } );
-		 */
-		"bFilter": true,
-	
-	
-		/**
-		 * Enable or disable the table information display. This shows information
-		 * about the data that is currently visible on the page, including information
-		 * about filtered data if that action is being performed.
-		 *  @type boolean
-		 *  @default true
-		 *
-		 *  @dtopt Features
-		 *  @name DataTable.defaults.info
-		 *
-		 *  @example
-		 *    $(document).ready( function () {
-		 *      $('#example').dataTable( {
-		 *        "info": false
-		 *      } );
-		 *    } );
-		 */
-		"bInfo": true,
-	
-	
-		/**
-		 * Allows the end user to select the size of a formatted page from a select
-		 * menu (sizes are 10, 25, 50 and 100). Requires pagination (`paginate`).
-		 *  @type boolean
-		 *  @default true
-		 *
-		 *  @dtopt Features
-		 *  @name DataTable.defaults.lengthChange
-		 *
-		 *  @example
-		 *    $(document).ready( function () {
-		 *      $('#example').dataTable( {
-		 *        "lengthChange": false
-		 *      } );
-		 *    } );
-		 */
-		"bLengthChange": true,
-	
-	
-		/**
-		 * Enable or disable pagination.
-		 *  @type boolean
-		 *  @default true
-		 *
-		 *  @dtopt Features
-		 *  @name DataTable.defaults.paging
-		 *
-		 *  @example
-		 *    $(document).ready( function () {
-		 *      $('#example').dataTable( {
-		 *        "paging": false
-		 *      } );
-		 *    } );
-		 */
-		"bPaginate": true,
-	
-	
-		/**
-		 * Enable or disable the display of a 'processing' indicator when the table is
-		 * being processed (e.g. a sort). This is particularly useful for tables with
-		 * large amounts of data where it can take a noticeable amount of time to sort
-		 * the entries.
-		 *  @type boolean
-		 *  @default false
-		 *
-		 *  @dtopt Features
-		 *  @name DataTable.defaults.processing
-		 *
-		 *  @example
-		 *    $(document).ready( function () {
-		 *      $('#example').dataTable( {
-		 *        "processing": true
-		 *      } );
-		 *    } );
-		 */
-		"bProcessing": false,
-	
-	
-		/**
-		 * Retrieve the DataTables object for the given selector. Note that if the
-		 * table has already been initialised, this parameter will cause DataTables
-		 * to simply return the object that has already been set up - it will not take
-		 * account of any changes you might have made to the initialisation object
-		 * passed to DataTables (setting this parameter to true is an acknowledgement
-		 * that you understand this). `destroy` can be used to reinitialise a table if
-		 * you need.
-		 *  @type boolean
-		 *  @default false
-		 *
-		 *  @dtopt Options
-		 *  @name DataTable.defaults.retrieve
-		 *
-		 *  @example
-		 *    $(document).ready( function() {
-		 *      initTable();
-		 *      tableActions();
-		 *    } );
-		 *
-		 *    function initTable ()
-		 *    {
-		 *      return $('#example').dataTable( {
-		 *        "scrollY": "200px",
-		 *        "paginate": false,
-		 *        "retrieve": true
-		 *      } );
-		 *    }
-		 *
-		 *    function tableActions ()
-		 *    {
-		 *      var table = initTable();
-		 *      // perform API operations with oTable
-		 *    }
-		 */
-		"bRetrieve": false,
-	
-	
-		/**
-		 * When vertical (y) scrolling is enabled, DataTables will force the height of
-		 * the table's viewport to the given height at all times (useful for layout).
-		 * However, this can look odd when filtering data down to a small data set,
-		 * and the footer is left "floating" further down. This parameter (when
-		 * enabled) will cause DataTables to collapse the table's viewport down when
-		 * the result set will fit within the given Y height.
-		 *  @type boolean
-		 *  @default false
-		 *
-		 *  @dtopt Options
-		 *  @name DataTable.defaults.scrollCollapse
-		 *
-		 *  @example
-		 *    $(document).ready( function() {
-		 *      $('#example').dataTable( {
-		 *        "scrollY": "200",
-		 *        "scrollCollapse": true
-		 *      } );
-		 *    } );
-		 */
-		"bScrollCollapse": false,
-	
-	
-		/**
-		 * Configure DataTables to use server-side processing. Note that the
-		 * `ajax` parameter must also be given in order to give DataTables a
-		 * source to obtain the required data for each draw.
-		 *  @type boolean
-		 *  @default false
-		 *
-		 *  @dtopt Features
-		 *  @dtopt Server-side
-		 *  @name DataTable.defaults.serverSide
-		 *
-		 *  @example
-		 *    $(document).ready( function () {
-		 *      $('#example').dataTable( {
-		 *        "serverSide": true,
-		 *        "ajax": "xhr.php"
-		 *      } );
-		 *    } );
-		 */
-		"bServerSide": false,
-	
-	
-		/**
-		 * Enable or disable sorting of columns. Sorting of individual columns can be
-		 * disabled by the `sortable` option for each column.
-		 *  @type boolean
-		 *  @default true
-		 *
-		 *  @dtopt Features
-		 *  @name DataTable.defaults.ordering
-		 *
-		 *  @example
-		 *    $(document).ready( function () {
-		 *      $('#example').dataTable( {
-		 *        "ordering": false
-		 *      } );
-		 *    } );
-		 */
-		"bSort": true,
-	
-	
-		/**
-		 * Enable or display DataTables' ability to sort multiple columns at the
-		 * same time (activated by shift-click by the user).
-		 *  @type boolean
-		 *  @default true
-		 *
-		 *  @dtopt Options
-		 *  @name DataTable.defaults.orderMulti
-		 *
-		 *  @example
-		 *    // Disable multiple column sorting ability
-		 *    $(document).ready( function () {
-		 *      $('#example').dataTable( {
-		 *        "orderMulti": false
-		 *      } );
-		 *    } );
-		 */
-		"bSortMulti": true,
-	
-	
-		/**
-		 * Allows control over whether DataTables should use the top (true) unique
-		 * cell that is found for a single column, or the bottom (false - default).
-		 * This is useful when using complex headers.
-		 *  @type boolean
-		 *  @default false
-		 *
-		 *  @dtopt Options
-		 *  @name DataTable.defaults.orderCellsTop
-		 *
-		 *  @example
-		 *    $(document).ready( function() {
-		 *      $('#example').dataTable( {
-		 *        "orderCellsTop": true
-		 *      } );
-		 *    } );
-		 */
-		"bSortCellsTop": false,
-	
-	
-		/**
-		 * Enable or disable the addition of the classes `sorting\_1`, `sorting\_2` and
-		 * `sorting\_3` to the columns which are currently being sorted on. This is
-		 * presented as a feature switch as it can increase processing time (while
-		 * classes are removed and added) so for large data sets you might want to
-		 * turn this off.
-		 *  @type boolean
-		 *  @default true
-		 *
-		 *  @dtopt Features
-		 *  @name DataTable.defaults.orderClasses
-		 *
-		 *  @example
-		 *    $(document).ready( function () {
-		 *      $('#example').dataTable( {
-		 *        "orderClasses": false
-		 *      } );
-		 *    } );
-		 */
-		"bSortClasses": true,
-	
-	
-		/**
-		 * Enable or disable state saving. When enabled HTML5 `localStorage` will be
-		 * used to save table display information such as pagination information,
-		 * display length, filtering and sorting. As such when the end user reloads
-		 * the page the display display will match what thy had previously set up.
-		 *
-		 * Due to the use of `localStorage` the default state saving is not supported
-		 * in IE6 or 7. If state saving is required in those browsers, use
-		 * `stateSaveCallback` to provide a storage solution such as cookies.
-		 *  @type boolean
-		 *  @default false
-		 *
-		 *  @dtopt Features
-		 *  @name DataTable.defaults.stateSave
-		 *
-		 *  @example
-		 *    $(document).ready( function () {
-		 *      $('#example').dataTable( {
-		 *        "stateSave": true
-		 *      } );
-		 *    } );
-		 */
-		"bStateSave": false,
-	
-	
-		/**
-		 * This function is called when a TR element is created (and all TD child
-		 * elements have been inserted), or registered if using a DOM source, allowing
-		 * manipulation of the TR element (adding classes etc).
-		 *  @type function
-		 *  @param {node} row "TR" element for the current row
-		 *  @param {array} data Raw data array for this row
-		 *  @param {int} dataIndex The index of this row in the internal aoData array
-		 *
-		 *  @dtopt Callbacks
-		 *  @name DataTable.defaults.createdRow
-		 *
-		 *  @example
-		 *    $(document).ready( function() {
-		 *      $('#example').dataTable( {
-		 *        "createdRow": function( row, data, dataIndex ) {
-		 *          // Bold the grade for all 'A' grade browsers
-		 *          if ( data[4] == "A" )
-		 *          {
-		 *            $('td:eq(4)', row).html( '<b>A</b>' );
-		 *          }
-		 *        }
-		 *      } );
-		 *    } );
-		 */
-		"fnCreatedRow": null,
-	
-	
-		/**
-		 * This function is called on every 'draw' event, and allows you to
-		 * dynamically modify any aspect you want about the created DOM.
-		 *  @type function
-		 *  @param {object} settings DataTables settings object
-		 *
-		 *  @dtopt Callbacks
-		 *  @name DataTable.defaults.drawCallback
-		 *
-		 *  @example
-		 *    $(document).ready( function() {
-		 *      $('#example').dataTable( {
-		 *        "drawCallback": function( settings ) {
-		 *          alert( 'DataTables has redrawn the table' );
-		 *        }
-		 *      } );
-		 *    } );
-		 */
-		"fnDrawCallback": null,
-	
-	
-		/**
-		 * Identical to fnHeaderCallback() but for the table footer this function
-		 * allows you to modify the table footer on every 'draw' event.
-		 *  @type function
-		 *  @param {node} foot "TR" element for the footer
-		 *  @param {array} data Full table data (as derived from the original HTML)
-		 *  @param {int} start Index for the current display starting point in the
-		 *    display array
-		 *  @param {int} end Index for the current display ending point in the
-		 *    display array
-		 *  @param {array int} display Index array to translate the visual position
-		 *    to the full data array
-		 *
-		 *  @dtopt Callbacks
-		 *  @name DataTable.defaults.footerCallback
-		 *
-		 *  @example
-		 *    $(document).ready( function() {
-		 *      $('#example').dataTable( {
-		 *        "footerCallback": function( tfoot, data, start, end, display ) {
-		 *          tfoot.getElementsByTagName('th')[0].innerHTML = "Starting index is "+start;
-		 *        }
-		 *      } );
-		 *    } )
-		 */
-		"fnFooterCallback": null,
-	
-	
-		/**
-		 * When rendering large numbers in the information element for the table
-		 * (i.e. "Showing 1 to 10 of 57 entries") DataTables will render large numbers
-		 * to have a comma separator for the 'thousands' units (e.g. 1 million is
-		 * rendered as "1,000,000") to help readability for the end user. This
-		 * function will override the default method DataTables uses.
-		 *  @type function
-		 *  @member
-		 *  @param {int} toFormat number to be formatted
-		 *  @returns {string} formatted string for DataTables to show the number
-		 *
-		 *  @dtopt Callbacks
-		 *  @name DataTable.defaults.formatNumber
-		 *
-		 *  @example
-		 *    // Format a number using a single quote for the separator (note that
-		 *    // this can also be done with the language.thousands option)
-		 *    $(document).ready( function() {
-		 *      $('#example').dataTable( {
-		 *        "formatNumber": function ( toFormat ) {
-		 *          return toFormat.toString().replace(
-		 *            /\B(?=(\d{3})+(?!\d))/g, "'"
-		 *          );
-		 *        };
-		 *      } );
-		 *    } );
-		 */
-		"fnFormatNumber": function ( toFormat ) {
-			return toFormat.toString().replace(
-				/\B(?=(\d{3})+(?!\d))/g,
-				this.oLanguage.sThousands
-			);
-		},
-	
-	
-		/**
-		 * This function is called on every 'draw' event, and allows you to
-		 * dynamically modify the header row. This can be used to calculate and
-		 * display useful information about the table.
-		 *  @type function
-		 *  @param {node} head "TR" element for the header
-		 *  @param {array} data Full table data (as derived from the original HTML)
-		 *  @param {int} start Index for the current display starting point in the
-		 *    display array
-		 *  @param {int} end Index for the current display ending point in the
-		 *    display array
-		 *  @param {array int} display Index array to translate the visual position
-		 *    to the full data array
-		 *
-		 *  @dtopt Callbacks
-		 *  @name DataTable.defaults.headerCallback
-		 *
-		 *  @example
-		 *    $(document).ready( function() {
-		 *      $('#example').dataTable( {
-		 *        "fheaderCallback": function( head, data, start, end, display ) {
-		 *          head.getElementsByTagName('th')[0].innerHTML = "Displaying "+(end-start)+" records";
-		 *        }
-		 *      } );
-		 *    } )
-		 */
-		"fnHeaderCallback": null,
-	
-	
-		/**
-		 * The information element can be used to convey information about the current
-		 * state of the table. Although the internationalisation options presented by
-		 * DataTables are quite capable of dealing with most customisations, there may
-		 * be times where you wish to customise the string further. This callback
-		 * allows you to do exactly that.
-		 *  @type function
-		 *  @param {object} oSettings DataTables settings object
-		 *  @param {int} start Starting position in data for the draw
-		 *  @param {int} end End position in data for the draw
-		 *  @param {int} max Total number of rows in the table (regardless of
-		 *    filtering)
-		 *  @param {int} total Total number of rows in the data set, after filtering
-		 *  @param {string} pre The string that DataTables has formatted using it's
-		 *    own rules
-		 *  @returns {string} The string to be displayed in the information element.
-		 *
-		 *  @dtopt Callbacks
-		 *  @name DataTable.defaults.infoCallback
-		 *
-		 *  @example
-		 *    $('#example').dataTable( {
-		 *      "infoCallback": function( settings, start, end, max, total, pre ) {
-		 *        return start +" to "+ end;
-		 *      }
-		 *    } );
-		 */
-		"fnInfoCallback": null,
-	
-	
-		/**
-		 * Called when the table has been initialised. Normally DataTables will
-		 * initialise sequentially and there will be no need for this function,
-		 * however, this does not hold true when using external language information
-		 * since that is obtained using an async XHR call.
-		 *  @type function
-		 *  @param {object} settings DataTables settings object
-		 *  @param {object} json The JSON object request from the server - only
-		 *    present if client-side Ajax sourced data is used
-		 *
-		 *  @dtopt Callbacks
-		 *  @name DataTable.defaults.initComplete
-		 *
-		 *  @example
-		 *    $(document).ready( function() {
-		 *      $('#example').dataTable( {
-		 *        "initComplete": function(settings, json) {
-		 *          alert( 'DataTables has finished its initialisation.' );
-		 *        }
-		 *      } );
-		 *    } )
-		 */
-		"fnInitComplete": null,
-	
-	
-		/**
-		 * Called at the very start of each table draw and can be used to cancel the
-		 * draw by returning false, any other return (including undefined) results in
-		 * the full draw occurring).
-		 *  @type function
-		 *  @param {object} settings DataTables settings object
-		 *  @returns {boolean} False will cancel the draw, anything else (including no
-		 *    return) will allow it to complete.
-		 *
-		 *  @dtopt Callbacks
-		 *  @name DataTable.defaults.preDrawCallback
-		 *
-		 *  @example
-		 *    $(document).ready( function() {
-		 *      $('#example').dataTable( {
-		 *        "preDrawCallback": function( settings ) {
-		 *          if ( $('#test').val() == 1 ) {
-		 *            return false;
-		 *          }
-		 *        }
-		 *      } );
-		 *    } );
-		 */
-		"fnPreDrawCallback": null,
-	
-	
-		/**
-		 * This function allows you to 'post process' each row after it have been
-		 * generated for each table draw, but before it is rendered on screen. This
-		 * function might be used for setting the row class name etc.
-		 *  @type function
-		 *  @param {node} row "TR" element for the current row
-		 *  @param {array} data Raw data array for this row
-		 *  @param {int} displayIndex The display index for the current table draw
-		 *  @param {int} displayIndexFull The index of the data in the full list of
-		 *    rows (after filtering)
-		 *
-		 *  @dtopt Callbacks
-		 *  @name DataTable.defaults.rowCallback
-		 *
-		 *  @example
-		 *    $(document).ready( function() {
-		 *      $('#example').dataTable( {
-		 *        "rowCallback": function( row, data, displayIndex, displayIndexFull ) {
-		 *          // Bold the grade for all 'A' grade browsers
-		 *          if ( data[4] == "A" ) {
-		 *            $('td:eq(4)', row).html( '<b>A</b>' );
-		 *          }
-		 *        }
-		 *      } );
-		 *    } );
-		 */
-		"fnRowCallback": null,
-	
-	
-		/**
-		 * __Deprecated__ The functionality provided by this parameter has now been
-		 * superseded by that provided through `ajax`, which should be used instead.
-		 *
-		 * This parameter allows you to override the default function which obtains
-		 * the data from the server so something more suitable for your application.
-		 * For example you could use POST data, or pull information from a Gears or
-		 * AIR database.
-		 *  @type function
-		 *  @member
-		 *  @param {string} source HTTP source to obtain the data from (`ajax`)
-		 *  @param {array} data A key/value pair object containing the data to send
-		 *    to the server
-		 *  @param {function} callback to be called on completion of the data get
-		 *    process that will draw the data on the page.
-		 *  @param {object} settings DataTables settings object
-		 *
-		 *  @dtopt Callbacks
-		 *  @dtopt Server-side
-		 *  @name DataTable.defaults.serverData
-		 *
-		 *  @deprecated 1.10. Please use `ajax` for this functionality now.
-		 */
-		"fnServerData": null,
-	
-	
-		/**
-		 * __Deprecated__ The functionality provided by this parameter has now been
-		 * superseded by that provided through `ajax`, which should be used instead.
-		 *
-		 *  It is often useful to send extra data to the server when making an Ajax
-		 * request - for example custom filtering information, and this callback
-		 * function makes it trivial to send extra information to the server. The
-		 * passed in parameter is the data set that has been constructed by
-		 * DataTables, and you can add to this or modify it as you require.
-		 *  @type function
-		 *  @param {array} data Data array (array of objects which are name/value
-		 *    pairs) that has been constructed by DataTables and will be sent to the
-		 *    server. In the case of Ajax sourced data with server-side processing
-		 *    this will be an empty array, for server-side processing there will be a
-		 *    significant number of parameters!
-		 *  @returns {undefined} Ensure that you modify the data array passed in,
-		 *    as this is passed by reference.
-		 *
-		 *  @dtopt Callbacks
-		 *  @dtopt Server-side
-		 *  @name DataTable.defaults.serverParams
-		 *
-		 *  @deprecated 1.10. Please use `ajax` for this functionality now.
-		 */
-		"fnServerParams": null,
-	
-	
-		/**
-		 * Load the table state. With this function you can define from where, and how, the
-		 * state of a table is loaded. By default DataTables will load from `localStorage`
-		 * but you might wish to use a server-side database or cookies.
-		 *  @type function
-		 *  @member
-		 *  @param {object} settings DataTables settings object
-		 *  @param {object} callback Callback that can be executed when done. It
-		 *    should be passed the loaded state object.
-		 *  @return {object} The DataTables state object to be loaded
-		 *
-		 *  @dtopt Callbacks
-		 *  @name DataTable.defaults.stateLoadCallback
-		 *
-		 *  @example
-		 *    $(document).ready( function() {
-		 *      $('#example').dataTable( {
-		 *        "stateSave": true,
-		 *        "stateLoadCallback": function (settings, callback) {
-		 *          $.ajax( {
-		 *            "url": "/state_load",
-		 *            "dataType": "json",
-		 *            "success": function (json) {
-		 *              callback( json );
-		 *            }
-		 *          } );
-		 *        }
-		 *      } );
-		 *    } );
-		 */
-		"fnStateLoadCallback": function ( settings ) {
-			try {
-				return JSON.parse(
-					(settings.iStateDuration === -1 ? sessionStorage : localStorage).getItem(
-						'DataTables_'+settings.sInstance+'_'+location.pathname
-					)
-				);
-			} catch (e) {
-				return {};
-			}
-		},
-	
-	
-		/**
-		 * Callback which allows modification of the saved state prior to loading that state.
-		 * This callback is called when the table is loading state from the stored data, but
-		 * prior to the settings object being modified by the saved state. Note that for
-		 * plug-in authors, you should use the `stateLoadParams` event to load parameters for
-		 * a plug-in.
-		 *  @type function
-		 *  @param {object} settings DataTables settings object
-		 *  @param {object} data The state object that is to be loaded
-		 *
-		 *  @dtopt Callbacks
-		 *  @name DataTable.defaults.stateLoadParams
-		 *
-		 *  @example
-		 *    // Remove a saved filter, so filtering is never loaded
-		 *    $(document).ready( function() {
-		 *      $('#example').dataTable( {
-		 *        "stateSave": true,
-		 *        "stateLoadParams": function (settings, data) {
-		 *          data.oSearch.sSearch = "";
-		 *        }
-		 *      } );
-		 *    } );
-		 *
-		 *  @example
-		 *    // Disallow state loading by returning false
-		 *    $(document).ready( function() {
-		 *      $('#example').dataTable( {
-		 *        "stateSave": true,
-		 *        "stateLoadParams": function (settings, data) {
-		 *          return false;
-		 *        }
-		 *      } );
-		 *    } );
-		 */
-		"fnStateLoadParams": null,
-	
-	
-		/**
-		 * Callback that is called when the state has been loaded from the state saving method
-		 * and the DataTables settings object has been modified as a result of the loaded state.
-		 *  @type function
-		 *  @param {object} settings DataTables settings object
-		 *  @param {object} data The state object that was loaded
-		 *
-		 *  @dtopt Callbacks
-		 *  @name DataTable.defaults.stateLoaded
-		 *
-		 *  @example
-		 *    // Show an alert with the filtering value that was saved
-		 *    $(document).ready( function() {
-		 *      $('#example').dataTable( {
-		 *        "stateSave": true,
-		 *        "stateLoaded": function (settings, data) {
-		 *          alert( 'Saved filter was: '+data.oSearch.sSearch );
-		 *        }
-		 *      } );
-		 *    } );
-		 */
-		"fnStateLoaded": null,
-	
-	
-		/**
-		 * Save the table state. This function allows you to define where and how the state
-		 * information for the table is stored By default DataTables will use `localStorage`
-		 * but you might wish to use a server-side database or cookies.
-		 *  @type function
-		 *  @member
-		 *  @param {object} settings DataTables settings object
-		 *  @param {object} data The state object to be saved
-		 *
-		 *  @dtopt Callbacks
-		 *  @name DataTable.defaults.stateSaveCallback
-		 *
-		 *  @example
-		 *    $(document).ready( function() {
-		 *      $('#example').dataTable( {
-		 *        "stateSave": true,
-		 *        "stateSaveCallback": function (settings, data) {
-		 *          // Send an Ajax request to the server with the state object
-		 *          $.ajax( {
-		 *            "url": "/state_save",
-		 *            "data": data,
-		 *            "dataType": "json",
-		 *            "method": "POST"
-		 *            "success": function () {}
-		 *          } );
-		 *        }
-		 *      } );
-		 *    } );
-		 */
-		"fnStateSaveCallback": function ( settings, data ) {
-			try {
-				(settings.iStateDuration === -1 ? sessionStorage : localStorage).setItem(
-					'DataTables_'+settings.sInstance+'_'+location.pathname,
-					JSON.stringify( data )
-				);
-			} catch (e) {}
-		},
-	
-	
-		/**
-		 * Callback which allows modification of the state to be saved. Called when the table
-		 * has changed state a new state save is required. This method allows modification of
-		 * the state saving object prior to actually doing the save, including addition or
-		 * other state properties or modification. Note that for plug-in authors, you should
-		 * use the `stateSaveParams` event to save parameters for a plug-in.
-		 *  @type function
-		 *  @param {object} settings DataTables settings object
-		 *  @param {object} data The state object to be saved
-		 *
-		 *  @dtopt Callbacks
-		 *  @name DataTable.defaults.stateSaveParams
-		 *
-		 *  @example
-		 *    // Remove a saved filter, so filtering is never saved
-		 *    $(document).ready( function() {
-		 *      $('#example').dataTable( {
-		 *        "stateSave": true,
-		 *        "stateSaveParams": function (settings, data) {
-		 *          data.oSearch.sSearch = "";
-		 *        }
-		 *      } );
-		 *    } );
-		 */
-		"fnStateSaveParams": null,
-	
-	
-		/**
-		 * Duration for which the saved state information is considered valid. After this period
-		 * has elapsed the state will be returned to the default.
-		 * Value is given in seconds.
-		 *  @type int
-		 *  @default 7200 <i>(2 hours)</i>
-		 *
-		 *  @dtopt Options
-		 *  @name DataTable.defaults.stateDuration
-		 *
-		 *  @example
-		 *    $(document).ready( function() {
-		 *      $('#example').dataTable( {
-		 *        "stateDuration": 60*60*24; // 1 day
-		 *      } );
-		 *    } )
-		 */
-		"iStateDuration": 7200,
-	
-	
-		/**
-		 * When enabled DataTables will not make a request to the server for the first
-		 * page draw - rather it will use the data already on the page (no sorting etc
-		 * will be applied to it), thus saving on an XHR at load time. `deferLoading`
-		 * is used to indicate that deferred loading is required, but it is also used
-		 * to tell DataTables how many records there are in the full table (allowing
-		 * the information element and pagination to be displayed correctly). In the case
-		 * where a filtering is applied to the table on initial load, this can be
-		 * indicated by giving the parameter as an array, where the first element is
-		 * the number of records available after filtering and the second element is the
-		 * number of records without filtering (allowing the table information element
-		 * to be shown correctly).
-		 *  @type int | array
-		 *  @default null
-		 *
-		 *  @dtopt Options
-		 *  @name DataTable.defaults.deferLoading
-		 *
-		 *  @example
-		 *    // 57 records available in the table, no filtering applied
-		 *    $(document).ready( function() {
-		 *      $('#example').dataTable( {
-		 *        "serverSide": true,
-		 *        "ajax": "scripts/server_processing.php",
-		 *        "deferLoading": 57
-		 *      } );
-		 *    } );
-		 *
-		 *  @example
-		 *    // 57 records after filtering, 100 without filtering (an initial filter applied)
-		 *    $(document).ready( function() {
-		 *      $('#example').dataTable( {
-		 *        "serverSide": true,
-		 *        "ajax": "scripts/server_processing.php",
-		 *        "deferLoading": [ 57, 100 ],
-		 *        "search": {
-		 *          "search": "my_filter"
-		 *        }
-		 *      } );
-		 *    } );
-		 */
-		"iDeferLoading": null,
-	
-	
-		/**
-		 * Number of rows to display on a single page when using pagination. If
-		 * feature enabled (`lengthChange`) then the end user will be able to override
-		 * this to a custom setting using a pop-up menu.
-		 *  @type int
-		 *  @default 10
-		 *
-		 *  @dtopt Options
-		 *  @name DataTable.defaults.pageLength
-		 *
-		 *  @example
-		 *    $(document).ready( function() {
-		 *      $('#example').dataTable( {
-		 *        "pageLength": 50
-		 *      } );
-		 *    } )
-		 */
-		"iDisplayLength": 10,
-	
-	
-		/**
-		 * Define the starting point for data display when using DataTables with
-		 * pagination. Note that this parameter is the number of records, rather than
-		 * the page number, so if you have 10 records per page and want to start on
-		 * the third page, it should be "20".
-		 *  @type int
-		 *  @default 0
-		 *
-		 *  @dtopt Options
-		 *  @name DataTable.defaults.displayStart
-		 *
-		 *  @example
-		 *    $(document).ready( function() {
-		 *      $('#example').dataTable( {
-		 *        "displayStart": 20
-		 *      } );
-		 *    } )
-		 */
-		"iDisplayStart": 0,
-	
-	
-		/**
-		 * By default DataTables allows keyboard navigation of the table (sorting, paging,
-		 * and filtering) by adding a `tabindex` attribute to the required elements. This
-		 * allows you to tab through the controls and press the enter key to activate them.
-		 * The tabindex is default 0, meaning that the tab follows the flow of the document.
-		 * You can overrule this using this parameter if you wish. Use a value of -1 to
-		 * disable built-in keyboard navigation.
-		 *  @type int
-		 *  @default 0
-		 *
-		 *  @dtopt Options
-		 *  @name DataTable.defaults.tabIndex
-		 *
-		 *  @example
-		 *    $(document).ready( function() {
-		 *      $('#example').dataTable( {
-		 *        "tabIndex": 1
-		 *      } );
-		 *    } );
-		 */
-		"iTabIndex": 0,
-	
-	
-		/**
-		 * Classes that DataTables assigns to the various components and features
-		 * that it adds to the HTML table. This allows classes to be configured
-		 * during initialisation in addition to through the static
-		 * {@link DataTable.ext.oStdClasses} object).
-		 *  @namespace
-		 *  @name DataTable.defaults.classes
-		 */
-		"oClasses": {},
-	
-	
-		/**
-		 * All strings that DataTables uses in the user interface that it creates
-		 * are defined in this object, allowing you to modified them individually or
-		 * completely replace them all as required.
-		 *  @namespace
-		 *  @name DataTable.defaults.language
-		 */
-		"oLanguage": {
-			/**
-			 * Strings that are used for WAI-ARIA labels and controls only (these are not
-			 * actually visible on the page, but will be read by screenreaders, and thus
-			 * must be internationalised as well).
-			 *  @namespace
-			 *  @name DataTable.defaults.language.aria
-			 */
-			"oAria": {
-				/**
-				 * ARIA label that is added to the table headers when the column may be
-				 * sorted ascending by activing the column (click or return when focused).
-				 * Note that the column header is prefixed to this string.
-				 *  @type string
-				 *  @default : activate to sort column ascending
-				 *
-				 *  @dtopt Language
-				 *  @name DataTable.defaults.language.aria.sortAscending
-				 *
-				 *  @example
-				 *    $(document).ready( function() {
-				 *      $('#example').dataTable( {
-				 *        "language": {
-				 *          "aria": {
-				 *            "sortAscending": " - click/return to sort ascending"
-				 *          }
-				 *        }
-				 *      } );
-				 *    } );
-				 */
-				"sSortAscending": ": activate to sort column ascending",
-	
-				/**
-				 * ARIA label that is added to the table headers when the column may be
-				 * sorted descending by activing the column (click or return when focused).
-				 * Note that the column header is prefixed to this string.
-				 *  @type string
-				 *  @default : activate to sort column ascending
-				 *
-				 *  @dtopt Language
-				 *  @name DataTable.defaults.language.aria.sortDescending
-				 *
-				 *  @example
-				 *    $(document).ready( function() {
-				 *      $('#example').dataTable( {
-				 *        "language": {
-				 *          "aria": {
-				 *            "sortDescending": " - click/return to sort descending"
-				 *          }
-				 *        }
-				 *      } );
-				 *    } );
-				 */
-				"sSortDescending": ": activate to sort column descending"
-			},
-	
-			/**
-			 * Pagination string used by DataTables for the built-in pagination
-			 * control types.
-			 *  @namespace
-			 *  @name DataTable.defaults.language.paginate
-			 */
-			"oPaginate": {
-				/**
-				 * Text to use when using the 'full_numbers' type of pagination for the
-				 * button to take the user to the first page.
-				 *  @type string
-				 *  @default First
-				 *
-				 *  @dtopt Language
-				 *  @name DataTable.defaults.language.paginate.first
-				 *
-				 *  @example
-				 *    $(document).ready( function() {
-				 *      $('#example').dataTable( {
-				 *        "language": {
-				 *          "paginate": {
-				 *            "first": "First page"
-				 *          }
-				 *        }
-				 *      } );
-				 *    } );
-				 */
-				"sFirst": "First",
-	
-	
-				/**
-				 * Text to use when using the 'full_numbers' type of pagination for the
-				 * button to take the user to the last page.
-				 *  @type string
-				 *  @default Last
-				 *
-				 *  @dtopt Language
-				 *  @name DataTable.defaults.language.paginate.last
-				 *
-				 *  @example
-				 *    $(document).ready( function() {
-				 *      $('#example').dataTable( {
-				 *        "language": {
-				 *          "paginate": {
-				 *            "last": "Last page"
-				 *          }
-				 *        }
-				 *      } );
-				 *    } );
-				 */
-				"sLast": "Last",
-	
-	
-				/**
-				 * Text to use for the 'next' pagination button (to take the user to the
-				 * next page).
-				 *  @type string
-				 *  @default Next
-				 *
-				 *  @dtopt Language
-				 *  @name DataTable.defaults.language.paginate.next
-				 *
-				 *  @example
-				 *    $(document).ready( function() {
-				 *      $('#example').dataTable( {
-				 *        "language": {
-				 *          "paginate": {
-				 *            "next": "Next page"
-				 *          }
-				 *        }
-				 *      } );
-				 *    } );
-				 */
-				"sNext": "Next",
-	
-	
-				/**
-				 * Text to use for the 'previous' pagination button (to take the user to
-				 * the previous page).
-				 *  @type string
-				 *  @default Previous
-				 *
-				 *  @dtopt Language
-				 *  @name DataTable.defaults.language.paginate.previous
-				 *
-				 *  @example
-				 *    $(document).ready( function() {
-				 *      $('#example').dataTable( {
-				 *        "language": {
-				 *          "paginate": {
-				 *            "previous": "Previous page"
-				 *          }
-				 *        }
-				 *      } );
-				 *    } );
-				 */
-				"sPrevious": "Previous"
-			},
-	
-			/**
-			 * This string is shown in preference to `zeroRecords` when the table is
-			 * empty of data (regardless of filtering). Note that this is an optional
-			 * parameter - if it is not given, the value of `zeroRecords` will be used
-			 * instead (either the default or given value).
-			 *  @type string
-			 *  @default No data available in table
-			 *
-			 *  @dtopt Language
-			 *  @name DataTable.defaults.language.emptyTable
-			 *
-			 *  @example
-			 *    $(document).ready( function() {
-			 *      $('#example').dataTable( {
-			 *        "language": {
-			 *          "emptyTable": "No data available in table"
-			 *        }
-			 *      } );
-			 *    } );
-			 */
-			"sEmptyTable": "No data available in table",
-	
-	
-			/**
-			 * This string gives information to the end user about the information
-			 * that is current on display on the page. The following tokens can be
-			 * used in the string and will be dynamically replaced as the table
-			 * display updates. This tokens can be placed anywhere in the string, or
-			 * removed as needed by the language requires:
-			 *
-			 * * `\_START\_` - Display index of the first record on the current page
-			 * * `\_END\_` - Display index of the last record on the current page
-			 * * `\_TOTAL\_` - Number of records in the table after filtering
-			 * * `\_MAX\_` - Number of records in the table without filtering
-			 * * `\_PAGE\_` - Current page number
-			 * * `\_PAGES\_` - Total number of pages of data in the table
-			 *
-			 *  @type string
-			 *  @default Showing _START_ to _END_ of _TOTAL_ entries
-			 *
-			 *  @dtopt Language
-			 *  @name DataTable.defaults.language.info
-			 *
-			 *  @example
-			 *    $(document).ready( function() {
-			 *      $('#example').dataTable( {
-			 *        "language": {
-			 *          "info": "Showing page _PAGE_ of _PAGES_"
-			 *        }
-			 *      } );
-			 *    } );
-			 */
-			"sInfo": "Showing _START_ to _END_ of _TOTAL_ entries",
-	
-	
-			/**
-			 * Display information string for when the table is empty. Typically the
-			 * format of this string should match `info`.
-			 *  @type string
-			 *  @default Showing 0 to 0 of 0 entries
-			 *
-			 *  @dtopt Language
-			 *  @name DataTable.defaults.language.infoEmpty
-			 *
-			 *  @example
-			 *    $(document).ready( function() {
-			 *      $('#example').dataTable( {
-			 *        "language": {
-			 *          "infoEmpty": "No entries to show"
-			 *        }
-			 *      } );
-			 *    } );
-			 */
-			"sInfoEmpty": "Showing 0 to 0 of 0 entries",
-	
-	
-			/**
-			 * When a user filters the information in a table, this string is appended
-			 * to the information (`info`) to give an idea of how strong the filtering
-			 * is. The variable _MAX_ is dynamically updated.
-			 *  @type string
-			 *  @default (filtered from _MAX_ total entries)
-			 *
-			 *  @dtopt Language
-			 *  @name DataTable.defaults.language.infoFiltered
-			 *
-			 *  @example
-			 *    $(document).ready( function() {
-			 *      $('#example').dataTable( {
-			 *        "language": {
-			 *          "infoFiltered": " - filtering from _MAX_ records"
-			 *        }
-			 *      } );
-			 *    } );
-			 */
-			"sInfoFiltered": "(filtered from _MAX_ total entries)",
-	
-	
-			/**
-			 * If can be useful to append extra information to the info string at times,
-			 * and this variable does exactly that. This information will be appended to
-			 * the `info` (`infoEmpty` and `infoFiltered` in whatever combination they are
-			 * being used) at all times.
-			 *  @type string
-			 *  @default <i>Empty string</i>
-			 *
-			 *  @dtopt Language
-			 *  @name DataTable.defaults.language.infoPostFix
-			 *
-			 *  @example
-			 *    $(document).ready( function() {
-			 *      $('#example').dataTable( {
-			 *        "language": {
-			 *          "infoPostFix": "All records shown are derived from real information."
-			 *        }
-			 *      } );
-			 *    } );
-			 */
-			"sInfoPostFix": "",
-	
-	
-			/**
-			 * This decimal place operator is a little different from the other
-			 * language options since DataTables doesn't output floating point
-			 * numbers, so it won't ever use this for display of a number. Rather,
-			 * what this parameter does is modify the sort methods of the table so
-			 * that numbers which are in a format which has a character other than
-			 * a period (`.`) as a decimal place will be sorted numerically.
-			 *
-			 * Note that numbers with different decimal places cannot be shown in
-			 * the same table and still be sortable, the table must be consistent.
-			 * However, multiple different tables on the page can use different
-			 * decimal place characters.
-			 *  @type string
-			 *  @default 
-			 *
-			 *  @dtopt Language
-			 *  @name DataTable.defaults.language.decimal
-			 *
-			 *  @example
-			 *    $(document).ready( function() {
-			 *      $('#example').dataTable( {
-			 *        "language": {
-			 *          "decimal": ","
-			 *          "thousands": "."
-			 *        }
-			 *      } );
-			 *    } );
-			 */
-			"sDecimal": "",
-	
-	
-			/**
-			 * DataTables has a build in number formatter (`formatNumber`) which is
-			 * used to format large numbers that are used in the table information.
-			 * By default a comma is used, but this can be trivially changed to any
-			 * character you wish with this parameter.
-			 *  @type string
-			 *  @default ,
-			 *
-			 *  @dtopt Language
-			 *  @name DataTable.defaults.language.thousands
-			 *
-			 *  @example
-			 *    $(document).ready( function() {
-			 *      $('#example').dataTable( {
-			 *        "language": {
-			 *          "thousands": "'"
-			 *        }
-			 *      } );
-			 *    } );
-			 */
-			"sThousands": ",",
-	
-	
-			/**
-			 * Detail the action that will be taken when the drop down menu for the
-			 * pagination length option is changed. The '_MENU_' variable is replaced
-			 * with a default select list of 10, 25, 50 and 100, and can be replaced
-			 * with a custom select box if required.
-			 *  @type string
-			 *  @default Show _MENU_ entries
-			 *
-			 *  @dtopt Language
-			 *  @name DataTable.defaults.language.lengthMenu
-			 *
-			 *  @example
-			 *    // Language change only
-			 *    $(document).ready( function() {
-			 *      $('#example').dataTable( {
-			 *        "language": {
-			 *          "lengthMenu": "Display _MENU_ records"
-			 *        }
-			 *      } );
-			 *    } );
-			 *
-			 *  @example
-			 *    // Language and options change
-			 *    $(document).ready( function() {
-			 *      $('#example').dataTable( {
-			 *        "language": {
-			 *          "lengthMenu": 'Display <select>'+
-			 *            '<option value="10">10</option>'+
-			 *            '<option value="20">20</option>'+
-			 *            '<option value="30">30</option>'+
-			 *            '<option value="40">40</option>'+
-			 *            '<option value="50">50</option>'+
-			 *            '<option value="-1">All</option>'+
-			 *            '</select> records'
-			 *        }
-			 *      } );
-			 *    } );
-			 */
-			"sLengthMenu": "Show _MENU_ entries",
-	
-	
-			/**
-			 * When using Ajax sourced data and during the first draw when DataTables is
-			 * gathering the data, this message is shown in an empty row in the table to
-			 * indicate to the end user the the data is being loaded. Note that this
-			 * parameter is not used when loading data by server-side processing, just
-			 * Ajax sourced data with client-side processing.
-			 *  @type string
-			 *  @default Loading...
-			 *
-			 *  @dtopt Language
-			 *  @name DataTable.defaults.language.loadingRecords
-			 *
-			 *  @example
-			 *    $(document).ready( function() {
-			 *      $('#example').dataTable( {
-			 *        "language": {
-			 *          "loadingRecords": "Please wait - loading..."
-			 *        }
-			 *      } );
-			 *    } );
-			 */
-			"sLoadingRecords": "Loading...",
-	
-	
-			/**
-			 * Text which is displayed when the table is processing a user action
-			 * (usually a sort command or similar).
-			 *  @type string
-			 *  @default Processing...
-			 *
-			 *  @dtopt Language
-			 *  @name DataTable.defaults.language.processing
-			 *
-			 *  @example
-			 *    $(document).ready( function() {
-			 *      $('#example').dataTable( {
-			 *        "language": {
-			 *          "processing": "DataTables is currently busy"
-			 *        }
-			 *      } );
-			 *    } );
-			 */
-			"sProcessing": "Processing...",
-	
-	
-			/**
-			 * Details the actions that will be taken when the user types into the
-			 * filtering input text box. The variable "_INPUT_", if used in the string,
-			 * is replaced with the HTML text box for the filtering input allowing
-			 * control over where it appears in the string. If "_INPUT_" is not given
-			 * then the input box is appended to the string automatically.
-			 *  @type string
-			 *  @default Search:
-			 *
-			 *  @dtopt Language
-			 *  @name DataTable.defaults.language.search
-			 *
-			 *  @example
-			 *    // Input text box will be appended at the end automatically
-			 *    $(document).ready( function() {
-			 *      $('#example').dataTable( {
-			 *        "language": {
-			 *          "search": "Filter records:"
-			 *        }
-			 *      } );
-			 *    } );
-			 *
-			 *  @example
-			 *    // Specify where the filter should appear
-			 *    $(document).ready( function() {
-			 *      $('#example').dataTable( {
-			 *        "language": {
-			 *          "search": "Apply filter _INPUT_ to table"
-			 *        }
-			 *      } );
-			 *    } );
-			 */
-			"sSearch": "Search:",
-	
-	
-			/**
-			 * Assign a `placeholder` attribute to the search `input` element
-			 *  @type string
-			 *  @default 
-			 *
-			 *  @dtopt Language
-			 *  @name DataTable.defaults.language.searchPlaceholder
-			 */
-			"sSearchPlaceholder": "",
-	
-	
-			/**
-			 * All of the language information can be stored in a file on the
-			 * server-side, which DataTables will look up if this parameter is passed.
-			 * It must store the URL of the language file, which is in a JSON format,
-			 * and the object has the same properties as the oLanguage object in the
-			 * initialiser object (i.e. the above parameters). Please refer to one of
-			 * the example language files to see how this works in action.
-			 *  @type string
-			 *  @default <i>Empty string - i.e. disabled</i>
-			 *
-			 *  @dtopt Language
-			 *  @name DataTable.defaults.language.url
-			 *
-			 *  @example
-			 *    $(document).ready( function() {
-			 *      $('#example').dataTable( {
-			 *        "language": {
-			 *          "url": "http://www.sprymedia.co.uk/dataTables/lang.txt"
-			 *        }
-			 *      } );
-			 *    } );
-			 */
-			"sUrl": "",
-	
-	
-			/**
-			 * Text shown inside the table records when the is no information to be
-			 * displayed after filtering. `emptyTable` is shown when there is simply no
-			 * information in the table at all (regardless of filtering).
-			 *  @type string
-			 *  @default No matching records found
-			 *
-			 *  @dtopt Language
-			 *  @name DataTable.defaults.language.zeroRecords
-			 *
-			 *  @example
-			 *    $(document).ready( function() {
-			 *      $('#example').dataTable( {
-			 *        "language": {
-			 *          "zeroRecords": "No records to display"
-			 *        }
-			 *      } );
-			 *    } );
-			 */
-			"sZeroRecords": "No matching records found"
-		},
-	
-	
-		/**
-		 * This parameter allows you to have define the global filtering state at
-		 * initialisation time. As an object the `search` parameter must be
-		 * defined, but all other parameters are optional. When `regex` is true,
-		 * the search string will be treated as a regular expression, when false
-		 * (default) it will be treated as a straight string. When `smart`
-		 * DataTables will use it's smart filtering methods (to word match at
-		 * any point in the data), when false this will not be done.
-		 *  @namespace
-		 *  @extends DataTable.models.oSearch
-		 *
-		 *  @dtopt Options
-		 *  @name DataTable.defaults.search
-		 *
-		 *  @example
-		 *    $(document).ready( function() {
-		 *      $('#example').dataTable( {
-		 *        "search": {"search": "Initial search"}
-		 *      } );
-		 *    } )
-		 */
-		"oSearch": $.extend( {}, DataTable.models.oSearch ),
-	
-	
-		/**
-		 * __Deprecated__ The functionality provided by this parameter has now been
-		 * superseded by that provided through `ajax`, which should be used instead.
-		 *
-		 * By default DataTables will look for the property `data` (or `aaData` for
-		 * compatibility with DataTables 1.9-) when obtaining data from an Ajax
-		 * source or for server-side processing - this parameter allows that
-		 * property to be changed. You can use Javascript dotted object notation to
-		 * get a data source for multiple levels of nesting.
-		 *  @type string
-		 *  @default data
-		 *
-		 *  @dtopt Options
-		 *  @dtopt Server-side
-		 *  @name DataTable.defaults.ajaxDataProp
-		 *
-		 *  @deprecated 1.10. Please use `ajax` for this functionality now.
-		 */
-		"sAjaxDataProp": "data",
-	
-	
-		/**
-		 * __Deprecated__ The functionality provided by this parameter has now been
-		 * superseded by that provided through `ajax`, which should be used instead.
-		 *
-		 * You can instruct DataTables to load data from an external
-		 * source using this parameter (use aData if you want to pass data in you
-		 * already have). Simply provide a url a JSON object can be obtained from.
-		 *  @type string
-		 *  @default null
-		 *
-		 *  @dtopt Options
-		 *  @dtopt Server-side
-		 *  @name DataTable.defaults.ajaxSource
-		 *
-		 *  @deprecated 1.10. Please use `ajax` for this functionality now.
-		 */
-		"sAjaxSource": null,
-	
-	
-		/**
-		 * This initialisation variable allows you to specify exactly where in the
-		 * DOM you want DataTables to inject the various controls it adds to the page
-		 * (for example you might want the pagination controls at the top of the
-		 * table). DIV elements (with or without a custom class) can also be added to
-		 * aid styling. The follow syntax is used:
-		 *   <ul>
-		 *     <li>The following options are allowed:
-		 *       <ul>
-		 *         <li>'l' - Length changing</li>
-		 *         <li>'f' - Filtering input</li>
-		 *         <li>'t' - The table!</li>
-		 *         <li>'i' - Information</li>
-		 *         <li>'p' - Pagination</li>
-		 *         <li>'r' - pRocessing</li>
-		 *       </ul>
-		 *     </li>
-		 *     <li>The following constants are allowed:
-		 *       <ul>
-		 *         <li>'H' - jQueryUI theme "header" classes ('fg-toolbar ui-widget-header ui-corner-tl ui-corner-tr ui-helper-clearfix')</li>
-		 *         <li>'F' - jQueryUI theme "footer" classes ('fg-toolbar ui-widget-header ui-corner-bl ui-corner-br ui-helper-clearfix')</li>
-		 *       </ul>
-		 *     </li>
-		 *     <li>The following syntax is expected:
-		 *       <ul>
-		 *         <li>'&lt;' and '&gt;' - div elements</li>
-		 *         <li>'&lt;"class" and '&gt;' - div with a class</li>
-		 *         <li>'&lt;"#id" and '&gt;' - div with an ID</li>
-		 *       </ul>
-		 *     </li>
-		 *     <li>Examples:
-		 *       <ul>
-		 *         <li>'&lt;"wrapper"flipt&gt;'</li>
-		 *         <li>'&lt;lf&lt;t&gt;ip&gt;'</li>
-		 *       </ul>
-		 *     </li>
-		 *   </ul>
-		 *  @type string
-		 *  @default lfrtip <i>(when `jQueryUI` is false)</i> <b>or</b>
-		 *    <"H"lfr>t<"F"ip> <i>(when `jQueryUI` is true)</i>
-		 *
-		 *  @dtopt Options
-		 *  @name DataTable.defaults.dom
-		 *
-		 *  @example
-		 *    $(document).ready( function() {
-		 *      $('#example').dataTable( {
-		 *        "dom": '&lt;"top"i&gt;rt&lt;"bottom"flp&gt;&lt;"clear"&gt;'
-		 *      } );
-		 *    } );
-		 */
-		"sDom": "lfrtip",
-	
-	
-		/**
-		 * Search delay option. This will throttle full table searches that use the
-		 * DataTables provided search input element (it does not effect calls to
-		 * `dt-api search()`, providing a delay before the search is made.
-		 *  @type integer
-		 *  @default 0
-		 *
-		 *  @dtopt Options
-		 *  @name DataTable.defaults.searchDelay
-		 *
-		 *  @example
-		 *    $(document).ready( function() {
-		 *      $('#example').dataTable( {
-		 *        "searchDelay": 200
-		 *      } );
-		 *    } )
-		 */
-		"searchDelay": null,
-	
-	
-		/**
-		 * DataTables features six different built-in options for the buttons to
-		 * display for pagination control:
-		 *
-		 * * `numbers` - Page number buttons only
-		 * * `simple` - 'Previous' and 'Next' buttons only
-		 * * 'simple_numbers` - 'Previous' and 'Next' buttons, plus page numbers
-		 * * `full` - 'First', 'Previous', 'Next' and 'Last' buttons
-		 * * `full_numbers` - 'First', 'Previous', 'Next' and 'Last' buttons, plus page numbers
-		 * * `first_last_numbers` - 'First' and 'Last' buttons, plus page numbers
-		 *  
-		 * Further methods can be added using {@link DataTable.ext.oPagination}.
-		 *  @type string
-		 *  @default simple_numbers
-		 *
-		 *  @dtopt Options
-		 *  @name DataTable.defaults.pagingType
-		 *
-		 *  @example
-		 *    $(document).ready( function() {
-		 *      $('#example').dataTable( {
-		 *        "pagingType": "full_numbers"
-		 *      } );
-		 *    } )
-		 */
-		"sPaginationType": "simple_numbers",
-	
-	
-		/**
-		 * Enable horizontal scrolling. When a table is too wide to fit into a
-		 * certain layout, or you have a large number of columns in the table, you
-		 * can enable x-scrolling to show the table in a viewport, which can be
-		 * scrolled. This property can be `true` which will allow the table to
-		 * scroll horizontally when needed, or any CSS unit, or a number (in which
-		 * case it will be treated as a pixel measurement). Setting as simply `true`
-		 * is recommended.
-		 *  @type boolean|string
-		 *  @default <i>blank string - i.e. disabled</i>
-		 *
-		 *  @dtopt Features
-		 *  @name DataTable.defaults.scrollX
-		 *
-		 *  @example
-		 *    $(document).ready( function() {
-		 *      $('#example').dataTable( {
-		 *        "scrollX": true,
-		 *        "scrollCollapse": true
-		 *      } );
-		 *    } );
-		 */
-		"sScrollX": "",
-	
-	
-		/**
-		 * This property can be used to force a DataTable to use more width than it
-		 * might otherwise do when x-scrolling is enabled. For example if you have a
-		 * table which requires to be well spaced, this parameter is useful for
-		 * "over-sizing" the table, and thus forcing scrolling. This property can by
-		 * any CSS unit, or a number (in which case it will be treated as a pixel
-		 * measurement).
-		 *  @type string
-		 *  @default <i>blank string - i.e. disabled</i>
-		 *
-		 *  @dtopt Options
-		 *  @name DataTable.defaults.scrollXInner
-		 *
-		 *  @example
-		 *    $(document).ready( function() {
-		 *      $('#example').dataTable( {
-		 *        "scrollX": "100%",
-		 *        "scrollXInner": "110%"
-		 *      } );
-		 *    } );
-		 */
-		"sScrollXInner": "",
-	
-	
-		/**
-		 * Enable vertical scrolling. Vertical scrolling will constrain the DataTable
-		 * to the given height, and enable scrolling for any data which overflows the
-		 * current viewport. This can be used as an alternative to paging to display
-		 * a lot of data in a small area (although paging and scrolling can both be
-		 * enabled at the same time). This property can be any CSS unit, or a number
-		 * (in which case it will be treated as a pixel measurement).
-		 *  @type string
-		 *  @default <i>blank string - i.e. disabled</i>
-		 *
-		 *  @dtopt Features
-		 *  @name DataTable.defaults.scrollY
-		 *
-		 *  @example
-		 *    $(document).ready( function() {
-		 *      $('#example').dataTable( {
-		 *        "scrollY": "200px",
-		 *        "paginate": false
-		 *      } );
-		 *    } );
-		 */
-		"sScrollY": "",
-	
-	
-		/**
-		 * __Deprecated__ The functionality provided by this parameter has now been
-		 * superseded by that provided through `ajax`, which should be used instead.
-		 *
-		 * Set the HTTP method that is used to make the Ajax call for server-side
-		 * processing or Ajax sourced data.
-		 *  @type string
-		 *  @default GET
-		 *
-		 *  @dtopt Options
-		 *  @dtopt Server-side
-		 *  @name DataTable.defaults.serverMethod
-		 *
-		 *  @deprecated 1.10. Please use `ajax` for this functionality now.
-		 */
-		"sServerMethod": "GET",
-	
-	
-		/**
-		 * DataTables makes use of renderers when displaying HTML elements for
-		 * a table. These renderers can be added or modified by plug-ins to
-		 * generate suitable mark-up for a site. For example the Bootstrap
-		 * integration plug-in for DataTables uses a paging button renderer to
-		 * display pagination buttons in the mark-up required by Bootstrap.
-		 *
-		 * For further information about the renderers available see
-		 * DataTable.ext.renderer
-		 *  @type string|object
-		 *  @default null
-		 *
-		 *  @name DataTable.defaults.renderer
-		 *
-		 */
-		"renderer": null,
-	
-	
-		/**
-		 * Set the data property name that DataTables should use to get a row's id
-		 * to set as the `id` property in the node.
-		 *  @type string
-		 *  @default DT_RowId
-		 *
-		 *  @name DataTable.defaults.rowId
-		 */
-		"rowId": "DT_RowId"
-	};
-	
-	_fnHungarianMap( DataTable.defaults );
-	
-	
-	
-	/*
-	 * Developer note - See note in model.defaults.js about the use of Hungarian
-	 * notation and camel case.
-	 */
-	
-	/**
-	 * Column options that can be given to DataTables at initialisation time.
-	 *  @namespace
-	 */
-	DataTable.defaults.column = {
-		/**
-		 * Define which column(s) an order will occur on for this column. This
-		 * allows a column's ordering to take multiple columns into account when
-		 * doing a sort or use the data from a different column. For example first
-		 * name / last name columns make sense to do a multi-column sort over the
-		 * two columns.
-		 *  @type array|int
-		 *  @default null <i>Takes the value of the column index automatically</i>
-		 *
-		 *  @name DataTable.defaults.column.orderData
-		 *  @dtopt Columns
-		 *
-		 *  @example
-		 *    // Using `columnDefs`
-		 *    $(document).ready( function() {
-		 *      $('#example').dataTable( {
-		 *        "columnDefs": [
-		 *          { "orderData": [ 0, 1 ], "targets": [ 0 ] },
-		 *          { "orderData": [ 1, 0 ], "targets": [ 1 ] },
-		 *          { "orderData": 2, "targets": [ 2 ] }
-		 *        ]
-		 *      } );
-		 *    } );
-		 *
-		 *  @example
-		 *    // Using `columns`
-		 *    $(document).ready( function() {
-		 *      $('#example').dataTable( {
-		 *        "columns": [
-		 *          { "orderData": [ 0, 1 ] },
-		 *          { "orderData": [ 1, 0 ] },
-		 *          { "orderData": 2 },
-		 *          null,
-		 *          null
-		 *        ]
-		 *      } );
-		 *    } );
-		 */
-		"aDataSort": null,
-		"iDataSort": -1,
-	
-	
-		/**
-		 * You can control the default ordering direction, and even alter the
-		 * behaviour of the sort handler (i.e. only allow ascending ordering etc)
-		 * using this parameter.
-		 *  @type array
-		 *  @default [ 'asc', 'desc' ]
-		 *
-		 *  @name DataTable.defaults.column.orderSequence
-		 *  @dtopt Columns
-		 *
-		 *  @example
-		 *    // Using `columnDefs`
-		 *    $(document).ready( function() {
-		 *      $('#example').dataTable( {
-		 *        "columnDefs": [
-		 *          { "orderSequence": [ "asc" ], "targets": [ 1 ] },
-		 *          { "orderSequence": [ "desc", "asc", "asc" ], "targets": [ 2 ] },
-		 *          { "orderSequence": [ "desc" ], "targets": [ 3 ] }
-		 *        ]
-		 *      } );
-		 *    } );
-		 *
-		 *  @example
-		 *    // Using `columns`
-		 *    $(document).ready( function() {
-		 *      $('#example').dataTable( {
-		 *        "columns": [
-		 *          null,
-		 *          { "orderSequence": [ "asc" ] },
-		 *          { "orderSequence": [ "desc", "asc", "asc" ] },
-		 *          { "orderSequence": [ "desc" ] },
-		 *          null
-		 *        ]
-		 *      } );
-		 *    } );
-		 */
-		"asSorting": [ 'asc', 'desc' ],
-	
-	
-		/**
-		 * Enable or disable filtering on the data in this column.
-		 *  @type boolean
-		 *  @default true
-		 *
-		 *  @name DataTable.defaults.column.searchable
-		 *  @dtopt Columns
-		 *
-		 *  @example
-		 *    // Using `columnDefs`
-		 *    $(document).ready( function() {
-		 *      $('#example').dataTable( {
-		 *        "columnDefs": [
-		 *          { "searchable": false, "targets": [ 0 ] }
-		 *        ] } );
-		 *    } );
-		 *
-		 *  @example
-		 *    // Using `columns`
-		 *    $(document).ready( function() {
-		 *      $('#example').dataTable( {
-		 *        "columns": [
-		 *          { "searchable": false },
-		 *          null,
-		 *          null,
-		 *          null,
-		 *          null
-		 *        ] } );
-		 *    } );
-		 */
-		"bSearchable": true,
-	
-	
-		/**
-		 * Enable or disable ordering on this column.
-		 *  @type boolean
-		 *  @default true
-		 *
-		 *  @name DataTable.defaults.column.orderable
-		 *  @dtopt Columns
-		 *
-		 *  @example
-		 *    // Using `columnDefs`
-		 *    $(document).ready( function() {
-		 *      $('#example').dataTable( {
-		 *        "columnDefs": [
-		 *          { "orderable": false, "targets": [ 0 ] }
-		 *        ] } );
-		 *    } );
-		 *
-		 *  @example
-		 *    // Using `columns`
-		 *    $(document).ready( function() {
-		 *      $('#example').dataTable( {
-		 *        "columns": [
-		 *          { "orderable": false },
-		 *          null,
-		 *          null,
-		 *          null,
-		 *          null
-		 *        ] } );
-		 *    } );
-		 */
-		"bSortable": true,
-	
-	
-		/**
-		 * Enable or disable the display of this column.
-		 *  @type boolean
-		 *  @default true
-		 *
-		 *  @name DataTable.defaults.column.visible
-		 *  @dtopt Columns
-		 *
-		 *  @example
-		 *    // Using `columnDefs`
-		 *    $(document).ready( function() {
-		 *      $('#example').dataTable( {
-		 *        "columnDefs": [
-		 *          { "visible": false, "targets": [ 0 ] }
-		 *        ] } );
-		 *    } );
-		 *
-		 *  @example
-		 *    // Using `columns`
-		 *    $(document).ready( function() {
-		 *      $('#example').dataTable( {
-		 *        "columns": [
-		 *          { "visible": false },
-		 *          null,
-		 *          null,
-		 *          null,
-		 *          null
-		 *        ] } );
-		 *    } );
-		 */
-		"bVisible": true,
-	
-	
-		/**
-		 * Developer definable function that is called whenever a cell is created (Ajax source,
-		 * etc) or processed for input (DOM source). This can be used as a compliment to mRender
-		 * allowing you to modify the DOM element (add background colour for example) when the
-		 * element is available.
-		 *  @type function
-		 *  @param {element} td The TD node that has been created
-		 *  @param {*} cellData The Data for the cell
-		 *  @param {array|object} rowData The data for the whole row
-		 *  @param {int} row The row index for the aoData data store
-		 *  @param {int} col The column index for aoColumns
-		 *
-		 *  @name DataTable.defaults.column.createdCell
-		 *  @dtopt Columns
-		 *
-		 *  @example
-		 *    $(document).ready( function() {
-		 *      $('#example').dataTable( {
-		 *        "columnDefs": [ {
-		 *          "targets": [3],
-		 *          "createdCell": function (td, cellData, rowData, row, col) {
-		 *            if ( cellData == "1.7" ) {
-		 *              $(td).css('color', 'blue')
-		 *            }
-		 *          }
-		 *        } ]
-		 *      });
-		 *    } );
-		 */
-		"fnCreatedCell": null,
-	
-	
-		/**
-		 * This parameter has been replaced by `data` in DataTables to ensure naming
-		 * consistency. `dataProp` can still be used, as there is backwards
-		 * compatibility in DataTables for this option, but it is strongly
-		 * recommended that you use `data` in preference to `dataProp`.
-		 *  @name DataTable.defaults.column.dataProp
-		 */
-	
-	
-		/**
-		 * This property can be used to read data from any data source property,
-		 * including deeply nested objects / properties. `data` can be given in a
-		 * number of different ways which effect its behaviour:
-		 *
-		 * * `integer` - treated as an array index for the data source. This is the
-		 *   default that DataTables uses (incrementally increased for each column).
-		 * * `string` - read an object property from the data source. There are
-		 *   three 'special' options that can be used in the string to alter how
-		 *   DataTables reads the data from the source object:
-		 *    * `.` - Dotted Javascript notation. Just as you use a `.` in
-		 *      Javascript to read from nested objects, so to can the options
-		 *      specified in `data`. For example: `browser.version` or
-		 *      `browser.name`. If your object parameter name contains a period, use
-		 *      `\\` to escape it - i.e. `first\\.name`.
-		 *    * `[]` - Array notation. DataTables can automatically combine data
-		 *      from and array source, joining the data with the characters provided
-		 *      between the two brackets. For example: `name[, ]` would provide a
-		 *      comma-space separated list from the source array. If no characters
-		 *      are provided between the brackets, the original array source is
-		 *      returned.
-		 *    * `()` - Function notation. Adding `()` to the end of a parameter will
-		 *      execute a function of the name given. For example: `browser()` for a
-		 *      simple function on the data source, `browser.version()` for a
-		 *      function in a nested property or even `browser().version` to get an
-		 *      object property if the function called returns an object. Note that
-		 *      function notation is recommended for use in `render` rather than
-		 *      `data` as it is much simpler to use as a renderer.
-		 * * `null` - use the original data source for the row rather than plucking
-		 *   data directly from it. This action has effects on two other
-		 *   initialisation options:
-		 *    * `defaultContent` - When null is given as the `data` option and
-		 *      `defaultContent` is specified for the column, the value defined by
-		 *      `defaultContent` will be used for the cell.
-		 *    * `render` - When null is used for the `data` option and the `render`
-		 *      option is specified for the column, the whole data source for the
-		 *      row is used for the renderer.
-		 * * `function` - the function given will be executed whenever DataTables
-		 *   needs to set or get the data for a cell in the column. The function
-		 *   takes three parameters:
-		 *    * Parameters:
-		 *      * `{array|object}` The data source for the row
-		 *      * `{string}` The type call data requested - this will be 'set' when
-		 *        setting data or 'filter', 'display', 'type', 'sort' or undefined
-		 *        when gathering data. Note that when `undefined` is given for the
-		 *        type DataTables expects to get the raw data for the object back<
-		 *      * `{*}` Data to set when the second parameter is 'set'.
-		 *    * Return:
-		 *      * The return value from the function is not required when 'set' is
-		 *        the type of call, but otherwise the return is what will be used
-		 *        for the data requested.
-		 *
-		 * Note that `data` is a getter and setter option. If you just require
-		 * formatting of data for output, you will likely want to use `render` which
-		 * is simply a getter and thus simpler to use.
-		 *
-		 * Note that prior to DataTables 1.9.2 `data` was called `mDataProp`. The
-		 * name change reflects the flexibility of this property and is consistent
-		 * with the naming of mRender. If 'mDataProp' is given, then it will still
-		 * be used by DataTables, as it automatically maps the old name to the new
-		 * if required.
-		 *
-		 *  @type string|int|function|null
-		 *  @default null <i>Use automatically calculated column index</i>
-		 *
-		 *  @name DataTable.defaults.column.data
-		 *  @dtopt Columns
-		 *
-		 *  @example
-		 *    // Read table data from objects
-		 *    // JSON structure for each row:
-		 *    //   {
-		 *    //      "engine": {value},
-		 *    //      "browser": {value},
-		 *    //      "platform": {value},
-		 *    //      "version": {value},
-		 *    //      "grade": {value}
-		 *    //   }
-		 *    $(document).ready( function() {
-		 *      $('#example').dataTable( {
-		 *        "ajaxSource": "sources/objects.txt",
-		 *        "columns": [
-		 *          { "data": "engine" },
-		 *          { "data": "browser" },
-		 *          { "data": "platform" },
-		 *          { "data": "version" },
-		 *          { "data": "grade" }
-		 *        ]
-		 *      } );
-		 *    } );
-		 *
-		 *  @example
-		 *    // Read information from deeply nested objects
-		 *    // JSON structure for each row:
-		 *    //   {
-		 *    //      "engine": {value},
-		 *    //      "browser": {value},
-		 *    //      "platform": {
-		 *    //         "inner": {value}
-		 *    //      },
-		 *    //      "details": [
-		 *    //         {value}, {value}
-		 *    //      ]
-		 *    //   }
-		 *    $(document).ready( function() {
-		 *      $('#example').dataTable( {
-		 *        "ajaxSource": "sources/deep.txt",
-		 *        "columns": [
-		 *          { "data": "engine" },
-		 *          { "data": "browser" },
-		 *          { "data": "platform.inner" },
-		 *          { "data": "details.0" },
-		 *          { "data": "details.1" }
-		 *        ]
-		 *      } );
-		 *    } );
-		 *
-		 *  @example
-		 *    // Using `data` as a function to provide different information for
-		 *    // sorting, filtering and display. In this case, currency (price)
-		 *    $(document).ready( function() {
-		 *      $('#example').dataTable( {
-		 *        "columnDefs": [ {
-		 *          "targets": [ 0 ],
-		 *          "data": function ( source, type, val ) {
-		 *            if (type === 'set') {
-		 *              source.price = val;
-		 *              // Store the computed dislay and filter values for efficiency
-		 *              source.price_display = val=="" ? "" : "$"+numberFormat(val);
-		 *              source.price_filter  = val=="" ? "" : "$"+numberFormat(val)+" "+val;
-		 *              return;
-		 *            }
-		 *            else if (type === 'display') {
-		 *              return source.price_display;
-		 *            }
-		 *            else if (type === 'filter') {
-		 *              return source.price_filter;
-		 *            }
-		 *            // 'sort', 'type' and undefined all just use the integer
-		 *            return source.price;
-		 *          }
-		 *        } ]
-		 *      } );
-		 *    } );
-		 *
-		 *  @example
-		 *    // Using default content
-		 *    $(document).ready( function() {
-		 *      $('#example').dataTable( {
-		 *        "columnDefs": [ {
-		 *          "targets": [ 0 ],
-		 *          "data": null,
-		 *          "defaultContent": "Click to edit"
-		 *        } ]
-		 *      } );
-		 *    } );
-		 *
-		 *  @example
-		 *    // Using array notation - outputting a list from an array
-		 *    $(document).ready( function() {
-		 *      $('#example').dataTable( {
-		 *        "columnDefs": [ {
-		 *          "targets": [ 0 ],
-		 *          "data": "name[, ]"
-		 *        } ]
-		 *      } );
-		 *    } );
-		 *
-		 */
-		"mData": null,
-	
-	
-		/**
-		 * This property is the rendering partner to `data` and it is suggested that
-		 * when you want to manipulate data for display (including filtering,
-		 * sorting etc) without altering the underlying data for the table, use this
-		 * property. `render` can be considered to be the the read only companion to
-		 * `data` which is read / write (then as such more complex). Like `data`
-		 * this option can be given in a number of different ways to effect its
-		 * behaviour:
-		 *
-		 * * `integer` - treated as an array index for the data source. This is the
-		 *   default that DataTables uses (incrementally increased for each column).
-		 * * `string` - read an object property from the data source. There are
-		 *   three 'special' options that can be used in the string to alter how
-		 *   DataTables reads the data from the source object:
-		 *    * `.` - Dotted Javascript notation. Just as you use a `.` in
-		 *      Javascript to read from nested objects, so to can the options
-		 *      specified in `data`. For example: `browser.version` or
-		 *      `browser.name`. If your object parameter name contains a period, use
-		 *      `\\` to escape it - i.e. `first\\.name`.
-		 *    * `[]` - Array notation. DataTables can automatically combine data
-		 *      from and array source, joining the data with the characters provided
-		 *      between the two brackets. For example: `name[, ]` would provide a
-		 *      comma-space separated list from the source array. If no characters
-		 *      are provided between the brackets, the original array source is
-		 *      returned.
-		 *    * `()` - Function notation. Adding `()` to the end of a parameter will
-		 *      execute a function of the name given. For example: `browser()` for a
-		 *      simple function on the data source, `browser.version()` for a
-		 *      function in a nested property or even `browser().version` to get an
-		 *      object property if the function called returns an object.
-		 * * `object` - use different data for the different data types requested by
-		 *   DataTables ('filter', 'display', 'type' or 'sort'). The property names
-		 *   of the object is the data type the property refers to and the value can
-		 *   defined using an integer, string or function using the same rules as
-		 *   `render` normally does. Note that an `_` option _must_ be specified.
-		 *   This is the default value to use if you haven't specified a value for
-		 *   the data type requested by DataTables.
-		 * * `function` - the function given will be executed whenever DataTables
-		 *   needs to set or get the data for a cell in the column. The function
-		 *   takes three parameters:
-		 *    * Parameters:
-		 *      * {array|object} The data source for the row (based on `data`)
-		 *      * {string} The type call data requested - this will be 'filter',
-		 *        'display', 'type' or 'sort'.
-		 *      * {array|object} The full data source for the row (not based on
-		 *        `data`)
-		 *    * Return:
-		 *      * The return value from the function is what will be used for the
-		 *        data requested.
-		 *
-		 *  @type string|int|function|object|null
-		 *  @default null Use the data source value.
-		 *
-		 *  @name DataTable.defaults.column.render
-		 *  @dtopt Columns
-		 *
-		 *  @example
-		 *    // Create a comma separated list from an array of objects
-		 *    $(document).ready( function() {
-		 *      $('#example').dataTable( {
-		 *        "ajaxSource": "sources/deep.txt",
-		 *        "columns": [
-		 *          { "data": "engine" },
-		 *          { "data": "browser" },
-		 *          {
-		 *            "data": "platform",
-		 *            "render": "[, ].name"
-		 *          }
-		 *        ]
-		 *      } );
-		 *    } );
-		 *
-		 *  @example
-		 *    // Execute a function to obtain data
-		 *    $(document).ready( function() {
-		 *      $('#example').dataTable( {
-		 *        "columnDefs": [ {
-		 *          "targets": [ 0 ],
-		 *          "data": null, // Use the full data source object for the renderer's source
-		 *          "render": "browserName()"
-		 *        } ]
-		 *      } );
-		 *    } );
-		 *
-		 *  @example
-		 *    // As an object, extracting different data for the different types
-		 *    // This would be used with a data source such as:
-		 *    //   { "phone": 5552368, "phone_filter": "5552368 555-2368", "phone_display": "555-2368" }
-		 *    // Here the `phone` integer is used for sorting and type detection, while `phone_filter`
-		 *    // (which has both forms) is used for filtering for if a user inputs either format, while
-		 *    // the formatted phone number is the one that is shown in the table.
-		 *    $(document).ready( function() {
-		 *      $('#example').dataTable( {
-		 *        "columnDefs": [ {
-		 *          "targets": [ 0 ],
-		 *          "data": null, // Use the full data source object for the renderer's source
-		 *          "render": {
-		 *            "_": "phone",
-		 *            "filter": "phone_filter",
-		 *            "display": "phone_display"
-		 *          }
-		 *        } ]
-		 *      } );
-		 *    } );
-		 *
-		 *  @example
-		 *    // Use as a function to create a link from the data source
-		 *    $(document).ready( function() {
-		 *      $('#example').dataTable( {
-		 *        "columnDefs": [ {
-		 *          "targets": [ 0 ],
-		 *          "data": "download_link",
-		 *          "render": function ( data, type, full ) {
-		 *            return '<a href="'+data+'">Download</a>';
-		 *          }
-		 *        } ]
-		 *      } );
-		 *    } );
-		 */
-		"mRender": null,
-	
-	
-		/**
-		 * Change the cell type created for the column - either TD cells or TH cells. This
-		 * can be useful as TH cells have semantic meaning in the table body, allowing them
-		 * to act as a header for a row (you may wish to add scope='row' to the TH elements).
-		 *  @type string
-		 *  @default td
-		 *
-		 *  @name DataTable.defaults.column.cellType
-		 *  @dtopt Columns
-		 *
-		 *  @example
-		 *    // Make the first column use TH cells
-		 *    $(document).ready( function() {
-		 *      $('#example').dataTable( {
-		 *        "columnDefs": [ {
-		 *          "targets": [ 0 ],
-		 *          "cellType": "th"
-		 *        } ]
-		 *      } );
-		 *    } );
-		 */
-		"sCellType": "td",
-	
-	
-		/**
-		 * Class to give to each cell in this column.
-		 *  @type string
-		 *  @default <i>Empty string</i>
-		 *
-		 *  @name DataTable.defaults.column.class
-		 *  @dtopt Columns
-		 *
-		 *  @example
-		 *    // Using `columnDefs`
-		 *    $(document).ready( function() {
-		 *      $('#example').dataTable( {
-		 *        "columnDefs": [
-		 *          { "class": "my_class", "targets": [ 0 ] }
-		 *        ]
-		 *      } );
-		 *    } );
-		 *
-		 *  @example
-		 *    // Using `columns`
-		 *    $(document).ready( function() {
-		 *      $('#example').dataTable( {
-		 *        "columns": [
-		 *          { "class": "my_class" },
-		 *          null,
-		 *          null,
-		 *          null,
-		 *          null
-		 *        ]
-		 *      } );
-		 *    } );
-		 */
-		"sClass": "",
-	
-		/**
-		 * When DataTables calculates the column widths to assign to each column,
-		 * it finds the longest string in each column and then constructs a
-		 * temporary table and reads the widths from that. The problem with this
-		 * is that "mmm" is much wider then "iiii", but the latter is a longer
-		 * string - thus the calculation can go wrong (doing it properly and putting
-		 * it into an DOM object and measuring that is horribly(!) slow). Thus as
-		 * a "work around" we provide this option. It will append its value to the
-		 * text that is found to be the longest string for the column - i.e. padding.
-		 * Generally you shouldn't need this!
-		 *  @type string
-		 *  @default <i>Empty string<i>
-		 *
-		 *  @name DataTable.defaults.column.contentPadding
-		 *  @dtopt Columns
-		 *
-		 *  @example
-		 *    // Using `columns`
-		 *    $(document).ready( function() {
-		 *      $('#example').dataTable( {
-		 *        "columns": [
-		 *          null,
-		 *          null,
-		 *          null,
-		 *          {
-		 *            "contentPadding": "mmm"
-		 *          }
-		 *        ]
-		 *      } );
-		 *    } );
-		 */
-		"sContentPadding": "",
-	
-	
-		/**
-		 * Allows a default value to be given for a column's data, and will be used
-		 * whenever a null data source is encountered (this can be because `data`
-		 * is set to null, or because the data source itself is null).
-		 *  @type string
-		 *  @default null
-		 *
-		 *  @name DataTable.defaults.column.defaultContent
-		 *  @dtopt Columns
-		 *
-		 *  @example
-		 *    // Using `columnDefs`
-		 *    $(document).ready( function() {
-		 *      $('#example').dataTable( {
-		 *        "columnDefs": [
-		 *          {
-		 *            "data": null,
-		 *            "defaultContent": "Edit",
-		 *            "targets": [ -1 ]
-		 *          }
-		 *        ]
-		 *      } );
-		 *    } );
-		 *
-		 *  @example
-		 *    // Using `columns`
-		 *    $(document).ready( function() {
-		 *      $('#example').dataTable( {
-		 *        "columns": [
-		 *          null,
-		 *          null,
-		 *          null,
-		 *          {
-		 *            "data": null,
-		 *            "defaultContent": "Edit"
-		 *          }
-		 *        ]
-		 *      } );
-		 *    } );
-		 */
-		"sDefaultContent": null,
-	
-	
-		/**
-		 * This parameter is only used in DataTables' server-side processing. It can
-		 * be exceptionally useful to know what columns are being displayed on the
-		 * client side, and to map these to database fields. When defined, the names
-		 * also allow DataTables to reorder information from the server if it comes
-		 * back in an unexpected order (i.e. if you switch your columns around on the
-		 * client-side, your server-side code does not also need updating).
-		 *  @type string
-		 *  @default <i>Empty string</i>
-		 *
-		 *  @name DataTable.defaults.column.name
-		 *  @dtopt Columns
-		 *
-		 *  @example
-		 *    // Using `columnDefs`
-		 *    $(document).ready( function() {
-		 *      $('#example').dataTable( {
-		 *        "columnDefs": [
-		 *          { "name": "engine", "targets": [ 0 ] },
-		 *          { "name": "browser", "targets": [ 1 ] },
-		 *          { "name": "platform", "targets": [ 2 ] },
-		 *          { "name": "version", "targets": [ 3 ] },
-		 *          { "name": "grade", "targets": [ 4 ] }
-		 *        ]
-		 *      } );
-		 *    } );
-		 *
-		 *  @example
-		 *    // Using `columns`
-		 *    $(document).ready( function() {
-		 *      $('#example').dataTable( {
-		 *        "columns": [
-		 *          { "name": "engine" },
-		 *          { "name": "browser" },
-		 *          { "name": "platform" },
-		 *          { "name": "version" },
-		 *          { "name": "grade" }
-		 *        ]
-		 *      } );
-		 *    } );
-		 */
-		"sName": "",
-	
-	
-		/**
-		 * Defines a data source type for the ordering which can be used to read
-		 * real-time information from the table (updating the internally cached
-		 * version) prior to ordering. This allows ordering to occur on user
-		 * editable elements such as form inputs.
-		 *  @type string
-		 *  @default std
-		 *
-		 *  @name DataTable.defaults.column.orderDataType
-		 *  @dtopt Columns
-		 *
-		 *  @example
-		 *    // Using `columnDefs`
-		 *    $(document).ready( function() {
-		 *      $('#example').dataTable( {
-		 *        "columnDefs": [
-		 *          { "orderDataType": "dom-text", "targets": [ 2, 3 ] },
-		 *          { "type": "numeric", "targets": [ 3 ] },
-		 *          { "orderDataType": "dom-select", "targets": [ 4 ] },
-		 *          { "orderDataType": "dom-checkbox", "targets": [ 5 ] }
-		 *        ]
-		 *      } );
-		 *    } );
-		 *
-		 *  @example
-		 *    // Using `columns`
-		 *    $(document).ready( function() {
-		 *      $('#example').dataTable( {
-		 *        "columns": [
-		 *          null,
-		 *          null,
-		 *          { "orderDataType": "dom-text" },
-		 *          { "orderDataType": "dom-text", "type": "numeric" },
-		 *          { "orderDataType": "dom-select" },
-		 *          { "orderDataType": "dom-checkbox" }
-		 *        ]
-		 *      } );
-		 *    } );
-		 */
-		"sSortDataType": "std",
-	
-	
-		/**
-		 * The title of this column.
-		 *  @type string
-		 *  @default null <i>Derived from the 'TH' value for this column in the
-		 *    original HTML table.</i>
-		 *
-		 *  @name DataTable.defaults.column.title
-		 *  @dtopt Columns
-		 *
-		 *  @example
-		 *    // Using `columnDefs`
-		 *    $(document).ready( function() {
-		 *      $('#example').dataTable( {
-		 *        "columnDefs": [
-		 *          { "title": "My column title", "targets": [ 0 ] }
-		 *        ]
-		 *      } );
-		 *    } );
-		 *
-		 *  @example
-		 *    // Using `columns`
-		 *    $(document).ready( function() {
-		 *      $('#example').dataTable( {
-		 *        "columns": [
-		 *          { "title": "My column title" },
-		 *          null,
-		 *          null,
-		 *          null,
-		 *          null
-		 *        ]
-		 *      } );
-		 *    } );
-		 */
-		"sTitle": null,
-	
-	
-		/**
-		 * The type allows you to specify how the data for this column will be
-		 * ordered. Four types (string, numeric, date and html (which will strip
-		 * HTML tags before ordering)) are currently available. Note that only date
-		 * formats understood by Javascript's Date() object will be accepted as type
-		 * date. For example: "Mar 26, 2008 5:03 PM". May take the values: 'string',
-		 * 'numeric', 'date' or 'html' (by default). Further types can be adding
-		 * through plug-ins.
-		 *  @type string
-		 *  @default null <i>Auto-detected from raw data</i>
-		 *
-		 *  @name DataTable.defaults.column.type
-		 *  @dtopt Columns
-		 *
-		 *  @example
-		 *    // Using `columnDefs`
-		 *    $(document).ready( function() {
-		 *      $('#example').dataTable( {
-		 *        "columnDefs": [
-		 *          { "type": "html", "targets": [ 0 ] }
-		 *        ]
-		 *      } );
-		 *    } );
-		 *
-		 *  @example
-		 *    // Using `columns`
-		 *    $(document).ready( function() {
-		 *      $('#example').dataTable( {
-		 *        "columns": [
-		 *          { "type": "html" },
-		 *          null,
-		 *          null,
-		 *          null,
-		 *          null
-		 *        ]
-		 *      } );
-		 *    } );
-		 */
-		"sType": null,
-	
-	
-		/**
-		 * Defining the width of the column, this parameter may take any CSS value
-		 * (3em, 20px etc). DataTables applies 'smart' widths to columns which have not
-		 * been given a specific width through this interface ensuring that the table
-		 * remains readable.
-		 *  @type string
-		 *  @default null <i>Automatic</i>
-		 *
-		 *  @name DataTable.defaults.column.width
-		 *  @dtopt Columns
-		 *
-		 *  @example
-		 *    // Using `columnDefs`
-		 *    $(document).ready( function() {
-		 *      $('#example').dataTable( {
-		 *        "columnDefs": [
-		 *          { "width": "20%", "targets": [ 0 ] }
-		 *        ]
-		 *      } );
-		 *    } );
-		 *
-		 *  @example
-		 *    // Using `columns`
-		 *    $(document).ready( function() {
-		 *      $('#example').dataTable( {
-		 *        "columns": [
-		 *          { "width": "20%" },
-		 *          null,
-		 *          null,
-		 *          null,
-		 *          null
-		 *        ]
-		 *      } );
-		 *    } );
-		 */
-		"sWidth": null
-	};
-	
-	_fnHungarianMap( DataTable.defaults.column );
-	
-	
-	
-	/**
-	 * DataTables settings object - this holds all the information needed for a
-	 * given table, including configuration, data and current application of the
-	 * table options. DataTables does not have a single instance for each DataTable
-	 * with the settings attached to that instance, but rather instances of the
-	 * DataTable "class" are created on-the-fly as needed (typically by a
-	 * $().dataTable() call) and the settings object is then applied to that
-	 * instance.
-	 *
-	 * Note that this object is related to {@link DataTable.defaults} but this
-	 * one is the internal data store for DataTables's cache of columns. It should
-	 * NOT be manipulated outside of DataTables. Any configuration should be done
-	 * through the initialisation options.
-	 *  @namespace
-	 *  @todo Really should attach the settings object to individual instances so we
-	 *    don't need to create new instances on each $().dataTable() call (if the
-	 *    table already exists). It would also save passing oSettings around and
-	 *    into every single function. However, this is a very significant
-	 *    architecture change for DataTables and will almost certainly break
-	 *    backwards compatibility with older installations. This is something that
-	 *    will be done in 2.0.
-	 */
-	DataTable.models.oSettings = {
-		/**
-		 * Primary features of DataTables and their enablement state.
-		 *  @namespace
-		 */
-		"oFeatures": {
-	
-			/**
-			 * Flag to say if DataTables should automatically try to calculate the
-			 * optimum table and columns widths (true) or not (false).
-			 * Note that this parameter will be set by the initialisation routine. To
-			 * set a default use {@link DataTable.defaults}.
-			 *  @type boolean
-			 */
-			"bAutoWidth": null,
-	
-			/**
-			 * Delay the creation of TR and TD elements until they are actually
-			 * needed by a driven page draw. This can give a significant speed
-			 * increase for Ajax source and Javascript source data, but makes no
-			 * difference at all fro DOM and server-side processing tables.
-			 * Note that this parameter will be set by the initialisation routine. To
-			 * set a default use {@link DataTable.defaults}.
-			 *  @type boolean
-			 */
-			"bDeferRender": null,
-	
-			/**
-			 * Enable filtering on the table or not. Note that if this is disabled
-			 * then there is no filtering at all on the table, including fnFilter.
-			 * To just remove the filtering input use sDom and remove the 'f' option.
-			 * Note that this parameter will be set by the initialisation routine. To
-			 * set a default use {@link DataTable.defaults}.
-			 *  @type boolean
-			 */
-			"bFilter": null,
-	
-			/**
-			 * Table information element (the 'Showing x of y records' div) enable
-			 * flag.
-			 * Note that this parameter will be set by the initialisation routine. To
-			 * set a default use {@link DataTable.defaults}.
-			 *  @type boolean
-			 */
-			"bInfo": null,
-	
-			/**
-			 * Present a user control allowing the end user to change the page size
-			 * when pagination is enabled.
-			 * Note that this parameter will be set by the initialisation routine. To
-			 * set a default use {@link DataTable.defaults}.
-			 *  @type boolean
-			 */
-			"bLengthChange": null,
-	
-			/**
-			 * Pagination enabled or not. Note that if this is disabled then length
-			 * changing must also be disabled.
-			 * Note that this parameter will be set by the initialisation routine. To
-			 * set a default use {@link DataTable.defaults}.
-			 *  @type boolean
-			 */
-			"bPaginate": null,
-	
-			/**
-			 * Processing indicator enable flag whenever DataTables is enacting a
-			 * user request - typically an Ajax request for server-side processing.
-			 * Note that this parameter will be set by the initialisation routine. To
-			 * set a default use {@link DataTable.defaults}.
-			 *  @type boolean
-			 */
-			"bProcessing": null,
-	
-			/**
-			 * Server-side processing enabled flag - when enabled DataTables will
-			 * get all data from the server for every draw - there is no filtering,
-			 * sorting or paging done on the client-side.
-			 * Note that this parameter will be set by the initialisation routine. To
-			 * set a default use {@link DataTable.defaults}.
-			 *  @type boolean
-			 */
-			"bServerSide": null,
-	
-			/**
-			 * Sorting enablement flag.
-			 * Note that this parameter will be set by the initialisation routine. To
-			 * set a default use {@link DataTable.defaults}.
-			 *  @type boolean
-			 */
-			"bSort": null,
-	
-			/**
-			 * Multi-column sorting
-			 * Note that this parameter will be set by the initialisation routine. To
-			 * set a default use {@link DataTable.defaults}.
-			 *  @type boolean
-			 */
-			"bSortMulti": null,
-	
-			/**
-			 * Apply a class to the columns which are being sorted to provide a
-			 * visual highlight or not. This can slow things down when enabled since
-			 * there is a lot of DOM interaction.
-			 * Note that this parameter will be set by the initialisation routine. To
-			 * set a default use {@link DataTable.defaults}.
-			 *  @type boolean
-			 */
-			"bSortClasses": null,
-	
-			/**
-			 * State saving enablement flag.
-			 * Note that this parameter will be set by the initialisation routine. To
-			 * set a default use {@link DataTable.defaults}.
-			 *  @type boolean
-			 */
-			"bStateSave": null
-		},
-	
-	
-		/**
-		 * Scrolling settings for a table.
-		 *  @namespace
-		 */
-		"oScroll": {
-			/**
-			 * When the table is shorter in height than sScrollY, collapse the
-			 * table container down to the height of the table (when true).
-			 * Note that this parameter will be set by the initialisation routine. To
-			 * set a default use {@link DataTable.defaults}.
-			 *  @type boolean
-			 */
-			"bCollapse": null,
-	
-			/**
-			 * Width of the scrollbar for the web-browser's platform. Calculated
-			 * during table initialisation.
-			 *  @type int
-			 *  @default 0
-			 */
-			"iBarWidth": 0,
-	
-			/**
-			 * Viewport width for horizontal scrolling. Horizontal scrolling is
-			 * disabled if an empty string.
-			 * Note that this parameter will be set by the initialisation routine. To
-			 * set a default use {@link DataTable.defaults}.
-			 *  @type string
-			 */
-			"sX": null,
-	
-			/**
-			 * Width to expand the table to when using x-scrolling. Typically you
-			 * should not need to use this.
-			 * Note that this parameter will be set by the initialisation routine. To
-			 * set a default use {@link DataTable.defaults}.
-			 *  @type string
-			 *  @deprecated
-			 */
-			"sXInner": null,
-	
-			/**
-			 * Viewport height for vertical scrolling. Vertical scrolling is disabled
-			 * if an empty string.
-			 * Note that this parameter will be set by the initialisation routine. To
-			 * set a default use {@link DataTable.defaults}.
-			 *  @type string
-			 */
-			"sY": null
-		},
-	
-		/**
-		 * Language information for the table.
-		 *  @namespace
-		 *  @extends DataTable.defaults.oLanguage
-		 */
-		"oLanguage": {
-			/**
-			 * Information callback function. See
-			 * {@link DataTable.defaults.fnInfoCallback}
-			 *  @type function
-			 *  @default null
-			 */
-			"fnInfoCallback": null
-		},
-	
-		/**
-		 * Browser support parameters
-		 *  @namespace
-		 */
-		"oBrowser": {
-			/**
-			 * Indicate if the browser incorrectly calculates width:100% inside a
-			 * scrolling element (IE6/7)
-			 *  @type boolean
-			 *  @default false
-			 */
-			"bScrollOversize": false,
-	
-			/**
-			 * Determine if the vertical scrollbar is on the right or left of the
-			 * scrolling container - needed for rtl language layout, although not
-			 * all browsers move the scrollbar (Safari).
-			 *  @type boolean
-			 *  @default false
-			 */
-			"bScrollbarLeft": false,
-	
-			/**
-			 * Flag for if `getBoundingClientRect` is fully supported or not
-			 *  @type boolean
-			 *  @default false
-			 */
-			"bBounding": false,
-	
-			/**
-			 * Browser scrollbar width
-			 *  @type integer
-			 *  @default 0
-			 */
-			"barWidth": 0
-		},
-	
-	
-		"ajax": null,
-	
-	
-		/**
-		 * Array referencing the nodes which are used for the features. The
-		 * parameters of this object match what is allowed by sDom - i.e.
-		 *   <ul>
-		 *     <li>'l' - Length changing</li>
-		 *     <li>'f' - Filtering input</li>
-		 *     <li>'t' - The table!</li>
-		 *     <li>'i' - Information</li>
-		 *     <li>'p' - Pagination</li>
-		 *     <li>'r' - pRocessing</li>
-		 *   </ul>
-		 *  @type array
-		 *  @default []
-		 */
-		"aanFeatures": [],
-	
-		/**
-		 * Store data information - see {@link DataTable.models.oRow} for detailed
-		 * information.
-		 *  @type array
-		 *  @default []
-		 */
-		"aoData": [],
-	
-		/**
-		 * Array of indexes which are in the current display (after filtering etc)
-		 *  @type array
-		 *  @default []
-		 */
-		"aiDisplay": [],
-	
-		/**
-		 * Array of indexes for display - no filtering
-		 *  @type array
-		 *  @default []
-		 */
-		"aiDisplayMaster": [],
-	
-		/**
-		 * Map of row ids to data indexes
-		 *  @type object
-		 *  @default {}
-		 */
-		"aIds": {},
-	
-		/**
-		 * Store information about each column that is in use
-		 *  @type array
-		 *  @default []
-		 */
-		"aoColumns": [],
-	
-		/**
-		 * Store information about the table's header
-		 *  @type array
-		 *  @default []
-		 */
-		"aoHeader": [],
-	
-		/**
-		 * Store information about the table's footer
-		 *  @type array
-		 *  @default []
-		 */
-		"aoFooter": [],
-	
-		/**
-		 * Store the applied global search information in case we want to force a
-		 * research or compare the old search to a new one.
-		 * Note that this parameter will be set by the initialisation routine. To
-		 * set a default use {@link DataTable.defaults}.
-		 *  @namespace
-		 *  @extends DataTable.models.oSearch
-		 */
-		"oPreviousSearch": {},
-	
-		/**
-		 * Store the applied search for each column - see
-		 * {@link DataTable.models.oSearch} for the format that is used for the
-		 * filtering information for each column.
-		 *  @type array
-		 *  @default []
-		 */
-		"aoPreSearchCols": [],
-	
-		/**
-		 * Sorting that is applied to the table. Note that the inner arrays are
-		 * used in the following manner:
-		 * <ul>
-		 *   <li>Index 0 - column number</li>
-		 *   <li>Index 1 - current sorting direction</li>
-		 * </ul>
-		 * Note that this parameter will be set by the initialisation routine. To
-		 * set a default use {@link DataTable.defaults}.
-		 *  @type array
-		 *  @todo These inner arrays should really be objects
-		 */
-		"aaSorting": null,
-	
-		/**
-		 * Sorting that is always applied to the table (i.e. prefixed in front of
-		 * aaSorting).
-		 * Note that this parameter will be set by the initialisation routine. To
-		 * set a default use {@link DataTable.defaults}.
-		 *  @type array
-		 *  @default []
-		 */
-		"aaSortingFixed": [],
-	
-		/**
-		 * Classes to use for the striping of a table.
-		 * Note that this parameter will be set by the initialisation routine. To
-		 * set a default use {@link DataTable.defaults}.
-		 *  @type array
-		 *  @default []
-		 */
-		"asStripeClasses": null,
-	
-		/**
-		 * If restoring a table - we should restore its striping classes as well
-		 *  @type array
-		 *  @default []
-		 */
-		"asDestroyStripes": [],
-	
-		/**
-		 * If restoring a table - we should restore its width
-		 *  @type int
-		 *  @default 0
-		 */
-		"sDestroyWidth": 0,
-	
-		/**
-		 * Callback functions array for every time a row is inserted (i.e. on a draw).
-		 *  @type array
-		 *  @default []
-		 */
-		"aoRowCallback": [],
-	
-		/**
-		 * Callback functions for the header on each draw.
-		 *  @type array
-		 *  @default []
-		 */
-		"aoHeaderCallback": [],
-	
-		/**
-		 * Callback function for the footer on each draw.
-		 *  @type array
-		 *  @default []
-		 */
-		"aoFooterCallback": [],
-	
-		/**
-		 * Array of callback functions for draw callback functions
-		 *  @type array
-		 *  @default []
-		 */
-		"aoDrawCallback": [],
-	
-		/**
-		 * Array of callback functions for row created function
-		 *  @type array
-		 *  @default []
-		 */
-		"aoRowCreatedCallback": [],
-	
-		/**
-		 * Callback functions for just before the table is redrawn. A return of
-		 * false will be used to cancel the draw.
-		 *  @type array
-		 *  @default []
-		 */
-		"aoPreDrawCallback": [],
-	
-		/**
-		 * Callback functions for when the table has been initialised.
-		 *  @type array
-		 *  @default []
-		 */
-		"aoInitComplete": [],
-	
-	
-		/**
-		 * Callbacks for modifying the settings to be stored for state saving, prior to
-		 * saving state.
-		 *  @type array
-		 *  @default []
-		 */
-		"aoStateSaveParams": [],
-	
-		/**
-		 * Callbacks for modifying the settings that have been stored for state saving
-		 * prior to using the stored values to restore the state.
-		 *  @type array
-		 *  @default []
-		 */
-		"aoStateLoadParams": [],
-	
-		/**
-		 * Callbacks for operating on the settings object once the saved state has been
-		 * loaded
-		 *  @type array
-		 *  @default []
-		 */
-		"aoStateLoaded": [],
-	
-		/**
-		 * Cache the table ID for quick access
-		 *  @type string
-		 *  @default <i>Empty string</i>
-		 */
-		"sTableId": "",
-	
-		/**
-		 * The TABLE node for the main table
-		 *  @type node
-		 *  @default null
-		 */
-		"nTable": null,
-	
-		/**
-		 * Permanent ref to the thead element
-		 *  @type node
-		 *  @default null
-		 */
-		"nTHead": null,
-	
-		/**
-		 * Permanent ref to the tfoot element - if it exists
-		 *  @type node
-		 *  @default null
-		 */
-		"nTFoot": null,
-	
-		/**
-		 * Permanent ref to the tbody element
-		 *  @type node
-		 *  @default null
-		 */
-		"nTBody": null,
-	
-		/**
-		 * Cache the wrapper node (contains all DataTables controlled elements)
-		 *  @type node
-		 *  @default null
-		 */
-		"nTableWrapper": null,
-	
-		/**
-		 * Indicate if when using server-side processing the loading of data
-		 * should be deferred until the second draw.
-		 * Note that this parameter will be set by the initialisation routine. To
-		 * set a default use {@link DataTable.defaults}.
-		 *  @type boolean
-		 *  @default false
-		 */
-		"bDeferLoading": false,
-	
-		/**
-		 * Indicate if all required information has been read in
-		 *  @type boolean
-		 *  @default false
-		 */
-		"bInitialised": false,
-	
-		/**
-		 * Information about open rows. Each object in the array has the parameters
-		 * 'nTr' and 'nParent'
-		 *  @type array
-		 *  @default []
-		 */
-		"aoOpenRows": [],
-	
-		/**
-		 * Dictate the positioning of DataTables' control elements - see
-		 * {@link DataTable.model.oInit.sDom}.
-		 * Note that this parameter will be set by the initialisation routine. To
-		 * set a default use {@link DataTable.defaults}.
-		 *  @type string
-		 *  @default null
-		 */
-		"sDom": null,
-	
-		/**
-		 * Search delay (in mS)
-		 *  @type integer
-		 *  @default null
-		 */
-		"searchDelay": null,
-	
-		/**
-		 * Which type of pagination should be used.
-		 * Note that this parameter will be set by the initialisation routine. To
-		 * set a default use {@link DataTable.defaults}.
-		 *  @type string
-		 *  @default two_button
-		 */
-		"sPaginationType": "two_button",
-	
-		/**
-		 * The state duration (for `stateSave`) in seconds.
-		 * Note that this parameter will be set by the initialisation routine. To
-		 * set a default use {@link DataTable.defaults}.
-		 *  @type int
-		 *  @default 0
-		 */
-		"iStateDuration": 0,
-	
-		/**
-		 * Array of callback functions for state saving. Each array element is an
-		 * object with the following parameters:
-		 *   <ul>
-		 *     <li>function:fn - function to call. Takes two parameters, oSettings
-		 *       and the JSON string to save that has been thus far created. Returns
-		 *       a JSON string to be inserted into a json object
-		 *       (i.e. '"param": [ 0, 1, 2]')</li>
-		 *     <li>string:sName - name of callback</li>
-		 *   </ul>
-		 *  @type array
-		 *  @default []
-		 */
-		"aoStateSave": [],
-	
-		/**
-		 * Array of callback functions for state loading. Each array element is an
-		 * object with the following parameters:
-		 *   <ul>
-		 *     <li>function:fn - function to call. Takes two parameters, oSettings
-		 *       and the object stored. May return false to cancel state loading</li>
-		 *     <li>string:sName - name of callback</li>
-		 *   </ul>
-		 *  @type array
-		 *  @default []
-		 */
-		"aoStateLoad": [],
-	
-		/**
-		 * State that was saved. Useful for back reference
-		 *  @type object
-		 *  @default null
-		 */
-		"oSavedState": null,
-	
-		/**
-		 * State that was loaded. Useful for back reference
-		 *  @type object
-		 *  @default null
-		 */
-		"oLoadedState": null,
-	
-		/**
-		 * Source url for AJAX data for the table.
-		 * Note that this parameter will be set by the initialisation routine. To
-		 * set a default use {@link DataTable.defaults}.
-		 *  @type string
-		 *  @default null
-		 */
-		"sAjaxSource": null,
-	
-		/**
-		 * Property from a given object from which to read the table data from. This
-		 * can be an empty string (when not server-side processing), in which case
-		 * it is  assumed an an array is given directly.
-		 * Note that this parameter will be set by the initialisation routine. To
-		 * set a default use {@link DataTable.defaults}.
-		 *  @type string
-		 */
-		"sAjaxDataProp": null,
-	
-		/**
-		 * Note if draw should be blocked while getting data
-		 *  @type boolean
-		 *  @default true
-		 */
-		"bAjaxDataGet": true,
-	
-		/**
-		 * The last jQuery XHR object that was used for server-side data gathering.
-		 * This can be used for working with the XHR information in one of the
-		 * callbacks
-		 *  @type object
-		 *  @default null
-		 */
-		"jqXHR": null,
-	
-		/**
-		 * JSON returned from the server in the last Ajax request
-		 *  @type object
-		 *  @default undefined
-		 */
-		"json": undefined,
-	
-		/**
-		 * Data submitted as part of the last Ajax request
-		 *  @type object
-		 *  @default undefined
-		 */
-		"oAjaxData": undefined,
-	
-		/**
-		 * Function to get the server-side data.
-		 * Note that this parameter will be set by the initialisation routine. To
-		 * set a default use {@link DataTable.defaults}.
-		 *  @type function
-		 */
-		"fnServerData": null,
-	
-		/**
-		 * Functions which are called prior to sending an Ajax request so extra
-		 * parameters can easily be sent to the server
-		 *  @type array
-		 *  @default []
-		 */
-		"aoServerParams": [],
-	
-		/**
-		 * Send the XHR HTTP method - GET or POST (could be PUT or DELETE if
-		 * required).
-		 * Note that this parameter will be set by the initialisation routine. To
-		 * set a default use {@link DataTable.defaults}.
-		 *  @type string
-		 */
-		"sServerMethod": null,
-	
-		/**
-		 * Format numbers for display.
-		 * Note that this parameter will be set by the initialisation routine. To
-		 * set a default use {@link DataTable.defaults}.
-		 *  @type function
-		 */
-		"fnFormatNumber": null,
-	
-		/**
-		 * List of options that can be used for the user selectable length menu.
-		 * Note that this parameter will be set by the initialisation routine. To
-		 * set a default use {@link DataTable.defaults}.
-		 *  @type array
-		 *  @default []
-		 */
-		"aLengthMenu": null,
-	
-		/**
-		 * Counter for the draws that the table does. Also used as a tracker for
-		 * server-side processing
-		 *  @type int
-		 *  @default 0
-		 */
-		"iDraw": 0,
-	
-		/**
-		 * Indicate if a redraw is being done - useful for Ajax
-		 *  @type boolean
-		 *  @default false
-		 */
-		"bDrawing": false,
-	
-		/**
-		 * Draw index (iDraw) of the last error when parsing the returned data
-		 *  @type int
-		 *  @default -1
-		 */
-		"iDrawError": -1,
-	
-		/**
-		 * Paging display length
-		 *  @type int
-		 *  @default 10
-		 */
-		"_iDisplayLength": 10,
-	
-		/**
-		 * Paging start point - aiDisplay index
-		 *  @type int
-		 *  @default 0
-		 */
-		"_iDisplayStart": 0,
-	
-		/**
-		 * Server-side processing - number of records in the result set
-		 * (i.e. before filtering), Use fnRecordsTotal rather than
-		 * this property to get the value of the number of records, regardless of
-		 * the server-side processing setting.
-		 *  @type int
-		 *  @default 0
-		 *  @private
-		 */
-		"_iRecordsTotal": 0,
-	
-		/**
-		 * Server-side processing - number of records in the current display set
-		 * (i.e. after filtering). Use fnRecordsDisplay rather than
-		 * this property to get the value of the number of records, regardless of
-		 * the server-side processing setting.
-		 *  @type boolean
-		 *  @default 0
-		 *  @private
-		 */
-		"_iRecordsDisplay": 0,
-	
-		/**
-		 * The classes to use for the table
-		 *  @type object
-		 *  @default {}
-		 */
-		"oClasses": {},
-	
-		/**
-		 * Flag attached to the settings object so you can check in the draw
-		 * callback if filtering has been done in the draw. Deprecated in favour of
-		 * events.
-		 *  @type boolean
-		 *  @default false
-		 *  @deprecated
-		 */
-		"bFiltered": false,
-	
-		/**
-		 * Flag attached to the settings object so you can check in the draw
-		 * callback if sorting has been done in the draw. Deprecated in favour of
-		 * events.
-		 *  @type boolean
-		 *  @default false
-		 *  @deprecated
-		 */
-		"bSorted": false,
-	
-		/**
-		 * Indicate that if multiple rows are in the header and there is more than
-		 * one unique cell per column, if the top one (true) or bottom one (false)
-		 * should be used for sorting / title by DataTables.
-		 * Note that this parameter will be set by the initialisation routine. To
-		 * set a default use {@link DataTable.defaults}.
-		 *  @type boolean
-		 */
-		"bSortCellsTop": null,
-	
-		/**
-		 * Initialisation object that is used for the table
-		 *  @type object
-		 *  @default null
-		 */
-		"oInit": null,
-	
-		/**
-		 * Destroy callback functions - for plug-ins to attach themselves to the
-		 * destroy so they can clean up markup and events.
-		 *  @type array
-		 *  @default []
-		 */
-		"aoDestroyCallback": [],
-	
-	
-		/**
-		 * Get the number of records in the current record set, before filtering
-		 *  @type function
-		 */
-		"fnRecordsTotal": function ()
-		{
-			return _fnDataSource( this ) == 'ssp' ?
-				this._iRecordsTotal * 1 :
-				this.aiDisplayMaster.length;
-		},
-	
-		/**
-		 * Get the number of records in the current record set, after filtering
-		 *  @type function
-		 */
-		"fnRecordsDisplay": function ()
-		{
-			return _fnDataSource( this ) == 'ssp' ?
-				this._iRecordsDisplay * 1 :
-				this.aiDisplay.length;
-		},
-	
-		/**
-		 * Get the display end point - aiDisplay index
-		 *  @type function
-		 */
-		"fnDisplayEnd": function ()
-		{
-			var
-				len      = this._iDisplayLength,
-				start    = this._iDisplayStart,
-				calc     = start + len,
-				records  = this.aiDisplay.length,
-				features = this.oFeatures,
-				paginate = features.bPaginate;
-	
-			if ( features.bServerSide ) {
-				return paginate === false || len === -1 ?
-					start + records :
-					Math.min( start+len, this._iRecordsDisplay );
-			}
-			else {
-				return ! paginate || calc>records || len===-1 ?
-					records :
-					calc;
-			}
-		},
-	
-		/**
-		 * The DataTables object for this table
-		 *  @type object
-		 *  @default null
-		 */
-		"oInstance": null,
-	
-		/**
-		 * Unique identifier for each instance of the DataTables object. If there
-		 * is an ID on the table node, then it takes that value, otherwise an
-		 * incrementing internal counter is used.
-		 *  @type string
-		 *  @default null
-		 */
-		"sInstance": null,
-	
-		/**
-		 * tabindex attribute value that is added to DataTables control elements, allowing
-		 * keyboard navigation of the table and its controls.
-		 */
-		"iTabIndex": 0,
-	
-		/**
-		 * DIV container for the footer scrolling table if scrolling
-		 */
-		"nScrollHead": null,
-	
-		/**
-		 * DIV container for the footer scrolling table if scrolling
-		 */
-		"nScrollFoot": null,
-	
-		/**
-		 * Last applied sort
-		 *  @type array
-		 *  @default []
-		 */
-		"aLastSort": [],
-	
-		/**
-		 * Stored plug-in instances
-		 *  @type object
-		 *  @default {}
-		 */
-		"oPlugins": {},
-	
-		/**
-		 * Function used to get a row's id from the row's data
-		 *  @type function
-		 *  @default null
-		 */
-		"rowIdFn": null,
-	
-		/**
-		 * Data location where to store a row's id
-		 *  @type string
-		 *  @default null
-		 */
-		"rowId": null
-	};
-
-	/**
-	 * Extension object for DataTables that is used to provide all extension
-	 * options.
-	 *
-	 * Note that the `DataTable.ext` object is available through
-	 * `jQuery.fn.dataTable.ext` where it may be accessed and manipulated. It is
-	 * also aliased to `jQuery.fn.dataTableExt` for historic reasons.
-	 *  @namespace
-	 *  @extends DataTable.models.ext
-	 */
-	
-	
-	/**
-	 * DataTables extensions
-	 * 
-	 * This namespace acts as a collection area for plug-ins that can be used to
-	 * extend DataTables capabilities. Indeed many of the build in methods
-	 * use this method to provide their own capabilities (sorting methods for
-	 * example).
-	 *
-	 * Note that this namespace is aliased to `jQuery.fn.dataTableExt` for legacy
-	 * reasons
-	 *
-	 *  @namespace
-	 */
-	DataTable.ext = _ext = {
-		/**
-		 * Buttons. For use with the Buttons extension for DataTables. This is
-		 * defined here so other extensions can define buttons regardless of load
-		 * order. It is _not_ used by DataTables core.
-		 *
-		 *  @type object
-		 *  @default {}
-		 */
-		buttons: {},
-	
-	
-		/**
-		 * Element class names
-		 *
-		 *  @type object
-		 *  @default {}
-		 */
-		classes: {},
-	
-	
-		/**
-		 * DataTables build type (expanded by the download builder)
-		 *
-		 *  @type string
-		 */
-		build:"bs4/dt-1.10.21/b-1.6.2/r-2.2.5/sl-1.3.1",
-	
-	
-		/**
-		 * Error reporting.
-		 * 
-		 * How should DataTables report an error. Can take the value 'alert',
-		 * 'throw', 'none' or a function.
-		 *
-		 *  @type string|function
-		 *  @default alert
-		 */
-		errMode: "alert",
-	
-	
-		/**
-		 * Feature plug-ins.
-		 * 
-		 * This is an array of objects which describe the feature plug-ins that are
-		 * available to DataTables. These feature plug-ins are then available for
-		 * use through the `dom` initialisation option.
-		 * 
-		 * Each feature plug-in is described by an object which must have the
-		 * following properties:
-		 * 
-		 * * `fnInit` - function that is used to initialise the plug-in,
-		 * * `cFeature` - a character so the feature can be enabled by the `dom`
-		 *   instillation option. This is case sensitive.
-		 *
-		 * The `fnInit` function has the following input parameters:
-		 *
-		 * 1. `{object}` DataTables settings object: see
-		 *    {@link DataTable.models.oSettings}
-		 *
-		 * And the following return is expected:
-		 * 
-		 * * {node|null} The element which contains your feature. Note that the
-		 *   return may also be void if your plug-in does not require to inject any
-		 *   DOM elements into DataTables control (`dom`) - for example this might
-		 *   be useful when developing a plug-in which allows table control via
-		 *   keyboard entry
-		 *
-		 *  @type array
-		 *
-		 *  @example
-		 *    $.fn.dataTable.ext.features.push( {
-		 *      "fnInit": function( oSettings ) {
-		 *        return new TableTools( { "oDTSettings": oSettings } );
-		 *      },
-		 *      "cFeature": "T"
-		 *    } );
-		 */
-		feature: [],
-	
-	
-		/**
-		 * Row searching.
-		 * 
-		 * This method of searching is complimentary to the default type based
-		 * searching, and a lot more comprehensive as it allows you complete control
-		 * over the searching logic. Each element in this array is a function
-		 * (parameters described below) that is called for every row in the table,
-		 * and your logic decides if it should be included in the searching data set
-		 * or not.
-		 *
-		 * Searching functions have the following input parameters:
-		 *
-		 * 1. `{object}` DataTables settings object: see
-		 *    {@link DataTable.models.oSettings}
-		 * 2. `{array|object}` Data for the row to be processed (same as the
-		 *    original format that was passed in as the data source, or an array
-		 *    from a DOM data source
-		 * 3. `{int}` Row index ({@link DataTable.models.oSettings.aoData}), which
-		 *    can be useful to retrieve the `TR` element if you need DOM interaction.
-		 *
-		 * And the following return is expected:
-		 *
-		 * * {boolean} Include the row in the searched result set (true) or not
-		 *   (false)
-		 *
-		 * Note that as with the main search ability in DataTables, technically this
-		 * is "filtering", since it is subtractive. However, for consistency in
-		 * naming we call it searching here.
-		 *
-		 *  @type array
-		 *  @default []
-		 *
-		 *  @example
-		 *    // The following example shows custom search being applied to the
-		 *    // fourth column (i.e. the data[3] index) based on two input values
-		 *    // from the end-user, matching the data in a certain range.
-		 *    $.fn.dataTable.ext.search.push(
-		 *      function( settings, data, dataIndex ) {
-		 *        var min = document.getElementById('min').value * 1;
-		 *        var max = document.getElementById('max').value * 1;
-		 *        var version = data[3] == "-" ? 0 : data[3]*1;
-		 *
-		 *        if ( min == "" && max == "" ) {
-		 *          return true;
-		 *        }
-		 *        else if ( min == "" && version < max ) {
-		 *          return true;
-		 *        }
-		 *        else if ( min < version && "" == max ) {
-		 *          return true;
-		 *        }
-		 *        else if ( min < version && version < max ) {
-		 *          return true;
-		 *        }
-		 *        return false;
-		 *      }
-		 *    );
-		 */
-		search: [],
-	
-	
-		/**
-		 * Selector extensions
-		 *
-		 * The `selector` option can be used to extend the options available for the
-		 * selector modifier options (`selector-modifier` object data type) that
-		 * each of the three built in selector types offer (row, column and cell +
-		 * their plural counterparts). For example the Select extension uses this
-		 * mechanism to provide an option to select only rows, columns and cells
-		 * that have been marked as selected by the end user (`{selected: true}`),
-		 * which can be used in conjunction with the existing built in selector
-		 * options.
-		 *
-		 * Each property is an array to which functions can be pushed. The functions
-		 * take three attributes:
-		 *
-		 * * Settings object for the host table
-		 * * Options object (`selector-modifier` object type)
-		 * * Array of selected item indexes
-		 *
-		 * The return is an array of the resulting item indexes after the custom
-		 * selector has been applied.
-		 *
-		 *  @type object
-		 */
-		selector: {
-			cell: [],
-			column: [],
-			row: []
-		},
-	
-	
-		/**
-		 * Internal functions, exposed for used in plug-ins.
-		 * 
-		 * Please note that you should not need to use the internal methods for
-		 * anything other than a plug-in (and even then, try to avoid if possible).
-		 * The internal function may change between releases.
-		 *
-		 *  @type object
-		 *  @default {}
-		 */
-		internal: {},
-	
-	
-		/**
-		 * Legacy configuration options. Enable and disable legacy options that
-		 * are available in DataTables.
-		 *
-		 *  @type object
-		 */
-		legacy: {
-			/**
-			 * Enable / disable DataTables 1.9 compatible server-side processing
-			 * requests
-			 *
-			 *  @type boolean
-			 *  @default null
-			 */
-			ajax: null
-		},
-	
-	
-		/**
-		 * Pagination plug-in methods.
-		 * 
-		 * Each entry in this object is a function and defines which buttons should
-		 * be shown by the pagination rendering method that is used for the table:
-		 * {@link DataTable.ext.renderer.pageButton}. The renderer addresses how the
-		 * buttons are displayed in the document, while the functions here tell it
-		 * what buttons to display. This is done by returning an array of button
-		 * descriptions (what each button will do).
-		 *
-		 * Pagination types (the four built in options and any additional plug-in
-		 * options defined here) can be used through the `paginationType`
-		 * initialisation parameter.
-		 *
-		 * The functions defined take two parameters:
-		 *
-		 * 1. `{int} page` The current page index
-		 * 2. `{int} pages` The number of pages in the table
-		 *
-		 * Each function is expected to return an array where each element of the
-		 * array can be one of:
-		 *
-		 * * `first` - Jump to first page when activated
-		 * * `last` - Jump to last page when activated
-		 * * `previous` - Show previous page when activated
-		 * * `next` - Show next page when activated
-		 * * `{int}` - Show page of the index given
-		 * * `{array}` - A nested array containing the above elements to add a
-		 *   containing 'DIV' element (might be useful for styling).
-		 *
-		 * Note that DataTables v1.9- used this object slightly differently whereby
-		 * an object with two functions would be defined for each plug-in. That
-		 * ability is still supported by DataTables 1.10+ to provide backwards
-		 * compatibility, but this option of use is now decremented and no longer
-		 * documented in DataTables 1.10+.
-		 *
-		 *  @type object
-		 *  @default {}
-		 *
-		 *  @example
-		 *    // Show previous, next and current page buttons only
-		 *    $.fn.dataTableExt.oPagination.current = function ( page, pages ) {
-		 *      return [ 'previous', page, 'next' ];
-		 *    };
-		 */
-		pager: {},
-	
-	
-		renderer: {
-			pageButton: {},
-			header: {}
-		},
-	
-	
-		/**
-		 * Ordering plug-ins - custom data source
-		 * 
-		 * The extension options for ordering of data available here is complimentary
-		 * to the default type based ordering that DataTables typically uses. It
-		 * allows much greater control over the the data that is being used to
-		 * order a column, but is necessarily therefore more complex.
-		 * 
-		 * This type of ordering is useful if you want to do ordering based on data
-		 * live from the DOM (for example the contents of an 'input' element) rather
-		 * than just the static string that DataTables knows of.
-		 * 
-		 * The way these plug-ins work is that you create an array of the values you
-		 * wish to be ordering for the column in question and then return that
-		 * array. The data in the array much be in the index order of the rows in
-		 * the table (not the currently ordering order!). Which order data gathering
-		 * function is run here depends on the `dt-init columns.orderDataType`
-		 * parameter that is used for the column (if any).
-		 *
-		 * The functions defined take two parameters:
-		 *
-		 * 1. `{object}` DataTables settings object: see
-		 *    {@link DataTable.models.oSettings}
-		 * 2. `{int}` Target column index
-		 *
-		 * Each function is expected to return an array:
-		 *
-		 * * `{array}` Data for the column to be ordering upon
-		 *
-		 *  @type array
-		 *
-		 *  @example
-		 *    // Ordering using `input` node values
-		 *    $.fn.dataTable.ext.order['dom-text'] = function  ( settings, col )
-		 *    {
-		 *      return this.api().column( col, {order:'index'} ).nodes().map( function ( td, i ) {
-		 *        return $('input', td).val();
-		 *      } );
-		 *    }
-		 */
-		order: {},
-	
-	
-		/**
-		 * Type based plug-ins.
-		 *
-		 * Each column in DataTables has a type assigned to it, either by automatic
-		 * detection or by direct assignment using the `type` option for the column.
-		 * The type of a column will effect how it is ordering and search (plug-ins
-		 * can also make use of the column type if required).
-		 *
-		 * @namespace
-		 */
-		type: {
-			/**
-			 * Type detection functions.
-			 *
-			 * The functions defined in this object are used to automatically detect
-			 * a column's type, making initialisation of DataTables super easy, even
-			 * when complex data is in the table.
-			 *
-			 * The functions defined take two parameters:
-			 *
-		     *  1. `{*}` Data from the column cell to be analysed
-		     *  2. `{settings}` DataTables settings object. This can be used to
-		     *     perform context specific type detection - for example detection
-		     *     based on language settings such as using a comma for a decimal
-		     *     place. Generally speaking the options from the settings will not
-		     *     be required
-			 *
-			 * Each function is expected to return:
-			 *
-			 * * `{string|null}` Data type detected, or null if unknown (and thus
-			 *   pass it on to the other type detection functions.
-			 *
-			 *  @type array
-			 *
-			 *  @example
-			 *    // Currency type detection plug-in:
-			 *    $.fn.dataTable.ext.type.detect.push(
-			 *      function ( data, settings ) {
-			 *        // Check the numeric part
-			 *        if ( ! data.substring(1).match(/[0-9]/) ) {
-			 *          return null;
-			 *        }
-			 *
-			 *        // Check prefixed by currency
-			 *        if ( data.charAt(0) == '$' || data.charAt(0) == '&pound;' ) {
-			 *          return 'currency';
-			 *        }
-			 *        return null;
-			 *      }
-			 *    );
-			 */
-			detect: [],
-	
-	
-			/**
-			 * Type based search formatting.
-			 *
-			 * The type based searching functions can be used to pre-format the
-			 * data to be search on. For example, it can be used to strip HTML
-			 * tags or to de-format telephone numbers for numeric only searching.
-			 *
-			 * Note that is a search is not defined for a column of a given type,
-			 * no search formatting will be performed.
-			 * 
-			 * Pre-processing of searching data plug-ins - When you assign the sType
-			 * for a column (or have it automatically detected for you by DataTables
-			 * or a type detection plug-in), you will typically be using this for
-			 * custom sorting, but it can also be used to provide custom searching
-			 * by allowing you to pre-processing the data and returning the data in
-			 * the format that should be searched upon. This is done by adding
-			 * functions this object with a parameter name which matches the sType
-			 * for that target column. This is the corollary of <i>afnSortData</i>
-			 * for searching data.
-			 *
-			 * The functions defined take a single parameter:
-			 *
-		     *  1. `{*}` Data from the column cell to be prepared for searching
-			 *
-			 * Each function is expected to return:
-			 *
-			 * * `{string|null}` Formatted string that will be used for the searching.
-			 *
-			 *  @type object
-			 *  @default {}
-			 *
-			 *  @example
-			 *    $.fn.dataTable.ext.type.search['title-numeric'] = function ( d ) {
-			 *      return d.replace(/\n/g," ").replace( /<.*?>/g, "" );
-			 *    }
-			 */
-			search: {},
-	
-	
-			/**
-			 * Type based ordering.
-			 *
-			 * The column type tells DataTables what ordering to apply to the table
-			 * when a column is sorted upon. The order for each type that is defined,
-			 * is defined by the functions available in this object.
-			 *
-			 * Each ordering option can be described by three properties added to
-			 * this object:
-			 *
-			 * * `{type}-pre` - Pre-formatting function
-			 * * `{type}-asc` - Ascending order function
-			 * * `{type}-desc` - Descending order function
-			 *
-			 * All three can be used together, only `{type}-pre` or only
-			 * `{type}-asc` and `{type}-desc` together. It is generally recommended
-			 * that only `{type}-pre` is used, as this provides the optimal
-			 * implementation in terms of speed, although the others are provided
-			 * for compatibility with existing Javascript sort functions.
-			 *
-			 * `{type}-pre`: Functions defined take a single parameter:
-			 *
-		     *  1. `{*}` Data from the column cell to be prepared for ordering
-			 *
-			 * And return:
-			 *
-			 * * `{*}` Data to be sorted upon
-			 *
-			 * `{type}-asc` and `{type}-desc`: Functions are typical Javascript sort
-			 * functions, taking two parameters:
-			 *
-		     *  1. `{*}` Data to compare to the second parameter
-		     *  2. `{*}` Data to compare to the first parameter
-			 *
-			 * And returning:
-			 *
-			 * * `{*}` Ordering match: <0 if first parameter should be sorted lower
-			 *   than the second parameter, ===0 if the two parameters are equal and
-			 *   >0 if the first parameter should be sorted height than the second
-			 *   parameter.
-			 * 
-			 *  @type object
-			 *  @default {}
-			 *
-			 *  @example
-			 *    // Numeric ordering of formatted numbers with a pre-formatter
-			 *    $.extend( $.fn.dataTable.ext.type.order, {
-			 *      "string-pre": function(x) {
-			 *        a = (a === "-" || a === "") ? 0 : a.replace( /[^\d\-\.]/g, "" );
-			 *        return parseFloat( a );
-			 *      }
-			 *    } );
-			 *
-			 *  @example
-			 *    // Case-sensitive string ordering, with no pre-formatting method
-			 *    $.extend( $.fn.dataTable.ext.order, {
-			 *      "string-case-asc": function(x,y) {
-			 *        return ((x < y) ? -1 : ((x > y) ? 1 : 0));
-			 *      },
-			 *      "string-case-desc": function(x,y) {
-			 *        return ((x < y) ? 1 : ((x > y) ? -1 : 0));
-			 *      }
-			 *    } );
-			 */
-			order: {}
-		},
-	
-		/**
-		 * Unique DataTables instance counter
-		 *
-		 * @type int
-		 * @private
-		 */
-		_unique: 0,
-	
-	
-		//
-		// Depreciated
-		// The following properties are retained for backwards compatiblity only.
-		// The should not be used in new projects and will be removed in a future
-		// version
-		//
-	
-		/**
-		 * Version check function.
-		 *  @type function
-		 *  @depreciated Since 1.10
-		 */
-		fnVersionCheck: DataTable.fnVersionCheck,
-	
-	
-		/**
-		 * Index for what 'this' index API functions should use
-		 *  @type int
-		 *  @deprecated Since v1.10
-		 */
-		iApiIndex: 0,
-	
-	
-		/**
-		 * jQuery UI class container
-		 *  @type object
-		 *  @deprecated Since v1.10
-		 */
-		oJUIClasses: {},
-	
-	
-		/**
-		 * Software version
-		 *  @type string
-		 *  @deprecated Since v1.10
-		 */
-		sVersion: DataTable.version
-	};
-	
-	
-	//
-	// Backwards compatibility. Alias to pre 1.10 Hungarian notation counter parts
-	//
-	$.extend( _ext, {
-		afnFiltering: _ext.search,
-		aTypes:       _ext.type.detect,
-		ofnSearch:    _ext.type.search,
-		oSort:        _ext.type.order,
-		afnSortData:  _ext.order,
-		aoFeatures:   _ext.feature,
-		oApi:         _ext.internal,
-		oStdClasses:  _ext.classes,
-		oPagination:  _ext.pager
-	} );
-	
-	
-	$.extend( DataTable.ext.classes, {
-		"sTable": "dataTable",
-		"sNoFooter": "no-footer",
-	
-		/* Paging buttons */
-		"sPageButton": "paginate_button",
-		"sPageButtonActive": "current",
-		"sPageButtonDisabled": "disabled",
-	
-		/* Striping classes */
-		"sStripeOdd": "odd",
-		"sStripeEven": "even",
-	
-		/* Empty row */
-		"sRowEmpty": "dataTables_empty",
-	
-		/* Features */
-		"sWrapper": "dataTables_wrapper",
-		"sFilter": "dataTables_filter",
-		"sInfo": "dataTables_info",
-		"sPaging": "dataTables_paginate paging_", /* Note that the type is postfixed */
-		"sLength": "dataTables_length",
-		"sProcessing": "dataTables_processing",
-	
-		/* Sorting */
-		"sSortAsc": "sorting_asc",
-		"sSortDesc": "sorting_desc",
-		"sSortable": "sorting", /* Sortable in both directions */
-		"sSortableAsc": "sorting_asc_disabled",
-		"sSortableDesc": "sorting_desc_disabled",
-		"sSortableNone": "sorting_disabled",
-		"sSortColumn": "sorting_", /* Note that an int is postfixed for the sorting order */
-	
-		/* Filtering */
-		"sFilterInput": "",
-	
-		/* Page length */
-		"sLengthSelect": "",
-	
-		/* Scrolling */
-		"sScrollWrapper": "dataTables_scroll",
-		"sScrollHead": "dataTables_scrollHead",
-		"sScrollHeadInner": "dataTables_scrollHeadInner",
-		"sScrollBody": "dataTables_scrollBody",
-		"sScrollFoot": "dataTables_scrollFoot",
-		"sScrollFootInner": "dataTables_scrollFootInner",
-	
-		/* Misc */
-		"sHeaderTH": "",
-		"sFooterTH": "",
-	
-		// Deprecated
-		"sSortJUIAsc": "",
-		"sSortJUIDesc": "",
-		"sSortJUI": "",
-		"sSortJUIAscAllowed": "",
-		"sSortJUIDescAllowed": "",
-		"sSortJUIWrapper": "",
-		"sSortIcon": "",
-		"sJUIHeader": "",
-		"sJUIFooter": ""
-	} );
-	
-	
-	var extPagination = DataTable.ext.pager;
-	
-	function _numbers ( page, pages ) {
-		var
-			numbers = [],
-			buttons = extPagination.numbers_length,
-			half = Math.floor( buttons / 2 ),
-			i = 1;
-	
-		if ( pages <= buttons ) {
-			numbers = _range( 0, pages );
-		}
-		else if ( page <= half ) {
-			numbers = _range( 0, buttons-2 );
-			numbers.push( 'ellipsis' );
-			numbers.push( pages-1 );
-		}
-		else if ( page >= pages - 1 - half ) {
-			numbers = _range( pages-(buttons-2), pages );
-			numbers.splice( 0, 0, 'ellipsis' ); // no unshift in ie6
-			numbers.splice( 0, 0, 0 );
-		}
-		else {
-			numbers = _range( page-half+2, page+half-1 );
-			numbers.push( 'ellipsis' );
-			numbers.push( pages-1 );
-			numbers.splice( 0, 0, 'ellipsis' );
-			numbers.splice( 0, 0, 0 );
-		}
-	
-		numbers.DT_el = 'span';
-		return numbers;
-	}
-	
-	
-	$.extend( extPagination, {
-		simple: function ( page, pages ) {
-			return [ 'previous', 'next' ];
-		},
-	
-		full: function ( page, pages ) {
-			return [  'first', 'previous', 'next', 'last' ];
-		},
-	
-		numbers: function ( page, pages ) {
-			return [ _numbers(page, pages) ];
-		},
-	
-		simple_numbers: function ( page, pages ) {
-			return [ 'previous', _numbers(page, pages), 'next' ];
-		},
-	
-		full_numbers: function ( page, pages ) {
-			return [ 'first', 'previous', _numbers(page, pages), 'next', 'last' ];
-		},
-		
-		first_last_numbers: function (page, pages) {
-	 		return ['first', _numbers(page, pages), 'last'];
-	 	},
-	
-		// For testing and plug-ins to use
-		_numbers: _numbers,
-	
-		// Number of number buttons (including ellipsis) to show. _Must be odd!_
-		numbers_length: 7
-	} );
-	
-	
-	$.extend( true, DataTable.ext.renderer, {
-		pageButton: {
-			_: function ( settings, host, idx, buttons, page, pages ) {
-				var classes = settings.oClasses;
-				var lang = settings.oLanguage.oPaginate;
-				var aria = settings.oLanguage.oAria.paginate || {};
-				var btnDisplay, btnClass, counter=0;
-	
-				var attach = function( container, buttons ) {
-					var i, ien, node, button, tabIndex;
-					var disabledClass = classes.sPageButtonDisabled;
-					var clickHandler = function ( e ) {
-						_fnPageChange( settings, e.data.action, true );
-					};
-	
-					for ( i=0, ien=buttons.length ; i<ien ; i++ ) {
-						button = buttons[i];
-	
-						if ( $.isArray( button ) ) {
-							var inner = $( '<'+(button.DT_el || 'div')+'/>' )
-								.appendTo( container );
-							attach( inner, button );
-						}
-						else {
-							btnDisplay = null;
-							btnClass = button;
-							tabIndex = settings.iTabIndex;
-	
-							switch ( button ) {
-								case 'ellipsis':
-									container.append('<span class="ellipsis">&#x2026;</span>');
-									break;
-	
-								case 'first':
-									btnDisplay = lang.sFirst;
-	
-									if ( page === 0 ) {
-										tabIndex = -1;
-										btnClass += ' ' + disabledClass;
-									}
-									break;
-	
-								case 'previous':
-									btnDisplay = lang.sPrevious;
-	
-									if ( page === 0 ) {
-										tabIndex = -1;
-										btnClass += ' ' + disabledClass;
-									}
-									break;
-	
-								case 'next':
-									btnDisplay = lang.sNext;
-	
-									if ( pages === 0 || page === pages-1 ) {
-										tabIndex = -1;
-										btnClass += ' ' + disabledClass;
-									}
-									break;
-	
-								case 'last':
-									btnDisplay = lang.sLast;
-	
-									if ( page === pages-1 ) {
-										tabIndex = -1;
-										btnClass += ' ' + disabledClass;
-									}
-									break;
-	
-								default:
-									btnDisplay = button + 1;
-									btnClass = page === button ?
-										classes.sPageButtonActive : '';
-									break;
-							}
-	
-							if ( btnDisplay !== null ) {
-								node = $('<a>', {
-										'class': classes.sPageButton+' '+btnClass,
-										'aria-controls': settings.sTableId,
-										'aria-label': aria[ button ],
-										'data-dt-idx': counter,
-										'tabindex': tabIndex,
-										'id': idx === 0 && typeof button === 'string' ?
-											settings.sTableId +'_'+ button :
-											null
-									} )
-									.html( btnDisplay )
-									.appendTo( container );
-	
-								_fnBindAction(
-									node, {action: button}, clickHandler
-								);
-	
-								counter++;
-							}
-						}
-					}
-				};
-	
-				// IE9 throws an 'unknown error' if document.activeElement is used
-				// inside an iframe or frame. Try / catch the error. Not good for
-				// accessibility, but neither are frames.
-				var activeEl;
-	
-				try {
-					// Because this approach is destroying and recreating the paging
-					// elements, focus is lost on the select button which is bad for
-					// accessibility. So we want to restore focus once the draw has
-					// completed
-					activeEl = $(host).find(document.activeElement).data('dt-idx');
-				}
-				catch (e) {}
-	
-				attach( $(host).empty(), buttons );
-	
-				if ( activeEl !== undefined ) {
-					$(host).find( '[data-dt-idx='+activeEl+']' ).trigger('focus');
-				}
-			}
-		}
-	} );
-	
-	
-	
-	// Built in type detection. See model.ext.aTypes for information about
-	// what is required from this methods.
-	$.extend( DataTable.ext.type.detect, [
-		// Plain numbers - first since V8 detects some plain numbers as dates
-		// e.g. Date.parse('55') (but not all, e.g. Date.parse('22')...).
-		function ( d, settings )
-		{
-			var decimal = settings.oLanguage.sDecimal;
-			return _isNumber( d, decimal ) ? 'num'+decimal : null;
-		},
-	
-		// Dates (only those recognised by the browser's Date.parse)
-		function ( d, settings )
-		{
-			// V8 tries _very_ hard to make a string passed into `Date.parse()`
-			// valid, so we need to use a regex to restrict date formats. Use a
-			// plug-in for anything other than ISO8601 style strings
-			if ( d && !(d instanceof Date) && ! _re_date.test(d) ) {
-				return null;
-			}
-			var parsed = Date.parse(d);
-			return (parsed !== null && !isNaN(parsed)) || _empty(d) ? 'date' : null;
-		},
-	
-		// Formatted numbers
-		function ( d, settings )
-		{
-			var decimal = settings.oLanguage.sDecimal;
-			return _isNumber( d, decimal, true ) ? 'num-fmt'+decimal : null;
-		},
-	
-		// HTML numeric
-		function ( d, settings )
-		{
-			var decimal = settings.oLanguage.sDecimal;
-			return _htmlNumeric( d, decimal ) ? 'html-num'+decimal : null;
-		},
-	
-		// HTML numeric, formatted
-		function ( d, settings )
-		{
-			var decimal = settings.oLanguage.sDecimal;
-			return _htmlNumeric( d, decimal, true ) ? 'html-num-fmt'+decimal : null;
-		},
-	
-		// HTML (this is strict checking - there must be html)
-		function ( d, settings )
-		{
-			return _empty( d ) || (typeof d === 'string' && d.indexOf('<') !== -1) ?
-				'html' : null;
-		}
-	] );
-	
-	
-	
-	// Filter formatting functions. See model.ext.ofnSearch for information about
-	// what is required from these methods.
-	// 
-	// Note that additional search methods are added for the html numbers and
-	// html formatted numbers by `_addNumericSort()` when we know what the decimal
-	// place is
-	
-	
-	$.extend( DataTable.ext.type.search, {
-		html: function ( data ) {
-			return _empty(data) ?
-				data :
-				typeof data === 'string' ?
-					data
-						.replace( _re_new_lines, " " )
-						.replace( _re_html, "" ) :
-					'';
-		},
-	
-		string: function ( data ) {
-			return _empty(data) ?
-				data :
-				typeof data === 'string' ?
-					data.replace( _re_new_lines, " " ) :
-					data;
-		}
-	} );
-	
-	
-	
-	var __numericReplace = function ( d, decimalPlace, re1, re2 ) {
-		if ( d !== 0 && (!d || d === '-') ) {
-			return -Infinity;
-		}
-	
-		// If a decimal place other than `.` is used, it needs to be given to the
-		// function so we can detect it and replace with a `.` which is the only
-		// decimal place Javascript recognises - it is not locale aware.
-		if ( decimalPlace ) {
-			d = _numToDecimal( d, decimalPlace );
-		}
-	
-		if ( d.replace ) {
-			if ( re1 ) {
-				d = d.replace( re1, '' );
-			}
-	
-			if ( re2 ) {
-				d = d.replace( re2, '' );
-			}
-		}
-	
-		return d * 1;
-	};
-	
-	
-	// Add the numeric 'deformatting' functions for sorting and search. This is done
-	// in a function to provide an easy ability for the language options to add
-	// additional methods if a non-period decimal place is used.
-	function _addNumericSort ( decimalPlace ) {
-		$.each(
-			{
-				// Plain numbers
-				"num": function ( d ) {
-					return __numericReplace( d, decimalPlace );
-				},
-	
-				// Formatted numbers
-				"num-fmt": function ( d ) {
-					return __numericReplace( d, decimalPlace, _re_formatted_numeric );
-				},
-	
-				// HTML numeric
-				"html-num": function ( d ) {
-					return __numericReplace( d, decimalPlace, _re_html );
-				},
-	
-				// HTML numeric, formatted
-				"html-num-fmt": function ( d ) {
-					return __numericReplace( d, decimalPlace, _re_html, _re_formatted_numeric );
-				}
-			},
-			function ( key, fn ) {
-				// Add the ordering method
-				_ext.type.order[ key+decimalPlace+'-pre' ] = fn;
-	
-				// For HTML types add a search formatter that will strip the HTML
-				if ( key.match(/^html\-/) ) {
-					_ext.type.search[ key+decimalPlace ] = _ext.type.search.html;
-				}
-			}
-		);
-	}
-	
-	
-	// Default sort methods
-	$.extend( _ext.type.order, {
-		// Dates
-		"date-pre": function ( d ) {
-			var ts = Date.parse( d );
-			return isNaN(ts) ? -Infinity : ts;
-		},
-	
-		// html
-		"html-pre": function ( a ) {
-			return _empty(a) ?
-				'' :
-				a.replace ?
-					a.replace( /<.*?>/g, "" ).toLowerCase() :
-					a+'';
-		},
-	
-		// string
-		"string-pre": function ( a ) {
-			// This is a little complex, but faster than always calling toString,
-			// http://jsperf.com/tostring-v-check
-			return _empty(a) ?
-				'' :
-				typeof a === 'string' ?
-					a.toLowerCase() :
-					! a.toString ?
-						'' :
-						a.toString();
-		},
-	
-		// string-asc and -desc are retained only for compatibility with the old
-		// sort methods
-		"string-asc": function ( x, y ) {
-			return ((x < y) ? -1 : ((x > y) ? 1 : 0));
-		},
-	
-		"string-desc": function ( x, y ) {
-			return ((x < y) ? 1 : ((x > y) ? -1 : 0));
-		}
-	} );
-	
-	
-	// Numeric sorting types - order doesn't matter here
-	_addNumericSort( '' );
-	
-	
-	$.extend( true, DataTable.ext.renderer, {
-		header: {
-			_: function ( settings, cell, column, classes ) {
-				// No additional mark-up required
-				// Attach a sort listener to update on sort - note that using the
-				// `DT` namespace will allow the event to be removed automatically
-				// on destroy, while the `dt` namespaced event is the one we are
-				// listening for
-				$(settings.nTable).on( 'order.dt.DT', function ( e, ctx, sorting, columns ) {
-					if ( settings !== ctx ) { // need to check this this is the host
-						return;               // table, not a nested one
-					}
-	
-					var colIdx = column.idx;
-	
-					cell
-						.removeClass(
-							column.sSortingClass +' '+
-							classes.sSortAsc +' '+
-							classes.sSortDesc
-						)
-						.addClass( columns[ colIdx ] == 'asc' ?
-							classes.sSortAsc : columns[ colIdx ] == 'desc' ?
-								classes.sSortDesc :
-								column.sSortingClass
-						);
-				} );
-			},
-	
-			jqueryui: function ( settings, cell, column, classes ) {
-				$('<div/>')
-					.addClass( classes.sSortJUIWrapper )
-					.append( cell.contents() )
-					.append( $('<span/>')
-						.addClass( classes.sSortIcon+' '+column.sSortingClassJUI )
-					)
-					.appendTo( cell );
-	
-				// Attach a sort listener to update on sort
-				$(settings.nTable).on( 'order.dt.DT', function ( e, ctx, sorting, columns ) {
-					if ( settings !== ctx ) {
-						return;
-					}
-	
-					var colIdx = column.idx;
-	
-					cell
-						.removeClass( classes.sSortAsc +" "+classes.sSortDesc )
-						.addClass( columns[ colIdx ] == 'asc' ?
-							classes.sSortAsc : columns[ colIdx ] == 'desc' ?
-								classes.sSortDesc :
-								column.sSortingClass
-						);
-	
-					cell
-						.find( 'span.'+classes.sSortIcon )
-						.removeClass(
-							classes.sSortJUIAsc +" "+
-							classes.sSortJUIDesc +" "+
-							classes.sSortJUI +" "+
-							classes.sSortJUIAscAllowed +" "+
-							classes.sSortJUIDescAllowed
-						)
-						.addClass( columns[ colIdx ] == 'asc' ?
-							classes.sSortJUIAsc : columns[ colIdx ] == 'desc' ?
-								classes.sSortJUIDesc :
-								column.sSortingClassJUI
-						);
-				} );
-			}
-		}
-	} );
-	
-	/*
-	 * Public helper functions. These aren't used internally by DataTables, or
-	 * called by any of the options passed into DataTables, but they can be used
-	 * externally by developers working with DataTables. They are helper functions
-	 * to make working with DataTables a little bit easier.
-	 */
-	
-	var __htmlEscapeEntities = function ( d ) {
-		return typeof d === 'string' ?
-			d
-				.replace(/&/g, '&amp;')
-				.replace(/</g, '&lt;')
-				.replace(/>/g, '&gt;')
-				.replace(/"/g, '&quot;') :
-			d;
-	};
-	
-	/**
-	 * Helpers for `columns.render`.
-	 *
-	 * The options defined here can be used with the `columns.render` initialisation
-	 * option to provide a display renderer. The following functions are defined:
-	 *
-	 * * `number` - Will format numeric data (defined by `columns.data`) for
-	 *   display, retaining the original unformatted data for sorting and filtering.
-	 *   It takes 5 parameters:
-	 *   * `string` - Thousands grouping separator
-	 *   * `string` - Decimal point indicator
-	 *   * `integer` - Number of decimal points to show
-	 *   * `string` (optional) - Prefix.
-	 *   * `string` (optional) - Postfix (/suffix).
-	 * * `text` - Escape HTML to help prevent XSS attacks. It has no optional
-	 *   parameters.
-	 *
-	 * @example
-	 *   // Column definition using the number renderer
-	 *   {
-	 *     data: "salary",
-	 *     render: $.fn.dataTable.render.number( '\'', '.', 0, '$' )
-	 *   }
-	 *
-	 * @namespace
-	 */
-	DataTable.render = {
-		number: function ( thousands, decimal, precision, prefix, postfix ) {
-			return {
-				display: function ( d ) {
-					if ( typeof d !== 'number' && typeof d !== 'string' ) {
-						return d;
-					}
-	
-					var negative = d < 0 ? '-' : '';
-					var flo = parseFloat( d );
-	
-					// If NaN then there isn't much formatting that we can do - just
-					// return immediately, escaping any HTML (this was supposed to
-					// be a number after all)
-					if ( isNaN( flo ) ) {
-						return __htmlEscapeEntities( d );
-					}
-	
-					flo = flo.toFixed( precision );
-					d = Math.abs( flo );
-	
-					var intPart = parseInt( d, 10 );
-					var floatPart = precision ?
-						decimal+(d - intPart).toFixed( precision ).substring( 2 ):
-						'';
-	
-					return negative + (prefix||'') +
-						intPart.toString().replace(
-							/\B(?=(\d{3})+(?!\d))/g, thousands
-						) +
-						floatPart +
-						(postfix||'');
-				}
-			};
-		},
-	
-		text: function () {
-			return {
-				display: __htmlEscapeEntities,
-				filter: __htmlEscapeEntities
-			};
-		}
-	};
-	
-	
-	/*
-	 * This is really a good bit rubbish this method of exposing the internal methods
-	 * publicly... - To be fixed in 2.0 using methods on the prototype
-	 */
-	
-	
-	/**
-	 * Create a wrapper function for exporting an internal functions to an external API.
-	 *  @param {string} fn API function name
-	 *  @returns {function} wrapped function
-	 *  @memberof DataTable#internal
-	 */
-	function _fnExternApiFunc (fn)
-	{
-		return function() {
-			var args = [_fnSettingsFromNode( this[DataTable.ext.iApiIndex] )].concat(
-				Array.prototype.slice.call(arguments)
-			);
-			return DataTable.ext.internal[fn].apply( this, args );
-		};
-	}
-	
-	
-	/**
-	 * Reference to internal functions for use by plug-in developers. Note that
-	 * these methods are references to internal functions and are considered to be
-	 * private. If you use these methods, be aware that they are liable to change
-	 * between versions.
-	 *  @namespace
-	 */
-	$.extend( DataTable.ext.internal, {
-		_fnExternApiFunc: _fnExternApiFunc,
-		_fnBuildAjax: _fnBuildAjax,
-		_fnAjaxUpdate: _fnAjaxUpdate,
-		_fnAjaxParameters: _fnAjaxParameters,
-		_fnAjaxUpdateDraw: _fnAjaxUpdateDraw,
-		_fnAjaxDataSrc: _fnAjaxDataSrc,
-		_fnAddColumn: _fnAddColumn,
-		_fnColumnOptions: _fnColumnOptions,
-		_fnAdjustColumnSizing: _fnAdjustColumnSizing,
-		_fnVisibleToColumnIndex: _fnVisibleToColumnIndex,
-		_fnColumnIndexToVisible: _fnColumnIndexToVisible,
-		_fnVisbleColumns: _fnVisbleColumns,
-		_fnGetColumns: _fnGetColumns,
-		_fnColumnTypes: _fnColumnTypes,
-		_fnApplyColumnDefs: _fnApplyColumnDefs,
-		_fnHungarianMap: _fnHungarianMap,
-		_fnCamelToHungarian: _fnCamelToHungarian,
-		_fnLanguageCompat: _fnLanguageCompat,
-		_fnBrowserDetect: _fnBrowserDetect,
-		_fnAddData: _fnAddData,
-		_fnAddTr: _fnAddTr,
-		_fnNodeToDataIndex: _fnNodeToDataIndex,
-		_fnNodeToColumnIndex: _fnNodeToColumnIndex,
-		_fnGetCellData: _fnGetCellData,
-		_fnSetCellData: _fnSetCellData,
-		_fnSplitObjNotation: _fnSplitObjNotation,
-		_fnGetObjectDataFn: _fnGetObjectDataFn,
-		_fnSetObjectDataFn: _fnSetObjectDataFn,
-		_fnGetDataMaster: _fnGetDataMaster,
-		_fnClearTable: _fnClearTable,
-		_fnDeleteIndex: _fnDeleteIndex,
-		_fnInvalidate: _fnInvalidate,
-		_fnGetRowElements: _fnGetRowElements,
-		_fnCreateTr: _fnCreateTr,
-		_fnBuildHead: _fnBuildHead,
-		_fnDrawHead: _fnDrawHead,
-		_fnDraw: _fnDraw,
-		_fnReDraw: _fnReDraw,
-		_fnAddOptionsHtml: _fnAddOptionsHtml,
-		_fnDetectHeader: _fnDetectHeader,
-		_fnGetUniqueThs: _fnGetUniqueThs,
-		_fnFeatureHtmlFilter: _fnFeatureHtmlFilter,
-		_fnFilterComplete: _fnFilterComplete,
-		_fnFilterCustom: _fnFilterCustom,
-		_fnFilterColumn: _fnFilterColumn,
-		_fnFilter: _fnFilter,
-		_fnFilterCreateSearch: _fnFilterCreateSearch,
-		_fnEscapeRegex: _fnEscapeRegex,
-		_fnFilterData: _fnFilterData,
-		_fnFeatureHtmlInfo: _fnFeatureHtmlInfo,
-		_fnUpdateInfo: _fnUpdateInfo,
-		_fnInfoMacros: _fnInfoMacros,
-		_fnInitialise: _fnInitialise,
-		_fnInitComplete: _fnInitComplete,
-		_fnLengthChange: _fnLengthChange,
-		_fnFeatureHtmlLength: _fnFeatureHtmlLength,
-		_fnFeatureHtmlPaginate: _fnFeatureHtmlPaginate,
-		_fnPageChange: _fnPageChange,
-		_fnFeatureHtmlProcessing: _fnFeatureHtmlProcessing,
-		_fnProcessingDisplay: _fnProcessingDisplay,
-		_fnFeatureHtmlTable: _fnFeatureHtmlTable,
-		_fnScrollDraw: _fnScrollDraw,
-		_fnApplyToChildren: _fnApplyToChildren,
-		_fnCalculateColumnWidths: _fnCalculateColumnWidths,
-		_fnThrottle: _fnThrottle,
-		_fnConvertToWidth: _fnConvertToWidth,
-		_fnGetWidestNode: _fnGetWidestNode,
-		_fnGetMaxLenString: _fnGetMaxLenString,
-		_fnStringToCss: _fnStringToCss,
-		_fnSortFlatten: _fnSortFlatten,
-		_fnSort: _fnSort,
-		_fnSortAria: _fnSortAria,
-		_fnSortListener: _fnSortListener,
-		_fnSortAttachListener: _fnSortAttachListener,
-		_fnSortingClasses: _fnSortingClasses,
-		_fnSortData: _fnSortData,
-		_fnSaveState: _fnSaveState,
-		_fnLoadState: _fnLoadState,
-		_fnSettingsFromNode: _fnSettingsFromNode,
-		_fnLog: _fnLog,
-		_fnMap: _fnMap,
-		_fnBindAction: _fnBindAction,
-		_fnCallbackReg: _fnCallbackReg,
-		_fnCallbackFire: _fnCallbackFire,
-		_fnLengthOverflow: _fnLengthOverflow,
-		_fnRenderer: _fnRenderer,
-		_fnDataSource: _fnDataSource,
-		_fnRowAttributes: _fnRowAttributes,
-		_fnExtend: _fnExtend,
-		_fnCalculateEnd: function () {} // Used by a lot of plug-ins, but redundant
-		                                // in 1.10, so this dead-end function is
-		                                // added to prevent errors
-	} );
-	
-
-	// jQuery access
-	$.fn.dataTable = DataTable;
-
-	// Provide access to the host jQuery object (circular reference)
-	DataTable.$ = $;
-
-	// Legacy aliases
-	$.fn.dataTableSettings = DataTable.settings;
-	$.fn.dataTableExt = DataTable.ext;
-
-	// With a capital `D` we return a DataTables API instance rather than a
-	// jQuery object
-	$.fn.DataTable = function ( opts ) {
-		return $(this).dataTable( opts ).api();
-	};
-
-	// All properties that are available to $.fn.dataTable should also be
-	// available on $.fn.DataTable
-	$.each( DataTable, function ( prop, val ) {
-		$.fn.DataTable[ prop ] = val;
-	} );
-
-
-	// Information about events fired by DataTables - for documentation.
-	/**
-	 * Draw event, fired whenever the table is redrawn on the page, at the same
-	 * point as fnDrawCallback. This may be useful for binding events or
-	 * performing calculations when the table is altered at all.
-	 *  @name DataTable#draw.dt
-	 *  @event
-	 *  @param {event} e jQuery event object
-	 *  @param {object} o DataTables settings object {@link DataTable.models.oSettings}
-	 */
-
-	/**
-	 * Search event, fired when the searching applied to the table (using the
-	 * built-in global search, or column filters) is altered.
-	 *  @name DataTable#search.dt
-	 *  @event
-	 *  @param {event} e jQuery event object
-	 *  @param {object} o DataTables settings object {@link DataTable.models.oSettings}
-	 */
-
-	/**
-	 * Page change event, fired when the paging of the table is altered.
-	 *  @name DataTable#page.dt
-	 *  @event
-	 *  @param {event} e jQuery event object
-	 *  @param {object} o DataTables settings object {@link DataTable.models.oSettings}
-	 */
-
-	/**
-	 * Order event, fired when the ordering applied to the table is altered.
-	 *  @name DataTable#order.dt
-	 *  @event
-	 *  @param {event} e jQuery event object
-	 *  @param {object} o DataTables settings object {@link DataTable.models.oSettings}
-	 */
-
-	/**
-	 * DataTables initialisation complete event, fired when the table is fully
-	 * drawn, including Ajax data loaded, if Ajax data is required.
-	 *  @name DataTable#init.dt
-	 *  @event
-	 *  @param {event} e jQuery event object
-	 *  @param {object} oSettings DataTables settings object
-	 *  @param {object} json The JSON object request from the server - only
-	 *    present if client-side Ajax sourced data is used</li></ol>
-	 */
-
-	/**
-	 * State save event, fired when the table has changed state a new state save
-	 * is required. This event allows modification of the state saving object
-	 * prior to actually doing the save, including addition or other state
-	 * properties (for plug-ins) or modification of a DataTables core property.
-	 *  @name DataTable#stateSaveParams.dt
-	 *  @event
-	 *  @param {event} e jQuery event object
-	 *  @param {object} oSettings DataTables settings object
-	 *  @param {object} json The state information to be saved
-	 */
-
-	/**
-	 * State load event, fired when the table is loading state from the stored
-	 * data, but prior to the settings object being modified by the saved state
-	 * - allowing modification of the saved state is required or loading of
-	 * state for a plug-in.
-	 *  @name DataTable#stateLoadParams.dt
-	 *  @event
-	 *  @param {event} e jQuery event object
-	 *  @param {object} oSettings DataTables settings object
-	 *  @param {object} json The saved state information
-	 */
-
-	/**
-	 * State loaded event, fired when state has been loaded from stored data and
-	 * the settings object has been modified by the loaded data.
-	 *  @name DataTable#stateLoaded.dt
-	 *  @event
-	 *  @param {event} e jQuery event object
-	 *  @param {object} oSettings DataTables settings object
-	 *  @param {object} json The saved state information
-	 */
-
-	/**
-	 * Processing event, fired when DataTables is doing some kind of processing
-	 * (be it, order, search or anything else). It can be used to indicate to
-	 * the end user that there is something happening, or that something has
-	 * finished.
-	 *  @name DataTable#processing.dt
-	 *  @event
-	 *  @param {event} e jQuery event object
-	 *  @param {object} oSettings DataTables settings object
-	 *  @param {boolean} bShow Flag for if DataTables is doing processing or not
-	 */
-
-	/**
-	 * Ajax (XHR) event, fired whenever an Ajax request is completed from a
-	 * request to made to the server for new data. This event is called before
-	 * DataTables processed the returned data, so it can also be used to pre-
-	 * process the data returned from the server, if needed.
-	 *
-	 * Note that this trigger is called in `fnServerData`, if you override
-	 * `fnServerData` and which to use this event, you need to trigger it in you
-	 * success function.
-	 *  @name DataTable#xhr.dt
-	 *  @event
-	 *  @param {event} e jQuery event object
-	 *  @param {object} o DataTables settings object {@link DataTable.models.oSettings}
-	 *  @param {object} json JSON returned from the server
-	 *
-	 *  @example
-	 *     // Use a custom property returned from the server in another DOM element
-	 *     $('#table').dataTable().on('xhr.dt', function (e, settings, json) {
-	 *       $('#status').html( json.status );
-	 *     } );
-	 *
-	 *  @example
-	 *     // Pre-process the data returned from the server
-	 *     $('#table').dataTable().on('xhr.dt', function (e, settings, json) {
-	 *       for ( var i=0, ien=json.aaData.length ; i<ien ; i++ ) {
-	 *         json.aaData[i].sum = json.aaData[i].one + json.aaData[i].two;
-	 *       }
-	 *       // Note no return - manipulate the data directly in the JSON object.
-	 *     } );
-	 */
-
-	/**
-	 * Destroy event, fired when the DataTable is destroyed by calling fnDestroy
-	 * or passing the bDestroy:true parameter in the initialisation object. This
-	 * can be used to remove bound events, added DOM nodes, etc.
-	 *  @name DataTable#destroy.dt
-	 *  @event
-	 *  @param {event} e jQuery event object
-	 *  @param {object} o DataTables settings object {@link DataTable.models.oSettings}
-	 */
-
-	/**
-	 * Page length change event, fired when number of records to show on each
-	 * page (the length) is changed.
-	 *  @name DataTable#length.dt
-	 *  @event
-	 *  @param {event} e jQuery event object
-	 *  @param {object} o DataTables settings object {@link DataTable.models.oSettings}
-	 *  @param {integer} len New length
-	 */
-
-	/**
-	 * Column sizing has changed.
-	 *  @name DataTable#column-sizing.dt
-	 *  @event
-	 *  @param {event} e jQuery event object
-	 *  @param {object} o DataTables settings object {@link DataTable.models.oSettings}
-	 */
-
-	/**
-	 * Column visibility has changed.
-	 *  @name DataTable#column-visibility.dt
-	 *  @event
-	 *  @param {event} e jQuery event object
-	 *  @param {object} o DataTables settings object {@link DataTable.models.oSettings}
-	 *  @param {int} column Column index
-	 *  @param {bool} vis `false` if column now hidden, or `true` if visible
-	 */
-
-	return $.fn.dataTable;
-}));
-
-
-/*! DataTables Bootstrap 4 integration
- * ©2011-2017 SpryMedia Ltd - datatables.net/license
- */
-
-/**
- * DataTables integration for Bootstrap 4. This requires Bootstrap 4 and
- * DataTables 1.10 or newer.
- *
- * This file sets the defaults and adds options to DataTables to style its
- * controls using Bootstrap. See http://datatables.net/manual/styling/bootstrap
- * for further information.
- */
-(function( factory ){
-	if ( typeof define === 'function' && define.amd ) {
-		// AMD
-		define( ['jquery', 'datatables.net'], function ( $ ) {
-			return factory( $, window, document );
-		} );
-	}
-	else if ( typeof exports === 'object' ) {
-		// CommonJS
-		module.exports = function (root, $) {
-			if ( ! root ) {
-				root = window;
-			}
-
-			if ( ! $ || ! $.fn.dataTable ) {
-				// Require DataTables, which attaches to jQuery, including
-				// jQuery if needed and have a $ property so we can access the
-				// jQuery object that is used
-				$ = require('datatables.net')(root, $).$;
-			}
-
-			return factory( $, root, root.document );
-		};
-	}
-	else {
-		// Browser
-		factory( jQuery, window, document );
-	}
-}(function( $, window, document, undefined ) {
-'use strict';
-var DataTable = $.fn.dataTable;
-
-
-/* Set the defaults for DataTables initialisation */
-$.extend( true, DataTable.defaults, {
-	dom:
-		"<'row'<'col-sm-12 col-md-6'l><'col-sm-12 col-md-6'f>>" +
-		"<'row'<'col-sm-12'tr>>" +
-		"<'row'<'col-sm-12 col-md-5'i><'col-sm-12 col-md-7'p>>",
-	renderer: 'bootstrap'
-} );
-
-
-/* Default class modification */
-$.extend( DataTable.ext.classes, {
-	sWrapper:      "dataTables_wrapper dt-bootstrap4",
-	sFilterInput:  "form-control form-control-sm",
-	sLengthSelect: "custom-select custom-select-sm form-control form-control-sm",
-	sProcessing:   "dataTables_processing card",
-	sPageButton:   "paginate_button page-item"
-} );
-
-
-/* Bootstrap paging button renderer */
-DataTable.ext.renderer.pageButton.bootstrap = function ( settings, host, idx, buttons, page, pages ) {
-	var api     = new DataTable.Api( settings );
-	var classes = settings.oClasses;
-	var lang    = settings.oLanguage.oPaginate;
-	var aria = settings.oLanguage.oAria.paginate || {};
-	var btnDisplay, btnClass, counter=0;
-
-	var attach = function( container, buttons ) {
-		var i, ien, node, button;
-		var clickHandler = function ( e ) {
-			e.preventDefault();
-			if ( !$(e.currentTarget).hasClass('disabled') && api.page() != e.data.action ) {
-				api.page( e.data.action ).draw( 'page' );
-			}
-		};
-
-		for ( i=0, ien=buttons.length ; i<ien ; i++ ) {
-			button = buttons[i];
-
-			if ( $.isArray( button ) ) {
-				attach( container, button );
-			}
-			else {
-				btnDisplay = '';
-				btnClass = '';
-
-				switch ( button ) {
-					case 'ellipsis':
-						btnDisplay = '&#x2026;';
-						btnClass = 'disabled';
-						break;
-
-					case 'first':
-						btnDisplay = lang.sFirst;
-						btnClass = button + (page > 0 ?
-							'' : ' disabled');
-						break;
-
-					case 'previous':
-						btnDisplay = lang.sPrevious;
-						btnClass = button + (page > 0 ?
-							'' : ' disabled');
-						break;
-
-					case 'next':
-						btnDisplay = lang.sNext;
-						btnClass = button + (page < pages-1 ?
-							'' : ' disabled');
-						break;
-
-					case 'last':
-						btnDisplay = lang.sLast;
-						btnClass = button + (page < pages-1 ?
-							'' : ' disabled');
-						break;
-
-					default:
-						btnDisplay = button + 1;
-						btnClass = page === button ?
-							'active' : '';
-						break;
-				}
-
-				if ( btnDisplay ) {
-					node = $('<li>', {
-							'class': classes.sPageButton+' '+btnClass,
-							'id': idx === 0 && typeof button === 'string' ?
-								settings.sTableId +'_'+ button :
-								null
-						} )
-						.append( $('<a>', {
-								'href': '#',
-								'aria-controls': settings.sTableId,
-								'aria-label': aria[ button ],
-								'data-dt-idx': counter,
-								'tabindex': settings.iTabIndex,
-								'class': 'page-link'
-							} )
-							.html( btnDisplay )
-						)
-						.appendTo( container );
-
-					settings.oApi._fnBindAction(
-						node, {action: button}, clickHandler
-					);
-
-					counter++;
-				}
-			}
-		}
-	};
-
-	// IE9 throws an 'unknown error' if document.activeElement is used
-	// inside an iframe or frame. 
-	var activeEl;
-
-	try {
-		// Because this approach is destroying and recreating the paging
-		// elements, focus is lost on the select button which is bad for
-		// accessibility. So we want to restore focus once the draw has
-		// completed
-		activeEl = $(host).find(document.activeElement).data('dt-idx');
-	}
-	catch (e) {}
-
-	attach(
-		$(host).empty().html('<ul class="pagination"/>').children('ul'),
-		buttons
-	);
-
-	if ( activeEl !== undefined ) {
-		$(host).find( '[data-dt-idx='+activeEl+']' ).trigger('focus');
-	}
-};
-
-
-return DataTable;
-}));
-
-
-/*! Buttons for DataTables 1.6.2
- * ©2016-2020 SpryMedia Ltd - datatables.net/license
- */
-
-(function( factory ){
-	if ( typeof define === 'function' && define.amd ) {
-		// AMD
-		define( ['jquery', 'datatables.net'], function ( $ ) {
-			return factory( $, window, document );
-		} );
-	}
-	else if ( typeof exports === 'object' ) {
-		// CommonJS
-		module.exports = function (root, $) {
-			if ( ! root ) {
-				root = window;
-			}
-
-			if ( ! $ || ! $.fn.dataTable ) {
-				$ = require('datatables.net')(root, $).$;
-			}
-
-			return factory( $, root, root.document );
-		};
-	}
-	else {
-		// Browser
-		factory( jQuery, window, document );
-	}
-}(function( $, window, document, undefined ) {
-'use strict';
-var DataTable = $.fn.dataTable;
-
-
-// Used for namespacing events added to the document by each instance, so they
-// can be removed on destroy
-var _instCounter = 0;
-
-// Button namespacing counter for namespacing events on individual buttons
-var _buttonCounter = 0;
-
-var _dtButtons = DataTable.ext.buttons;
-
-// Allow for jQuery slim
-function _fadeIn(el, duration, fn) {
-	if ($.fn.animate) {
-		el
-			.stop()
-			.fadeIn( duration, fn );
-	}
-	else {
-		el.css('display', 'block');
-
-		if (fn) {
-			fn.call(el);
-		}
-	}
-}
-
-function _fadeOut(el, duration, fn) {
-	if ($.fn.animate) {
-		el
-			.stop()
-			.fadeOut( duration, fn );
-	}
-	else {
-		el.css('display', 'none');
-		
-		if (fn) {
-			fn.call(el);
-		}
-	}
-}
-
-/**
- * [Buttons description]
- * @param {[type]}
- * @param {[type]}
- */
-var Buttons = function( dt, config )
-{
-	// If not created with a `new` keyword then we return a wrapper function that
-	// will take the settings object for a DT. This allows easy use of new instances
-	// with the `layout` option - e.g. `topLeft: $.fn.dataTable.Buttons( ... )`.
-	if ( !(this instanceof Buttons) ) {
-		return function (settings) {
-			return new Buttons( settings, dt ).container();
-		};
-	}
-
-	// If there is no config set it to an empty object
-	if ( typeof( config ) === 'undefined' ) {
-		config = {};	
-	}
-	
-	// Allow a boolean true for defaults
-	if ( config === true ) {
-		config = {};
-	}
-
-	// For easy configuration of buttons an array can be given
-	if ( $.isArray( config ) ) {
-		config = { buttons: config };
-	}
-
-	this.c = $.extend( true, {}, Buttons.defaults, config );
-
-	// Don't want a deep copy for the buttons
-	if ( config.buttons ) {
-		this.c.buttons = config.buttons;
-	}
-
-	this.s = {
-		dt: new DataTable.Api( dt ),
-		buttons: [],
-		listenKeys: '',
-		namespace: 'dtb'+(_instCounter++)
-	};
-
-	this.dom = {
-		container: $('<'+this.c.dom.container.tag+'/>')
-			.addClass( this.c.dom.container.className )
-	};
-
-	this._constructor();
-};
-
-
-$.extend( Buttons.prototype, {
-	/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
-	 * Public methods
-	 */
-
-	/**
-	 * Get the action of a button
-	 * @param  {int|string} Button index
-	 * @return {function}
-	 *//**
-	 * Set the action of a button
-	 * @param  {node} node Button element
-	 * @param  {function} action Function to set
-	 * @return {Buttons} Self for chaining
-	 */
-	action: function ( node, action )
-	{
-		var button = this._nodeToButton( node );
-
-		if ( action === undefined ) {
-			return button.conf.action;
-		}
-
-		button.conf.action = action;
-
-		return this;
-	},
-
-	/**
-	 * Add an active class to the button to make to look active or get current
-	 * active state.
-	 * @param  {node} node Button element
-	 * @param  {boolean} [flag] Enable / disable flag
-	 * @return {Buttons} Self for chaining or boolean for getter
-	 */
-	active: function ( node, flag ) {
-		var button = this._nodeToButton( node );
-		var klass = this.c.dom.button.active;
-		var jqNode = $(button.node);
-
-		if ( flag === undefined ) {
-			return jqNode.hasClass( klass );
-		}
-
-		jqNode.toggleClass( klass, flag === undefined ? true : flag );
-
-		return this;
-	},
-
-	/**
-	 * Add a new button
-	 * @param {object} config Button configuration object, base string name or function
-	 * @param {int|string} [idx] Button index for where to insert the button
-	 * @return {Buttons} Self for chaining
-	 */
-	add: function ( config, idx )
-	{
-		var buttons = this.s.buttons;
-
-		if ( typeof idx === 'string' ) {
-			var split = idx.split('-');
-			var base = this.s;
-
-			for ( var i=0, ien=split.length-1 ; i<ien ; i++ ) {
-				base = base.buttons[ split[i]*1 ];
-			}
-
-			buttons = base.buttons;
-			idx = split[ split.length-1 ]*1;
-		}
-
-		this._expandButton( buttons, config, base !== undefined, idx );
-		this._draw();
-
-		return this;
-	},
-
-	/**
-	 * Get the container node for the buttons
-	 * @return {jQuery} Buttons node
-	 */
-	container: function ()
-	{
-		return this.dom.container;
-	},
-
-	/**
-	 * Disable a button
-	 * @param  {node} node Button node
-	 * @return {Buttons} Self for chaining
-	 */
-	disable: function ( node ) {
-		var button = this._nodeToButton( node );
-
-		$(button.node)
-			.addClass( this.c.dom.button.disabled )
-			.attr('disabled', true);
-
-		return this;
-	},
-
-	/**
-	 * Destroy the instance, cleaning up event handlers and removing DOM
-	 * elements
-	 * @return {Buttons} Self for chaining
-	 */
-	destroy: function ()
-	{
-		// Key event listener
-		$('body').off( 'keyup.'+this.s.namespace );
-
-		// Individual button destroy (so they can remove their own events if
-		// needed). Take a copy as the array is modified by `remove`
-		var buttons = this.s.buttons.slice();
-		var i, ien;
-		
-		for ( i=0, ien=buttons.length ; i<ien ; i++ ) {
-			this.remove( buttons[i].node );
-		}
-
-		// Container
-		this.dom.container.remove();
-
-		// Remove from the settings object collection
-		var buttonInsts = this.s.dt.settings()[0];
-
-		for ( i=0, ien=buttonInsts.length ; i<ien ; i++ ) {
-			if ( buttonInsts.inst === this ) {
-				buttonInsts.splice( i, 1 );
-				break;
-			}
-		}
-
-		return this;
-	},
-
-	/**
-	 * Enable / disable a button
-	 * @param  {node} node Button node
-	 * @param  {boolean} [flag=true] Enable / disable flag
-	 * @return {Buttons} Self for chaining
-	 */
-	enable: function ( node, flag )
-	{
-		if ( flag === false ) {
-			return this.disable( node );
-		}
-
-		var button = this._nodeToButton( node );
-		$(button.node)
-			.removeClass( this.c.dom.button.disabled )
-			.removeAttr('disabled');
-
-		return this;
-	},
-
-	/**
-	 * Get the instance name for the button set selector
-	 * @return {string} Instance name
-	 */
-	name: function ()
-	{
-		return this.c.name;
-	},
-
-	/**
-	 * Get a button's node of the buttons container if no button is given
-	 * @param  {node} [node] Button node
-	 * @return {jQuery} Button element, or container
-	 */
-	node: function ( node )
-	{
-		if ( ! node ) {
-			return this.dom.container;
-		}
-
-		var button = this._nodeToButton( node );
-		return $(button.node);
-	},
-
-	/**
-	 * Set / get a processing class on the selected button
-	 * @param {element} node Triggering button node
-	 * @param  {boolean} flag true to add, false to remove, undefined to get
-	 * @return {boolean|Buttons} Getter value or this if a setter.
-	 */
-	processing: function ( node, flag )
-	{
-		var dt = this.s.dt;
-		var button = this._nodeToButton( node );
-
-		if ( flag === undefined ) {
-			return $(button.node).hasClass( 'processing' );
-		}
-
-		$(button.node).toggleClass( 'processing', flag );
-
-		$(dt.table().node()).triggerHandler( 'buttons-processing.dt', [
-			flag, dt.button( node ), dt, $(node), button.conf
-		] );
-
-		return this;
-	},
-
-	/**
-	 * Remove a button.
-	 * @param  {node} node Button node
-	 * @return {Buttons} Self for chaining
-	 */
-	remove: function ( node )
-	{
-		var button = this._nodeToButton( node );
-		var host = this._nodeToHost( node );
-		var dt = this.s.dt;
-
-		// Remove any child buttons first
-		if ( button.buttons.length ) {
-			for ( var i=button.buttons.length-1 ; i>=0 ; i-- ) {
-				this.remove( button.buttons[i].node );
-			}
-		}
-
-		// Allow the button to remove event handlers, etc
-		if ( button.conf.destroy ) {
-			button.conf.destroy.call( dt.button(node), dt, $(node), button.conf );
-		}
-
-		this._removeKey( button.conf );
-
-		$(button.node).remove();
-
-		var idx = $.inArray( button, host );
-		host.splice( idx, 1 );
-
-		return this;
-	},
-
-	/**
-	 * Get the text for a button
-	 * @param  {int|string} node Button index
-	 * @return {string} Button text
-	 *//**
-	 * Set the text for a button
-	 * @param  {int|string|function} node Button index
-	 * @param  {string} label Text
-	 * @return {Buttons} Self for chaining
-	 */
-	text: function ( node, label )
-	{
-		var button = this._nodeToButton( node );
-		var buttonLiner = this.c.dom.collection.buttonLiner;
-		var linerTag = button.inCollection && buttonLiner && buttonLiner.tag ?
-			buttonLiner.tag :
-			this.c.dom.buttonLiner.tag;
-		var dt = this.s.dt;
-		var jqNode = $(button.node);
-		var text = function ( opt ) {
-			return typeof opt === 'function' ?
-				opt( dt, jqNode, button.conf ) :
-				opt;
-		};
-
-		if ( label === undefined ) {
-			return text( button.conf.text );
-		}
-
-		button.conf.text = label;
-
-		if ( linerTag ) {
-			jqNode.children( linerTag ).html( text(label) );
-		}
-		else {
-			jqNode.html( text(label) );
-		}
-
-		return this;
-	},
-
-
-	/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
-	 * Constructor
-	 */
-
-	/**
-	 * Buttons constructor
-	 * @private
-	 */
-	_constructor: function ()
-	{
-		var that = this;
-		var dt = this.s.dt;
-		var dtSettings = dt.settings()[0];
-		var buttons =  this.c.buttons;
-
-		if ( ! dtSettings._buttons ) {
-			dtSettings._buttons = [];
-		}
-
-		dtSettings._buttons.push( {
-			inst: this,
-			name: this.c.name
-		} );
-
-		for ( var i=0, ien=buttons.length ; i<ien ; i++ ) {
-			this.add( buttons[i] );
-		}
-
-		dt.on( 'destroy', function ( e, settings ) {
-			if ( settings === dtSettings ) {
-				that.destroy();
-			}
-		} );
-
-		// Global key event binding to listen for button keys
-		$('body').on( 'keyup.'+this.s.namespace, function ( e ) {
-			if ( ! document.activeElement || document.activeElement === document.body ) {
-				// SUse a string of characters for fast lookup of if we need to
-				// handle this
-				var character = String.fromCharCode(e.keyCode).toLowerCase();
-
-				if ( that.s.listenKeys.toLowerCase().indexOf( character ) !== -1 ) {
-					that._keypress( character, e );
-				}
-			}
-		} );
-	},
-
-
-	/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
-	 * Private methods
-	 */
-
-	/**
-	 * Add a new button to the key press listener
-	 * @param {object} conf Resolved button configuration object
-	 * @private
-	 */
-	_addKey: function ( conf )
-	{
-		if ( conf.key ) {
-			this.s.listenKeys += $.isPlainObject( conf.key ) ?
-				conf.key.key :
-				conf.key;
-		}
-	},
-
-	/**
-	 * Insert the buttons into the container. Call without parameters!
-	 * @param  {node} [container] Recursive only - Insert point
-	 * @param  {array} [buttons] Recursive only - Buttons array
-	 * @private
-	 */
-	_draw: function ( container, buttons )
-	{
-		if ( ! container ) {
-			container = this.dom.container;
-			buttons = this.s.buttons;
-		}
-
-		container.children().detach();
-
-		for ( var i=0, ien=buttons.length ; i<ien ; i++ ) {
-			container.append( buttons[i].inserter );
-			container.append( ' ' );
-
-			if ( buttons[i].buttons && buttons[i].buttons.length ) {
-				this._draw( buttons[i].collection, buttons[i].buttons );
-			}
-		}
-	},
-
-	/**
-	 * Create buttons from an array of buttons
-	 * @param  {array} attachTo Buttons array to attach to
-	 * @param  {object} button Button definition
-	 * @param  {boolean} inCollection true if the button is in a collection
-	 * @private
-	 */
-	_expandButton: function ( attachTo, button, inCollection, attachPoint )
-	{
-		var dt = this.s.dt;
-		var buttonCounter = 0;
-		var buttons = ! $.isArray( button ) ?
-			[ button ] :
-			button;
-
-		for ( var i=0, ien=buttons.length ; i<ien ; i++ ) {
-			var conf = this._resolveExtends( buttons[i] );
-
-			if ( ! conf ) {
-				continue;
-			}
-
-			// If the configuration is an array, then expand the buttons at this
-			// point
-			if ( $.isArray( conf ) ) {
-				this._expandButton( attachTo, conf, inCollection, attachPoint );
-				continue;
-			}
-
-			var built = this._buildButton( conf, inCollection );
-			if ( ! built ) {
-				continue;
-			}
-
-			if ( attachPoint !== undefined && attachPoint !== null ) {
-				attachTo.splice( attachPoint, 0, built );
-				attachPoint++;
-			}
-			else {
-				attachTo.push( built );
-			}
-
-			if ( built.conf.buttons ) {
-				built.collection = $('<'+this.c.dom.collection.tag+'/>');
-
-				built.conf._collection = built.collection;
-
-				this._expandButton( built.buttons, built.conf.buttons, true, attachPoint );
-			}
-
-			// init call is made here, rather than buildButton as it needs to
-			// be selectable, and for that it needs to be in the buttons array
-			if ( conf.init ) {
-				conf.init.call( dt.button( built.node ), dt, $(built.node), conf );
-			}
-
-			buttonCounter++;
-		}
-	},
-
-	/**
-	 * Create an individual button
-	 * @param  {object} config            Resolved button configuration
-	 * @param  {boolean} inCollection `true` if a collection button
-	 * @return {jQuery} Created button node (jQuery)
-	 * @private
-	 */
-	_buildButton: function ( config, inCollection )
-	{
-		var buttonDom = this.c.dom.button;
-		var linerDom = this.c.dom.buttonLiner;
-		var collectionDom = this.c.dom.collection;
-		var dt = this.s.dt;
-		var text = function ( opt ) {
-			return typeof opt === 'function' ?
-				opt( dt, button, config ) :
-				opt;
-		};
-
-		if ( inCollection && collectionDom.button ) {
-			buttonDom = collectionDom.button;
-		}
-
-		if ( inCollection && collectionDom.buttonLiner ) {
-			linerDom = collectionDom.buttonLiner;
-		}
-
-		// Make sure that the button is available based on whatever requirements
-		// it has. For example, Flash buttons require Flash
-		if ( config.available && ! config.available( dt, config ) ) {
-			return false;
-		}
-
-		var action = function ( e, dt, button, config ) {
-			config.action.call( dt.button( button ), e, dt, button, config );
-
-			$(dt.table().node()).triggerHandler( 'buttons-action.dt', [
-				dt.button( button ), dt, button, config 
-			] );
-		};
-
-		var tag = config.tag || buttonDom.tag;
-		var clickBlurs = config.clickBlurs === undefined ? true : config.clickBlurs
-		var button = $('<'+tag+'/>')
-			.addClass( buttonDom.className )
-			.attr( 'tabindex', this.s.dt.settings()[0].iTabIndex )
-			.attr( 'aria-controls', this.s.dt.table().node().id )
-			.on( 'click.dtb', function (e) {
-				e.preventDefault();
-
-				if ( ! button.hasClass( buttonDom.disabled ) && config.action ) {
-					action( e, dt, button, config );
-				}
-				if( clickBlurs ) {
-					button.trigger('blur');
-				}
-			} )
-			.on( 'keyup.dtb', function (e) {
-				if ( e.keyCode === 13 ) {
-					if ( ! button.hasClass( buttonDom.disabled ) && config.action ) {
-						action( e, dt, button, config );
-					}
-				}
-			} );
-
-		// Make `a` tags act like a link
-		if ( tag.toLowerCase() === 'a' ) {
-			button.attr( 'href', '#' );
-		}
-
-		// Button tags should have `type=button` so they don't have any default behaviour
-		if ( tag.toLowerCase() === 'button' ) {
-			button.attr( 'type', 'button' );
-		}
-
-		if ( linerDom.tag ) {
-			var liner = $('<'+linerDom.tag+'/>')
-				.html( text( config.text ) )
-				.addClass( linerDom.className );
-
-			if ( linerDom.tag.toLowerCase() === 'a' ) {
-				liner.attr( 'href', '#' );
-			}
-
-			button.append( liner );
-		}
-		else {
-			button.html( text( config.text ) );
-		}
-
-		if ( config.enabled === false ) {
-			button.addClass( buttonDom.disabled );
-		}
-
-		if ( config.className ) {
-			button.addClass( config.className );
-		}
-
-		if ( config.titleAttr ) {
-			button.attr( 'title', text( config.titleAttr ) );
-		}
-
-		if ( config.attr ) {
-			button.attr( config.attr );
-		}
-
-		if ( ! config.namespace ) {
-			config.namespace = '.dt-button-'+(_buttonCounter++);
-		}
-
-		var buttonContainer = this.c.dom.buttonContainer;
-		var inserter;
-		if ( buttonContainer && buttonContainer.tag ) {
-			inserter = $('<'+buttonContainer.tag+'/>')
-				.addClass( buttonContainer.className )
-				.append( button );
-		}
-		else {
-			inserter = button;
-		}
-
-		this._addKey( config );
-
-		// Style integration callback for DOM manipulation
-		// Note that this is _not_ documented. It is currently
-		// for style integration only
-		if( this.c.buttonCreated ) {
-			inserter = this.c.buttonCreated( config, inserter );
-		}
-
-		return {
-			conf:         config,
-			node:         button.get(0),
-			inserter:     inserter,
-			buttons:      [],
-			inCollection: inCollection,
-			collection:   null
-		};
-	},
-
-	/**
-	 * Get the button object from a node (recursive)
-	 * @param  {node} node Button node
-	 * @param  {array} [buttons] Button array, uses base if not defined
-	 * @return {object} Button object
-	 * @private
-	 */
-	_nodeToButton: function ( node, buttons )
-	{
-		if ( ! buttons ) {
-			buttons = this.s.buttons;
-		}
-
-		for ( var i=0, ien=buttons.length ; i<ien ; i++ ) {
-			if ( buttons[i].node === node ) {
-				return buttons[i];
-			}
-
-			if ( buttons[i].buttons.length ) {
-				var ret = this._nodeToButton( node, buttons[i].buttons );
-
-				if ( ret ) {
-					return ret;
-				}
-			}
-		}
-	},
-
-	/**
-	 * Get container array for a button from a button node (recursive)
-	 * @param  {node} node Button node
-	 * @param  {array} [buttons] Button array, uses base if not defined
-	 * @return {array} Button's host array
-	 * @private
-	 */
-	_nodeToHost: function ( node, buttons )
-	{
-		if ( ! buttons ) {
-			buttons = this.s.buttons;
-		}
-
-		for ( var i=0, ien=buttons.length ; i<ien ; i++ ) {
-			if ( buttons[i].node === node ) {
-				return buttons;
-			}
-
-			if ( buttons[i].buttons.length ) {
-				var ret = this._nodeToHost( node, buttons[i].buttons );
-
-				if ( ret ) {
-					return ret;
-				}
-			}
-		}
-	},
-
-	/**
-	 * Handle a key press - determine if any button's key configured matches
-	 * what was typed and trigger the action if so.
-	 * @param  {string} character The character pressed
-	 * @param  {object} e Key event that triggered this call
-	 * @private
-	 */
-	_keypress: function ( character, e )
-	{
-		// Check if this button press already activated on another instance of Buttons
-		if ( e._buttonsHandled ) {
-			return;
-		}
-
-		var run = function ( conf, node ) {
-			if ( ! conf.key ) {
-				return;
-			}
-
-			if ( conf.key === character ) {
-				e._buttonsHandled = true;
-				$(node).click();
-			}
-			else if ( $.isPlainObject( conf.key ) ) {
-				if ( conf.key.key !== character ) {
-					return;
-				}
-
-				if ( conf.key.shiftKey && ! e.shiftKey ) {
-					return;
-				}
-
-				if ( conf.key.altKey && ! e.altKey ) {
-					return;
-				}
-
-				if ( conf.key.ctrlKey && ! e.ctrlKey ) {
-					return;
-				}
-
-				if ( conf.key.metaKey && ! e.metaKey ) {
-					return;
-				}
-
-				// Made it this far - it is good
-				e._buttonsHandled = true;
-				$(node).click();
-			}
-		};
-
-		var recurse = function ( a ) {
-			for ( var i=0, ien=a.length ; i<ien ; i++ ) {
-				run( a[i].conf, a[i].node );
-
-				if ( a[i].buttons.length ) {
-					recurse( a[i].buttons );
-				}
-			}
-		};
-
-		recurse( this.s.buttons );
-	},
-
-	/**
-	 * Remove a key from the key listener for this instance (to be used when a
-	 * button is removed)
-	 * @param  {object} conf Button configuration
-	 * @private
-	 */
-	_removeKey: function ( conf )
-	{
-		if ( conf.key ) {
-			var character = $.isPlainObject( conf.key ) ?
-				conf.key.key :
-				conf.key;
-
-			// Remove only one character, as multiple buttons could have the
-			// same listening key
-			var a = this.s.listenKeys.split('');
-			var idx = $.inArray( character, a );
-			a.splice( idx, 1 );
-			this.s.listenKeys = a.join('');
-		}
-	},
-
-	/**
-	 * Resolve a button configuration
-	 * @param  {string|function|object} conf Button config to resolve
-	 * @return {object} Button configuration
-	 * @private
-	 */
-	_resolveExtends: function ( conf )
-	{
-		var dt = this.s.dt;
-		var i, ien;
-		var toConfObject = function ( base ) {
-			var loop = 0;
-
-			// Loop until we have resolved to a button configuration, or an
-			// array of button configurations (which will be iterated
-			// separately)
-			while ( ! $.isPlainObject(base) && ! $.isArray(base) ) {
-				if ( base === undefined ) {
-					return;
-				}
-
-				if ( typeof base === 'function' ) {
-					base = base( dt, conf );
-
-					if ( ! base ) {
-						return false;
-					}
-				}
-				else if ( typeof base === 'string' ) {
-					if ( ! _dtButtons[ base ] ) {
-						throw 'Unknown button type: '+base;
-					}
-
-					base = _dtButtons[ base ];
-				}
-
-				loop++;
-				if ( loop > 30 ) {
-					// Protect against misconfiguration killing the browser
-					throw 'Buttons: Too many iterations';
-				}
-			}
-
-			return $.isArray( base ) ?
-				base :
-				$.extend( {}, base );
-		};
-
-		conf = toConfObject( conf );
-
-		while ( conf && conf.extend ) {
-			// Use `toConfObject` in case the button definition being extended
-			// is itself a string or a function
-			if ( ! _dtButtons[ conf.extend ] ) {
-				throw 'Cannot extend unknown button type: '+conf.extend;
-			}
-
-			var objArray = toConfObject( _dtButtons[ conf.extend ] );
-			if ( $.isArray( objArray ) ) {
-				return objArray;
-			}
-			else if ( ! objArray ) {
-				// This is a little brutal as it might be possible to have a
-				// valid button without the extend, but if there is no extend
-				// then the host button would be acting in an undefined state
-				return false;
-			}
-
-			// Stash the current class name
-			var originalClassName = objArray.className;
-
-			conf = $.extend( {}, objArray, conf );
-
-			// The extend will have overwritten the original class name if the
-			// `conf` object also assigned a class, but we want to concatenate
-			// them so they are list that is combined from all extended buttons
-			if ( originalClassName && conf.className !== originalClassName ) {
-				conf.className = originalClassName+' '+conf.className;
-			}
-
-			// Buttons to be added to a collection  -gives the ability to define
-			// if buttons should be added to the start or end of a collection
-			var postfixButtons = conf.postfixButtons;
-			if ( postfixButtons ) {
-				if ( ! conf.buttons ) {
-					conf.buttons = [];
-				}
-
-				for ( i=0, ien=postfixButtons.length ; i<ien ; i++ ) {
-					conf.buttons.push( postfixButtons[i] );
-				}
-
-				conf.postfixButtons = null;
-			}
-
-			var prefixButtons = conf.prefixButtons;
-			if ( prefixButtons ) {
-				if ( ! conf.buttons ) {
-					conf.buttons = [];
-				}
-
-				for ( i=0, ien=prefixButtons.length ; i<ien ; i++ ) {
-					conf.buttons.splice( i, 0, prefixButtons[i] );
-				}
-
-				conf.prefixButtons = null;
-			}
-
-			// Although we want the `conf` object to overwrite almost all of
-			// the properties of the object being extended, the `extend`
-			// property should come from the object being extended
-			conf.extend = objArray.extend;
-		}
-
-		return conf;
-	},
-
-	/**
-	 * Display (and replace if there is an existing one) a popover attached to a button
-	 * @param {string|node} content Content to show
-	 * @param {DataTable.Api} hostButton DT API instance of the button
-	 * @param {object} inOpts Options (see object below for all options)
-	 */
-	_popover: function ( content, hostButton, inOpts ) {
-		var dt = hostButton;
-		var buttonsSettings = this.c;
-		var options = $.extend( {
-			align: 'button-left', // button-right, dt-container
-			autoClose: false,
-			background: true,
-			backgroundClassName: 'dt-button-background',
-			contentClassName: buttonsSettings.dom.collection.className,
-			collectionLayout: '',
-			collectionTitle: '',
-			dropup: false,
-			fade: 400,
-			rightAlignClassName: 'dt-button-right',
-			tag: buttonsSettings.dom.collection.tag
-		}, inOpts );
-		var hostNode = hostButton.node();
-
-		var close = function () {
-			_fadeOut(
-				$('.dt-button-collection'),
-				options.fade,
-				function () {
-					$(this).detach();
-				}
-			);
-
-			$(dt.buttons( '[aria-haspopup="true"][aria-expanded="true"]' ).nodes())
-				.attr('aria-expanded', 'false');
-
-			$('div.dt-button-background').off( 'click.dtb-collection' );
-			Buttons.background( false, options.backgroundClassName, options.fade, hostNode );
-
-			$('body').off( '.dtb-collection' );
-			dt.off( 'buttons-action.b-internal' );
-		};
-
-		if (content === false) {
-			close();
-		}
-
-		var existingExpanded = $(dt.buttons( '[aria-haspopup="true"][aria-expanded="true"]' ).nodes());
-		if ( existingExpanded.length ) {
-			hostNode = existingExpanded.eq(0);
-
-			close();
-		}
-
-		var display = $('<div/>')
-			.addClass('dt-button-collection')
-			.addClass(options.collectionLayout)
-			.css('display', 'none');
-
-		content = $(content)
-			.addClass(options.contentClassName)
-			.attr('role', 'menu')
-			.appendTo(display);
-
-		hostNode.attr( 'aria-expanded', 'true' );
-
-		if ( hostNode.parents('body')[0] !== document.body ) {
-			hostNode = document.body.lastChild;
-		}
-
-		if ( options.collectionTitle ) {
-			display.prepend('<div class="dt-button-collection-title">'+options.collectionTitle+'</div>');
-		}
-
-		_fadeIn( display.insertAfter( hostNode ) );
-
-		var tableContainer = $( hostButton.table().container() );
-		var position = display.css( 'position' );
-
-		if ( options.align === 'dt-container' ) {
-			hostNode = hostNode.parent();
-			display.css('width', tableContainer.width());
-		}
-
-		if ( position === 'absolute' ) {
-
-			var hostPosition = hostNode.position();
-
-			display.css( {
-				top: hostPosition.top + hostNode.outerHeight(),
-				left: hostPosition.left
-			} );
-
-			// calculate overflow when positioned beneath
-			var collectionHeight = display.outerHeight();
-			var collectionWidth = display.outerWidth();
-			var tableBottom = tableContainer.offset().top + tableContainer.height();
-			var listBottom = hostPosition.top + hostNode.outerHeight() + collectionHeight;
-			var bottomOverflow = listBottom - tableBottom;
-
-			// calculate overflow when positioned above
-			var listTop = hostPosition.top - collectionHeight;
-			var tableTop = tableContainer.offset().top;
-			var topOverflow = tableTop - listTop;
-
-			// if bottom overflow is larger, move to the top because it fits better, or if dropup is requested
-			var moveTop = hostPosition.top - collectionHeight - 5;
-			if ( (bottomOverflow > topOverflow || options.dropup) && -moveTop < tableTop ) {
-				display.css( 'top', moveTop);
-			}
-
-			// Get the size of the container (left and width - and thus also right)
-			var tableLeft = tableContainer.offset().left;
-			var tableWidth = tableContainer.width();
-			var tableRight = tableLeft + tableWidth;
-
-			// Get the size of the popover (left and width - and ...)
-			var popoverLeft = display.offset().left;
-			var popoverWidth = display.width();
-			var popoverRight = popoverLeft + popoverWidth;
-
-			// Get the size of the host buttons (left and width - and ...)
-			var buttonsLeft = hostNode.offset().left;
-			var buttonsWidth = hostNode.outerWidth()
-			var buttonsRight = buttonsLeft + buttonsWidth;
-			
-			// You've then got all the numbers you need to do some calculations and if statements,
-			//  so we can do some quick JS maths and apply it only once
-			// If it has the right align class OR the buttons are right aligned,
-			//  then calculate left position for the popover to align the popover to the right hand
-			//  side of the button - check to see if the left of the popover is inside the table container.
-			// If not, move the popover so it is, but not more than it means that the popover is to the right of the table container
-			var popoverShuffle = 0;
-			if ( display.hasClass( options.rightAlignClassName ) || options.align === 'button-right' ) {
-				popoverShuffle = buttonsRight - popoverRight;
-				if(tableLeft > (popoverLeft + popoverShuffle)){
-					var leftGap = tableLeft - (popoverLeft + popoverShuffle);
-					var rightGap = tableRight - (popoverRight + popoverShuffle);
-	
-					if(leftGap > rightGap){
-						popoverShuffle += rightGap; 
-					}
-					else {
-						popoverShuffle += leftGap;
-					}
-				}
-			}
-			// else attempt to left align the popover to the button. Similar to above, if the popover's right goes past the table container's right,
-			//  then move it back, but not so much that it goes past the left of the table container
-			else {
-				popoverShuffle = tableLeft - popoverLeft;
-
-				if(tableRight < (popoverRight + popoverShuffle)){
-					var leftGap = tableLeft - (popoverLeft + popoverShuffle);
-					var rightGap = tableRight - (popoverRight + popoverShuffle);
-
-					if(leftGap > rightGap ){
-						popoverShuffle += rightGap;
-					}
-					else {
-						popoverShuffle += leftGap;
-					}
-
-				}
-			}
-
-			display.css('left', display.position().left + popoverShuffle);
-			
-		}
-		else {
-			// Fix position - centre on screen
-			var top = display.height() / 2;
-			if ( top > $(window).height() / 2 ) {
-				top = $(window).height() / 2;
-			}
-
-			display.css( 'marginTop', top*-1 );
-		}
-
-		if ( options.background ) {
-			Buttons.background( true, options.backgroundClassName, options.fade, hostNode );
-		}
-
-		// This is bonkers, but if we don't have a click listener on the
-		// background element, iOS Safari will ignore the body click
-		// listener below. An empty function here is all that is
-		// required to make it work...
-		$('div.dt-button-background').on( 'click.dtb-collection', function () {} );
-
-		$('body')
-			.on( 'click.dtb-collection', function (e) {
-				// andSelf is deprecated in jQ1.8, but we want 1.7 compat
-				var back = $.fn.addBack ? 'addBack' : 'andSelf';
-
-				if ( ! $(e.target).parents()[back]().filter( content ).length ) {
-					close();
-				}
-			} )
-			.on( 'keyup.dtb-collection', function (e) {
-				if ( e.keyCode === 27 ) {
-					close();
-				}
-			} );
-
-		if ( options.autoClose ) {
-			setTimeout( function () {
-				dt.on( 'buttons-action.b-internal', function (e, btn, dt, node) {
-					if ( node[0] === hostNode[0] ) {
-						return;
-					}
-					close();
-				} );
-			}, 0);
-		}
-
-		$(display).trigger('buttons-popover.dt');
-	}
-} );
-
-
-
-/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- * Statics
- */
-
-/**
- * Show / hide a background layer behind a collection
- * @param  {boolean} Flag to indicate if the background should be shown or
- *   hidden 
- * @param  {string} Class to assign to the background
- * @static
- */
-Buttons.background = function ( show, className, fade, insertPoint ) {
-	if ( fade === undefined ) {
-		fade = 400;
-	}
-	if ( ! insertPoint ) {
-		insertPoint = document.body;
-	}
-
-	if ( show ) {
-		_fadeIn(
-			$('<div/>')
-				.addClass( className )
-				.css( 'display', 'none' )
-				.insertAfter( insertPoint ),
-			fade
-		);
-	}
-	else {
-		_fadeOut(
-			$('div.'+className),
-			fade,
-			function () {
-				$(this)
-					.removeClass( className )
-					.remove();
-			}
-		);
-	}
-};
-
-/**
- * Instance selector - select Buttons instances based on an instance selector
- * value from the buttons assigned to a DataTable. This is only useful if
- * multiple instances are attached to a DataTable.
- * @param  {string|int|array} Instance selector - see `instance-selector`
- *   documentation on the DataTables site
- * @param  {array} Button instance array that was attached to the DataTables
- *   settings object
- * @return {array} Buttons instances
- * @static
- */
-Buttons.instanceSelector = function ( group, buttons )
-{
-	if ( group === undefined || group === null ) {
-		return $.map( buttons, function ( v ) {
-			return v.inst;
-		} );
-	}
-
-	var ret = [];
-	var names = $.map( buttons, function ( v ) {
-		return v.name;
-	} );
-
-	// Flatten the group selector into an array of single options
-	var process = function ( input ) {
-		if ( $.isArray( input ) ) {
-			for ( var i=0, ien=input.length ; i<ien ; i++ ) {
-				process( input[i] );
-			}
-			return;
-		}
-
-		if ( typeof input === 'string' ) {
-			if ( input.indexOf( ',' ) !== -1 ) {
-				// String selector, list of names
-				process( input.split(',') );
-			}
-			else {
-				// String selector individual name
-				var idx = $.inArray( $.trim(input), names );
-
-				if ( idx !== -1 ) {
-					ret.push( buttons[ idx ].inst );
-				}
-			}
-		}
-		else if ( typeof input === 'number' ) {
-			// Index selector
-			ret.push( buttons[ input ].inst );
-		}
-	};
-	
-	process( group );
-
-	return ret;
-};
-
-/**
- * Button selector - select one or more buttons from a selector input so some
- * operation can be performed on them.
- * @param  {array} Button instances array that the selector should operate on
- * @param  {string|int|node|jQuery|array} Button selector - see
- *   `button-selector` documentation on the DataTables site
- * @return {array} Array of objects containing `inst` and `idx` properties of
- *   the selected buttons so you know which instance each button belongs to.
- * @static
- */
-Buttons.buttonSelector = function ( insts, selector )
-{
-	var ret = [];
-	var nodeBuilder = function ( a, buttons, baseIdx ) {
-		var button;
-		var idx;
-
-		for ( var i=0, ien=buttons.length ; i<ien ; i++ ) {
-			button = buttons[i];
-
-			if ( button ) {
-				idx = baseIdx !== undefined ?
-					baseIdx+i :
-					i+'';
-
-				a.push( {
-					node: button.node,
-					name: button.conf.name,
-					idx:  idx
-				} );
-
-				if ( button.buttons ) {
-					nodeBuilder( a, button.buttons, idx+'-' );
-				}
-			}
-		}
-	};
-
-	var run = function ( selector, inst ) {
-		var i, ien;
-		var buttons = [];
-		nodeBuilder( buttons, inst.s.buttons );
-
-		var nodes = $.map( buttons, function (v) {
-			return v.node;
-		} );
-
-		if ( $.isArray( selector ) || selector instanceof $ ) {
-			for ( i=0, ien=selector.length ; i<ien ; i++ ) {
-				run( selector[i], inst );
-			}
-			return;
-		}
-
-		if ( selector === null || selector === undefined || selector === '*' ) {
-			// Select all
-			for ( i=0, ien=buttons.length ; i<ien ; i++ ) {
-				ret.push( {
-					inst: inst,
-					node: buttons[i].node
-				} );
-			}
-		}
-		else if ( typeof selector === 'number' ) {
-			// Main button index selector
-			ret.push( {
-				inst: inst,
-				node: inst.s.buttons[ selector ].node
-			} );
-		}
-		else if ( typeof selector === 'string' ) {
-			if ( selector.indexOf( ',' ) !== -1 ) {
-				// Split
-				var a = selector.split(',');
-
-				for ( i=0, ien=a.length ; i<ien ; i++ ) {
-					run( $.trim(a[i]), inst );
-				}
-			}
-			else if ( selector.match( /^\d+(\-\d+)*$/ ) ) {
-				// Sub-button index selector
-				var indexes = $.map( buttons, function (v) {
-					return v.idx;
-				} );
-
-				ret.push( {
-					inst: inst,
-					node: buttons[ $.inArray( selector, indexes ) ].node
-				} );
-			}
-			else if ( selector.indexOf( ':name' ) !== -1 ) {
-				// Button name selector
-				var name = selector.replace( ':name', '' );
-
-				for ( i=0, ien=buttons.length ; i<ien ; i++ ) {
-					if ( buttons[i].name === name ) {
-						ret.push( {
-							inst: inst,
-							node: buttons[i].node
-						} );
-					}
-				}
-			}
-			else {
-				// jQuery selector on the nodes
-				$( nodes ).filter( selector ).each( function () {
-					ret.push( {
-						inst: inst,
-						node: this
-					} );
-				} );
-			}
-		}
-		else if ( typeof selector === 'object' && selector.nodeName ) {
-			// Node selector
-			var idx = $.inArray( selector, nodes );
-
-			if ( idx !== -1 ) {
-				ret.push( {
-					inst: inst,
-					node: nodes[ idx ]
-				} );
-			}
-		}
-	};
-
-
-	for ( var i=0, ien=insts.length ; i<ien ; i++ ) {
-		var inst = insts[i];
-
-		run( selector, inst );
-	}
-
-	return ret;
-};
-
-
-/**
- * Buttons defaults. For full documentation, please refer to the docs/option
- * directory or the DataTables site.
- * @type {Object}
- * @static
- */
-Buttons.defaults = {
-	buttons: [ 'copy', 'excel', 'csv', 'pdf', 'print' ],
-	name: 'main',
-	tabIndex: 0,
-	dom: {
-		container: {
-			tag: 'div',
-			className: 'dt-buttons'
-		},
-		collection: {
-			tag: 'div',
-			className: ''
-		},
-		button: {
-			// Flash buttons will not work with `<button>` in IE - it has to be `<a>`
-			tag: 'ActiveXObject' in window ?
-				'a' :
-				'button',
-			className: 'dt-button',
-			active: 'active',
-			disabled: 'disabled'
-		},
-		buttonLiner: {
-			tag: 'span',
-			className: ''
-		}
-	}
-};
-
-/**
- * Version information
- * @type {string}
- * @static
- */
-Buttons.version = '1.6.2';
-
-
-$.extend( _dtButtons, {
-	collection: {
-		text: function ( dt ) {
-			return dt.i18n( 'buttons.collection', 'Collection' );
-		},
-		className: 'buttons-collection',
-		init: function ( dt, button, config ) {
-			button.attr( 'aria-expanded', false );
-		},
-		action: function ( e, dt, button, config ) {
-			e.stopPropagation();
-
-			if ( config._collection.parents('body').length ) {
-				this.popover(false, config);
-			}
-			else {
-				this.popover(config._collection, config);
-			}
-		},
-		attr: {
-			'aria-haspopup': true
-		}
-		// Also the popover options, defined in Buttons.popover
-	},
-	copy: function ( dt, conf ) {
-		if ( _dtButtons.copyHtml5 ) {
-			return 'copyHtml5';
-		}
-		if ( _dtButtons.copyFlash && _dtButtons.copyFlash.available( dt, conf ) ) {
-			return 'copyFlash';
-		}
-	},
-	csv: function ( dt, conf ) {
-		// Common option that will use the HTML5 or Flash export buttons
-		if ( _dtButtons.csvHtml5 && _dtButtons.csvHtml5.available( dt, conf ) ) {
-			return 'csvHtml5';
-		}
-		if ( _dtButtons.csvFlash && _dtButtons.csvFlash.available( dt, conf ) ) {
-			return 'csvFlash';
-		}
-	},
-	excel: function ( dt, conf ) {
-		// Common option that will use the HTML5 or Flash export buttons
-		if ( _dtButtons.excelHtml5 && _dtButtons.excelHtml5.available( dt, conf ) ) {
-			return 'excelHtml5';
-		}
-		if ( _dtButtons.excelFlash && _dtButtons.excelFlash.available( dt, conf ) ) {
-			return 'excelFlash';
-		}
-	},
-	pdf: function ( dt, conf ) {
-		// Common option that will use the HTML5 or Flash export buttons
-		if ( _dtButtons.pdfHtml5 && _dtButtons.pdfHtml5.available( dt, conf ) ) {
-			return 'pdfHtml5';
-		}
-		if ( _dtButtons.pdfFlash && _dtButtons.pdfFlash.available( dt, conf ) ) {
-			return 'pdfFlash';
-		}
-	},
-	pageLength: function ( dt ) {
-		var lengthMenu = dt.settings()[0].aLengthMenu;
-		var vals = $.isArray( lengthMenu[0] ) ? lengthMenu[0] : lengthMenu;
-		var lang = $.isArray( lengthMenu[0] ) ? lengthMenu[1] : lengthMenu;
-		var text = function ( dt ) {
-			return dt.i18n( 'buttons.pageLength', {
-				"-1": 'Show all rows',
-				_:    'Show %d rows'
-			}, dt.page.len() );
-		};
-
-		return {
-			extend: 'collection',
-			text: text,
-			className: 'buttons-page-length',
-			autoClose: true,
-			buttons: $.map( vals, function ( val, i ) {
-				return {
-					text: lang[i],
-					className: 'button-page-length',
-					action: function ( e, dt ) {
-						dt.page.len( val ).draw();
-					},
-					init: function ( dt, node, conf ) {
-						var that = this;
-						var fn = function () {
-							that.active( dt.page.len() === val );
-						};
-
-						dt.on( 'length.dt'+conf.namespace, fn );
-						fn();
-					},
-					destroy: function ( dt, node, conf ) {
-						dt.off( 'length.dt'+conf.namespace );
-					}
-				};
-			} ),
-			init: function ( dt, node, conf ) {
-				var that = this;
-				dt.on( 'length.dt'+conf.namespace, function () {
-					that.text( conf.text );
-				} );
-			},
-			destroy: function ( dt, node, conf ) {
-				dt.off( 'length.dt'+conf.namespace );
-			}
-		};
-	}
-} );
-
-
-/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- * DataTables API
- *
- * For complete documentation, please refer to the docs/api directory or the
- * DataTables site
- */
-
-// Buttons group and individual button selector
-DataTable.Api.register( 'buttons()', function ( group, selector ) {
-	// Argument shifting
-	if ( selector === undefined ) {
-		selector = group;
-		group = undefined;
-	}
-
-	this.selector.buttonGroup = group;
-
-	var res = this.iterator( true, 'table', function ( ctx ) {
-		if ( ctx._buttons ) {
-			return Buttons.buttonSelector(
-				Buttons.instanceSelector( group, ctx._buttons ),
-				selector
-			);
-		}
-	}, true );
-
-	res._groupSelector = group;
-	return res;
-} );
-
-// Individual button selector
-DataTable.Api.register( 'button()', function ( group, selector ) {
-	// just run buttons() and truncate
-	var buttons = this.buttons( group, selector );
-
-	if ( buttons.length > 1 ) {
-		buttons.splice( 1, buttons.length );
-	}
-
-	return buttons;
-} );
-
-// Active buttons
-DataTable.Api.registerPlural( 'buttons().active()', 'button().active()', function ( flag ) {
-	if ( flag === undefined ) {
-		return this.map( function ( set ) {
-			return set.inst.active( set.node );
-		} );
-	}
-
-	return this.each( function ( set ) {
-		set.inst.active( set.node, flag );
-	} );
-} );
-
-// Get / set button action
-DataTable.Api.registerPlural( 'buttons().action()', 'button().action()', function ( action ) {
-	if ( action === undefined ) {
-		return this.map( function ( set ) {
-			return set.inst.action( set.node );
-		} );
-	}
-
-	return this.each( function ( set ) {
-		set.inst.action( set.node, action );
-	} );
-} );
-
-// Enable / disable buttons
-DataTable.Api.register( ['buttons().enable()', 'button().enable()'], function ( flag ) {
-	return this.each( function ( set ) {
-		set.inst.enable( set.node, flag );
-	} );
-} );
-
-// Disable buttons
-DataTable.Api.register( ['buttons().disable()', 'button().disable()'], function () {
-	return this.each( function ( set ) {
-		set.inst.disable( set.node );
-	} );
-} );
-
-// Get button nodes
-DataTable.Api.registerPlural( 'buttons().nodes()', 'button().node()', function () {
-	var jq = $();
-
-	// jQuery will automatically reduce duplicates to a single entry
-	$( this.each( function ( set ) {
-		jq = jq.add( set.inst.node( set.node ) );
-	} ) );
-
-	return jq;
-} );
-
-// Get / set button processing state
-DataTable.Api.registerPlural( 'buttons().processing()', 'button().processing()', function ( flag ) {
-	if ( flag === undefined ) {
-		return this.map( function ( set ) {
-			return set.inst.processing( set.node );
-		} );
-	}
-
-	return this.each( function ( set ) {
-		set.inst.processing( set.node, flag );
-	} );
-} );
-
-// Get / set button text (i.e. the button labels)
-DataTable.Api.registerPlural( 'buttons().text()', 'button().text()', function ( label ) {
-	if ( label === undefined ) {
-		return this.map( function ( set ) {
-			return set.inst.text( set.node );
-		} );
-	}
-
-	return this.each( function ( set ) {
-		set.inst.text( set.node, label );
-	} );
-} );
-
-// Trigger a button's action
-DataTable.Api.registerPlural( 'buttons().trigger()', 'button().trigger()', function () {
-	return this.each( function ( set ) {
-		set.inst.node( set.node ).trigger( 'click' );
-	} );
-} );
-
-// Button resolver to the popover
-DataTable.Api.register( 'button().popover()', function (content, options) {
-	return this.map( function ( set ) {
-		return set.inst._popover( content, this.button(this[0].node), options );
-	} );
-} );
-
-// Get the container elements
-DataTable.Api.register( 'buttons().containers()', function () {
-	var jq = $();
-	var groupSelector = this._groupSelector;
-
-	// We need to use the group selector directly, since if there are no buttons
-	// the result set will be empty
-	this.iterator( true, 'table', function ( ctx ) {
-		if ( ctx._buttons ) {
-			var insts = Buttons.instanceSelector( groupSelector, ctx._buttons );
-
-			for ( var i=0, ien=insts.length ; i<ien ; i++ ) {
-				jq = jq.add( insts[i].container() );
-			}
-		}
-	} );
-
-	return jq;
-} );
-
-DataTable.Api.register( 'buttons().container()', function () {
-	// API level of nesting is `buttons()` so we can zip into the containers method
-	return this.containers().eq(0);
-} );
-
-// Add a new button
-DataTable.Api.register( 'button().add()', function ( idx, conf ) {
-	var ctx = this.context;
-
-	// Don't use `this` as it could be empty - select the instances directly
-	if ( ctx.length ) {
-		var inst = Buttons.instanceSelector( this._groupSelector, ctx[0]._buttons );
-
-		if ( inst.length ) {
-			inst[0].add( conf, idx );
-		}
-	}
-
-	return this.button( this._groupSelector, idx );
-} );
-
-// Destroy the button sets selected
-DataTable.Api.register( 'buttons().destroy()', function () {
-	this.pluck( 'inst' ).unique().each( function ( inst ) {
-		inst.destroy();
-	} );
-
-	return this;
-} );
-
-// Remove a button
-DataTable.Api.registerPlural( 'buttons().remove()', 'buttons().remove()', function () {
-	this.each( function ( set ) {
-		set.inst.remove( set.node );
-	} );
-
-	return this;
-} );
-
-// Information box that can be used by buttons
-var _infoTimer;
-DataTable.Api.register( 'buttons.info()', function ( title, message, time ) {
-	var that = this;
-
-	if ( title === false ) {
-		this.off('destroy.btn-info');
-		_fadeOut(
-			$('#datatables_buttons_info'),
-			400,
-			function () {
-				$(this).remove();
-			}
-		);
-		clearTimeout( _infoTimer );
-		_infoTimer = null;
-
-		return this;
-	}
-
-	if ( _infoTimer ) {
-		clearTimeout( _infoTimer );
-	}
-
-	if ( $('#datatables_buttons_info').length ) {
-		$('#datatables_buttons_info').remove();
-	}
-
-	title = title ? '<h2>'+title+'</h2>' : '';
-
-	_fadeIn(
-		$('<div id="datatables_buttons_info" class="dt-button-info"/>')
-			.html( title )
-			.append( $('<div/>')[ typeof message === 'string' ? 'html' : 'append' ]( message ) )
-			.css( 'display', 'none' )
-			.appendTo( 'body' )
-	);
-
-	if ( time !== undefined && time !== 0 ) {
-		_infoTimer = setTimeout( function () {
-			that.buttons.info( false );
-		}, time );
-	}
-
-	this.on('destroy.btn-info', function () {
-		that.buttons.info(false);
-	});
-
-	return this;
-} );
-
-// Get data from the table for export - this is common to a number of plug-in
-// buttons so it is included in the Buttons core library
-DataTable.Api.register( 'buttons.exportData()', function ( options ) {
-	if ( this.context.length ) {
-		return _exportData( new DataTable.Api( this.context[0] ), options );
-	}
-} );
-
-// Get information about the export that is common to many of the export data
-// types (DRY)
-DataTable.Api.register( 'buttons.exportInfo()', function ( conf ) {
-	if ( ! conf ) {
-		conf = {};
-	}
-
-	return {
-		filename: _filename( conf ),
-		title: _title( conf ),
-		messageTop: _message(this, conf.message || conf.messageTop, 'top'),
-		messageBottom: _message(this, conf.messageBottom, 'bottom')
-	};
-} );
-
-
-
-/**
- * Get the file name for an exported file.
- *
- * @param {object}	config Button configuration
- * @param {boolean} incExtension Include the file name extension
- */
-var _filename = function ( config )
-{
-	// Backwards compatibility
-	var filename = config.filename === '*' && config.title !== '*' && config.title !== undefined && config.title !== null && config.title !== '' ?
-		config.title :
-		config.filename;
-
-	if ( typeof filename === 'function' ) {
-		filename = filename();
-	}
-
-	if ( filename === undefined || filename === null ) {
-		return null;
-	}
-
-	if ( filename.indexOf( '*' ) !== -1 ) {
-		filename = $.trim( filename.replace( '*', $('head > title').text() ) );
-	}
-
-	// Strip characters which the OS will object to
-	filename = filename.replace(/[^a-zA-Z0-9_\u00A1-\uFFFF\.,\-_ !\(\)]/g, "");
-
-	var extension = _stringOrFunction( config.extension );
-	if ( ! extension ) {
-		extension = '';
-	}
-
-	return filename + extension;
-};
-
-/**
- * Simply utility method to allow parameters to be given as a function
- *
- * @param {undefined|string|function} option Option
- * @return {null|string} Resolved value
- */
-var _stringOrFunction = function ( option )
-{
-	if ( option === null || option === undefined ) {
-		return null;
-	}
-	else if ( typeof option === 'function' ) {
-		return option();
-	}
-	return option;
-};
-
-/**
- * Get the title for an exported file.
- *
- * @param {object} config	Button configuration
- */
-var _title = function ( config )
-{
-	var title = _stringOrFunction( config.title );
-
-	return title === null ?
-		null : title.indexOf( '*' ) !== -1 ?
-			title.replace( '*', $('head > title').text() || 'Exported data' ) :
-			title;
-};
-
-var _message = function ( dt, option, position )
-{
-	var message = _stringOrFunction( option );
-	if ( message === null ) {
-		return null;
-	}
-
-	var caption = $('caption', dt.table().container()).eq(0);
-	if ( message === '*' ) {
-		var side = caption.css( 'caption-side' );
-		if ( side !== position ) {
-			return null;
-		}
-
-		return caption.length ?
-			caption.text() :
-			'';
-	}
-
-	return message;
-};
-
-
-
-
-
-
-
-var _exportTextarea = $('<textarea/>')[0];
-var _exportData = function ( dt, inOpts )
-{
-	var config = $.extend( true, {}, {
-		rows:           null,
-		columns:        '',
-		modifier:       {
-			search: 'applied',
-			order:  'applied'
-		},
-		orthogonal:     'display',
-		stripHtml:      true,
-		stripNewlines:  true,
-		decodeEntities: true,
-		trim:           true,
-		format:         {
-			header: function ( d ) {
-				return strip( d );
-			},
-			footer: function ( d ) {
-				return strip( d );
-			},
-			body: function ( d ) {
-				return strip( d );
-			}
-		},
-		customizeData: null
-	}, inOpts );
-
-	var strip = function ( str ) {
-		if ( typeof str !== 'string' ) {
-			return str;
-		}
-
-		// Always remove script tags
-		str = str.replace( /<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi, '' );
-
-		// Always remove comments
-		str = str.replace( /<!\-\-.*?\-\->/g, '' );
-
-		if ( config.stripHtml ) {
-			str = str.replace( /<[^>]*>/g, '' );
-		}
-
-		if ( config.trim ) {
-			str = str.replace( /^\s+|\s+$/g, '' );
-		}
-
-		if ( config.stripNewlines ) {
-			str = str.replace( /\n/g, ' ' );
-		}
-
-		if ( config.decodeEntities ) {
-			_exportTextarea.innerHTML = str;
-			str = _exportTextarea.value;
-		}
-
-		return str;
-	};
-
-
-	var header = dt.columns( config.columns ).indexes().map( function (idx) {
-		var el = dt.column( idx ).header();
-		return config.format.header( el.innerHTML, idx, el );
-	} ).toArray();
-
-	var footer = dt.table().footer() ?
-		dt.columns( config.columns ).indexes().map( function (idx) {
-			var el = dt.column( idx ).footer();
-			return config.format.footer( el ? el.innerHTML : '', idx, el );
-		} ).toArray() :
-		null;
-	
-	// If Select is available on this table, and any rows are selected, limit the export
-	// to the selected rows. If no rows are selected, all rows will be exported. Specify
-	// a `selected` modifier to control directly.
-	var modifier = $.extend( {}, config.modifier );
-	if ( dt.select && typeof dt.select.info === 'function' && modifier.selected === undefined ) {
-		if ( dt.rows( config.rows, $.extend( { selected: true }, modifier ) ).any() ) {
-			$.extend( modifier, { selected: true } )
-		}
-	}
-
-	var rowIndexes = dt.rows( config.rows, modifier ).indexes().toArray();
-	var selectedCells = dt.cells( rowIndexes, config.columns );
-	var cells = selectedCells
-		.render( config.orthogonal )
-		.toArray();
-	var cellNodes = selectedCells
-		.nodes()
-		.toArray();
-
-	var columns = header.length;
-	var rows = columns > 0 ? cells.length / columns : 0;
-	var body = [];
-	var cellCounter = 0;
-
-	for ( var i=0, ien=rows ; i<ien ; i++ ) {
-		var row = [ columns ];
-
-		for ( var j=0 ; j<columns ; j++ ) {
-			row[j] = config.format.body( cells[ cellCounter ], i, j, cellNodes[ cellCounter ] );
-			cellCounter++;
-		}
-
-		body[i] = row;
-	}
-
-	var data = {
-		header: header,
-		footer: footer,
-		body:   body
-	};
-
-	if ( config.customizeData ) {
-		config.customizeData( data );
-	}
-
-	return data;
-};
-
-
-/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- * DataTables interface
- */
-
-// Attach to DataTables objects for global access
-$.fn.dataTable.Buttons = Buttons;
-$.fn.DataTable.Buttons = Buttons;
-
-
-
-// DataTables creation - check if the buttons have been defined for this table,
-// they will have been if the `B` option was used in `dom`, otherwise we should
-// create the buttons instance here so they can be inserted into the document
-// using the API. Listen for `init` for compatibility with pre 1.10.10, but to
-// be removed in future.
-$(document).on( 'init.dt plugin-init.dt', function (e, settings) {
-	if ( e.namespace !== 'dt' ) {
-		return;
-	}
-
-	var opts = settings.oInit.buttons || DataTable.defaults.buttons;
-
-	if ( opts && ! settings._buttons ) {
-		new Buttons( settings, opts ).container();
-	}
-} );
-
-function _init ( settings, options ) {
-	var api = new DataTable.Api( settings );
-	var opts = options
-		? options
-		: api.init().buttons || DataTable.defaults.buttons;
-
-	return new Buttons( api, opts ).container();
-}
-
-// DataTables `dom` feature option
-DataTable.ext.feature.push( {
-	fnInit: _init,
-	cFeature: "B"
-} );
-
-// DataTables 2 layout feature
-if ( DataTable.ext.features ) {
-	DataTable.ext.features.register( 'buttons', _init );
-}
-
-
-return Buttons;
-}));
-
-
-/*! Bootstrap integration for DataTables' Buttons
- * ©2016 SpryMedia Ltd - datatables.net/license
- */
-
-(function( factory ){
-	if ( typeof define === 'function' && define.amd ) {
-		// AMD
-		define( ['jquery', 'datatables.net-bs4', 'datatables.net-buttons'], function ( $ ) {
-			return factory( $, window, document );
-		} );
-	}
-	else if ( typeof exports === 'object' ) {
-		// CommonJS
-		module.exports = function (root, $) {
-			if ( ! root ) {
-				root = window;
-			}
-
-			if ( ! $ || ! $.fn.dataTable ) {
-				$ = require('datatables.net-bs4')(root, $).$;
-			}
-
-			if ( ! $.fn.dataTable.Buttons ) {
-				require('datatables.net-buttons')(root, $);
-			}
-
-			return factory( $, root, root.document );
-		};
-	}
-	else {
-		// Browser
-		factory( jQuery, window, document );
-	}
-}(function( $, window, document, undefined ) {
-'use strict';
-var DataTable = $.fn.dataTable;
-
-$.extend( true, DataTable.Buttons.defaults, {
-	dom: {
-		container: {
-			className: 'dt-buttons btn-group flex-wrap'
-		},
-		button: {
-			className: 'btn btn-secondary'
-		},
-		collection: {
-			tag: 'div',
-			className: 'dropdown-menu',
-			button: {
-				tag: 'a',
-				className: 'dt-button dropdown-item',
-				active: 'active',
-				disabled: 'disabled'
-			}
-		}
-	},
-	buttonCreated: function ( config, button ) {
-		return config.buttons ?
-			$('<div class="btn-group"/>').append(button) :
-			button;
-	}
-} );
-
-DataTable.ext.buttons.collection.className += ' dropdown-toggle';
-DataTable.ext.buttons.collection.rightAlignClassName = 'dropdown-menu-right';
-
-return DataTable.Buttons;
-}));
-
-
-/*! Responsive 2.2.5
- * 2014-2020 SpryMedia Ltd - datatables.net/license
- */
-
-/**
- * @summary     Responsive
- * @description Responsive tables plug-in for DataTables
- * @version     2.2.5
- * @file        dataTables.responsive.js
- * @author      SpryMedia Ltd (www.sprymedia.co.uk)
- * @contact     www.sprymedia.co.uk/contact
- * @copyright   Copyright 2014-2020 SpryMedia Ltd.
- *
- * This source file is free software, available under the following license:
- *   MIT license - http://datatables.net/license/mit
- *
- * This source file is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
- * or FITNESS FOR A PARTICULAR PURPOSE. See the license files for details.
- *
- * For details please refer to: http://www.datatables.net
- */
-(function( factory ){
-	if ( typeof define === 'function' && define.amd ) {
-		// AMD
-		define( ['jquery', 'datatables.net'], function ( $ ) {
-			return factory( $, window, document );
-		} );
-	}
-	else if ( typeof exports === 'object' ) {
-		// CommonJS
-		module.exports = function (root, $) {
-			if ( ! root ) {
-				root = window;
-			}
-
-			if ( ! $ || ! $.fn.dataTable ) {
-				$ = require('datatables.net')(root, $).$;
-			}
-
-			return factory( $, root, root.document );
-		};
-	}
-	else {
-		// Browser
-		factory( jQuery, window, document );
-	}
-}(function( $, window, document, undefined ) {
-'use strict';
-var DataTable = $.fn.dataTable;
-
-
-/**
- * Responsive is a plug-in for the DataTables library that makes use of
- * DataTables' ability to change the visibility of columns, changing the
- * visibility of columns so the displayed columns fit into the table container.
- * The end result is that complex tables will be dynamically adjusted to fit
- * into the viewport, be it on a desktop, tablet or mobile browser.
- *
- * Responsive for DataTables has two modes of operation, which can used
- * individually or combined:
- *
- * * Class name based control - columns assigned class names that match the
- *   breakpoint logic can be shown / hidden as required for each breakpoint.
- * * Automatic control - columns are automatically hidden when there is no
- *   room left to display them. Columns removed from the right.
- *
- * In additional to column visibility control, Responsive also has built into
- * options to use DataTables' child row display to show / hide the information
- * from the table that has been hidden. There are also two modes of operation
- * for this child row display:
- *
- * * Inline - when the control element that the user can use to show / hide
- *   child rows is displayed inside the first column of the table.
- * * Column - where a whole column is dedicated to be the show / hide control.
- *
- * Initialisation of Responsive is performed by:
- *
- * * Adding the class `responsive` or `dt-responsive` to the table. In this case
- *   Responsive will automatically be initialised with the default configuration
- *   options when the DataTable is created.
- * * Using the `responsive` option in the DataTables configuration options. This
- *   can also be used to specify the configuration options, or simply set to
- *   `true` to use the defaults.
- *
- *  @class
- *  @param {object} settings DataTables settings object for the host table
- *  @param {object} [opts] Configuration options
- *  @requires jQuery 1.7+
- *  @requires DataTables 1.10.3+
- *
- *  @example
- *      $('#example').DataTable( {
- *        responsive: true
- *      } );
- *    } );
- */
-var Responsive = function ( settings, opts ) {
-	// Sanity check that we are using DataTables 1.10 or newer
-	if ( ! DataTable.versionCheck || ! DataTable.versionCheck( '1.10.10' ) ) {
-		throw 'DataTables Responsive requires DataTables 1.10.10 or newer';
-	}
-
-	this.s = {
-		dt: new DataTable.Api( settings ),
-		columns: [],
-		current: []
-	};
-
-	// Check if responsive has already been initialised on this table
-	if ( this.s.dt.settings()[0].responsive ) {
-		return;
-	}
-
-	// details is an object, but for simplicity the user can give it as a string
-	// or a boolean
-	if ( opts && typeof opts.details === 'string' ) {
-		opts.details = { type: opts.details };
-	}
-	else if ( opts && opts.details === false ) {
-		opts.details = { type: false };
-	}
-	else if ( opts && opts.details === true ) {
-		opts.details = { type: 'inline' };
-	}
-
-	this.c = $.extend( true, {}, Responsive.defaults, DataTable.defaults.responsive, opts );
-	settings.responsive = this;
-	this._constructor();
-};
-
-$.extend( Responsive.prototype, {
-	/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
-	 * Constructor
-	 */
-
-	/**
-	 * Initialise the Responsive instance
-	 *
-	 * @private
-	 */
-	_constructor: function ()
-	{
-		var that = this;
-		var dt = this.s.dt;
-		var dtPrivateSettings = dt.settings()[0];
-		var oldWindowWidth = $(window).innerWidth();
-
-		dt.settings()[0]._responsive = this;
-
-		// Use DataTables' throttle function to avoid processor thrashing on
-		// resize
-		$(window).on( 'resize.dtr orientationchange.dtr', DataTable.util.throttle( function () {
-			// iOS has a bug whereby resize can fire when only scrolling
-			// See: http://stackoverflow.com/questions/8898412
-			var width = $(window).innerWidth();
-
-			if ( width !== oldWindowWidth ) {
-				that._resize();
-				oldWindowWidth = width;
-			}
-		} ) );
-
-		// DataTables doesn't currently trigger an event when a row is added, so
-		// we need to hook into its private API to enforce the hidden rows when
-		// new data is added
-		dtPrivateSettings.oApi._fnCallbackReg( dtPrivateSettings, 'aoRowCreatedCallback', function (tr, data, idx) {
-			if ( $.inArray( false, that.s.current ) !== -1 ) {
-				$('>td, >th', tr).each( function ( i ) {
-					var idx = dt.column.index( 'toData', i );
-
-					if ( that.s.current[idx] === false ) {
-						$(this).css('display', 'none');
-					}
-				} );
-			}
-		} );
-
-		// Destroy event handler
-		dt.on( 'destroy.dtr', function () {
-			dt.off( '.dtr' );
-			$( dt.table().body() ).off( '.dtr' );
-			$(window).off( 'resize.dtr orientationchange.dtr' );
-			dt.cells('.dtr-control').nodes().to$().removeClass('dtr-control');
-
-			// Restore the columns that we've hidden
-			$.each( that.s.current, function ( i, val ) {
-				if ( val === false ) {
-					that._setColumnVis( i, true );
-				}
-			} );
-		} );
-
-		// Reorder the breakpoints array here in case they have been added out
-		// of order
-		this.c.breakpoints.sort( function (a, b) {
-			return a.width < b.width ? 1 :
-				a.width > b.width ? -1 : 0;
-		} );
-
-		this._classLogic();
-		this._resizeAuto();
-
-		// Details handler
-		var details = this.c.details;
-
-		if ( details.type !== false ) {
-			that._detailsInit();
-
-			// DataTables will trigger this event on every column it shows and
-			// hides individually
-			dt.on( 'column-visibility.dtr', function () {
-				// Use a small debounce to allow multiple columns to be set together
-				if ( that._timer ) {
-					clearTimeout( that._timer );
-				}
-
-				that._timer = setTimeout( function () {
-					that._timer = null;
-
-					that._classLogic();
-					that._resizeAuto();
-					that._resize();
-
-					that._redrawChildren();
-				}, 100 );
-			} );
-
-			// Redraw the details box on each draw which will happen if the data
-			// has changed. This is used until DataTables implements a native
-			// `updated` event for rows
-			dt.on( 'draw.dtr', function () {
-				that._redrawChildren();
-			} );
-
-			$(dt.table().node()).addClass( 'dtr-'+details.type );
-		}
-
-		dt.on( 'column-reorder.dtr', function (e, settings, details) {
-			that._classLogic();
-			that._resizeAuto();
-			that._resize(true);
-		} );
-
-		// Change in column sizes means we need to calc
-		dt.on( 'column-sizing.dtr', function () {
-			that._resizeAuto();
-			that._resize();
-		});
-
-		// On Ajax reload we want to reopen any child rows which are displayed
-		// by responsive
-		dt.on( 'preXhr.dtr', function () {
-			var rowIds = [];
-			dt.rows().every( function () {
-				if ( this.child.isShown() ) {
-					rowIds.push( this.id(true) );
-				}
-			} );
-
-			dt.one( 'draw.dtr', function () {
-				that._resizeAuto();
-				that._resize();
-
-				dt.rows( rowIds ).every( function () {
-					that._detailsDisplay( this, false );
-				} );
-			} );
-		});
-
-		dt
-			.on( 'draw.dtr', function () {
-				that._controlClass();
-			})
-			.on( 'init.dtr', function (e, settings, details) {
-				if ( e.namespace !== 'dt' ) {
-					return;
-				}
-
-				that._resizeAuto();
-				that._resize();
-
-				// If columns were hidden, then DataTables needs to adjust the
-				// column sizing
-				if ( $.inArray( false, that.s.current ) ) {
-					dt.columns.adjust();
-				}
-			} );
-
-		// First pass - draw the table for the current viewport size
-		this._resize();
-	},
-
-
-	/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
-	 * Private methods
-	 */
-
-	/**
-	 * Calculate the visibility for the columns in a table for a given
-	 * breakpoint. The result is pre-determined based on the class logic if
-	 * class names are used to control all columns, but the width of the table
-	 * is also used if there are columns which are to be automatically shown
-	 * and hidden.
-	 *
-	 * @param  {string} breakpoint Breakpoint name to use for the calculation
-	 * @return {array} Array of boolean values initiating the visibility of each
-	 *   column.
-	 *  @private
-	 */
-	_columnsVisiblity: function ( breakpoint )
-	{
-		var dt = this.s.dt;
-		var columns = this.s.columns;
-		var i, ien;
-
-		// Create an array that defines the column ordering based first on the
-		// column's priority, and secondly the column index. This allows the
-		// columns to be removed from the right if the priority matches
-		var order = columns
-			.map( function ( col, idx ) {
-				return {
-					columnIdx: idx,
-					priority: col.priority
-				};
-			} )
-			.sort( function ( a, b ) {
-				if ( a.priority !== b.priority ) {
-					return a.priority - b.priority;
-				}
-				return a.columnIdx - b.columnIdx;
-			} );
-
-		// Class logic - determine which columns are in this breakpoint based
-		// on the classes. If no class control (i.e. `auto`) then `-` is used
-		// to indicate this to the rest of the function
-		var display = $.map( columns, function ( col, i ) {
-			if ( dt.column(i).visible() === false ) {
-				return 'not-visible';
-			}
-			return col.auto && col.minWidth === null ?
-				false :
-				col.auto === true ?
-					'-' :
-					$.inArray( breakpoint, col.includeIn ) !== -1;
-		} );
-
-		// Auto column control - first pass: how much width is taken by the
-		// ones that must be included from the non-auto columns
-		var requiredWidth = 0;
-		for ( i=0, ien=display.length ; i<ien ; i++ ) {
-			if ( display[i] === true ) {
-				requiredWidth += columns[i].minWidth;
-			}
-		}
-
-		// Second pass, use up any remaining width for other columns. For
-		// scrolling tables we need to subtract the width of the scrollbar. It
-		// may not be requires which makes this sub-optimal, but it would
-		// require another full redraw to make complete use of those extra few
-		// pixels
-		var scrolling = dt.settings()[0].oScroll;
-		var bar = scrolling.sY || scrolling.sX ? scrolling.iBarWidth : 0;
-		var widthAvailable = dt.table().container().offsetWidth - bar;
-		var usedWidth = widthAvailable - requiredWidth;
-
-		// Control column needs to always be included. This makes it sub-
-		// optimal in terms of using the available with, but to stop layout
-		// thrashing or overflow. Also we need to account for the control column
-		// width first so we know how much width is available for the other
-		// columns, since the control column might not be the first one shown
-		for ( i=0, ien=display.length ; i<ien ; i++ ) {
-			if ( columns[i].control ) {
-				usedWidth -= columns[i].minWidth;
-			}
-		}
-
-		// Allow columns to be shown (counting by priority and then right to
-		// left) until we run out of room
-		var empty = false;
-		for ( i=0, ien=order.length ; i<ien ; i++ ) {
-			var colIdx = order[i].columnIdx;
-
-			if ( display[colIdx] === '-' && ! columns[colIdx].control && columns[colIdx].minWidth ) {
-				// Once we've found a column that won't fit we don't let any
-				// others display either, or columns might disappear in the
-				// middle of the table
-				if ( empty || usedWidth - columns[colIdx].minWidth < 0 ) {
-					empty = true;
-					display[colIdx] = false;
-				}
-				else {
-					display[colIdx] = true;
-				}
-
-				usedWidth -= columns[colIdx].minWidth;
-			}
-		}
-
-		// Determine if the 'control' column should be shown (if there is one).
-		// This is the case when there is a hidden column (that is not the
-		// control column). The two loops look inefficient here, but they are
-		// trivial and will fly through. We need to know the outcome from the
-		// first , before the action in the second can be taken
-		var showControl = false;
-
-		for ( i=0, ien=columns.length ; i<ien ; i++ ) {
-			if ( ! columns[i].control && ! columns[i].never && display[i] === false ) {
-				showControl = true;
-				break;
-			}
-		}
-
-		for ( i=0, ien=columns.length ; i<ien ; i++ ) {
-			if ( columns[i].control ) {
-				display[i] = showControl;
-			}
-
-			// Replace not visible string with false from the control column detection above
-			if ( display[i] === 'not-visible' ) {
-				display[i] = false;
-			}
-		}
-
-		// Finally we need to make sure that there is at least one column that
-		// is visible
-		if ( $.inArray( true, display ) === -1 ) {
-			display[0] = true;
-		}
-
-		return display;
-	},
-
-
-	/**
-	 * Create the internal `columns` array with information about the columns
-	 * for the table. This includes determining which breakpoints the column
-	 * will appear in, based upon class names in the column, which makes up the
-	 * vast majority of this method.
-	 *
-	 * @private
-	 */
-	_classLogic: function ()
-	{
-		var that = this;
-		var calc = {};
-		var breakpoints = this.c.breakpoints;
-		var dt = this.s.dt;
-		var columns = dt.columns().eq(0).map( function (i) {
-			var column = this.column(i);
-			var className = column.header().className;
-			var priority = dt.settings()[0].aoColumns[i].responsivePriority;
-			var dataPriority = column.header().getAttribute('data-priority');
-
-			if ( priority === undefined ) {
-				priority = dataPriority === undefined || dataPriority === null?
-					10000 :
-					dataPriority * 1;
-			}
-
-			return {
-				className: className,
-				includeIn: [],
-				auto:      false,
-				control:   false,
-				never:     className.match(/\bnever\b/) ? true : false,
-				priority:  priority
-			};
-		} );
-
-		// Simply add a breakpoint to `includeIn` array, ensuring that there are
-		// no duplicates
-		var add = function ( colIdx, name ) {
-			var includeIn = columns[ colIdx ].includeIn;
-
-			if ( $.inArray( name, includeIn ) === -1 ) {
-				includeIn.push( name );
-			}
-		};
-
-		var column = function ( colIdx, name, operator, matched ) {
-			var size, i, ien;
-
-			if ( ! operator ) {
-				columns[ colIdx ].includeIn.push( name );
-			}
-			else if ( operator === 'max-' ) {
-				// Add this breakpoint and all smaller
-				size = that._find( name ).width;
-
-				for ( i=0, ien=breakpoints.length ; i<ien ; i++ ) {
-					if ( breakpoints[i].width <= size ) {
-						add( colIdx, breakpoints[i].name );
-					}
-				}
-			}
-			else if ( operator === 'min-' ) {
-				// Add this breakpoint and all larger
-				size = that._find( name ).width;
-
-				for ( i=0, ien=breakpoints.length ; i<ien ; i++ ) {
-					if ( breakpoints[i].width >= size ) {
-						add( colIdx, breakpoints[i].name );
-					}
-				}
-			}
-			else if ( operator === 'not-' ) {
-				// Add all but this breakpoint
-				for ( i=0, ien=breakpoints.length ; i<ien ; i++ ) {
-					if ( breakpoints[i].name.indexOf( matched ) === -1 ) {
-						add( colIdx, breakpoints[i].name );
-					}
-				}
-			}
-		};
-
-		// Loop over each column and determine if it has a responsive control
-		// class
-		columns.each( function ( col, i ) {
-			var classNames = col.className.split(' ');
-			var hasClass = false;
-
-			// Split the class name up so multiple rules can be applied if needed
-			for ( var k=0, ken=classNames.length ; k<ken ; k++ ) {
-				var className = $.trim( classNames[k] );
-
-				if ( className === 'all' ) {
-					// Include in all
-					hasClass = true;
-					col.includeIn = $.map( breakpoints, function (a) {
-						return a.name;
-					} );
-					return;
-				}
-				else if ( className === 'none' || col.never ) {
-					// Include in none (default) and no auto
-					hasClass = true;
-					return;
-				}
-				else if ( className === 'control' ) {
-					// Special column that is only visible, when one of the other
-					// columns is hidden. This is used for the details control
-					hasClass = true;
-					col.control = true;
-					return;
-				}
-
-				$.each( breakpoints, function ( j, breakpoint ) {
-					// Does this column have a class that matches this breakpoint?
-					var brokenPoint = breakpoint.name.split('-');
-					var re = new RegExp( '(min\\-|max\\-|not\\-)?('+brokenPoint[0]+')(\\-[_a-zA-Z0-9])?' );
-					var match = className.match( re );
-
-					if ( match ) {
-						hasClass = true;
-
-						if ( match[2] === brokenPoint[0] && match[3] === '-'+brokenPoint[1] ) {
-							// Class name matches breakpoint name fully
-							column( i, breakpoint.name, match[1], match[2]+match[3] );
-						}
-						else if ( match[2] === brokenPoint[0] && ! match[3] ) {
-							// Class name matched primary breakpoint name with no qualifier
-							column( i, breakpoint.name, match[1], match[2] );
-						}
-					}
-				} );
-			}
-
-			// If there was no control class, then automatic sizing is used
-			if ( ! hasClass ) {
-				col.auto = true;
-			}
-		} );
-
-		this.s.columns = columns;
-	},
-
-	/**
-	 * Update the cells to show the correct control class / button
-	 * @private
-	 */
-	_controlClass: function ()
-	{
-		if ( this.c.details.type === 'inline' ) {
-			var dt = this.s.dt;
-			var columnsVis = this.s.current;
-			var firstVisible = $.inArray(true, columnsVis);
-
-			// Remove from any cells which shouldn't have it
-			dt.cells(
-				null,
-				function(idx) {
-					return idx !== firstVisible;
-				},
-				{page: 'current'}
-			)
-				.nodes()
-				.to$()
-				.filter('.dtr-control')
-				.removeClass('dtr-control');
-
-			dt.cells(null, firstVisible, {page: 'current'})
-				.nodes()
-				.to$()
-				.addClass('dtr-control');
-		}
-	},
-
-	/**
-	 * Show the details for the child row
-	 *
-	 * @param  {DataTables.Api} row    API instance for the row
-	 * @param  {boolean}        update Update flag
-	 * @private
-	 */
-	_detailsDisplay: function ( row, update )
-	{
-		var that = this;
-		var dt = this.s.dt;
-		var details = this.c.details;
-
-		if ( details && details.type !== false ) {
-			var res = details.display( row, update, function () {
-				return details.renderer(
-					dt, row[0], that._detailsObj(row[0])
-				);
-			} );
-
-			if ( res === true || res === false ) {
-				$(dt.table().node()).triggerHandler( 'responsive-display.dt', [dt, row, res, update] );
-			}
-		}
-	},
-
-
-	/**
-	 * Initialisation for the details handler
-	 *
-	 * @private
-	 */
-	_detailsInit: function ()
-	{
-		var that    = this;
-		var dt      = this.s.dt;
-		var details = this.c.details;
-
-		// The inline type always uses the first child as the target
-		if ( details.type === 'inline' ) {
-			details.target = 'td.dtr-control, th.dtr-control';
-		}
-
-		// Keyboard accessibility
-		dt.on( 'draw.dtr', function () {
-			that._tabIndexes();
-		} );
-		that._tabIndexes(); // Initial draw has already happened
-
-		$( dt.table().body() ).on( 'keyup.dtr', 'td, th', function (e) {
-			if ( e.keyCode === 13 && $(this).data('dtr-keyboard') ) {
-				$(this).click();
-			}
-		} );
-
-		// type.target can be a string jQuery selector or a column index
-		var target   = details.target;
-		var selector = typeof target === 'string' ? target : 'td, th';
-
-		if ( target !== undefined || target !== null ) {
-			// Click handler to show / hide the details rows when they are available
-			$( dt.table().body() )
-				.on( 'click.dtr mousedown.dtr mouseup.dtr', selector, function (e) {
-					// If the table is not collapsed (i.e. there is no hidden columns)
-					// then take no action
-					if ( ! $(dt.table().node()).hasClass('collapsed' ) ) {
-						return;
-					}
-
-					// Check that the row is actually a DataTable's controlled node
-					if ( $.inArray( $(this).closest('tr').get(0), dt.rows().nodes().toArray() ) === -1 ) {
-						return;
-					}
-
-					// For column index, we determine if we should act or not in the
-					// handler - otherwise it is already okay
-					if ( typeof target === 'number' ) {
-						var targetIdx = target < 0 ?
-							dt.columns().eq(0).length + target :
-							target;
-
-						if ( dt.cell( this ).index().column !== targetIdx ) {
-							return;
-						}
-					}
-
-					// $().closest() includes itself in its check
-					var row = dt.row( $(this).closest('tr') );
-
-					// Check event type to do an action
-					if ( e.type === 'click' ) {
-						// The renderer is given as a function so the caller can execute it
-						// only when they need (i.e. if hiding there is no point is running
-						// the renderer)
-						that._detailsDisplay( row, false );
-					}
-					else if ( e.type === 'mousedown' ) {
-						// For mouse users, prevent the focus ring from showing
-						$(this).css('outline', 'none');
-					}
-					else if ( e.type === 'mouseup' ) {
-						// And then re-allow at the end of the click
-						$(this).trigger('blur').css('outline', '');
-					}
-				} );
-		}
-	},
-
-
-	/**
-	 * Get the details to pass to a renderer for a row
-	 * @param  {int} rowIdx Row index
-	 * @private
-	 */
-	_detailsObj: function ( rowIdx )
-	{
-		var that = this;
-		var dt = this.s.dt;
-
-		return $.map( this.s.columns, function( col, i ) {
-			// Never and control columns should not be passed to the renderer
-			if ( col.never || col.control ) {
-				return;
-			}
-
-			var dtCol = dt.settings()[0].aoColumns[ i ];
-
-			return {
-				className:   dtCol.sClass,
-				columnIndex: i,
-				data:        dt.cell( rowIdx, i ).render( that.c.orthogonal ),
-				hidden:      dt.column( i ).visible() && !that.s.current[ i ],
-				rowIndex:    rowIdx,
-				title:       dtCol.sTitle !== null ?
-					dtCol.sTitle :
-					$(dt.column(i).header()).text()
-			};
-		} );
-	},
-
-
-	/**
-	 * Find a breakpoint object from a name
-	 *
-	 * @param  {string} name Breakpoint name to find
-	 * @return {object}      Breakpoint description object
-	 * @private
-	 */
-	_find: function ( name )
-	{
-		var breakpoints = this.c.breakpoints;
-
-		for ( var i=0, ien=breakpoints.length ; i<ien ; i++ ) {
-			if ( breakpoints[i].name === name ) {
-				return breakpoints[i];
-			}
-		}
-	},
-
-
-	/**
-	 * Re-create the contents of the child rows as the display has changed in
-	 * some way.
-	 *
-	 * @private
-	 */
-	_redrawChildren: function ()
-	{
-		var that = this;
-		var dt = this.s.dt;
-
-		dt.rows( {page: 'current'} ).iterator( 'row', function ( settings, idx ) {
-			var row = dt.row( idx );
-
-			that._detailsDisplay( dt.row( idx ), true );
-		} );
-	},
-
-
-	/**
-	 * Alter the table display for a resized viewport. This involves first
-	 * determining what breakpoint the window currently is in, getting the
-	 * column visibilities to apply and then setting them.
-	 *
-	 * @param  {boolean} forceRedraw Force a redraw
-	 * @private
-	 */
-	_resize: function (forceRedraw)
-	{
-		var that = this;
-		var dt = this.s.dt;
-		var width = $(window).innerWidth();
-		var breakpoints = this.c.breakpoints;
-		var breakpoint = breakpoints[0].name;
-		var columns = this.s.columns;
-		var i, ien;
-		var oldVis = this.s.current.slice();
-
-		// Determine what breakpoint we are currently at
-		for ( i=breakpoints.length-1 ; i>=0 ; i-- ) {
-			if ( width <= breakpoints[i].width ) {
-				breakpoint = breakpoints[i].name;
-				break;
-			}
-		}
-		
-		// Show the columns for that break point
-		var columnsVis = this._columnsVisiblity( breakpoint );
-		this.s.current = columnsVis;
-
-		// Set the class before the column visibility is changed so event
-		// listeners know what the state is. Need to determine if there are
-		// any columns that are not visible but can be shown
-		var collapsedClass = false;
-	
-		for ( i=0, ien=columns.length ; i<ien ; i++ ) {
-			if ( columnsVis[i] === false && ! columns[i].never && ! columns[i].control && ! dt.column(i).visible() === false ) {
-				collapsedClass = true;
-				break;
-			}
-		}
-
-		$( dt.table().node() ).toggleClass( 'collapsed', collapsedClass );
-
-		var changed = false;
-		var visible = 0;
-
-		dt.columns().eq(0).each( function ( colIdx, i ) {
-			if ( columnsVis[i] === true ) {
-				visible++;
-			}
-
-			if ( forceRedraw || columnsVis[i] !== oldVis[i] ) {
-				changed = true;
-				that._setColumnVis( colIdx, columnsVis[i] );
-			}
-		} );
-
-		if ( changed ) {
-			this._redrawChildren();
-
-			// Inform listeners of the change
-			$(dt.table().node()).trigger( 'responsive-resize.dt', [dt, this.s.current] );
-
-			// If no records, update the "No records" display element
-			if ( dt.page.info().recordsDisplay === 0 ) {
-				$('td', dt.table().body()).eq(0).attr('colspan', visible);
-			}
-		}
-	},
-
-
-	/**
-	 * Determine the width of each column in the table so the auto column hiding
-	 * has that information to work with. This method is never going to be 100%
-	 * perfect since column widths can change slightly per page, but without
-	 * seriously compromising performance this is quite effective.
-	 *
-	 * @private
-	 */
-	_resizeAuto: function ()
-	{
-		var dt = this.s.dt;
-		var columns = this.s.columns;
-
-		// Are we allowed to do auto sizing?
-		if ( ! this.c.auto ) {
-			return;
-		}
-
-		// Are there any columns that actually need auto-sizing, or do they all
-		// have classes defined
-		if ( $.inArray( true, $.map( columns, function (c) { return c.auto; } ) ) === -1 ) {
-			return;
-		}
-
-		// Need to restore all children. They will be reinstated by a re-render
-		if ( ! $.isEmptyObject( _childNodeStore ) ) {
-			$.each( _childNodeStore, function ( key ) {
-				var idx = key.split('-');
-
-				_childNodesRestore( dt, idx[0]*1, idx[1]*1 );
-			} );
-		}
-
-		// Clone the table with the current data in it
-		var tableWidth   = dt.table().node().offsetWidth;
-		var columnWidths = dt.columns;
-		var clonedTable  = dt.table().node().cloneNode( false );
-		var clonedHeader = $( dt.table().header().cloneNode( false ) ).appendTo( clonedTable );
-		var clonedBody   = $( dt.table().body() ).clone( false, false ).empty().appendTo( clonedTable ); // use jQuery because of IE8
-
-		clonedTable.style.width = 'auto';
-
-		// Header
-		var headerCells = dt.columns()
-			.header()
-			.filter( function (idx) {
-				return dt.column(idx).visible();
-			} )
-			.to$()
-			.clone( false )
-			.css( 'display', 'table-cell' )
-			.css( 'width', 'auto' )
-			.css( 'min-width', 0 );
-
-		// Body rows - we don't need to take account of DataTables' column
-		// visibility since we implement our own here (hence the `display` set)
-		$(clonedBody)
-			.append( $(dt.rows( { page: 'current' } ).nodes()).clone( false ) )
-			.find( 'th, td' ).css( 'display', '' );
-
-		// Footer
-		var footer = dt.table().footer();
-		if ( footer ) {
-			var clonedFooter = $( footer.cloneNode( false ) ).appendTo( clonedTable );
-			var footerCells = dt.columns()
-				.footer()
-				.filter( function (idx) {
-					return dt.column(idx).visible();
-				} )
-				.to$()
-				.clone( false )
-				.css( 'display', 'table-cell' );
-
-			$('<tr/>')
-				.append( footerCells )
-				.appendTo( clonedFooter );
-		}
-
-		$('<tr/>')
-			.append( headerCells )
-			.appendTo( clonedHeader );
-
-		// In the inline case extra padding is applied to the first column to
-		// give space for the show / hide icon. We need to use this in the
-		// calculation
-		if ( this.c.details.type === 'inline' ) {
-			$(clonedTable).addClass( 'dtr-inline collapsed' );
-		}
-		
-		// It is unsafe to insert elements with the same name into the DOM
-		// multiple times. For example, cloning and inserting a checked radio
-		// clears the chcecked state of the original radio.
-		$( clonedTable ).find( '[name]' ).removeAttr( 'name' );
-
-		// A position absolute table would take the table out of the flow of
-		// our container element, bypassing the height and width (Scroller)
-		$( clonedTable ).css( 'position', 'relative' )
-		
-		var inserted = $('<div/>')
-			.css( {
-				width: 1,
-				height: 1,
-				overflow: 'hidden',
-				clear: 'both'
-			} )
-			.append( clonedTable );
-
-		inserted.insertBefore( dt.table().node() );
-
-		// The cloned header now contains the smallest that each column can be
-		headerCells.each( function (i) {
-			var idx = dt.column.index( 'fromVisible', i );
-			columns[ idx ].minWidth =  this.offsetWidth || 0;
-		} );
-
-		inserted.remove();
-	},
-
-	/**
-	 * Get the state of the current hidden columns - controlled by Responsive only
-	 */
-	_responsiveOnlyHidden: function ()
-	{
-		var dt = this.s.dt;
-
-		return $.map( this.s.current, function (v, i) {
-			// If the column is hidden by DataTables then it can't be hidden by
-			// Responsive!
-			if ( dt.column(i).visible() === false ) {
-				return true;
-			}
-			return v;
-		} );
-	},
-
-	/**
-	 * Set a column's visibility.
-	 *
-	 * We don't use DataTables' column visibility controls in order to ensure
-	 * that column visibility can Responsive can no-exist. Since only IE8+ is
-	 * supported (and all evergreen browsers of course) the control of the
-	 * display attribute works well.
-	 *
-	 * @param {integer} col      Column index
-	 * @param {boolean} showHide Show or hide (true or false)
-	 * @private
-	 */
-	_setColumnVis: function ( col, showHide )
-	{
-		var dt = this.s.dt;
-		var display = showHide ? '' : 'none'; // empty string will remove the attr
-
-		$( dt.column( col ).header() ).css( 'display', display );
-		$( dt.column( col ).footer() ).css( 'display', display );
-		dt.column( col ).nodes().to$().css( 'display', display );
-
-		// If the are child nodes stored, we might need to reinsert them
-		if ( ! $.isEmptyObject( _childNodeStore ) ) {
-			dt.cells( null, col ).indexes().each( function (idx) {
-				_childNodesRestore( dt, idx.row, idx.column );
-			} );
-		}
-	},
-
-
-	/**
-	 * Update the cell tab indexes for keyboard accessibility. This is called on
-	 * every table draw - that is potentially inefficient, but also the least
-	 * complex option given that column visibility can change on the fly. Its a
-	 * shame user-focus was removed from CSS 3 UI, as it would have solved this
-	 * issue with a single CSS statement.
-	 *
-	 * @private
-	 */
-	_tabIndexes: function ()
-	{
-		var dt = this.s.dt;
-		var cells = dt.cells( { page: 'current' } ).nodes().to$();
-		var ctx = dt.settings()[0];
-		var target = this.c.details.target;
-
-		cells.filter( '[data-dtr-keyboard]' ).removeData( '[data-dtr-keyboard]' );
-
-		if ( typeof target === 'number' ) {
-			dt.cells( null, target, { page: 'current' } ).nodes().to$()
-				.attr( 'tabIndex', ctx.iTabIndex )
-				.data( 'dtr-keyboard', 1 );
-		}
-		else {
-			// This is a bit of a hack - we need to limit the selected nodes to just
-			// those of this table
-			if ( target === 'td:first-child, th:first-child' ) {
-				target = '>td:first-child, >th:first-child';
-			}
-
-			$( target, dt.rows( { page: 'current' } ).nodes() )
-				.attr( 'tabIndex', ctx.iTabIndex )
-				.data( 'dtr-keyboard', 1 );
-		}
-	}
-} );
-
-
-/**
- * List of default breakpoints. Each item in the array is an object with two
- * properties:
- *
- * * `name` - the breakpoint name.
- * * `width` - the breakpoint width
- *
- * @name Responsive.breakpoints
- * @static
- */
-Responsive.breakpoints = [
-	{ name: 'desktop',  width: Infinity },
-	{ name: 'tablet-l', width: 1024 },
-	{ name: 'tablet-p', width: 768 },
-	{ name: 'mobile-l', width: 480 },
-	{ name: 'mobile-p', width: 320 }
-];
-
-
-/**
- * Display methods - functions which define how the hidden data should be shown
- * in the table.
- *
- * @namespace
- * @name Responsive.defaults
- * @static
- */
-Responsive.display = {
-	childRow: function ( row, update, render ) {
-		if ( update ) {
-			if ( $(row.node()).hasClass('parent') ) {
-				row.child( render(), 'child' ).show();
-
-				return true;
-			}
-		}
-		else {
-			if ( ! row.child.isShown()  ) {
-				row.child( render(), 'child' ).show();
-				$( row.node() ).addClass( 'parent' );
-
-				return true;
-			}
-			else {
-				row.child( false );
-				$( row.node() ).removeClass( 'parent' );
-
-				return false;
-			}
-		}
-	},
-
-	childRowImmediate: function ( row, update, render ) {
-		if ( (! update && row.child.isShown()) || ! row.responsive.hasHidden() ) {
-			// User interaction and the row is show, or nothing to show
-			row.child( false );
-			$( row.node() ).removeClass( 'parent' );
-
-			return false;
-		}
-		else {
-			// Display
-			row.child( render(), 'child' ).show();
-			$( row.node() ).addClass( 'parent' );
-
-			return true;
-		}
-	},
-
-	// This is a wrapper so the modal options for Bootstrap and jQuery UI can
-	// have options passed into them. This specific one doesn't need to be a
-	// function but it is for consistency in the `modal` name
-	modal: function ( options ) {
-		return function ( row, update, render ) {
-			if ( ! update ) {
-				// Show a modal
-				var close = function () {
-					modal.remove(); // will tidy events for us
-					$(document).off( 'keypress.dtr' );
-				};
-
-				var modal = $('<div class="dtr-modal"/>')
-					.append( $('<div class="dtr-modal-display"/>')
-						.append( $('<div class="dtr-modal-content"/>')
-							.append( render() )
-						)
-						.append( $('<div class="dtr-modal-close">&times;</div>' )
-							.click( function () {
-								close();
-							} )
-						)
-					)
-					.append( $('<div class="dtr-modal-background"/>')
-						.click( function () {
-							close();
-						} )
-					)
-					.appendTo( 'body' );
-
-				$(document).on( 'keyup.dtr', function (e) {
-					if ( e.keyCode === 27 ) {
-						e.stopPropagation();
-
-						close();
-					}
-				} );
-			}
-			else {
-				$('div.dtr-modal-content')
-					.empty()
-					.append( render() );
-			}
-
-			if ( options && options.header ) {
-				$('div.dtr-modal-content').prepend(
-					'<h2>'+options.header( row )+'</h2>'
-				);
-			}
-		};
-	}
-};
-
-
-var _childNodeStore = {};
-
-function _childNodes( dt, row, col ) {
-	var name = row+'-'+col;
-
-	if ( _childNodeStore[ name ] ) {
-		return _childNodeStore[ name ];
-	}
-
-	// https://jsperf.com/childnodes-array-slice-vs-loop
-	var nodes = [];
-	var children = dt.cell( row, col ).node().childNodes;
-	for ( var i=0, ien=children.length ; i<ien ; i++ ) {
-		nodes.push( children[i] );
-	}
-
-	_childNodeStore[ name ] = nodes;
-
-	return nodes;
-}
-
-function _childNodesRestore( dt, row, col ) {
-	var name = row+'-'+col;
-
-	if ( ! _childNodeStore[ name ] ) {
-		return;
-	}
-
-	var node = dt.cell( row, col ).node();
-	var store = _childNodeStore[ name ];
-	var parent = store[0].parentNode;
-	var parentChildren = parent.childNodes;
-	var a = [];
-
-	for ( var i=0, ien=parentChildren.length ; i<ien ; i++ ) {
-		a.push( parentChildren[i] );
-	}
-
-	for ( var j=0, jen=a.length ; j<jen ; j++ ) {
-		node.appendChild( a[j] );
-	}
-
-	_childNodeStore[ name ] = undefined;
-}
-
-
-/**
- * Display methods - functions which define how the hidden data should be shown
- * in the table.
- *
- * @namespace
- * @name Responsive.defaults
- * @static
- */
-Responsive.renderer = {
-	listHiddenNodes: function () {
-		return function ( api, rowIdx, columns ) {
-			var ul = $('<ul data-dtr-index="'+rowIdx+'" class="dtr-details"/>');
-			var found = false;
-
-			var data = $.each( columns, function ( i, col ) {
-				if ( col.hidden ) {
-					var klass = col.className ?
-						'class="'+ col.className +'"' :
-						'';
-	
-					$(
-						'<li '+klass+' data-dtr-index="'+col.columnIndex+'" data-dt-row="'+col.rowIndex+'" data-dt-column="'+col.columnIndex+'">'+
-							'<span class="dtr-title">'+
-								col.title+
-							'</span> '+
-						'</li>'
-					)
-						.append( $('<span class="dtr-data"/>').append( _childNodes( api, col.rowIndex, col.columnIndex ) ) )// api.cell( col.rowIndex, col.columnIndex ).node().childNodes ) )
-						.appendTo( ul );
-
-					found = true;
-				}
-			} );
-
-			return found ?
-				ul :
-				false;
-		};
-	},
-
-	listHidden: function () {
-		return function ( api, rowIdx, columns ) {
-			var data = $.map( columns, function ( col ) {
-				var klass = col.className ?
-					'class="'+ col.className +'"' :
-					'';
-
-				return col.hidden ?
-					'<li '+klass+' data-dtr-index="'+col.columnIndex+'" data-dt-row="'+col.rowIndex+'" data-dt-column="'+col.columnIndex+'">'+
-						'<span class="dtr-title">'+
-							col.title+
-						'</span> '+
-						'<span class="dtr-data">'+
-							col.data+
-						'</span>'+
-					'</li>' :
-					'';
-			} ).join('');
-
-			return data ?
-				$('<ul data-dtr-index="'+rowIdx+'" class="dtr-details"/>').append( data ) :
-				false;
-		}
-	},
-
-	tableAll: function ( options ) {
-		options = $.extend( {
-			tableClass: ''
-		}, options );
-
-		return function ( api, rowIdx, columns ) {
-			var data = $.map( columns, function ( col ) {
-				var klass = col.className ?
-					'class="'+ col.className +'"' :
-					'';
-
-				return '<tr '+klass+' data-dt-row="'+col.rowIndex+'" data-dt-column="'+col.columnIndex+'">'+
-						'<td>'+col.title+':'+'</td> '+
-						'<td>'+col.data+'</td>'+
-					'</tr>';
-			} ).join('');
-
-			return $('<table class="'+options.tableClass+' dtr-details" width="100%"/>').append( data );
-		}
-	}
-};
-
-/**
- * Responsive default settings for initialisation
- *
- * @namespace
- * @name Responsive.defaults
- * @static
- */
-Responsive.defaults = {
-	/**
-	 * List of breakpoints for the instance. Note that this means that each
-	 * instance can have its own breakpoints. Additionally, the breakpoints
-	 * cannot be changed once an instance has been creased.
-	 *
-	 * @type {Array}
-	 * @default Takes the value of `Responsive.breakpoints`
-	 */
-	breakpoints: Responsive.breakpoints,
-
-	/**
-	 * Enable / disable auto hiding calculations. It can help to increase
-	 * performance slightly if you disable this option, but all columns would
-	 * need to have breakpoint classes assigned to them
-	 *
-	 * @type {Boolean}
-	 * @default  `true`
-	 */
-	auto: true,
-
-	/**
-	 * Details control. If given as a string value, the `type` property of the
-	 * default object is set to that value, and the defaults used for the rest
-	 * of the object - this is for ease of implementation.
-	 *
-	 * The object consists of the following properties:
-	 *
-	 * * `display` - A function that is used to show and hide the hidden details
-	 * * `renderer` - function that is called for display of the child row data.
-	 *   The default function will show the data from the hidden columns
-	 * * `target` - Used as the selector for what objects to attach the child
-	 *   open / close to
-	 * * `type` - `false` to disable the details display, `inline` or `column`
-	 *   for the two control types
-	 *
-	 * @type {Object|string}
-	 */
-	details: {
-		display: Responsive.display.childRow,
-
-		renderer: Responsive.renderer.listHidden(),
-
-		target: 0,
-
-		type: 'inline'
-	},
-
-	/**
-	 * Orthogonal data request option. This is used to define the data type
-	 * requested when Responsive gets the data to show in the child row.
-	 *
-	 * @type {String}
-	 */
-	orthogonal: 'display'
-};
-
-
-/*
- * API
- */
-var Api = $.fn.dataTable.Api;
-
-// Doesn't do anything - work around for a bug in DT... Not documented
-Api.register( 'responsive()', function () {
-	return this;
-} );
-
-Api.register( 'responsive.index()', function ( li ) {
-	li = $(li);
-
-	return {
-		column: li.data('dtr-index'),
-		row:    li.parent().data('dtr-index')
-	};
-} );
-
-Api.register( 'responsive.rebuild()', function () {
-	return this.iterator( 'table', function ( ctx ) {
-		if ( ctx._responsive ) {
-			ctx._responsive._classLogic();
-		}
-	} );
-} );
-
-Api.register( 'responsive.recalc()', function () {
-	return this.iterator( 'table', function ( ctx ) {
-		if ( ctx._responsive ) {
-			ctx._responsive._resizeAuto();
-			ctx._responsive._resize();
-		}
-	} );
-} );
-
-Api.register( 'responsive.hasHidden()', function () {
-	var ctx = this.context[0];
-
-	return ctx._responsive ?
-		$.inArray( false, ctx._responsive._responsiveOnlyHidden() ) !== -1 :
-		false;
-} );
-
-Api.registerPlural( 'columns().responsiveHidden()', 'column().responsiveHidden()', function () {
-	return this.iterator( 'column', function ( settings, column ) {
-		return settings._responsive ?
-			settings._responsive._responsiveOnlyHidden()[ column ] :
-			false;
-	}, 1 );
-} );
-
-
-/**
- * Version information
- *
- * @name Responsive.version
- * @static
- */
-Responsive.version = '2.2.5';
-
-
-$.fn.dataTable.Responsive = Responsive;
-$.fn.DataTable.Responsive = Responsive;
-
-// Attach a listener to the document which listens for DataTables initialisation
-// events so we can automatically initialise
-$(document).on( 'preInit.dt.dtr', function (e, settings, json) {
-	if ( e.namespace !== 'dt' ) {
-		return;
-	}
-
-	if ( $(settings.nTable).hasClass( 'responsive' ) ||
-		 $(settings.nTable).hasClass( 'dt-responsive' ) ||
-		 settings.oInit.responsive ||
-		 DataTable.defaults.responsive
-	) {
-		var init = settings.oInit.responsive;
-
-		if ( init !== false ) {
-			new Responsive( settings, $.isPlainObject( init ) ? init : {}  );
-		}
-	}
-} );
-
-
-return Responsive;
-}));
-
-
-/*! Select for DataTables 1.3.1
- * 2015-2019 SpryMedia Ltd - datatables.net/license/mit
- */
-
-/**
- * @summary     Select for DataTables
- * @description A collection of API methods, events and buttons for DataTables
- *   that provides selection options of the items in a DataTable
- * @version     1.3.1
- * @file        dataTables.select.js
- * @author      SpryMedia Ltd (www.sprymedia.co.uk)
- * @contact     datatables.net/forums
- * @copyright   Copyright 2015-2019 SpryMedia Ltd.
- *
- * This source file is free software, available under the following license:
- *   MIT license - http://datatables.net/license/mit
- *
- * This source file is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
- * or FITNESS FOR A PARTICULAR PURPOSE. See the license files for details.
- *
- * For details please refer to: http://www.datatables.net/extensions/select
- */
-(function( factory ){
-	if ( typeof define === 'function' && define.amd ) {
-		// AMD
-		define( ['jquery', 'datatables.net'], function ( $ ) {
-			return factory( $, window, document );
-		} );
-	}
-	else if ( typeof exports === 'object' ) {
-		// CommonJS
-		module.exports = function (root, $) {
-			if ( ! root ) {
-				root = window;
-			}
-
-			if ( ! $ || ! $.fn.dataTable ) {
-				$ = require('datatables.net')(root, $).$;
-			}
-
-			return factory( $, root, root.document );
-		};
-	}
-	else {
-		// Browser
-		factory( jQuery, window, document );
-	}
-}(function( $, window, document, undefined ) {
-'use strict';
-var DataTable = $.fn.dataTable;
-
-
-// Version information for debugger
-DataTable.select = {};
-
-DataTable.select.version = '1.3.1';
-
-DataTable.select.init = function ( dt ) {
-	var ctx = dt.settings()[0];
-	var init = ctx.oInit.select;
-	var defaults = DataTable.defaults.select;
-	var opts = init === undefined ?
-		defaults :
-		init;
-
-	// Set defaults
-	var items = 'row';
-	var style = 'api';
-	var blurable = false;
-	var toggleable = true;
-	var info = true;
-	var selector = 'td, th';
-	var className = 'selected';
-	var setStyle = false;
-
-	ctx._select = {};
-
-	// Initialisation customisations
-	if ( opts === true ) {
-		style = 'os';
-		setStyle = true;
-	}
-	else if ( typeof opts === 'string' ) {
-		style = opts;
-		setStyle = true;
-	}
-	else if ( $.isPlainObject( opts ) ) {
-		if ( opts.blurable !== undefined ) {
-			blurable = opts.blurable;
-		}
-		
-		if ( opts.toggleable !== undefined ) {
-			toggleable = opts.toggleable;
-		}
-
-		if ( opts.info !== undefined ) {
-			info = opts.info;
-		}
-
-		if ( opts.items !== undefined ) {
-			items = opts.items;
-		}
-
-		if ( opts.style !== undefined ) {
-			style = opts.style;
-			setStyle = true;
-		}
-		else {
-			style = 'os';
-			setStyle = true;
-		}
-
-		if ( opts.selector !== undefined ) {
-			selector = opts.selector;
-		}
-
-		if ( opts.className !== undefined ) {
-			className = opts.className;
-		}
-	}
-
-	dt.select.selector( selector );
-	dt.select.items( items );
-	dt.select.style( style );
-	dt.select.blurable( blurable );
-	dt.select.toggleable( toggleable );
-	dt.select.info( info );
-	ctx._select.className = className;
-
-
-	// Sort table based on selected rows. Requires Select Datatables extension
-	$.fn.dataTable.ext.order['select-checkbox'] = function ( settings, col ) {
-		return this.api().column( col, {order: 'index'} ).nodes().map( function ( td ) {
-			if ( settings._select.items === 'row' ) {
-				return $( td ).parent().hasClass( settings._select.className );
-			} else if ( settings._select.items === 'cell' ) {
-				return $( td ).hasClass( settings._select.className );
-			}
-			return false;
-		});
-	};
-
-	// If the init options haven't enabled select, but there is a selectable
-	// class name, then enable
-	if ( ! setStyle && $( dt.table().node() ).hasClass( 'selectable' ) ) {
-		dt.select.style( 'os' );
-	}
-};
-
-/*
-
-Select is a collection of API methods, event handlers, event emitters and
-buttons (for the `Buttons` extension) for DataTables. It provides the following
-features, with an overview of how they are implemented:
-
-## Selection of rows, columns and cells. Whether an item is selected or not is
-   stored in:
-
-* rows: a `_select_selected` property which contains a boolean value of the
-  DataTables' `aoData` object for each row
-* columns: a `_select_selected` property which contains a boolean value of the
-  DataTables' `aoColumns` object for each column
-* cells: a `_selected_cells` property which contains an array of boolean values
-  of the `aoData` object for each row. The array is the same length as the
-  columns array, with each element of it representing a cell.
-
-This method of using boolean flags allows Select to operate when nodes have not
-been created for rows / cells (DataTables' defer rendering feature).
-
-## API methods
-
-A range of API methods are available for triggering selection and de-selection
-of rows. Methods are also available to configure the selection events that can
-be triggered by an end user (such as which items are to be selected). To a large
-extent, these of API methods *is* Select. It is basically a collection of helper
-functions that can be used to select items in a DataTable.
-
-Configuration of select is held in the object `_select` which is attached to the
-DataTables settings object on initialisation. Select being available on a table
-is not optional when Select is loaded, but its default is for selection only to
-be available via the API - so the end user wouldn't be able to select rows
-without additional configuration.
-
-The `_select` object contains the following properties:
-
-```
-{
-	items:string       - Can be `rows`, `columns` or `cells`. Defines what item 
-	                     will be selected if the user is allowed to activate row
-	                     selection using the mouse.
-	style:string       - Can be `none`, `single`, `multi` or `os`. Defines the
-	                     interaction style when selecting items
-	blurable:boolean   - If row selection can be cleared by clicking outside of
-	                     the table
-	toggleable:boolean - If row selection can be cancelled by repeated clicking
-	                     on the row
-	info:boolean       - If the selection summary should be shown in the table
-	                     information elements
-}
-```
-
-In addition to the API methods, Select also extends the DataTables selector
-options for rows, columns and cells adding a `selected` option to the selector
-options object, allowing the developer to select only selected items or
-unselected items.
-
-## Mouse selection of items
-
-Clicking on items can be used to select items. This is done by a simple event
-handler that will select the items using the API methods.
-
- */
-
-
-/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- * Local functions
- */
-
-/**
- * Add one or more cells to the selection when shift clicking in OS selection
- * style cell selection.
- *
- * Cell range is more complicated than row and column as we want to select
- * in the visible grid rather than by index in sequence. For example, if you
- * click first in cell 1-1 and then shift click in 2-2 - cells 1-2 and 2-1
- * should also be selected (and not 1-3, 1-4. etc)
- * 
- * @param  {DataTable.Api} dt   DataTable
- * @param  {object}        idx  Cell index to select to
- * @param  {object}        last Cell index to select from
- * @private
- */
-function cellRange( dt, idx, last )
-{
-	var indexes;
-	var columnIndexes;
-	var rowIndexes;
-	var selectColumns = function ( start, end ) {
-		if ( start > end ) {
-			var tmp = end;
-			end = start;
-			start = tmp;
-		}
-		
-		var record = false;
-		return dt.columns( ':visible' ).indexes().filter( function (i) {
-			if ( i === start ) {
-				record = true;
-			}
-			
-			if ( i === end ) { // not else if, as start might === end
-				record = false;
-				return true;
-			}
-
-			return record;
-		} );
-	};
-
-	var selectRows = function ( start, end ) {
-		var indexes = dt.rows( { search: 'applied' } ).indexes();
-
-		// Which comes first - might need to swap
-		if ( indexes.indexOf( start ) > indexes.indexOf( end ) ) {
-			var tmp = end;
-			end = start;
-			start = tmp;
-		}
-
-		var record = false;
-		return indexes.filter( function (i) {
-			if ( i === start ) {
-				record = true;
-			}
-			
-			if ( i === end ) {
-				record = false;
-				return true;
-			}
-
-			return record;
-		} );
-	};
-
-	if ( ! dt.cells( { selected: true } ).any() && ! last ) {
-		// select from the top left cell to this one
-		columnIndexes = selectColumns( 0, idx.column );
-		rowIndexes = selectRows( 0 , idx.row );
-	}
-	else {
-		// Get column indexes between old and new
-		columnIndexes = selectColumns( last.column, idx.column );
-		rowIndexes = selectRows( last.row , idx.row );
-	}
-
-	indexes = dt.cells( rowIndexes, columnIndexes ).flatten();
-
-	if ( ! dt.cells( idx, { selected: true } ).any() ) {
-		// Select range
-		dt.cells( indexes ).select();
-	}
-	else {
-		// Deselect range
-		dt.cells( indexes ).deselect();
-	}
-}
-
-/**
- * Disable mouse selection by removing the selectors
- *
- * @param {DataTable.Api} dt DataTable to remove events from
- * @private
- */
-function disableMouseSelection( dt )
-{
-	var ctx = dt.settings()[0];
-	var selector = ctx._select.selector;
-
-	$( dt.table().container() )
-		.off( 'mousedown.dtSelect', selector )
-		.off( 'mouseup.dtSelect', selector )
-		.off( 'click.dtSelect', selector );
-
-	$('body').off( 'click.dtSelect' + _safeId(dt.table().node()) );
-}
-
-/**
- * Attach mouse listeners to the table to allow mouse selection of items
- *
- * @param {DataTable.Api} dt DataTable to remove events from
- * @private
- */
-function enableMouseSelection ( dt )
-{
-	var container = $( dt.table().container() );
-	var ctx = dt.settings()[0];
-	var selector = ctx._select.selector;
-	var matchSelection;
-
-	container
-		.on( 'mousedown.dtSelect', selector, function(e) {
-			// Disallow text selection for shift clicking on the table so multi
-			// element selection doesn't look terrible!
-			if ( e.shiftKey || e.metaKey || e.ctrlKey ) {
-				container
-					.css( '-moz-user-select', 'none' )
-					.one('selectstart.dtSelect', selector, function () {
-						return false;
-					} );
-			}
-
-			if ( window.getSelection ) {
-				matchSelection = window.getSelection();
-			}
-		} )
-		.on( 'mouseup.dtSelect', selector, function() {
-			// Allow text selection to occur again, Mozilla style (tested in FF
-			// 35.0.1 - still required)
-			container.css( '-moz-user-select', '' );
-		} )
-		.on( 'click.dtSelect', selector, function ( e ) {
-			var items = dt.select.items();
-			var idx;
-
-			// If text was selected (click and drag), then we shouldn't change
-			// the row's selected state
-			if ( matchSelection ) {
-				var selection = window.getSelection();
-
-				// If the element that contains the selection is not in the table, we can ignore it
-				// This can happen if the developer selects text from the click event
-				if ( ! selection.anchorNode || $(selection.anchorNode).closest('table')[0] === dt.table().node() ) {
-					if ( selection !== matchSelection ) {
-						return;
-					}
-				}
-			}
-
-			var ctx = dt.settings()[0];
-			var wrapperClass = $.trim(dt.settings()[0].oClasses.sWrapper).replace(/ +/g, '.');
-
-			// Ignore clicks inside a sub-table
-			if ( $(e.target).closest('div.'+wrapperClass)[0] != dt.table().container() ) {
-				return;
-			}
-
-			var cell = dt.cell( $(e.target).closest('td, th') );
-
-			// Check the cell actually belongs to the host DataTable (so child
-			// rows, etc, are ignored)
-			if ( ! cell.any() ) {
-				return;
-			}
-
-			var event = $.Event('user-select.dt');
-			eventTrigger( dt, event, [ items, cell, e ] );
-
-			if ( event.isDefaultPrevented() ) {
-				return;
-			}
-
-			var cellIndex = cell.index();
-			if ( items === 'row' ) {
-				idx = cellIndex.row;
-				typeSelect( e, dt, ctx, 'row', idx );
-			}
-			else if ( items === 'column' ) {
-				idx = cell.index().column;
-				typeSelect( e, dt, ctx, 'column', idx );
-			}
-			else if ( items === 'cell' ) {
-				idx = cell.index();
-				typeSelect( e, dt, ctx, 'cell', idx );
-			}
-
-			ctx._select_lastCell = cellIndex;
-		} );
-
-	// Blurable
-	$('body').on( 'click.dtSelect' + _safeId(dt.table().node()), function ( e ) {
-		if ( ctx._select.blurable ) {
-			// If the click was inside the DataTables container, don't blur
-			if ( $(e.target).parents().filter( dt.table().container() ).length ) {
-				return;
-			}
-
-			// Ignore elements which have been removed from the DOM (i.e. paging
-			// buttons)
-			if ( $(e.target).parents('html').length === 0 ) {
-			 	return;
-			}
-
-			// Don't blur in Editor form
-			if ( $(e.target).parents('div.DTE').length ) {
-				return;
-			}
-
-			clear( ctx, true );
-		}
-	} );
-}
-
-/**
- * Trigger an event on a DataTable
- *
- * @param {DataTable.Api} api      DataTable to trigger events on
- * @param  {boolean}      selected true if selected, false if deselected
- * @param  {string}       type     Item type acting on
- * @param  {boolean}      any      Require that there are values before
- *     triggering
- * @private
- */
-function eventTrigger ( api, type, args, any )
-{
-	if ( any && ! api.flatten().length ) {
-		return;
-	}
-
-	if ( typeof type === 'string' ) {
-		type = type +'.dt';
-	}
-
-	args.unshift( api );
-
-	$(api.table().node()).trigger( type, args );
-}
-
-/**
- * Update the information element of the DataTable showing information about the
- * items selected. This is done by adding tags to the existing text
- * 
- * @param {DataTable.Api} api DataTable to update
- * @private
- */
-function info ( api )
-{
-	var ctx = api.settings()[0];
-
-	if ( ! ctx._select.info || ! ctx.aanFeatures.i ) {
-		return;
-	}
-
-	if ( api.select.style() === 'api' ) {
-		return;
-	}
-
-	var rows    = api.rows( { selected: true } ).flatten().length;
-	var columns = api.columns( { selected: true } ).flatten().length;
-	var cells   = api.cells( { selected: true } ).flatten().length;
-
-	var add = function ( el, name, num ) {
-		el.append( $('<span class="select-item"/>').append( api.i18n(
-			'select.'+name+'s',
-			{ _: '%d '+name+'s selected', 0: '', 1: '1 '+name+' selected' },
-			num
-		) ) );
-	};
-
-	// Internal knowledge of DataTables to loop over all information elements
-	$.each( ctx.aanFeatures.i, function ( i, el ) {
-		el = $(el);
-
-		var output  = $('<span class="select-info"/>');
-		add( output, 'row', rows );
-		add( output, 'column', columns );
-		add( output, 'cell', cells  );
-
-		var exisiting = el.children('span.select-info');
-		if ( exisiting.length ) {
-			exisiting.remove();
-		}
-
-		if ( output.text() !== '' ) {
-			el.append( output );
-		}
-	} );
-}
-
-/**
- * Initialisation of a new table. Attach event handlers and callbacks to allow
- * Select to operate correctly.
- *
- * This will occur _after_ the initial DataTables initialisation, although
- * before Ajax data is rendered, if there is ajax data
- *
- * @param  {DataTable.settings} ctx Settings object to operate on
- * @private
- */
-function init ( ctx ) {
-	var api = new DataTable.Api( ctx );
-
-	// Row callback so that classes can be added to rows and cells if the item
-	// was selected before the element was created. This will happen with the
-	// `deferRender` option enabled.
-	// 
-	// This method of attaching to `aoRowCreatedCallback` is a hack until
-	// DataTables has proper events for row manipulation If you are reviewing
-	// this code to create your own plug-ins, please do not do this!
-	ctx.aoRowCreatedCallback.push( {
-		fn: function ( row, data, index ) {
-			var i, ien;
-			var d = ctx.aoData[ index ];
-
-			// Row
-			if ( d._select_selected ) {
-				$( row ).addClass( ctx._select.className );
-			}
-
-			// Cells and columns - if separated out, we would need to do two
-			// loops, so it makes sense to combine them into a single one
-			for ( i=0, ien=ctx.aoColumns.length ; i<ien ; i++ ) {
-				if ( ctx.aoColumns[i]._select_selected || (d._selected_cells && d._selected_cells[i]) ) {
-					$(d.anCells[i]).addClass( ctx._select.className );
-				}
-			}
-		},
-		sName: 'select-deferRender'
-	} );
-
-	// On Ajax reload we want to reselect all rows which are currently selected,
-	// if there is an rowId (i.e. a unique value to identify each row with)
-	api.on( 'preXhr.dt.dtSelect', function () {
-		// note that column selection doesn't need to be cached and then
-		// reselected, as they are already selected
-		var rows = api.rows( { selected: true } ).ids( true ).filter( function ( d ) {
-			return d !== undefined;
-		} );
-
-		var cells = api.cells( { selected: true } ).eq(0).map( function ( cellIdx ) {
-			var id = api.row( cellIdx.row ).id( true );
-			return id ?
-				{ row: id, column: cellIdx.column } :
-				undefined;
-		} ).filter( function ( d ) {
-			return d !== undefined;
-		} );
-
-		// On the next draw, reselect the currently selected items
-		api.one( 'draw.dt.dtSelect', function () {
-			api.rows( rows ).select();
-
-			// `cells` is not a cell index selector, so it needs a loop
-			if ( cells.any() ) {
-				cells.each( function ( id ) {
-					api.cells( id.row, id.column ).select();
-				} );
-			}
-		} );
-	} );
-
-	// Update the table information element with selected item summary
-	api.on( 'draw.dtSelect.dt select.dtSelect.dt deselect.dtSelect.dt info.dt', function () {
-		info( api );
-	} );
-
-	// Clean up and release
-	api.on( 'destroy.dtSelect', function () {
-		disableMouseSelection( api );
-		api.off( '.dtSelect' );
-	} );
-}
-
-/**
- * Add one or more items (rows or columns) to the selection when shift clicking
- * in OS selection style
- *
- * @param  {DataTable.Api} dt   DataTable
- * @param  {string}        type Row or column range selector
- * @param  {object}        idx  Item index to select to
- * @param  {object}        last Item index to select from
- * @private
- */
-function rowColumnRange( dt, type, idx, last )
-{
-	// Add a range of rows from the last selected row to this one
-	var indexes = dt[type+'s']( { search: 'applied' } ).indexes();
-	var idx1 = $.inArray( last, indexes );
-	var idx2 = $.inArray( idx, indexes );
-
-	if ( ! dt[type+'s']( { selected: true } ).any() && idx1 === -1 ) {
-		// select from top to here - slightly odd, but both Windows and Mac OS
-		// do this
-		indexes.splice( $.inArray( idx, indexes )+1, indexes.length );
-	}
-	else {
-		// reverse so we can shift click 'up' as well as down
-		if ( idx1 > idx2 ) {
-			var tmp = idx2;
-			idx2 = idx1;
-			idx1 = tmp;
-		}
-
-		indexes.splice( idx2+1, indexes.length );
-		indexes.splice( 0, idx1 );
-	}
-
-	if ( ! dt[type]( idx, { selected: true } ).any() ) {
-		// Select range
-		dt[type+'s']( indexes ).select();
-	}
-	else {
-		// Deselect range - need to keep the clicked on row selected
-		indexes.splice( $.inArray( idx, indexes ), 1 );
-		dt[type+'s']( indexes ).deselect();
-	}
-}
-
-/**
- * Clear all selected items
- *
- * @param  {DataTable.settings} ctx Settings object of the host DataTable
- * @param  {boolean} [force=false] Force the de-selection to happen, regardless
- *     of selection style
- * @private
- */
-function clear( ctx, force )
-{
-	if ( force || ctx._select.style === 'single' ) {
-		var api = new DataTable.Api( ctx );
-		
-		api.rows( { selected: true } ).deselect();
-		api.columns( { selected: true } ).deselect();
-		api.cells( { selected: true } ).deselect();
-	}
-}
-
-/**
- * Select items based on the current configuration for style and items.
- *
- * @param  {object}             e    Mouse event object
- * @param  {DataTables.Api}     dt   DataTable
- * @param  {DataTable.settings} ctx  Settings object of the host DataTable
- * @param  {string}             type Items to select
- * @param  {int|object}         idx  Index of the item to select
- * @private
- */
-function typeSelect ( e, dt, ctx, type, idx )
-{
-	var style = dt.select.style();
-	var toggleable = dt.select.toggleable();
-	var isSelected = dt[type]( idx, { selected: true } ).any();
-	
-	if ( isSelected && ! toggleable ) {
-		return;
-	}
-
-	if ( style === 'os' ) {
-		if ( e.ctrlKey || e.metaKey ) {
-			// Add or remove from the selection
-			dt[type]( idx ).select( ! isSelected );
-		}
-		else if ( e.shiftKey ) {
-			if ( type === 'cell' ) {
-				cellRange( dt, idx, ctx._select_lastCell || null );
-			}
-			else {
-				rowColumnRange( dt, type, idx, ctx._select_lastCell ?
-					ctx._select_lastCell[type] :
-					null
-				);
-			}
-		}
-		else {
-			// No cmd or shift click - deselect if selected, or select
-			// this row only
-			var selected = dt[type+'s']( { selected: true } );
-
-			if ( isSelected && selected.flatten().length === 1 ) {
-				dt[type]( idx ).deselect();
-			}
-			else {
-				selected.deselect();
-				dt[type]( idx ).select();
-			}
-		}
-	} else if ( style == 'multi+shift' ) {
-		if ( e.shiftKey ) {
-			if ( type === 'cell' ) {
-				cellRange( dt, idx, ctx._select_lastCell || null );
-			}
-			else {
-				rowColumnRange( dt, type, idx, ctx._select_lastCell ?
-					ctx._select_lastCell[type] :
-					null
-				);
-			}
-		}
-		else {
-			dt[ type ]( idx ).select( ! isSelected );
-		}
-	}
-	else {
-		dt[ type ]( idx ).select( ! isSelected );
-	}
-}
-
-function _safeId( node ) {
-	return node.id.replace(/[^a-zA-Z0-9\-\_]/g, '-');
-}
-
-
-
-/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- * DataTables selectors
- */
-
-// row and column are basically identical just assigned to different properties
-// and checking a different array, so we can dynamically create the functions to
-// reduce the code size
-$.each( [
-	{ type: 'row', prop: 'aoData' },
-	{ type: 'column', prop: 'aoColumns' }
-], function ( i, o ) {
-	DataTable.ext.selector[ o.type ].push( function ( settings, opts, indexes ) {
-		var selected = opts.selected;
-		var data;
-		var out = [];
-
-		if ( selected !== true && selected !== false ) {
-			return indexes;
-		}
-
-		for ( var i=0, ien=indexes.length ; i<ien ; i++ ) {
-			data = settings[ o.prop ][ indexes[i] ];
-
-			if ( (selected === true && data._select_selected === true) ||
-			     (selected === false && ! data._select_selected )
-			) {
-				out.push( indexes[i] );
-			}
-		}
-
-		return out;
-	} );
-} );
-
-DataTable.ext.selector.cell.push( function ( settings, opts, cells ) {
-	var selected = opts.selected;
-	var rowData;
-	var out = [];
-
-	if ( selected === undefined ) {
-		return cells;
-	}
-
-	for ( var i=0, ien=cells.length ; i<ien ; i++ ) {
-		rowData = settings.aoData[ cells[i].row ];
-
-		if ( (selected === true && rowData._selected_cells && rowData._selected_cells[ cells[i].column ] === true) ||
-		     (selected === false && ( ! rowData._selected_cells || ! rowData._selected_cells[ cells[i].column ] ) )
-		) {
-			out.push( cells[i] );
-		}
-	}
-
-	return out;
-} );
-
-
-
-/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- * DataTables API
- *
- * For complete documentation, please refer to the docs/api directory or the
- * DataTables site
- */
-
-// Local variables to improve compression
-var apiRegister = DataTable.Api.register;
-var apiRegisterPlural = DataTable.Api.registerPlural;
-
-apiRegister( 'select()', function () {
-	return this.iterator( 'table', function ( ctx ) {
-		DataTable.select.init( new DataTable.Api( ctx ) );
-	} );
-} );
-
-apiRegister( 'select.blurable()', function ( flag ) {
-	if ( flag === undefined ) {
-		return this.context[0]._select.blurable;
-	}
-
-	return this.iterator( 'table', function ( ctx ) {
-		ctx._select.blurable = flag;
-	} );
-} );
-
-apiRegister( 'select.toggleable()', function ( flag ) {
-	if ( flag === undefined ) {
-		return this.context[0]._select.toggleable;
-	}
-
-	return this.iterator( 'table', function ( ctx ) {
-		ctx._select.toggleable = flag;
-	} );
-} );
-
-apiRegister( 'select.info()', function ( flag ) {
-	if ( info === undefined ) {
-		return this.context[0]._select.info;
-	}
-
-	return this.iterator( 'table', function ( ctx ) {
-		ctx._select.info = flag;
-	} );
-} );
-
-apiRegister( 'select.items()', function ( items ) {
-	if ( items === undefined ) {
-		return this.context[0]._select.items;
-	}
-
-	return this.iterator( 'table', function ( ctx ) {
-		ctx._select.items = items;
-
-		eventTrigger( new DataTable.Api( ctx ), 'selectItems', [ items ] );
-	} );
-} );
-
-// Takes effect from the _next_ selection. None disables future selection, but
-// does not clear the current selection. Use the `deselect` methods for that
-apiRegister( 'select.style()', function ( style ) {
-	if ( style === undefined ) {
-		return this.context[0]._select.style;
-	}
-
-	return this.iterator( 'table', function ( ctx ) {
-		ctx._select.style = style;
-
-		if ( ! ctx._select_init ) {
-			init( ctx );
-		}
-
-		// Add / remove mouse event handlers. They aren't required when only
-		// API selection is available
-		var dt = new DataTable.Api( ctx );
-		disableMouseSelection( dt );
-		
-		if ( style !== 'api' ) {
-			enableMouseSelection( dt );
-		}
-
-		eventTrigger( new DataTable.Api( ctx ), 'selectStyle', [ style ] );
-	} );
-} );
-
-apiRegister( 'select.selector()', function ( selector ) {
-	if ( selector === undefined ) {
-		return this.context[0]._select.selector;
-	}
-
-	return this.iterator( 'table', function ( ctx ) {
-		disableMouseSelection( new DataTable.Api( ctx ) );
-
-		ctx._select.selector = selector;
-
-		if ( ctx._select.style !== 'api' ) {
-			enableMouseSelection( new DataTable.Api( ctx ) );
-		}
-	} );
-} );
-
-
-
-apiRegisterPlural( 'rows().select()', 'row().select()', function ( select ) {
-	var api = this;
-
-	if ( select === false ) {
-		return this.deselect();
-	}
-
-	this.iterator( 'row', function ( ctx, idx ) {
-		clear( ctx );
-
-		ctx.aoData[ idx ]._select_selected = true;
-		$( ctx.aoData[ idx ].nTr ).addClass( ctx._select.className );
-	} );
-
-	this.iterator( 'table', function ( ctx, i ) {
-		eventTrigger( api, 'select', [ 'row', api[i] ], true );
-	} );
-
-	return this;
-} );
-
-apiRegisterPlural( 'columns().select()', 'column().select()', function ( select ) {
-	var api = this;
-
-	if ( select === false ) {
-		return this.deselect();
-	}
-
-	this.iterator( 'column', function ( ctx, idx ) {
-		clear( ctx );
-
-		ctx.aoColumns[ idx ]._select_selected = true;
-
-		var column = new DataTable.Api( ctx ).column( idx );
-
-		$( column.header() ).addClass( ctx._select.className );
-		$( column.footer() ).addClass( ctx._select.className );
-
-		column.nodes().to$().addClass( ctx._select.className );
-	} );
-
-	this.iterator( 'table', function ( ctx, i ) {
-		eventTrigger( api, 'select', [ 'column', api[i] ], true );
-	} );
-
-	return this;
-} );
-
-apiRegisterPlural( 'cells().select()', 'cell().select()', function ( select ) {
-	var api = this;
-
-	if ( select === false ) {
-		return this.deselect();
-	}
-
-	this.iterator( 'cell', function ( ctx, rowIdx, colIdx ) {
-		clear( ctx );
-
-		var data = ctx.aoData[ rowIdx ];
-
-		if ( data._selected_cells === undefined ) {
-			data._selected_cells = [];
-		}
-
-		data._selected_cells[ colIdx ] = true;
-
-		if ( data.anCells ) {
-			$( data.anCells[ colIdx ] ).addClass( ctx._select.className );
-		}
-	} );
-
-	this.iterator( 'table', function ( ctx, i ) {
-		eventTrigger( api, 'select', [ 'cell', api[i] ], true );
-	} );
-
-	return this;
-} );
-
-
-apiRegisterPlural( 'rows().deselect()', 'row().deselect()', function () {
-	var api = this;
-
-	this.iterator( 'row', function ( ctx, idx ) {
-		ctx.aoData[ idx ]._select_selected = false;
-		$( ctx.aoData[ idx ].nTr ).removeClass( ctx._select.className );
-	} );
-
-	this.iterator( 'table', function ( ctx, i ) {
-		eventTrigger( api, 'deselect', [ 'row', api[i] ], true );
-	} );
-
-	return this;
-} );
-
-apiRegisterPlural( 'columns().deselect()', 'column().deselect()', function () {
-	var api = this;
-
-	this.iterator( 'column', function ( ctx, idx ) {
-		ctx.aoColumns[ idx ]._select_selected = false;
-
-		var api = new DataTable.Api( ctx );
-		var column = api.column( idx );
-
-		$( column.header() ).removeClass( ctx._select.className );
-		$( column.footer() ).removeClass( ctx._select.className );
-
-		// Need to loop over each cell, rather than just using
-		// `column().nodes()` as cells which are individually selected should
-		// not have the `selected` class removed from them
-		api.cells( null, idx ).indexes().each( function (cellIdx) {
-			var data = ctx.aoData[ cellIdx.row ];
-			var cellSelected = data._selected_cells;
-
-			if ( data.anCells && (! cellSelected || ! cellSelected[ cellIdx.column ]) ) {
-				$( data.anCells[ cellIdx.column  ] ).removeClass( ctx._select.className );
-			}
-		} );
-	} );
-
-	this.iterator( 'table', function ( ctx, i ) {
-		eventTrigger( api, 'deselect', [ 'column', api[i] ], true );
-	} );
-
-	return this;
-} );
-
-apiRegisterPlural( 'cells().deselect()', 'cell().deselect()', function () {
-	var api = this;
-
-	this.iterator( 'cell', function ( ctx, rowIdx, colIdx ) {
-		var data = ctx.aoData[ rowIdx ];
-
-		data._selected_cells[ colIdx ] = false;
-
-		// Remove class only if the cells exist, and the cell is not column
-		// selected, in which case the class should remain (since it is selected
-		// in the column)
-		if ( data.anCells && ! ctx.aoColumns[ colIdx ]._select_selected ) {
-			$( data.anCells[ colIdx ] ).removeClass( ctx._select.className );
-		}
-	} );
-
-	this.iterator( 'table', function ( ctx, i ) {
-		eventTrigger( api, 'deselect', [ 'cell', api[i] ], true );
-	} );
-
-	return this;
-} );
-
-
-
-/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- * Buttons
- */
-function i18n( label, def ) {
-	return function (dt) {
-		return dt.i18n( 'buttons.'+label, def );
-	};
-}
-
-// Common events with suitable namespaces
-function namespacedEvents ( config ) {
-	var unique = config._eventNamespace;
-
-	return 'draw.dt.DT'+unique+' select.dt.DT'+unique+' deselect.dt.DT'+unique;
-}
-
-function enabled ( dt, config ) {
-	if ( $.inArray( 'rows', config.limitTo ) !== -1 && dt.rows( { selected: true } ).any() ) {
-		return true;
-	}
-
-	if ( $.inArray( 'columns', config.limitTo ) !== -1 && dt.columns( { selected: true } ).any() ) {
-		return true;
-	}
-
-	if ( $.inArray( 'cells', config.limitTo ) !== -1 && dt.cells( { selected: true } ).any() ) {
-		return true;
-	}
-
-	return false;
-}
-
-var _buttonNamespace = 0;
-
-$.extend( DataTable.ext.buttons, {
-	selected: {
-		text: i18n( 'selected', 'Selected' ),
-		className: 'buttons-selected',
-		limitTo: [ 'rows', 'columns', 'cells' ],
-		init: function ( dt, node, config ) {
-			var that = this;
-			config._eventNamespace = '.select'+(_buttonNamespace++);
-
-			// .DT namespace listeners are removed by DataTables automatically
-			// on table destroy
-			dt.on( namespacedEvents(config), function () {
-				that.enable( enabled(dt, config) );
-			} );
-
-			this.disable();
-		},
-		destroy: function ( dt, node, config ) {
-			dt.off( config._eventNamespace );
-		}
-	},
-	selectedSingle: {
-		text: i18n( 'selectedSingle', 'Selected single' ),
-		className: 'buttons-selected-single',
-		init: function ( dt, node, config ) {
-			var that = this;
-			config._eventNamespace = '.select'+(_buttonNamespace++);
-
-			dt.on( namespacedEvents(config), function () {
-				var count = dt.rows( { selected: true } ).flatten().length +
-				            dt.columns( { selected: true } ).flatten().length +
-				            dt.cells( { selected: true } ).flatten().length;
-
-				that.enable( count === 1 );
-			} );
-
-			this.disable();
-		},
-		destroy: function ( dt, node, config ) {
-			dt.off( config._eventNamespace );
-		}
-	},
-	selectAll: {
-		text: i18n( 'selectAll', 'Select all' ),
-		className: 'buttons-select-all',
-		action: function () {
-			var items = this.select.items();
-			this[ items+'s' ]().select();
-		}
-	},
-	selectNone: {
-		text: i18n( 'selectNone', 'Deselect all' ),
-		className: 'buttons-select-none',
-		action: function () {
-			clear( this.settings()[0], true );
-		},
-		init: function ( dt, node, config ) {
-			var that = this;
-			config._eventNamespace = '.select'+(_buttonNamespace++);
-
-			dt.on( namespacedEvents(config), function () {
-				var count = dt.rows( { selected: true } ).flatten().length +
-				            dt.columns( { selected: true } ).flatten().length +
-				            dt.cells( { selected: true } ).flatten().length;
-
-				that.enable( count > 0 );
-			} );
-
-			this.disable();
-		},
-		destroy: function ( dt, node, config ) {
-			dt.off( config._eventNamespace );
-		}
-	}
-} );
-
-$.each( [ 'Row', 'Column', 'Cell' ], function ( i, item ) {
-	var lc = item.toLowerCase();
-
-	DataTable.ext.buttons[ 'select'+item+'s' ] = {
-		text: i18n( 'select'+item+'s', 'Select '+lc+'s' ),
-		className: 'buttons-select-'+lc+'s',
-		action: function () {
-			this.select.items( lc );
-		},
-		init: function ( dt ) {
-			var that = this;
-
-			dt.on( 'selectItems.dt.DT', function ( e, ctx, items ) {
-				that.active( items === lc );
-			} );
-		}
-	};
-} );
-
-
-
-/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- * Initialisation
- */
-
-// DataTables creation - check if select has been defined in the options. Note
-// this required that the table be in the document! If it isn't then something
-// needs to trigger this method unfortunately. The next major release of
-// DataTables will rework the events and address this.
-$(document).on( 'preInit.dt.dtSelect', function (e, ctx) {
-	if ( e.namespace !== 'dt' ) {
-		return;
-	}
-
-	DataTable.select.init( new DataTable.Api( ctx ) );
-} );
-
-
-return DataTable.select;
-}));
-
-
diff --git a/DataTables/datatables.min.css b/DataTables/datatables.min.css
deleted file mode 100644
index f883cd2..0000000
--- a/DataTables/datatables.min.css
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
- * This combined file was created by the DataTables downloader builder:
- *   https://datatables.net/download
- *
- * To rebuild or modify this file with the latest versions of the included
- * software please visit:
- *   https://datatables.net/download/#bs4/dt-1.10.21/b-1.6.2/r-2.2.5/sl-1.3.1
- *
- * Included libraries:
- *   DataTables 1.10.21, Buttons 1.6.2, Responsive 2.2.5, Select 1.3.1
- */
-
-table.dataTable{clear:both;margin-top:6px !important;margin-bottom:6px !important;max-width:none !important;border-collapse:separate !important;border-spacing:0}table.dataTable td,table.dataTable th{-webkit-box-sizing:content-box;box-sizing:content-box}table.dataTable td.dataTables_empty,table.dataTable th.dataTables_empty{text-align:center}table.dataTable.nowrap th,table.dataTable.nowrap td{white-space:nowrap}div.dataTables_wrapper div.dataTables_length label{font-weight:normal;text-align:left;white-space:nowrap}div.dataTables_wrapper div.dataTables_length select{width:auto;display:inline-block}div.dataTables_wrapper div.dataTables_filter{text-align:right}div.dataTables_wrapper div.dataTables_filter label{font-weight:normal;white-space:nowrap;text-align:left}div.dataTables_wrapper div.dataTables_filter input{margin-left:0.5em;display:inline-block;width:auto}div.dataTables_wrapper div.dataTables_info{padding-top:0.85em;white-space:nowrap}div.dataTables_wrapper div.dataTables_paginate{margin:0;white-space:nowrap;text-align:right}div.dataTables_wrapper div.dataTables_paginate ul.pagination{margin:2px 0;white-space:nowrap;justify-content:flex-end}div.dataTables_wrapper div.dataTables_processing{position:absolute;top:50%;left:50%;width:200px;margin-left:-100px;margin-top:-26px;text-align:center;padding:1em 0}table.dataTable thead>tr>th.sorting_asc,table.dataTable thead>tr>th.sorting_desc,table.dataTable thead>tr>th.sorting,table.dataTable thead>tr>td.sorting_asc,table.dataTable thead>tr>td.sorting_desc,table.dataTable thead>tr>td.sorting{padding-right:30px}table.dataTable thead>tr>th:active,table.dataTable thead>tr>td:active{outline:none}table.dataTable thead .sorting,table.dataTable thead .sorting_asc,table.dataTable thead .sorting_desc,table.dataTable thead .sorting_asc_disabled,table.dataTable thead .sorting_desc_disabled{cursor:pointer;position:relative}table.dataTable thead .sorting:before,table.dataTable thead .sorting:after,table.dataTable thead .sorting_asc:before,table.dataTable thead .sorting_asc:after,table.dataTable thead .sorting_desc:before,table.dataTable thead .sorting_desc:after,table.dataTable thead .sorting_asc_disabled:before,table.dataTable thead .sorting_asc_disabled:after,table.dataTable thead .sorting_desc_disabled:before,table.dataTable thead .sorting_desc_disabled:after{position:absolute;bottom:0.9em;display:block;opacity:0.3}table.dataTable thead .sorting:before,table.dataTable thead .sorting_asc:before,table.dataTable thead .sorting_desc:before,table.dataTable thead .sorting_asc_disabled:before,table.dataTable thead .sorting_desc_disabled:before{right:1em;content:"\2191"}table.dataTable thead .sorting:after,table.dataTable thead .sorting_asc:after,table.dataTable thead .sorting_desc:after,table.dataTable thead .sorting_asc_disabled:after,table.dataTable thead .sorting_desc_disabled:after{right:0.5em;content:"\2193"}table.dataTable thead .sorting_asc:before,table.dataTable thead .sorting_desc:after{opacity:1}table.dataTable thead .sorting_asc_disabled:before,table.dataTable thead .sorting_desc_disabled:after{opacity:0}div.dataTables_scrollHead table.dataTable{margin-bottom:0 !important}div.dataTables_scrollBody table{border-top:none;margin-top:0 !important;margin-bottom:0 !important}div.dataTables_scrollBody table thead .sorting:before,div.dataTables_scrollBody table thead .sorting_asc:before,div.dataTables_scrollBody table thead .sorting_desc:before,div.dataTables_scrollBody table thead .sorting:after,div.dataTables_scrollBody table thead .sorting_asc:after,div.dataTables_scrollBody table thead .sorting_desc:after{display:none}div.dataTables_scrollBody table tbody tr:first-child th,div.dataTables_scrollBody table tbody tr:first-child td{border-top:none}div.dataTables_scrollFoot>.dataTables_scrollFootInner{box-sizing:content-box}div.dataTables_scrollFoot>.dataTables_scrollFootInner>table{margin-top:0 !important;border-top:none}@media screen and (max-width: 767px){div.dataTables_wrapper div.dataTables_length,div.dataTables_wrapper div.dataTables_filter,div.dataTables_wrapper div.dataTables_info,div.dataTables_wrapper div.dataTables_paginate{text-align:center}div.dataTables_wrapper div.dataTables_paginate ul.pagination{justify-content:center !important}}table.dataTable.table-sm>thead>tr>th :not(.sorting_disabled){padding-right:20px}table.dataTable.table-sm .sorting:before,table.dataTable.table-sm .sorting_asc:before,table.dataTable.table-sm .sorting_desc:before{top:5px;right:0.85em}table.dataTable.table-sm .sorting:after,table.dataTable.table-sm .sorting_asc:after,table.dataTable.table-sm .sorting_desc:after{top:5px}table.table-bordered.dataTable{border-right-width:0}table.table-bordered.dataTable th,table.table-bordered.dataTable td{border-left-width:0}table.table-bordered.dataTable th:last-child,table.table-bordered.dataTable th:last-child,table.table-bordered.dataTable td:last-child,table.table-bordered.dataTable td:last-child{border-right-width:1px}table.table-bordered.dataTable tbody th,table.table-bordered.dataTable tbody td{border-bottom-width:0}div.dataTables_scrollHead table.table-bordered{border-bottom-width:0}div.table-responsive>div.dataTables_wrapper>div.row{margin:0}div.table-responsive>div.dataTables_wrapper>div.row>div[class^="col-"]:first-child{padding-left:0}div.table-responsive>div.dataTables_wrapper>div.row>div[class^="col-"]:last-child{padding-right:0}
-
-
-@keyframes dtb-spinner{100%{transform:rotate(360deg)}}@-o-keyframes dtb-spinner{100%{-o-transform:rotate(360deg);transform:rotate(360deg)}}@-ms-keyframes dtb-spinner{100%{-ms-transform:rotate(360deg);transform:rotate(360deg)}}@-webkit-keyframes dtb-spinner{100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@-moz-keyframes dtb-spinner{100%{-moz-transform:rotate(360deg);transform:rotate(360deg)}}div.dt-button-info{position:fixed;top:50%;left:50%;width:400px;margin-top:-100px;margin-left:-200px;background-color:white;border:2px solid #111;box-shadow:3px 3px 8px rgba(0,0,0,0.3);border-radius:3px;text-align:center;z-index:21}div.dt-button-info h2{padding:0.5em;margin:0;font-weight:normal;border-bottom:1px solid #ddd;background-color:#f3f3f3}div.dt-button-info>div{padding:1em}div.dt-button-collection-title{text-align:center;padding:0.3em 0 0.5em;font-size:0.9em}div.dt-button-collection-title:empty{display:none}div.dt-button-collection{position:absolute;z-index:2001}div.dt-button-collection div.dropdown-menu{display:block;z-index:2002;min-width:100%}div.dt-button-collection div.dt-button-collection-title{background-color:white;border:1px solid rgba(0,0,0,0.15)}div.dt-button-collection.fixed{position:fixed;top:50%;left:50%;margin-left:-75px;border-radius:0}div.dt-button-collection.fixed.two-column{margin-left:-200px}div.dt-button-collection.fixed.three-column{margin-left:-225px}div.dt-button-collection.fixed.four-column{margin-left:-300px}div.dt-button-collection>:last-child{display:block !important;-webkit-column-gap:8px;-moz-column-gap:8px;-ms-column-gap:8px;-o-column-gap:8px;column-gap:8px}div.dt-button-collection>:last-child>*{-webkit-column-break-inside:avoid;break-inside:avoid}div.dt-button-collection.two-column{width:400px}div.dt-button-collection.two-column>:last-child{padding-bottom:1px;-webkit-column-count:2;-moz-column-count:2;-ms-column-count:2;-o-column-count:2;column-count:2}div.dt-button-collection.three-column{width:450px}div.dt-button-collection.three-column>:last-child{padding-bottom:1px;-webkit-column-count:3;-moz-column-count:3;-ms-column-count:3;-o-column-count:3;column-count:3}div.dt-button-collection.four-column{width:600px}div.dt-button-collection.four-column>:last-child{padding-bottom:1px;-webkit-column-count:4;-moz-column-count:4;-ms-column-count:4;-o-column-count:4;column-count:4}div.dt-button-collection .dt-button{border-radius:0}div.dt-button-collection.fixed{max-width:none}div.dt-button-collection.fixed:before,div.dt-button-collection.fixed:after{display:none}div.dt-button-background{position:fixed;top:0;left:0;width:100%;height:100%;z-index:999}@media screen and (max-width: 767px){div.dt-buttons{float:none;width:100%;text-align:center;margin-bottom:0.5em}div.dt-buttons a.btn{float:none}}div.dt-buttons button.btn.processing,div.dt-buttons div.btn.processing,div.dt-buttons a.btn.processing{color:rgba(0,0,0,0.2)}div.dt-buttons button.btn.processing:after,div.dt-buttons div.btn.processing:after,div.dt-buttons a.btn.processing:after{position:absolute;top:50%;left:50%;width:16px;height:16px;margin:-8px 0 0 -8px;box-sizing:border-box;display:block;content:' ';border:2px solid #282828;border-radius:50%;border-left-color:transparent;border-right-color:transparent;animation:dtb-spinner 1500ms infinite linear;-o-animation:dtb-spinner 1500ms infinite linear;-ms-animation:dtb-spinner 1500ms infinite linear;-webkit-animation:dtb-spinner 1500ms infinite linear;-moz-animation:dtb-spinner 1500ms infinite linear}
-
-
-table.dataTable.dtr-inline.collapsed>tbody>tr>td.child,table.dataTable.dtr-inline.collapsed>tbody>tr>th.child,table.dataTable.dtr-inline.collapsed>tbody>tr>td.dataTables_empty{cursor:default !important}table.dataTable.dtr-inline.collapsed>tbody>tr>td.child:before,table.dataTable.dtr-inline.collapsed>tbody>tr>th.child:before,table.dataTable.dtr-inline.collapsed>tbody>tr>td.dataTables_empty:before{display:none !important}table.dataTable.dtr-inline.collapsed>tbody>tr[role="row"]>td.dtr-control,table.dataTable.dtr-inline.collapsed>tbody>tr[role="row"]>th.dtr-control{position:relative;padding-left:30px;cursor:pointer}table.dataTable.dtr-inline.collapsed>tbody>tr[role="row"]>td.dtr-control:before,table.dataTable.dtr-inline.collapsed>tbody>tr[role="row"]>th.dtr-control:before{top:50%;left:5px;height:14px;width:14px;margin-top:-9px;display:block;position:absolute;color:white;border:2px solid white;border-radius:14px;box-shadow:0 0 3px #444;box-sizing:content-box;text-align:center;text-indent:0 !important;font-family:'Courier New', Courier, monospace;line-height:14px;content:'+';background-color:#0275d8}table.dataTable.dtr-inline.collapsed>tbody>tr.parent>td.dtr-control:before,table.dataTable.dtr-inline.collapsed>tbody>tr.parent>th.dtr-control:before{content:'-';background-color:#d33333}table.dataTable.dtr-inline.collapsed.compact>tbody>tr>td.dtr-control,table.dataTable.dtr-inline.collapsed.compact>tbody>tr>th.dtr-control{padding-left:27px}table.dataTable.dtr-inline.collapsed.compact>tbody>tr>td.dtr-control:before,table.dataTable.dtr-inline.collapsed.compact>tbody>tr>th.dtr-control:before{left:4px;height:14px;width:14px;border-radius:14px;line-height:14px;text-indent:3px}table.dataTable.dtr-column>tbody>tr>td.control,table.dataTable.dtr-column>tbody>tr>th.control{position:relative;cursor:pointer}table.dataTable.dtr-column>tbody>tr>td.control:before,table.dataTable.dtr-column>tbody>tr>th.control:before{top:50%;left:50%;height:16px;width:16px;margin-top:-10px;margin-left:-10px;display:block;position:absolute;color:white;border:2px solid white;border-radius:14px;box-shadow:0 0 3px #444;box-sizing:content-box;text-align:center;text-indent:0 !important;font-family:'Courier New', Courier, monospace;line-height:14px;content:'+';background-color:#0275d8}table.dataTable.dtr-column>tbody>tr.parent td.control:before,table.dataTable.dtr-column>tbody>tr.parent th.control:before{content:'-';background-color:#d33333}table.dataTable>tbody>tr.child{padding:0.5em 1em}table.dataTable>tbody>tr.child:hover{background:transparent !important}table.dataTable>tbody>tr.child ul.dtr-details{display:inline-block;list-style-type:none;margin:0;padding:0}table.dataTable>tbody>tr.child ul.dtr-details>li{border-bottom:1px solid #efefef;padding:0.5em 0}table.dataTable>tbody>tr.child ul.dtr-details>li:first-child{padding-top:0}table.dataTable>tbody>tr.child ul.dtr-details>li:last-child{border-bottom:none}table.dataTable>tbody>tr.child span.dtr-title{display:inline-block;min-width:75px;font-weight:bold}div.dtr-modal{position:fixed;box-sizing:border-box;top:0;left:0;height:100%;width:100%;z-index:100;padding:10em 1em}div.dtr-modal div.dtr-modal-display{position:absolute;top:0;left:0;bottom:0;right:0;width:50%;height:50%;overflow:auto;margin:auto;z-index:102;overflow:auto;background-color:#f5f5f7;border:1px solid black;border-radius:0.5em;box-shadow:0 12px 30px rgba(0,0,0,0.6)}div.dtr-modal div.dtr-modal-content{position:relative;padding:1em}div.dtr-modal div.dtr-modal-close{position:absolute;top:6px;right:6px;width:22px;height:22px;border:1px solid #eaeaea;background-color:#f9f9f9;text-align:center;border-radius:3px;cursor:pointer;z-index:12}div.dtr-modal div.dtr-modal-close:hover{background-color:#eaeaea}div.dtr-modal div.dtr-modal-background{position:fixed;top:0;left:0;right:0;bottom:0;z-index:101;background:rgba(0,0,0,0.6)}@media screen and (max-width: 767px){div.dtr-modal div.dtr-modal-display{width:95%}}div.dtr-bs-modal table.table tr:first-child td{border-top:none}table.dataTable.dtr-inline.collapsed.table-sm>tbody>tr>td:first-child:before,table.dataTable.dtr-inline.collapsed.table-sm>tbody>tr>th:first-child:before{top:5px}
-
-
-table.dataTable tbody>tr.selected,table.dataTable tbody>tr>.selected{background-color:#0275d8}table.dataTable.stripe tbody>tr.odd.selected,table.dataTable.stripe tbody>tr.odd>.selected,table.dataTable.display tbody>tr.odd.selected,table.dataTable.display tbody>tr.odd>.selected{background-color:#0272d3}table.dataTable.hover tbody>tr.selected:hover,table.dataTable.hover tbody>tr>.selected:hover,table.dataTable.display tbody>tr.selected:hover,table.dataTable.display tbody>tr>.selected:hover{background-color:#0271d0}table.dataTable.order-column tbody>tr.selected>.sorting_1,table.dataTable.order-column tbody>tr.selected>.sorting_2,table.dataTable.order-column tbody>tr.selected>.sorting_3,table.dataTable.order-column tbody>tr>.selected,table.dataTable.display tbody>tr.selected>.sorting_1,table.dataTable.display tbody>tr.selected>.sorting_2,table.dataTable.display tbody>tr.selected>.sorting_3,table.dataTable.display tbody>tr>.selected{background-color:#0273d4}table.dataTable.display tbody>tr.odd.selected>.sorting_1,table.dataTable.order-column.stripe tbody>tr.odd.selected>.sorting_1{background-color:#026fcc}table.dataTable.display tbody>tr.odd.selected>.sorting_2,table.dataTable.order-column.stripe tbody>tr.odd.selected>.sorting_2{background-color:#0270ce}table.dataTable.display tbody>tr.odd.selected>.sorting_3,table.dataTable.order-column.stripe tbody>tr.odd.selected>.sorting_3{background-color:#0270d0}table.dataTable.display tbody>tr.even.selected>.sorting_1,table.dataTable.order-column.stripe tbody>tr.even.selected>.sorting_1{background-color:#0273d4}table.dataTable.display tbody>tr.even.selected>.sorting_2,table.dataTable.order-column.stripe tbody>tr.even.selected>.sorting_2{background-color:#0274d5}table.dataTable.display tbody>tr.even.selected>.sorting_3,table.dataTable.order-column.stripe tbody>tr.even.selected>.sorting_3{background-color:#0275d7}table.dataTable.display tbody>tr.odd>.selected,table.dataTable.order-column.stripe tbody>tr.odd>.selected{background-color:#026fcc}table.dataTable.display tbody>tr.even>.selected,table.dataTable.order-column.stripe tbody>tr.even>.selected{background-color:#0273d4}table.dataTable.display tbody>tr.selected:hover>.sorting_1,table.dataTable.order-column.hover tbody>tr.selected:hover>.sorting_1{background-color:#026bc6}table.dataTable.display tbody>tr.selected:hover>.sorting_2,table.dataTable.order-column.hover tbody>tr.selected:hover>.sorting_2{background-color:#026cc8}table.dataTable.display tbody>tr.selected:hover>.sorting_3,table.dataTable.order-column.hover tbody>tr.selected:hover>.sorting_3{background-color:#026eca}table.dataTable.display tbody>tr:hover>.selected,table.dataTable.display tbody>tr>.selected:hover,table.dataTable.order-column.hover tbody>tr:hover>.selected,table.dataTable.order-column.hover tbody>tr>.selected:hover{background-color:#026bc6}table.dataTable tbody td.select-checkbox,table.dataTable tbody th.select-checkbox{position:relative}table.dataTable tbody td.select-checkbox:before,table.dataTable tbody td.select-checkbox:after,table.dataTable tbody th.select-checkbox:before,table.dataTable tbody th.select-checkbox:after{display:block;position:absolute;top:1.2em;left:50%;width:12px;height:12px;box-sizing:border-box}table.dataTable tbody td.select-checkbox:before,table.dataTable tbody th.select-checkbox:before{content:' ';margin-top:-6px;margin-left:-6px;border:1px solid black;border-radius:3px}table.dataTable tr.selected td.select-checkbox:after,table.dataTable tr.selected th.select-checkbox:after{content:'\2714';margin-top:-11px;margin-left:-4px;text-align:center;text-shadow:1px 1px #B0BED9, -1px -1px #B0BED9, 1px -1px #B0BED9, -1px 1px #B0BED9}div.dataTables_wrapper span.select-info,div.dataTables_wrapper span.select-item{margin-left:0.5em}@media screen and (max-width: 640px){div.dataTables_wrapper span.select-info,div.dataTables_wrapper span.select-item{margin-left:0;display:block}}table.dataTable tbody tr.selected,table.dataTable tbody th.selected,table.dataTable tbody td.selected{color:white}table.dataTable tbody tr.selected a,table.dataTable tbody th.selected a,table.dataTable tbody td.selected a{color:#a2d4ed}
-
-
diff --git a/DataTables/datatables.min.js b/DataTables/datatables.min.js
deleted file mode 100644
index 61fc940..0000000
--- a/DataTables/datatables.min.js
+++ /dev/null
@@ -1,359 +0,0 @@
-/*
- * This combined file was created by the DataTables downloader builder:
- *   https://datatables.net/download
- *
- * To rebuild or modify this file with the latest versions of the included
- * software please visit:
- *   https://datatables.net/download/#bs4/dt-1.10.21/b-1.6.2/r-2.2.5/sl-1.3.1
- *
- * Included libraries:
- *   DataTables 1.10.21, Buttons 1.6.2, Responsive 2.2.5, Select 1.3.1
- */
-
-/*!
-   Copyright 2008-2020 SpryMedia Ltd.
-
- This source file is free software, available under the following license:
-   MIT license - http://datatables.net/license
-
- This source file is distributed in the hope that it will be useful, but
- WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
- or FITNESS FOR A PARTICULAR PURPOSE. See the license files for details.
-
- For details please refer to: http://www.datatables.net
- DataTables 1.10.21
- ©2008-2020 SpryMedia Ltd - datatables.net/license
-*/
-var $jscomp=$jscomp||{};$jscomp.scope={};$jscomp.findInternal=function(f,y,w){f instanceof String&&(f=String(f));for(var n=f.length,H=0;H<n;H++){var L=f[H];if(y.call(w,L,H,f))return{i:H,v:L}}return{i:-1,v:void 0}};$jscomp.ASSUME_ES5=!1;$jscomp.ASSUME_NO_NATIVE_MAP=!1;$jscomp.ASSUME_NO_NATIVE_SET=!1;$jscomp.SIMPLE_FROUND_POLYFILL=!1;
-$jscomp.defineProperty=$jscomp.ASSUME_ES5||"function"==typeof Object.defineProperties?Object.defineProperty:function(f,y,w){f!=Array.prototype&&f!=Object.prototype&&(f[y]=w.value)};$jscomp.getGlobal=function(f){f=["object"==typeof window&&window,"object"==typeof self&&self,"object"==typeof global&&global,f];for(var y=0;y<f.length;++y){var w=f[y];if(w&&w.Math==Math)return w}throw Error("Cannot find global object");};$jscomp.global=$jscomp.getGlobal(this);
-$jscomp.polyfill=function(f,y,w,n){if(y){w=$jscomp.global;f=f.split(".");for(n=0;n<f.length-1;n++){var H=f[n];H in w||(w[H]={});w=w[H]}f=f[f.length-1];n=w[f];y=y(n);y!=n&&null!=y&&$jscomp.defineProperty(w,f,{configurable:!0,writable:!0,value:y})}};$jscomp.polyfill("Array.prototype.find",function(f){return f?f:function(f,w){return $jscomp.findInternal(this,f,w).v}},"es6","es3");
-(function(f){"function"===typeof define&&define.amd?define(["jquery"],function(y){return f(y,window,document)}):"object"===typeof exports?module.exports=function(y,w){y||(y=window);w||(w="undefined"!==typeof window?require("jquery"):require("jquery")(y));return f(w,y,y.document)}:f(jQuery,window,document)})(function(f,y,w,n){function H(a){var b,c,d={};f.each(a,function(e,h){(b=e.match(/^([^A-Z]+?)([A-Z])/))&&-1!=="a aa ai ao as b fn i m o s ".indexOf(b[1]+" ")&&(c=e.replace(b[0],b[2].toLowerCase()),
-d[c]=e,"o"===b[1]&&H(a[e]))});a._hungarianMap=d}function L(a,b,c){a._hungarianMap||H(a);var d;f.each(b,function(e,h){d=a._hungarianMap[e];d===n||!c&&b[d]!==n||("o"===d.charAt(0)?(b[d]||(b[d]={}),f.extend(!0,b[d],b[e]),L(a[d],b[d],c)):b[d]=b[e])})}function Fa(a){var b=q.defaults.oLanguage,c=b.sDecimal;c&&Ga(c);if(a){var d=a.sZeroRecords;!a.sEmptyTable&&d&&"No data available in table"===b.sEmptyTable&&M(a,a,"sZeroRecords","sEmptyTable");!a.sLoadingRecords&&d&&"Loading..."===b.sLoadingRecords&&M(a,a,
-"sZeroRecords","sLoadingRecords");a.sInfoThousands&&(a.sThousands=a.sInfoThousands);(a=a.sDecimal)&&c!==a&&Ga(a)}}function ib(a){E(a,"ordering","bSort");E(a,"orderMulti","bSortMulti");E(a,"orderClasses","bSortClasses");E(a,"orderCellsTop","bSortCellsTop");E(a,"order","aaSorting");E(a,"orderFixed","aaSortingFixed");E(a,"paging","bPaginate");E(a,"pagingType","sPaginationType");E(a,"pageLength","iDisplayLength");E(a,"searching","bFilter");"boolean"===typeof a.sScrollX&&(a.sScrollX=a.sScrollX?"100%":
-"");"boolean"===typeof a.scrollX&&(a.scrollX=a.scrollX?"100%":"");if(a=a.aoSearchCols)for(var b=0,c=a.length;b<c;b++)a[b]&&L(q.models.oSearch,a[b])}function jb(a){E(a,"orderable","bSortable");E(a,"orderData","aDataSort");E(a,"orderSequence","asSorting");E(a,"orderDataType","sortDataType");var b=a.aDataSort;"number"!==typeof b||f.isArray(b)||(a.aDataSort=[b])}function kb(a){if(!q.__browser){var b={};q.__browser=b;var c=f("<div/>").css({position:"fixed",top:0,left:-1*f(y).scrollLeft(),height:1,width:1,
-overflow:"hidden"}).append(f("<div/>").css({position:"absolute",top:1,left:1,width:100,overflow:"scroll"}).append(f("<div/>").css({width:"100%",height:10}))).appendTo("body"),d=c.children(),e=d.children();b.barWidth=d[0].offsetWidth-d[0].clientWidth;b.bScrollOversize=100===e[0].offsetWidth&&100!==d[0].clientWidth;b.bScrollbarLeft=1!==Math.round(e.offset().left);b.bBounding=c[0].getBoundingClientRect().width?!0:!1;c.remove()}f.extend(a.oBrowser,q.__browser);a.oScroll.iBarWidth=q.__browser.barWidth}
-function lb(a,b,c,d,e,h){var g=!1;if(c!==n){var k=c;g=!0}for(;d!==e;)a.hasOwnProperty(d)&&(k=g?b(k,a[d],d,a):a[d],g=!0,d+=h);return k}function Ha(a,b){var c=q.defaults.column,d=a.aoColumns.length;c=f.extend({},q.models.oColumn,c,{nTh:b?b:w.createElement("th"),sTitle:c.sTitle?c.sTitle:b?b.innerHTML:"",aDataSort:c.aDataSort?c.aDataSort:[d],mData:c.mData?c.mData:d,idx:d});a.aoColumns.push(c);c=a.aoPreSearchCols;c[d]=f.extend({},q.models.oSearch,c[d]);la(a,d,f(b).data())}function la(a,b,c){b=a.aoColumns[b];
-var d=a.oClasses,e=f(b.nTh);if(!b.sWidthOrig){b.sWidthOrig=e.attr("width")||null;var h=(e.attr("style")||"").match(/width:\s*(\d+[pxem%]+)/);h&&(b.sWidthOrig=h[1])}c!==n&&null!==c&&(jb(c),L(q.defaults.column,c,!0),c.mDataProp===n||c.mData||(c.mData=c.mDataProp),c.sType&&(b._sManualType=c.sType),c.className&&!c.sClass&&(c.sClass=c.className),c.sClass&&e.addClass(c.sClass),f.extend(b,c),M(b,c,"sWidth","sWidthOrig"),c.iDataSort!==n&&(b.aDataSort=[c.iDataSort]),M(b,c,"aDataSort"));var g=b.mData,k=T(g),
-l=b.mRender?T(b.mRender):null;c=function(a){return"string"===typeof a&&-1!==a.indexOf("@")};b._bAttrSrc=f.isPlainObject(g)&&(c(g.sort)||c(g.type)||c(g.filter));b._setter=null;b.fnGetData=function(a,b,c){var d=k(a,b,n,c);return l&&b?l(d,b,a,c):d};b.fnSetData=function(a,b,c){return Q(g)(a,b,c)};"number"!==typeof g&&(a._rowReadObject=!0);a.oFeatures.bSort||(b.bSortable=!1,e.addClass(d.sSortableNone));a=-1!==f.inArray("asc",b.asSorting);c=-1!==f.inArray("desc",b.asSorting);b.bSortable&&(a||c)?a&&!c?(b.sSortingClass=
-d.sSortableAsc,b.sSortingClassJUI=d.sSortJUIAscAllowed):!a&&c?(b.sSortingClass=d.sSortableDesc,b.sSortingClassJUI=d.sSortJUIDescAllowed):(b.sSortingClass=d.sSortable,b.sSortingClassJUI=d.sSortJUI):(b.sSortingClass=d.sSortableNone,b.sSortingClassJUI="")}function Z(a){if(!1!==a.oFeatures.bAutoWidth){var b=a.aoColumns;Ia(a);for(var c=0,d=b.length;c<d;c++)b[c].nTh.style.width=b[c].sWidth}b=a.oScroll;""===b.sY&&""===b.sX||ma(a);A(a,null,"column-sizing",[a])}function aa(a,b){a=na(a,"bVisible");return"number"===
-typeof a[b]?a[b]:null}function ba(a,b){a=na(a,"bVisible");b=f.inArray(b,a);return-1!==b?b:null}function V(a){var b=0;f.each(a.aoColumns,function(a,d){d.bVisible&&"none"!==f(d.nTh).css("display")&&b++});return b}function na(a,b){var c=[];f.map(a.aoColumns,function(a,e){a[b]&&c.push(e)});return c}function Ja(a){var b=a.aoColumns,c=a.aoData,d=q.ext.type.detect,e,h,g;var k=0;for(e=b.length;k<e;k++){var f=b[k];var m=[];if(!f.sType&&f._sManualType)f.sType=f._sManualType;else if(!f.sType){var p=0;for(h=
-d.length;p<h;p++){var v=0;for(g=c.length;v<g;v++){m[v]===n&&(m[v]=F(a,v,k,"type"));var u=d[p](m[v],a);if(!u&&p!==d.length-1)break;if("html"===u)break}if(u){f.sType=u;break}}f.sType||(f.sType="string")}}}function mb(a,b,c,d){var e,h,g,k=a.aoColumns;if(b)for(e=b.length-1;0<=e;e--){var l=b[e];var m=l.targets!==n?l.targets:l.aTargets;f.isArray(m)||(m=[m]);var p=0;for(h=m.length;p<h;p++)if("number"===typeof m[p]&&0<=m[p]){for(;k.length<=m[p];)Ha(a);d(m[p],l)}else if("number"===typeof m[p]&&0>m[p])d(k.length+
-m[p],l);else if("string"===typeof m[p]){var v=0;for(g=k.length;v<g;v++)("_all"==m[p]||f(k[v].nTh).hasClass(m[p]))&&d(v,l)}}if(c)for(e=0,a=c.length;e<a;e++)d(e,c[e])}function R(a,b,c,d){var e=a.aoData.length,h=f.extend(!0,{},q.models.oRow,{src:c?"dom":"data",idx:e});h._aData=b;a.aoData.push(h);for(var g=a.aoColumns,k=0,l=g.length;k<l;k++)g[k].sType=null;a.aiDisplayMaster.push(e);b=a.rowIdFn(b);b!==n&&(a.aIds[b]=h);!c&&a.oFeatures.bDeferRender||Ka(a,e,c,d);return e}function oa(a,b){var c;b instanceof
-f||(b=f(b));return b.map(function(b,e){c=La(a,e);return R(a,c.data,e,c.cells)})}function F(a,b,c,d){var e=a.iDraw,h=a.aoColumns[c],g=a.aoData[b]._aData,k=h.sDefaultContent,f=h.fnGetData(g,d,{settings:a,row:b,col:c});if(f===n)return a.iDrawError!=e&&null===k&&(O(a,0,"Requested unknown parameter "+("function"==typeof h.mData?"{function}":"'"+h.mData+"'")+" for row "+b+", column "+c,4),a.iDrawError=e),k;if((f===g||null===f)&&null!==k&&d!==n)f=k;else if("function"===typeof f)return f.call(g);return null===
-f&&"display"==d?"":f}function nb(a,b,c,d){a.aoColumns[c].fnSetData(a.aoData[b]._aData,d,{settings:a,row:b,col:c})}function Ma(a){return f.map(a.match(/(\\.|[^\.])+/g)||[""],function(a){return a.replace(/\\\./g,".")})}function T(a){if(f.isPlainObject(a)){var b={};f.each(a,function(a,c){c&&(b[a]=T(c))});return function(a,c,h,g){var d=b[c]||b._;return d!==n?d(a,c,h,g):a}}if(null===a)return function(a){return a};if("function"===typeof a)return function(b,c,h,g){return a(b,c,h,g)};if("string"!==typeof a||
--1===a.indexOf(".")&&-1===a.indexOf("[")&&-1===a.indexOf("("))return function(b,c){return b[a]};var c=function(a,b,h){if(""!==h){var d=Ma(h);for(var e=0,l=d.length;e<l;e++){h=d[e].match(ca);var m=d[e].match(W);if(h){d[e]=d[e].replace(ca,"");""!==d[e]&&(a=a[d[e]]);m=[];d.splice(0,e+1);d=d.join(".");if(f.isArray(a))for(e=0,l=a.length;e<l;e++)m.push(c(a[e],b,d));a=h[0].substring(1,h[0].length-1);a=""===a?m:m.join(a);break}else if(m){d[e]=d[e].replace(W,"");a=a[d[e]]();continue}if(null===a||a[d[e]]===
-n)return n;a=a[d[e]]}}return a};return function(b,e){return c(b,e,a)}}function Q(a){if(f.isPlainObject(a))return Q(a._);if(null===a)return function(){};if("function"===typeof a)return function(b,d,e){a(b,"set",d,e)};if("string"!==typeof a||-1===a.indexOf(".")&&-1===a.indexOf("[")&&-1===a.indexOf("("))return function(b,d){b[a]=d};var b=function(a,d,e){e=Ma(e);var c=e[e.length-1];for(var g,k,l=0,m=e.length-1;l<m;l++){g=e[l].match(ca);k=e[l].match(W);if(g){e[l]=e[l].replace(ca,"");a[e[l]]=[];c=e.slice();
-c.splice(0,l+1);g=c.join(".");if(f.isArray(d))for(k=0,m=d.length;k<m;k++)c={},b(c,d[k],g),a[e[l]].push(c);else a[e[l]]=d;return}k&&(e[l]=e[l].replace(W,""),a=a[e[l]](d));if(null===a[e[l]]||a[e[l]]===n)a[e[l]]={};a=a[e[l]]}if(c.match(W))a[c.replace(W,"")](d);else a[c.replace(ca,"")]=d};return function(c,d){return b(c,d,a)}}function Na(a){return K(a.aoData,"_aData")}function pa(a){a.aoData.length=0;a.aiDisplayMaster.length=0;a.aiDisplay.length=0;a.aIds={}}function qa(a,b,c){for(var d=-1,e=0,h=a.length;e<
-h;e++)a[e]==b?d=e:a[e]>b&&a[e]--; -1!=d&&c===n&&a.splice(d,1)}function da(a,b,c,d){var e=a.aoData[b],h,g=function(c,d){for(;c.childNodes.length;)c.removeChild(c.firstChild);c.innerHTML=F(a,b,d,"display")};if("dom"!==c&&(c&&"auto"!==c||"dom"!==e.src)){var k=e.anCells;if(k)if(d!==n)g(k[d],d);else for(c=0,h=k.length;c<h;c++)g(k[c],c)}else e._aData=La(a,e,d,d===n?n:e._aData).data;e._aSortData=null;e._aFilterData=null;g=a.aoColumns;if(d!==n)g[d].sType=null;else{c=0;for(h=g.length;c<h;c++)g[c].sType=null;
-Oa(a,e)}}function La(a,b,c,d){var e=[],h=b.firstChild,g,k=0,l,m=a.aoColumns,p=a._rowReadObject;d=d!==n?d:p?{}:[];var v=function(a,b){if("string"===typeof a){var c=a.indexOf("@");-1!==c&&(c=a.substring(c+1),Q(a)(d,b.getAttribute(c)))}},u=function(a){if(c===n||c===k)g=m[k],l=f.trim(a.innerHTML),g&&g._bAttrSrc?(Q(g.mData._)(d,l),v(g.mData.sort,a),v(g.mData.type,a),v(g.mData.filter,a)):p?(g._setter||(g._setter=Q(g.mData)),g._setter(d,l)):d[k]=l;k++};if(h)for(;h;){var q=h.nodeName.toUpperCase();if("TD"==
-q||"TH"==q)u(h),e.push(h);h=h.nextSibling}else for(e=b.anCells,h=0,q=e.length;h<q;h++)u(e[h]);(b=b.firstChild?b:b.nTr)&&(b=b.getAttribute("id"))&&Q(a.rowId)(d,b);return{data:d,cells:e}}function Ka(a,b,c,d){var e=a.aoData[b],h=e._aData,g=[],k,l;if(null===e.nTr){var m=c||w.createElement("tr");e.nTr=m;e.anCells=g;m._DT_RowIndex=b;Oa(a,e);var p=0;for(k=a.aoColumns.length;p<k;p++){var v=a.aoColumns[p];var n=(l=c?!1:!0)?w.createElement(v.sCellType):d[p];n._DT_CellIndex={row:b,column:p};g.push(n);if(l||
-!(c&&!v.mRender&&v.mData===p||f.isPlainObject(v.mData)&&v.mData._===p+".display"))n.innerHTML=F(a,b,p,"display");v.sClass&&(n.className+=" "+v.sClass);v.bVisible&&!c?m.appendChild(n):!v.bVisible&&c&&n.parentNode.removeChild(n);v.fnCreatedCell&&v.fnCreatedCell.call(a.oInstance,n,F(a,b,p),h,b,p)}A(a,"aoRowCreatedCallback",null,[m,h,b,g])}e.nTr.setAttribute("role","row")}function Oa(a,b){var c=b.nTr,d=b._aData;if(c){if(a=a.rowIdFn(d))c.id=a;d.DT_RowClass&&(a=d.DT_RowClass.split(" "),b.__rowc=b.__rowc?
-sa(b.__rowc.concat(a)):a,f(c).removeClass(b.__rowc.join(" ")).addClass(d.DT_RowClass));d.DT_RowAttr&&f(c).attr(d.DT_RowAttr);d.DT_RowData&&f(c).data(d.DT_RowData)}}function ob(a){var b,c,d=a.nTHead,e=a.nTFoot,h=0===f("th, td",d).length,g=a.oClasses,k=a.aoColumns;h&&(c=f("<tr/>").appendTo(d));var l=0;for(b=k.length;l<b;l++){var m=k[l];var p=f(m.nTh).addClass(m.sClass);h&&p.appendTo(c);a.oFeatures.bSort&&(p.addClass(m.sSortingClass),!1!==m.bSortable&&(p.attr("tabindex",a.iTabIndex).attr("aria-controls",
-a.sTableId),Pa(a,m.nTh,l)));m.sTitle!=p[0].innerHTML&&p.html(m.sTitle);Qa(a,"header")(a,p,m,g)}h&&ea(a.aoHeader,d);f(d).find(">tr").attr("role","row");f(d).find(">tr>th, >tr>td").addClass(g.sHeaderTH);f(e).find(">tr>th, >tr>td").addClass(g.sFooterTH);if(null!==e)for(a=a.aoFooter[0],l=0,b=a.length;l<b;l++)m=k[l],m.nTf=a[l].cell,m.sClass&&f(m.nTf).addClass(m.sClass)}function fa(a,b,c){var d,e,h=[],g=[],k=a.aoColumns.length;if(b){c===n&&(c=!1);var l=0;for(d=b.length;l<d;l++){h[l]=b[l].slice();h[l].nTr=
-b[l].nTr;for(e=k-1;0<=e;e--)a.aoColumns[e].bVisible||c||h[l].splice(e,1);g.push([])}l=0;for(d=h.length;l<d;l++){if(a=h[l].nTr)for(;e=a.firstChild;)a.removeChild(e);e=0;for(b=h[l].length;e<b;e++){var m=k=1;if(g[l][e]===n){a.appendChild(h[l][e].cell);for(g[l][e]=1;h[l+k]!==n&&h[l][e].cell==h[l+k][e].cell;)g[l+k][e]=1,k++;for(;h[l][e+m]!==n&&h[l][e].cell==h[l][e+m].cell;){for(c=0;c<k;c++)g[l+c][e+m]=1;m++}f(h[l][e].cell).attr("rowspan",k).attr("colspan",m)}}}}}function S(a){var b=A(a,"aoPreDrawCallback",
-"preDraw",[a]);if(-1!==f.inArray(!1,b))J(a,!1);else{b=[];var c=0,d=a.asStripeClasses,e=d.length,h=a.oLanguage,g=a.iInitDisplayStart,k="ssp"==I(a),l=a.aiDisplay;a.bDrawing=!0;g!==n&&-1!==g&&(a._iDisplayStart=k?g:g>=a.fnRecordsDisplay()?0:g,a.iInitDisplayStart=-1);g=a._iDisplayStart;var m=a.fnDisplayEnd();if(a.bDeferLoading)a.bDeferLoading=!1,a.iDraw++,J(a,!1);else if(!k)a.iDraw++;else if(!a.bDestroying&&!pb(a))return;if(0!==l.length)for(h=k?a.aoData.length:m,k=k?0:g;k<h;k++){var p=l[k],v=a.aoData[p];
-null===v.nTr&&Ka(a,p);var u=v.nTr;if(0!==e){var q=d[c%e];v._sRowStripe!=q&&(f(u).removeClass(v._sRowStripe).addClass(q),v._sRowStripe=q)}A(a,"aoRowCallback",null,[u,v._aData,c,k,p]);b.push(u);c++}else c=h.sZeroRecords,1==a.iDraw&&"ajax"==I(a)?c=h.sLoadingRecords:h.sEmptyTable&&0===a.fnRecordsTotal()&&(c=h.sEmptyTable),b[0]=f("<tr/>",{"class":e?d[0]:""}).append(f("<td />",{valign:"top",colSpan:V(a),"class":a.oClasses.sRowEmpty}).html(c))[0];A(a,"aoHeaderCallback","header",[f(a.nTHead).children("tr")[0],
-Na(a),g,m,l]);A(a,"aoFooterCallback","footer",[f(a.nTFoot).children("tr")[0],Na(a),g,m,l]);d=f(a.nTBody);d.children().detach();d.append(f(b));A(a,"aoDrawCallback","draw",[a]);a.bSorted=!1;a.bFiltered=!1;a.bDrawing=!1}}function U(a,b){var c=a.oFeatures,d=c.bFilter;c.bSort&&qb(a);d?ha(a,a.oPreviousSearch):a.aiDisplay=a.aiDisplayMaster.slice();!0!==b&&(a._iDisplayStart=0);a._drawHold=b;S(a);a._drawHold=!1}function rb(a){var b=a.oClasses,c=f(a.nTable);c=f("<div/>").insertBefore(c);var d=a.oFeatures,e=
-f("<div/>",{id:a.sTableId+"_wrapper","class":b.sWrapper+(a.nTFoot?"":" "+b.sNoFooter)});a.nHolding=c[0];a.nTableWrapper=e[0];a.nTableReinsertBefore=a.nTable.nextSibling;for(var h=a.sDom.split(""),g,k,l,m,p,n,u=0;u<h.length;u++){g=null;k=h[u];if("<"==k){l=f("<div/>")[0];m=h[u+1];if("'"==m||'"'==m){p="";for(n=2;h[u+n]!=m;)p+=h[u+n],n++;"H"==p?p=b.sJUIHeader:"F"==p&&(p=b.sJUIFooter);-1!=p.indexOf(".")?(m=p.split("."),l.id=m[0].substr(1,m[0].length-1),l.className=m[1]):"#"==p.charAt(0)?l.id=p.substr(1,
-p.length-1):l.className=p;u+=n}e.append(l);e=f(l)}else if(">"==k)e=e.parent();else if("l"==k&&d.bPaginate&&d.bLengthChange)g=sb(a);else if("f"==k&&d.bFilter)g=tb(a);else if("r"==k&&d.bProcessing)g=ub(a);else if("t"==k)g=vb(a);else if("i"==k&&d.bInfo)g=wb(a);else if("p"==k&&d.bPaginate)g=xb(a);else if(0!==q.ext.feature.length)for(l=q.ext.feature,n=0,m=l.length;n<m;n++)if(k==l[n].cFeature){g=l[n].fnInit(a);break}g&&(l=a.aanFeatures,l[k]||(l[k]=[]),l[k].push(g),e.append(g))}c.replaceWith(e);a.nHolding=
-null}function ea(a,b){b=f(b).children("tr");var c,d,e;a.splice(0,a.length);var h=0;for(e=b.length;h<e;h++)a.push([]);h=0;for(e=b.length;h<e;h++){var g=b[h];for(c=g.firstChild;c;){if("TD"==c.nodeName.toUpperCase()||"TH"==c.nodeName.toUpperCase()){var k=1*c.getAttribute("colspan");var l=1*c.getAttribute("rowspan");k=k&&0!==k&&1!==k?k:1;l=l&&0!==l&&1!==l?l:1;var m=0;for(d=a[h];d[m];)m++;var p=m;var n=1===k?!0:!1;for(d=0;d<k;d++)for(m=0;m<l;m++)a[h+m][p+d]={cell:c,unique:n},a[h+m].nTr=g}c=c.nextSibling}}}
-function ta(a,b,c){var d=[];c||(c=a.aoHeader,b&&(c=[],ea(c,b)));b=0;for(var e=c.length;b<e;b++)for(var h=0,g=c[b].length;h<g;h++)!c[b][h].unique||d[h]&&a.bSortCellsTop||(d[h]=c[b][h].cell);return d}function ua(a,b,c){A(a,"aoServerParams","serverParams",[b]);if(b&&f.isArray(b)){var d={},e=/(.*?)\[\]$/;f.each(b,function(a,b){(a=b.name.match(e))?(a=a[0],d[a]||(d[a]=[]),d[a].push(b.value)):d[b.name]=b.value});b=d}var h=a.ajax,g=a.oInstance,k=function(b){A(a,null,"xhr",[a,b,a.jqXHR]);c(b)};if(f.isPlainObject(h)&&
-h.data){var l=h.data;var m="function"===typeof l?l(b,a):l;b="function"===typeof l&&m?m:f.extend(!0,b,m);delete h.data}m={data:b,success:function(b){var c=b.error||b.sError;c&&O(a,0,c);a.json=b;k(b)},dataType:"json",cache:!1,type:a.sServerMethod,error:function(b,c,d){d=A(a,null,"xhr",[a,null,a.jqXHR]);-1===f.inArray(!0,d)&&("parsererror"==c?O(a,0,"Invalid JSON response",1):4===b.readyState&&O(a,0,"Ajax error",7));J(a,!1)}};a.oAjaxData=b;A(a,null,"preXhr",[a,b]);a.fnServerData?a.fnServerData.call(g,
-a.sAjaxSource,f.map(b,function(a,b){return{name:b,value:a}}),k,a):a.sAjaxSource||"string"===typeof h?a.jqXHR=f.ajax(f.extend(m,{url:h||a.sAjaxSource})):"function"===typeof h?a.jqXHR=h.call(g,b,k,a):(a.jqXHR=f.ajax(f.extend(m,h)),h.data=l)}function pb(a){return a.bAjaxDataGet?(a.iDraw++,J(a,!0),ua(a,yb(a),function(b){zb(a,b)}),!1):!0}function yb(a){var b=a.aoColumns,c=b.length,d=a.oFeatures,e=a.oPreviousSearch,h=a.aoPreSearchCols,g=[],k=X(a);var l=a._iDisplayStart;var m=!1!==d.bPaginate?a._iDisplayLength:
--1;var p=function(a,b){g.push({name:a,value:b})};p("sEcho",a.iDraw);p("iColumns",c);p("sColumns",K(b,"sName").join(","));p("iDisplayStart",l);p("iDisplayLength",m);var n={draw:a.iDraw,columns:[],order:[],start:l,length:m,search:{value:e.sSearch,regex:e.bRegex}};for(l=0;l<c;l++){var u=b[l];var ra=h[l];m="function"==typeof u.mData?"function":u.mData;n.columns.push({data:m,name:u.sName,searchable:u.bSearchable,orderable:u.bSortable,search:{value:ra.sSearch,regex:ra.bRegex}});p("mDataProp_"+l,m);d.bFilter&&
-(p("sSearch_"+l,ra.sSearch),p("bRegex_"+l,ra.bRegex),p("bSearchable_"+l,u.bSearchable));d.bSort&&p("bSortable_"+l,u.bSortable)}d.bFilter&&(p("sSearch",e.sSearch),p("bRegex",e.bRegex));d.bSort&&(f.each(k,function(a,b){n.order.push({column:b.col,dir:b.dir});p("iSortCol_"+a,b.col);p("sSortDir_"+a,b.dir)}),p("iSortingCols",k.length));b=q.ext.legacy.ajax;return null===b?a.sAjaxSource?g:n:b?g:n}function zb(a,b){var c=function(a,c){return b[a]!==n?b[a]:b[c]},d=va(a,b),e=c("sEcho","draw"),h=c("iTotalRecords",
-"recordsTotal");c=c("iTotalDisplayRecords","recordsFiltered");if(e!==n){if(1*e<a.iDraw)return;a.iDraw=1*e}pa(a);a._iRecordsTotal=parseInt(h,10);a._iRecordsDisplay=parseInt(c,10);e=0;for(h=d.length;e<h;e++)R(a,d[e]);a.aiDisplay=a.aiDisplayMaster.slice();a.bAjaxDataGet=!1;S(a);a._bInitComplete||wa(a,b);a.bAjaxDataGet=!0;J(a,!1)}function va(a,b){a=f.isPlainObject(a.ajax)&&a.ajax.dataSrc!==n?a.ajax.dataSrc:a.sAjaxDataProp;return"data"===a?b.aaData||b[a]:""!==a?T(a)(b):b}function tb(a){var b=a.oClasses,
-c=a.sTableId,d=a.oLanguage,e=a.oPreviousSearch,h=a.aanFeatures,g='<input type="search" class="'+b.sFilterInput+'"/>',k=d.sSearch;k=k.match(/_INPUT_/)?k.replace("_INPUT_",g):k+g;b=f("<div/>",{id:h.f?null:c+"_filter","class":b.sFilter}).append(f("<label/>").append(k));var l=function(){var b=this.value?this.value:"";b!=e.sSearch&&(ha(a,{sSearch:b,bRegex:e.bRegex,bSmart:e.bSmart,bCaseInsensitive:e.bCaseInsensitive}),a._iDisplayStart=0,S(a))};h=null!==a.searchDelay?a.searchDelay:"ssp"===I(a)?400:0;var m=
-f("input",b).val(e.sSearch).attr("placeholder",d.sSearchPlaceholder).on("keyup.DT search.DT input.DT paste.DT cut.DT",h?Ra(l,h):l).on("mouseup",function(a){setTimeout(function(){l.call(m[0])},10)}).on("keypress.DT",function(a){if(13==a.keyCode)return!1}).attr("aria-controls",c);f(a.nTable).on("search.dt.DT",function(b,c){if(a===c)try{m[0]!==w.activeElement&&m.val(e.sSearch)}catch(u){}});return b[0]}function ha(a,b,c){var d=a.oPreviousSearch,e=a.aoPreSearchCols,h=function(a){d.sSearch=a.sSearch;d.bRegex=
-a.bRegex;d.bSmart=a.bSmart;d.bCaseInsensitive=a.bCaseInsensitive},g=function(a){return a.bEscapeRegex!==n?!a.bEscapeRegex:a.bRegex};Ja(a);if("ssp"!=I(a)){Ab(a,b.sSearch,c,g(b),b.bSmart,b.bCaseInsensitive);h(b);for(b=0;b<e.length;b++)Bb(a,e[b].sSearch,b,g(e[b]),e[b].bSmart,e[b].bCaseInsensitive);Cb(a)}else h(b);a.bFiltered=!0;A(a,null,"search",[a])}function Cb(a){for(var b=q.ext.search,c=a.aiDisplay,d,e,h=0,g=b.length;h<g;h++){for(var k=[],l=0,m=c.length;l<m;l++)e=c[l],d=a.aoData[e],b[h](a,d._aFilterData,
-e,d._aData,l)&&k.push(e);c.length=0;f.merge(c,k)}}function Bb(a,b,c,d,e,h){if(""!==b){var g=[],k=a.aiDisplay;d=Sa(b,d,e,h);for(e=0;e<k.length;e++)b=a.aoData[k[e]]._aFilterData[c],d.test(b)&&g.push(k[e]);a.aiDisplay=g}}function Ab(a,b,c,d,e,h){e=Sa(b,d,e,h);var g=a.oPreviousSearch.sSearch,k=a.aiDisplayMaster;h=[];0!==q.ext.search.length&&(c=!0);var f=Db(a);if(0>=b.length)a.aiDisplay=k.slice();else{if(f||c||d||g.length>b.length||0!==b.indexOf(g)||a.bSorted)a.aiDisplay=k.slice();b=a.aiDisplay;for(c=
-0;c<b.length;c++)e.test(a.aoData[b[c]]._sFilterRow)&&h.push(b[c]);a.aiDisplay=h}}function Sa(a,b,c,d){a=b?a:Ta(a);c&&(a="^(?=.*?"+f.map(a.match(/"[^"]+"|[^ ]+/g)||[""],function(a){if('"'===a.charAt(0)){var b=a.match(/^"(.*)"$/);a=b?b[1]:a}return a.replace('"',"")}).join(")(?=.*?")+").*$");return new RegExp(a,d?"i":"")}function Db(a){var b=a.aoColumns,c,d,e=q.ext.type.search;var h=!1;var g=0;for(c=a.aoData.length;g<c;g++){var k=a.aoData[g];if(!k._aFilterData){var f=[];var m=0;for(d=b.length;m<d;m++){h=
-b[m];if(h.bSearchable){var p=F(a,g,m,"filter");e[h.sType]&&(p=e[h.sType](p));null===p&&(p="");"string"!==typeof p&&p.toString&&(p=p.toString())}else p="";p.indexOf&&-1!==p.indexOf("&")&&(xa.innerHTML=p,p=$b?xa.textContent:xa.innerText);p.replace&&(p=p.replace(/[\r\n\u2028]/g,""));f.push(p)}k._aFilterData=f;k._sFilterRow=f.join("  ");h=!0}}return h}function Eb(a){return{search:a.sSearch,smart:a.bSmart,regex:a.bRegex,caseInsensitive:a.bCaseInsensitive}}function Fb(a){return{sSearch:a.search,bSmart:a.smart,
-bRegex:a.regex,bCaseInsensitive:a.caseInsensitive}}function wb(a){var b=a.sTableId,c=a.aanFeatures.i,d=f("<div/>",{"class":a.oClasses.sInfo,id:c?null:b+"_info"});c||(a.aoDrawCallback.push({fn:Gb,sName:"information"}),d.attr("role","status").attr("aria-live","polite"),f(a.nTable).attr("aria-describedby",b+"_info"));return d[0]}function Gb(a){var b=a.aanFeatures.i;if(0!==b.length){var c=a.oLanguage,d=a._iDisplayStart+1,e=a.fnDisplayEnd(),h=a.fnRecordsTotal(),g=a.fnRecordsDisplay(),k=g?c.sInfo:c.sInfoEmpty;
-g!==h&&(k+=" "+c.sInfoFiltered);k+=c.sInfoPostFix;k=Hb(a,k);c=c.fnInfoCallback;null!==c&&(k=c.call(a.oInstance,a,d,e,h,g,k));f(b).html(k)}}function Hb(a,b){var c=a.fnFormatNumber,d=a._iDisplayStart+1,e=a._iDisplayLength,h=a.fnRecordsDisplay(),g=-1===e;return b.replace(/_START_/g,c.call(a,d)).replace(/_END_/g,c.call(a,a.fnDisplayEnd())).replace(/_MAX_/g,c.call(a,a.fnRecordsTotal())).replace(/_TOTAL_/g,c.call(a,h)).replace(/_PAGE_/g,c.call(a,g?1:Math.ceil(d/e))).replace(/_PAGES_/g,c.call(a,g?1:Math.ceil(h/
-e)))}function ia(a){var b=a.iInitDisplayStart,c=a.aoColumns;var d=a.oFeatures;var e=a.bDeferLoading;if(a.bInitialised){rb(a);ob(a);fa(a,a.aoHeader);fa(a,a.aoFooter);J(a,!0);d.bAutoWidth&&Ia(a);var h=0;for(d=c.length;h<d;h++){var g=c[h];g.sWidth&&(g.nTh.style.width=B(g.sWidth))}A(a,null,"preInit",[a]);U(a);c=I(a);if("ssp"!=c||e)"ajax"==c?ua(a,[],function(c){var d=va(a,c);for(h=0;h<d.length;h++)R(a,d[h]);a.iInitDisplayStart=b;U(a);J(a,!1);wa(a,c)},a):(J(a,!1),wa(a))}else setTimeout(function(){ia(a)},
-200)}function wa(a,b){a._bInitComplete=!0;(b||a.oInit.aaData)&&Z(a);A(a,null,"plugin-init",[a,b]);A(a,"aoInitComplete","init",[a,b])}function Ua(a,b){b=parseInt(b,10);a._iDisplayLength=b;Va(a);A(a,null,"length",[a,b])}function sb(a){var b=a.oClasses,c=a.sTableId,d=a.aLengthMenu,e=f.isArray(d[0]),h=e?d[0]:d;d=e?d[1]:d;e=f("<select/>",{name:c+"_length","aria-controls":c,"class":b.sLengthSelect});for(var g=0,k=h.length;g<k;g++)e[0][g]=new Option("number"===typeof d[g]?a.fnFormatNumber(d[g]):d[g],h[g]);
-var l=f("<div><label/></div>").addClass(b.sLength);a.aanFeatures.l||(l[0].id=c+"_length");l.children().append(a.oLanguage.sLengthMenu.replace("_MENU_",e[0].outerHTML));f("select",l).val(a._iDisplayLength).on("change.DT",function(b){Ua(a,f(this).val());S(a)});f(a.nTable).on("length.dt.DT",function(b,c,d){a===c&&f("select",l).val(d)});return l[0]}function xb(a){var b=a.sPaginationType,c=q.ext.pager[b],d="function"===typeof c,e=function(a){S(a)};b=f("<div/>").addClass(a.oClasses.sPaging+b)[0];var h=
-a.aanFeatures;d||c.fnInit(a,b,e);h.p||(b.id=a.sTableId+"_paginate",a.aoDrawCallback.push({fn:function(a){if(d){var b=a._iDisplayStart,g=a._iDisplayLength,f=a.fnRecordsDisplay(),p=-1===g;b=p?0:Math.ceil(b/g);g=p?1:Math.ceil(f/g);f=c(b,g);var n;p=0;for(n=h.p.length;p<n;p++)Qa(a,"pageButton")(a,h.p[p],p,f,b,g)}else c.fnUpdate(a,e)},sName:"pagination"}));return b}function Wa(a,b,c){var d=a._iDisplayStart,e=a._iDisplayLength,h=a.fnRecordsDisplay();0===h||-1===e?d=0:"number"===typeof b?(d=b*e,d>h&&(d=0)):
-"first"==b?d=0:"previous"==b?(d=0<=e?d-e:0,0>d&&(d=0)):"next"==b?d+e<h&&(d+=e):"last"==b?d=Math.floor((h-1)/e)*e:O(a,0,"Unknown paging action: "+b,5);b=a._iDisplayStart!==d;a._iDisplayStart=d;b&&(A(a,null,"page",[a]),c&&S(a));return b}function ub(a){return f("<div/>",{id:a.aanFeatures.r?null:a.sTableId+"_processing","class":a.oClasses.sProcessing}).html(a.oLanguage.sProcessing).insertBefore(a.nTable)[0]}function J(a,b){a.oFeatures.bProcessing&&f(a.aanFeatures.r).css("display",b?"block":"none");A(a,
-null,"processing",[a,b])}function vb(a){var b=f(a.nTable);b.attr("role","grid");var c=a.oScroll;if(""===c.sX&&""===c.sY)return a.nTable;var d=c.sX,e=c.sY,h=a.oClasses,g=b.children("caption"),k=g.length?g[0]._captionSide:null,l=f(b[0].cloneNode(!1)),m=f(b[0].cloneNode(!1)),p=b.children("tfoot");p.length||(p=null);l=f("<div/>",{"class":h.sScrollWrapper}).append(f("<div/>",{"class":h.sScrollHead}).css({overflow:"hidden",position:"relative",border:0,width:d?d?B(d):null:"100%"}).append(f("<div/>",{"class":h.sScrollHeadInner}).css({"box-sizing":"content-box",
-width:c.sXInner||"100%"}).append(l.removeAttr("id").css("margin-left",0).append("top"===k?g:null).append(b.children("thead"))))).append(f("<div/>",{"class":h.sScrollBody}).css({position:"relative",overflow:"auto",width:d?B(d):null}).append(b));p&&l.append(f("<div/>",{"class":h.sScrollFoot}).css({overflow:"hidden",border:0,width:d?d?B(d):null:"100%"}).append(f("<div/>",{"class":h.sScrollFootInner}).append(m.removeAttr("id").css("margin-left",0).append("bottom"===k?g:null).append(b.children("tfoot")))));
-b=l.children();var n=b[0];h=b[1];var u=p?b[2]:null;if(d)f(h).on("scroll.DT",function(a){a=this.scrollLeft;n.scrollLeft=a;p&&(u.scrollLeft=a)});f(h).css("max-height",e);c.bCollapse||f(h).css("height",e);a.nScrollHead=n;a.nScrollBody=h;a.nScrollFoot=u;a.aoDrawCallback.push({fn:ma,sName:"scrolling"});return l[0]}function ma(a){var b=a.oScroll,c=b.sX,d=b.sXInner,e=b.sY;b=b.iBarWidth;var h=f(a.nScrollHead),g=h[0].style,k=h.children("div"),l=k[0].style,m=k.children("table");k=a.nScrollBody;var p=f(k),v=
-k.style,u=f(a.nScrollFoot).children("div"),q=u.children("table"),t=f(a.nTHead),r=f(a.nTable),x=r[0],ya=x.style,w=a.nTFoot?f(a.nTFoot):null,y=a.oBrowser,A=y.bScrollOversize,ac=K(a.aoColumns,"nTh"),Xa=[],z=[],C=[],G=[],H,I=function(a){a=a.style;a.paddingTop="0";a.paddingBottom="0";a.borderTopWidth="0";a.borderBottomWidth="0";a.height=0};var D=k.scrollHeight>k.clientHeight;if(a.scrollBarVis!==D&&a.scrollBarVis!==n)a.scrollBarVis=D,Z(a);else{a.scrollBarVis=D;r.children("thead, tfoot").remove();if(w){var E=
-w.clone().prependTo(r);var F=w.find("tr");E=E.find("tr")}var J=t.clone().prependTo(r);t=t.find("tr");D=J.find("tr");J.find("th, td").removeAttr("tabindex");c||(v.width="100%",h[0].style.width="100%");f.each(ta(a,J),function(b,c){H=aa(a,b);c.style.width=a.aoColumns[H].sWidth});w&&N(function(a){a.style.width=""},E);h=r.outerWidth();""===c?(ya.width="100%",A&&(r.find("tbody").height()>k.offsetHeight||"scroll"==p.css("overflow-y"))&&(ya.width=B(r.outerWidth()-b)),h=r.outerWidth()):""!==d&&(ya.width=B(d),
-h=r.outerWidth());N(I,D);N(function(a){C.push(a.innerHTML);Xa.push(B(f(a).css("width")))},D);N(function(a,b){-1!==f.inArray(a,ac)&&(a.style.width=Xa[b])},t);f(D).height(0);w&&(N(I,E),N(function(a){G.push(a.innerHTML);z.push(B(f(a).css("width")))},E),N(function(a,b){a.style.width=z[b]},F),f(E).height(0));N(function(a,b){a.innerHTML='<div class="dataTables_sizing">'+C[b]+"</div>";a.childNodes[0].style.height="0";a.childNodes[0].style.overflow="hidden";a.style.width=Xa[b]},D);w&&N(function(a,b){a.innerHTML=
-'<div class="dataTables_sizing">'+G[b]+"</div>";a.childNodes[0].style.height="0";a.childNodes[0].style.overflow="hidden";a.style.width=z[b]},E);r.outerWidth()<h?(F=k.scrollHeight>k.offsetHeight||"scroll"==p.css("overflow-y")?h+b:h,A&&(k.scrollHeight>k.offsetHeight||"scroll"==p.css("overflow-y"))&&(ya.width=B(F-b)),""!==c&&""===d||O(a,1,"Possible column misalignment",6)):F="100%";v.width=B(F);g.width=B(F);w&&(a.nScrollFoot.style.width=B(F));!e&&A&&(v.height=B(x.offsetHeight+b));c=r.outerWidth();m[0].style.width=
-B(c);l.width=B(c);d=r.height()>k.clientHeight||"scroll"==p.css("overflow-y");e="padding"+(y.bScrollbarLeft?"Left":"Right");l[e]=d?b+"px":"0px";w&&(q[0].style.width=B(c),u[0].style.width=B(c),u[0].style[e]=d?b+"px":"0px");r.children("colgroup").insertBefore(r.children("thead"));p.trigger("scroll");!a.bSorted&&!a.bFiltered||a._drawHold||(k.scrollTop=0)}}function N(a,b,c){for(var d=0,e=0,h=b.length,g,k;e<h;){g=b[e].firstChild;for(k=c?c[e].firstChild:null;g;)1===g.nodeType&&(c?a(g,k,d):a(g,d),d++),g=
-g.nextSibling,k=c?k.nextSibling:null;e++}}function Ia(a){var b=a.nTable,c=a.aoColumns,d=a.oScroll,e=d.sY,h=d.sX,g=d.sXInner,k=c.length,l=na(a,"bVisible"),m=f("th",a.nTHead),p=b.getAttribute("width"),n=b.parentNode,u=!1,q,t=a.oBrowser;d=t.bScrollOversize;(q=b.style.width)&&-1!==q.indexOf("%")&&(p=q);for(q=0;q<l.length;q++){var r=c[l[q]];null!==r.sWidth&&(r.sWidth=Ib(r.sWidthOrig,n),u=!0)}if(d||!u&&!h&&!e&&k==V(a)&&k==m.length)for(q=0;q<k;q++)l=aa(a,q),null!==l&&(c[l].sWidth=B(m.eq(q).width()));else{k=
-f(b).clone().css("visibility","hidden").removeAttr("id");k.find("tbody tr").remove();var w=f("<tr/>").appendTo(k.find("tbody"));k.find("thead, tfoot").remove();k.append(f(a.nTHead).clone()).append(f(a.nTFoot).clone());k.find("tfoot th, tfoot td").css("width","");m=ta(a,k.find("thead")[0]);for(q=0;q<l.length;q++)r=c[l[q]],m[q].style.width=null!==r.sWidthOrig&&""!==r.sWidthOrig?B(r.sWidthOrig):"",r.sWidthOrig&&h&&f(m[q]).append(f("<div/>").css({width:r.sWidthOrig,margin:0,padding:0,border:0,height:1}));
-if(a.aoData.length)for(q=0;q<l.length;q++)u=l[q],r=c[u],f(Jb(a,u)).clone(!1).append(r.sContentPadding).appendTo(w);f("[name]",k).removeAttr("name");r=f("<div/>").css(h||e?{position:"absolute",top:0,left:0,height:1,right:0,overflow:"hidden"}:{}).append(k).appendTo(n);h&&g?k.width(g):h?(k.css("width","auto"),k.removeAttr("width"),k.width()<n.clientWidth&&p&&k.width(n.clientWidth)):e?k.width(n.clientWidth):p&&k.width(p);for(q=e=0;q<l.length;q++)n=f(m[q]),g=n.outerWidth()-n.width(),n=t.bBounding?Math.ceil(m[q].getBoundingClientRect().width):
-n.outerWidth(),e+=n,c[l[q]].sWidth=B(n-g);b.style.width=B(e);r.remove()}p&&(b.style.width=B(p));!p&&!h||a._reszEvt||(b=function(){f(y).on("resize.DT-"+a.sInstance,Ra(function(){Z(a)}))},d?setTimeout(b,1E3):b(),a._reszEvt=!0)}function Ib(a,b){if(!a)return 0;a=f("<div/>").css("width",B(a)).appendTo(b||w.body);b=a[0].offsetWidth;a.remove();return b}function Jb(a,b){var c=Kb(a,b);if(0>c)return null;var d=a.aoData[c];return d.nTr?d.anCells[b]:f("<td/>").html(F(a,c,b,"display"))[0]}function Kb(a,b){for(var c,
-d=-1,e=-1,h=0,g=a.aoData.length;h<g;h++)c=F(a,h,b,"display")+"",c=c.replace(bc,""),c=c.replace(/&nbsp;/g," "),c.length>d&&(d=c.length,e=h);return e}function B(a){return null===a?"0px":"number"==typeof a?0>a?"0px":a+"px":a.match(/\d$/)?a+"px":a}function X(a){var b=[],c=a.aoColumns;var d=a.aaSortingFixed;var e=f.isPlainObject(d);var h=[];var g=function(a){a.length&&!f.isArray(a[0])?h.push(a):f.merge(h,a)};f.isArray(d)&&g(d);e&&d.pre&&g(d.pre);g(a.aaSorting);e&&d.post&&g(d.post);for(a=0;a<h.length;a++){var k=
-h[a][0];g=c[k].aDataSort;d=0;for(e=g.length;d<e;d++){var l=g[d];var m=c[l].sType||"string";h[a]._idx===n&&(h[a]._idx=f.inArray(h[a][1],c[l].asSorting));b.push({src:k,col:l,dir:h[a][1],index:h[a]._idx,type:m,formatter:q.ext.type.order[m+"-pre"]})}}return b}function qb(a){var b,c=[],d=q.ext.type.order,e=a.aoData,h=0,g=a.aiDisplayMaster;Ja(a);var k=X(a);var f=0;for(b=k.length;f<b;f++){var m=k[f];m.formatter&&h++;Lb(a,m.col)}if("ssp"!=I(a)&&0!==k.length){f=0;for(b=g.length;f<b;f++)c[g[f]]=f;h===k.length?
-g.sort(function(a,b){var d,h=k.length,g=e[a]._aSortData,f=e[b]._aSortData;for(d=0;d<h;d++){var l=k[d];var m=g[l.col];var p=f[l.col];m=m<p?-1:m>p?1:0;if(0!==m)return"asc"===l.dir?m:-m}m=c[a];p=c[b];return m<p?-1:m>p?1:0}):g.sort(function(a,b){var h,g=k.length,f=e[a]._aSortData,l=e[b]._aSortData;for(h=0;h<g;h++){var m=k[h];var p=f[m.col];var n=l[m.col];m=d[m.type+"-"+m.dir]||d["string-"+m.dir];p=m(p,n);if(0!==p)return p}p=c[a];n=c[b];return p<n?-1:p>n?1:0})}a.bSorted=!0}function Mb(a){var b=a.aoColumns,
-c=X(a);a=a.oLanguage.oAria;for(var d=0,e=b.length;d<e;d++){var h=b[d];var g=h.asSorting;var k=h.sTitle.replace(/<.*?>/g,"");var f=h.nTh;f.removeAttribute("aria-sort");h.bSortable&&(0<c.length&&c[0].col==d?(f.setAttribute("aria-sort","asc"==c[0].dir?"ascending":"descending"),h=g[c[0].index+1]||g[0]):h=g[0],k+="asc"===h?a.sSortAscending:a.sSortDescending);f.setAttribute("aria-label",k)}}function Ya(a,b,c,d){var e=a.aaSorting,h=a.aoColumns[b].asSorting,g=function(a,b){var c=a._idx;c===n&&(c=f.inArray(a[1],
-h));return c+1<h.length?c+1:b?null:0};"number"===typeof e[0]&&(e=a.aaSorting=[e]);c&&a.oFeatures.bSortMulti?(c=f.inArray(b,K(e,"0")),-1!==c?(b=g(e[c],!0),null===b&&1===e.length&&(b=0),null===b?e.splice(c,1):(e[c][1]=h[b],e[c]._idx=b)):(e.push([b,h[0],0]),e[e.length-1]._idx=0)):e.length&&e[0][0]==b?(b=g(e[0]),e.length=1,e[0][1]=h[b],e[0]._idx=b):(e.length=0,e.push([b,h[0]]),e[0]._idx=0);U(a);"function"==typeof d&&d(a)}function Pa(a,b,c,d){var e=a.aoColumns[c];Za(b,{},function(b){!1!==e.bSortable&&
-(a.oFeatures.bProcessing?(J(a,!0),setTimeout(function(){Ya(a,c,b.shiftKey,d);"ssp"!==I(a)&&J(a,!1)},0)):Ya(a,c,b.shiftKey,d))})}function za(a){var b=a.aLastSort,c=a.oClasses.sSortColumn,d=X(a),e=a.oFeatures,h;if(e.bSort&&e.bSortClasses){e=0;for(h=b.length;e<h;e++){var g=b[e].src;f(K(a.aoData,"anCells",g)).removeClass(c+(2>e?e+1:3))}e=0;for(h=d.length;e<h;e++)g=d[e].src,f(K(a.aoData,"anCells",g)).addClass(c+(2>e?e+1:3))}a.aLastSort=d}function Lb(a,b){var c=a.aoColumns[b],d=q.ext.order[c.sSortDataType],
-e;d&&(e=d.call(a.oInstance,a,b,ba(a,b)));for(var h,g=q.ext.type.order[c.sType+"-pre"],f=0,l=a.aoData.length;f<l;f++)if(c=a.aoData[f],c._aSortData||(c._aSortData=[]),!c._aSortData[b]||d)h=d?e[f]:F(a,f,b,"sort"),c._aSortData[b]=g?g(h):h}function Aa(a){if(a.oFeatures.bStateSave&&!a.bDestroying){var b={time:+new Date,start:a._iDisplayStart,length:a._iDisplayLength,order:f.extend(!0,[],a.aaSorting),search:Eb(a.oPreviousSearch),columns:f.map(a.aoColumns,function(b,d){return{visible:b.bVisible,search:Eb(a.aoPreSearchCols[d])}})};
-A(a,"aoStateSaveParams","stateSaveParams",[a,b]);a.oSavedState=b;a.fnStateSaveCallback.call(a.oInstance,a,b)}}function Nb(a,b,c){var d,e,h=a.aoColumns;b=function(b){if(b&&b.time){var g=A(a,"aoStateLoadParams","stateLoadParams",[a,b]);if(-1===f.inArray(!1,g)&&(g=a.iStateDuration,!(0<g&&b.time<+new Date-1E3*g||b.columns&&h.length!==b.columns.length))){a.oLoadedState=f.extend(!0,{},b);b.start!==n&&(a._iDisplayStart=b.start,a.iInitDisplayStart=b.start);b.length!==n&&(a._iDisplayLength=b.length);b.order!==
-n&&(a.aaSorting=[],f.each(b.order,function(b,c){a.aaSorting.push(c[0]>=h.length?[0,c[1]]:c)}));b.search!==n&&f.extend(a.oPreviousSearch,Fb(b.search));if(b.columns)for(d=0,e=b.columns.length;d<e;d++)g=b.columns[d],g.visible!==n&&(h[d].bVisible=g.visible),g.search!==n&&f.extend(a.aoPreSearchCols[d],Fb(g.search));A(a,"aoStateLoaded","stateLoaded",[a,b])}}c()};if(a.oFeatures.bStateSave){var g=a.fnStateLoadCallback.call(a.oInstance,a,b);g!==n&&b(g)}else c()}function Ba(a){var b=q.settings;a=f.inArray(a,
-K(b,"nTable"));return-1!==a?b[a]:null}function O(a,b,c,d){c="DataTables warning: "+(a?"table id="+a.sTableId+" - ":"")+c;d&&(c+=". For more information about this error, please see http://datatables.net/tn/"+d);if(b)y.console&&console.log&&console.log(c);else if(b=q.ext,b=b.sErrMode||b.errMode,a&&A(a,null,"error",[a,d,c]),"alert"==b)alert(c);else{if("throw"==b)throw Error(c);"function"==typeof b&&b(a,d,c)}}function M(a,b,c,d){f.isArray(c)?f.each(c,function(c,d){f.isArray(d)?M(a,b,d[0],d[1]):M(a,b,
-d)}):(d===n&&(d=c),b[c]!==n&&(a[d]=b[c]))}function $a(a,b,c){var d;for(d in b)if(b.hasOwnProperty(d)){var e=b[d];f.isPlainObject(e)?(f.isPlainObject(a[d])||(a[d]={}),f.extend(!0,a[d],e)):c&&"data"!==d&&"aaData"!==d&&f.isArray(e)?a[d]=e.slice():a[d]=e}return a}function Za(a,b,c){f(a).on("click.DT",b,function(b){f(a).trigger("blur");c(b)}).on("keypress.DT",b,function(a){13===a.which&&(a.preventDefault(),c(a))}).on("selectstart.DT",function(){return!1})}function D(a,b,c,d){c&&a[b].push({fn:c,sName:d})}
-function A(a,b,c,d){var e=[];b&&(e=f.map(a[b].slice().reverse(),function(b,c){return b.fn.apply(a.oInstance,d)}));null!==c&&(b=f.Event(c+".dt"),f(a.nTable).trigger(b,d),e.push(b.result));return e}function Va(a){var b=a._iDisplayStart,c=a.fnDisplayEnd(),d=a._iDisplayLength;b>=c&&(b=c-d);b-=b%d;if(-1===d||0>b)b=0;a._iDisplayStart=b}function Qa(a,b){a=a.renderer;var c=q.ext.renderer[b];return f.isPlainObject(a)&&a[b]?c[a[b]]||c._:"string"===typeof a?c[a]||c._:c._}function I(a){return a.oFeatures.bServerSide?
-"ssp":a.ajax||a.sAjaxSource?"ajax":"dom"}function ja(a,b){var c=Ob.numbers_length,d=Math.floor(c/2);b<=c?a=Y(0,b):a<=d?(a=Y(0,c-2),a.push("ellipsis"),a.push(b-1)):(a>=b-1-d?a=Y(b-(c-2),b):(a=Y(a-d+2,a+d-1),a.push("ellipsis"),a.push(b-1)),a.splice(0,0,"ellipsis"),a.splice(0,0,0));a.DT_el="span";return a}function Ga(a){f.each({num:function(b){return Ca(b,a)},"num-fmt":function(b){return Ca(b,a,ab)},"html-num":function(b){return Ca(b,a,Da)},"html-num-fmt":function(b){return Ca(b,a,Da,ab)}},function(b,
-c){C.type.order[b+a+"-pre"]=c;b.match(/^html\-/)&&(C.type.search[b+a]=C.type.search.html)})}function Pb(a){return function(){var b=[Ba(this[q.ext.iApiIndex])].concat(Array.prototype.slice.call(arguments));return q.ext.internal[a].apply(this,b)}}var q=function(a){this.$=function(a,b){return this.api(!0).$(a,b)};this._=function(a,b){return this.api(!0).rows(a,b).data()};this.api=function(a){return a?new x(Ba(this[C.iApiIndex])):new x(this)};this.fnAddData=function(a,b){var c=this.api(!0);a=f.isArray(a)&&
-(f.isArray(a[0])||f.isPlainObject(a[0]))?c.rows.add(a):c.row.add(a);(b===n||b)&&c.draw();return a.flatten().toArray()};this.fnAdjustColumnSizing=function(a){var b=this.api(!0).columns.adjust(),c=b.settings()[0],d=c.oScroll;a===n||a?b.draw(!1):(""!==d.sX||""!==d.sY)&&ma(c)};this.fnClearTable=function(a){var b=this.api(!0).clear();(a===n||a)&&b.draw()};this.fnClose=function(a){this.api(!0).row(a).child.hide()};this.fnDeleteRow=function(a,b,c){var d=this.api(!0);a=d.rows(a);var e=a.settings()[0],h=e.aoData[a[0][0]];
-a.remove();b&&b.call(this,e,h);(c===n||c)&&d.draw();return h};this.fnDestroy=function(a){this.api(!0).destroy(a)};this.fnDraw=function(a){this.api(!0).draw(a)};this.fnFilter=function(a,b,c,d,e,f){e=this.api(!0);null===b||b===n?e.search(a,c,d,f):e.column(b).search(a,c,d,f);e.draw()};this.fnGetData=function(a,b){var c=this.api(!0);if(a!==n){var d=a.nodeName?a.nodeName.toLowerCase():"";return b!==n||"td"==d||"th"==d?c.cell(a,b).data():c.row(a).data()||null}return c.data().toArray()};this.fnGetNodes=
-function(a){var b=this.api(!0);return a!==n?b.row(a).node():b.rows().nodes().flatten().toArray()};this.fnGetPosition=function(a){var b=this.api(!0),c=a.nodeName.toUpperCase();return"TR"==c?b.row(a).index():"TD"==c||"TH"==c?(a=b.cell(a).index(),[a.row,a.columnVisible,a.column]):null};this.fnIsOpen=function(a){return this.api(!0).row(a).child.isShown()};this.fnOpen=function(a,b,c){return this.api(!0).row(a).child(b,c).show().child()[0]};this.fnPageChange=function(a,b){a=this.api(!0).page(a);(b===n||
-b)&&a.draw(!1)};this.fnSetColumnVis=function(a,b,c){a=this.api(!0).column(a).visible(b);(c===n||c)&&a.columns.adjust().draw()};this.fnSettings=function(){return Ba(this[C.iApiIndex])};this.fnSort=function(a){this.api(!0).order(a).draw()};this.fnSortListener=function(a,b,c){this.api(!0).order.listener(a,b,c)};this.fnUpdate=function(a,b,c,d,e){var h=this.api(!0);c===n||null===c?h.row(b).data(a):h.cell(b,c).data(a);(e===n||e)&&h.columns.adjust();(d===n||d)&&h.draw();return 0};this.fnVersionCheck=C.fnVersionCheck;
-var b=this,c=a===n,d=this.length;c&&(a={});this.oApi=this.internal=C.internal;for(var e in q.ext.internal)e&&(this[e]=Pb(e));this.each(function(){var e={},g=1<d?$a(e,a,!0):a,k=0,l;e=this.getAttribute("id");var m=!1,p=q.defaults,v=f(this);if("table"!=this.nodeName.toLowerCase())O(null,0,"Non-table node initialisation ("+this.nodeName+")",2);else{ib(p);jb(p.column);L(p,p,!0);L(p.column,p.column,!0);L(p,f.extend(g,v.data()),!0);var u=q.settings;k=0;for(l=u.length;k<l;k++){var t=u[k];if(t.nTable==this||
-t.nTHead&&t.nTHead.parentNode==this||t.nTFoot&&t.nTFoot.parentNode==this){var w=g.bRetrieve!==n?g.bRetrieve:p.bRetrieve;if(c||w)return t.oInstance;if(g.bDestroy!==n?g.bDestroy:p.bDestroy){t.oInstance.fnDestroy();break}else{O(t,0,"Cannot reinitialise DataTable",3);return}}if(t.sTableId==this.id){u.splice(k,1);break}}if(null===e||""===e)this.id=e="DataTables_Table_"+q.ext._unique++;var r=f.extend(!0,{},q.models.oSettings,{sDestroyWidth:v[0].style.width,sInstance:e,sTableId:e});r.nTable=this;r.oApi=
-b.internal;r.oInit=g;u.push(r);r.oInstance=1===b.length?b:v.dataTable();ib(g);Fa(g.oLanguage);g.aLengthMenu&&!g.iDisplayLength&&(g.iDisplayLength=f.isArray(g.aLengthMenu[0])?g.aLengthMenu[0][0]:g.aLengthMenu[0]);g=$a(f.extend(!0,{},p),g);M(r.oFeatures,g,"bPaginate bLengthChange bFilter bSort bSortMulti bInfo bProcessing bAutoWidth bSortClasses bServerSide bDeferRender".split(" "));M(r,g,["asStripeClasses","ajax","fnServerData","fnFormatNumber","sServerMethod","aaSorting","aaSortingFixed","aLengthMenu",
-"sPaginationType","sAjaxSource","sAjaxDataProp","iStateDuration","sDom","bSortCellsTop","iTabIndex","fnStateLoadCallback","fnStateSaveCallback","renderer","searchDelay","rowId",["iCookieDuration","iStateDuration"],["oSearch","oPreviousSearch"],["aoSearchCols","aoPreSearchCols"],["iDisplayLength","_iDisplayLength"]]);M(r.oScroll,g,[["sScrollX","sX"],["sScrollXInner","sXInner"],["sScrollY","sY"],["bScrollCollapse","bCollapse"]]);M(r.oLanguage,g,"fnInfoCallback");D(r,"aoDrawCallback",g.fnDrawCallback,
-"user");D(r,"aoServerParams",g.fnServerParams,"user");D(r,"aoStateSaveParams",g.fnStateSaveParams,"user");D(r,"aoStateLoadParams",g.fnStateLoadParams,"user");D(r,"aoStateLoaded",g.fnStateLoaded,"user");D(r,"aoRowCallback",g.fnRowCallback,"user");D(r,"aoRowCreatedCallback",g.fnCreatedRow,"user");D(r,"aoHeaderCallback",g.fnHeaderCallback,"user");D(r,"aoFooterCallback",g.fnFooterCallback,"user");D(r,"aoInitComplete",g.fnInitComplete,"user");D(r,"aoPreDrawCallback",g.fnPreDrawCallback,"user");r.rowIdFn=
-T(g.rowId);kb(r);var x=r.oClasses;f.extend(x,q.ext.classes,g.oClasses);v.addClass(x.sTable);r.iInitDisplayStart===n&&(r.iInitDisplayStart=g.iDisplayStart,r._iDisplayStart=g.iDisplayStart);null!==g.iDeferLoading&&(r.bDeferLoading=!0,e=f.isArray(g.iDeferLoading),r._iRecordsDisplay=e?g.iDeferLoading[0]:g.iDeferLoading,r._iRecordsTotal=e?g.iDeferLoading[1]:g.iDeferLoading);var y=r.oLanguage;f.extend(!0,y,g.oLanguage);y.sUrl&&(f.ajax({dataType:"json",url:y.sUrl,success:function(a){Fa(a);L(p.oLanguage,
-a);f.extend(!0,y,a);ia(r)},error:function(){ia(r)}}),m=!0);null===g.asStripeClasses&&(r.asStripeClasses=[x.sStripeOdd,x.sStripeEven]);e=r.asStripeClasses;var z=v.children("tbody").find("tr").eq(0);-1!==f.inArray(!0,f.map(e,function(a,b){return z.hasClass(a)}))&&(f("tbody tr",this).removeClass(e.join(" ")),r.asDestroyStripes=e.slice());e=[];u=this.getElementsByTagName("thead");0!==u.length&&(ea(r.aoHeader,u[0]),e=ta(r));if(null===g.aoColumns)for(u=[],k=0,l=e.length;k<l;k++)u.push(null);else u=g.aoColumns;
-k=0;for(l=u.length;k<l;k++)Ha(r,e?e[k]:null);mb(r,g.aoColumnDefs,u,function(a,b){la(r,a,b)});if(z.length){var B=function(a,b){return null!==a.getAttribute("data-"+b)?b:null};f(z[0]).children("th, td").each(function(a,b){var c=r.aoColumns[a];if(c.mData===a){var d=B(b,"sort")||B(b,"order");b=B(b,"filter")||B(b,"search");if(null!==d||null!==b)c.mData={_:a+".display",sort:null!==d?a+".@data-"+d:n,type:null!==d?a+".@data-"+d:n,filter:null!==b?a+".@data-"+b:n},la(r,a)}})}var C=r.oFeatures;e=function(){if(g.aaSorting===
-n){var a=r.aaSorting;k=0;for(l=a.length;k<l;k++)a[k][1]=r.aoColumns[k].asSorting[0]}za(r);C.bSort&&D(r,"aoDrawCallback",function(){if(r.bSorted){var a=X(r),b={};f.each(a,function(a,c){b[c.src]=c.dir});A(r,null,"order",[r,a,b]);Mb(r)}});D(r,"aoDrawCallback",function(){(r.bSorted||"ssp"===I(r)||C.bDeferRender)&&za(r)},"sc");a=v.children("caption").each(function(){this._captionSide=f(this).css("caption-side")});var b=v.children("thead");0===b.length&&(b=f("<thead/>").appendTo(v));r.nTHead=b[0];b=v.children("tbody");
-0===b.length&&(b=f("<tbody/>").appendTo(v));r.nTBody=b[0];b=v.children("tfoot");0===b.length&&0<a.length&&(""!==r.oScroll.sX||""!==r.oScroll.sY)&&(b=f("<tfoot/>").appendTo(v));0===b.length||0===b.children().length?v.addClass(x.sNoFooter):0<b.length&&(r.nTFoot=b[0],ea(r.aoFooter,r.nTFoot));if(g.aaData)for(k=0;k<g.aaData.length;k++)R(r,g.aaData[k]);else(r.bDeferLoading||"dom"==I(r))&&oa(r,f(r.nTBody).children("tr"));r.aiDisplay=r.aiDisplayMaster.slice();r.bInitialised=!0;!1===m&&ia(r)};g.bStateSave?
-(C.bStateSave=!0,D(r,"aoDrawCallback",Aa,"state_save"),Nb(r,g,e)):e()}});b=null;return this},C,t,z,bb={},Qb=/[\r\n\u2028]/g,Da=/<.*?>/g,cc=/^\d{2,4}[\.\/\-]\d{1,2}[\.\/\-]\d{1,2}([T ]{1}\d{1,2}[:\.]\d{2}([\.:]\d{2})?)?$/,dc=/(\/|\.|\*|\+|\?|\||\(|\)|\[|\]|\{|\}|\\|\$|\^|\-)/g,ab=/[',$£€¥%\u2009\u202F\u20BD\u20a9\u20BArfkɃΞ]/gi,P=function(a){return a&&!0!==a&&"-"!==a?!1:!0},Rb=function(a){var b=parseInt(a,10);return!isNaN(b)&&isFinite(a)?b:null},Sb=function(a,b){bb[b]||(bb[b]=new RegExp(Ta(b),"g"));
-return"string"===typeof a&&"."!==b?a.replace(/\./g,"").replace(bb[b],"."):a},cb=function(a,b,c){var d="string"===typeof a;if(P(a))return!0;b&&d&&(a=Sb(a,b));c&&d&&(a=a.replace(ab,""));return!isNaN(parseFloat(a))&&isFinite(a)},Tb=function(a,b,c){return P(a)?!0:P(a)||"string"===typeof a?cb(a.replace(Da,""),b,c)?!0:null:null},K=function(a,b,c){var d=[],e=0,h=a.length;if(c!==n)for(;e<h;e++)a[e]&&a[e][b]&&d.push(a[e][b][c]);else for(;e<h;e++)a[e]&&d.push(a[e][b]);return d},ka=function(a,b,c,d){var e=[],
-h=0,g=b.length;if(d!==n)for(;h<g;h++)a[b[h]][c]&&e.push(a[b[h]][c][d]);else for(;h<g;h++)e.push(a[b[h]][c]);return e},Y=function(a,b){var c=[];if(b===n){b=0;var d=a}else d=b,b=a;for(a=b;a<d;a++)c.push(a);return c},Ub=function(a){for(var b=[],c=0,d=a.length;c<d;c++)a[c]&&b.push(a[c]);return b},sa=function(a){a:{if(!(2>a.length)){var b=a.slice().sort();for(var c=b[0],d=1,e=b.length;d<e;d++){if(b[d]===c){b=!1;break a}c=b[d]}}b=!0}if(b)return a.slice();b=[];e=a.length;var h,g=0;d=0;a:for(;d<e;d++){c=
-a[d];for(h=0;h<g;h++)if(b[h]===c)continue a;b.push(c);g++}return b};q.util={throttle:function(a,b){var c=b!==n?b:200,d,e;return function(){var b=this,g=+new Date,f=arguments;d&&g<d+c?(clearTimeout(e),e=setTimeout(function(){d=n;a.apply(b,f)},c)):(d=g,a.apply(b,f))}},escapeRegex:function(a){return a.replace(dc,"\\$1")}};var E=function(a,b,c){a[b]!==n&&(a[c]=a[b])},ca=/\[.*?\]$/,W=/\(\)$/,Ta=q.util.escapeRegex,xa=f("<div>")[0],$b=xa.textContent!==n,bc=/<.*?>/g,Ra=q.util.throttle,Vb=[],G=Array.prototype,
-ec=function(a){var b,c=q.settings,d=f.map(c,function(a,b){return a.nTable});if(a){if(a.nTable&&a.oApi)return[a];if(a.nodeName&&"table"===a.nodeName.toLowerCase()){var e=f.inArray(a,d);return-1!==e?[c[e]]:null}if(a&&"function"===typeof a.settings)return a.settings().toArray();"string"===typeof a?b=f(a):a instanceof f&&(b=a)}else return[];if(b)return b.map(function(a){e=f.inArray(this,d);return-1!==e?c[e]:null}).toArray()};var x=function(a,b){if(!(this instanceof x))return new x(a,b);var c=[],d=function(a){(a=
-ec(a))&&c.push.apply(c,a)};if(f.isArray(a))for(var e=0,h=a.length;e<h;e++)d(a[e]);else d(a);this.context=sa(c);b&&f.merge(this,b);this.selector={rows:null,cols:null,opts:null};x.extend(this,this,Vb)};q.Api=x;f.extend(x.prototype,{any:function(){return 0!==this.count()},concat:G.concat,context:[],count:function(){return this.flatten().length},each:function(a){for(var b=0,c=this.length;b<c;b++)a.call(this,this[b],b,this);return this},eq:function(a){var b=this.context;return b.length>a?new x(b[a],this[a]):
-null},filter:function(a){var b=[];if(G.filter)b=G.filter.call(this,a,this);else for(var c=0,d=this.length;c<d;c++)a.call(this,this[c],c,this)&&b.push(this[c]);return new x(this.context,b)},flatten:function(){var a=[];return new x(this.context,a.concat.apply(a,this.toArray()))},join:G.join,indexOf:G.indexOf||function(a,b){b=b||0;for(var c=this.length;b<c;b++)if(this[b]===a)return b;return-1},iterator:function(a,b,c,d){var e=[],h,g,f=this.context,l,m=this.selector;"string"===typeof a&&(d=c,c=b,b=a,
-a=!1);var p=0;for(h=f.length;p<h;p++){var q=new x(f[p]);if("table"===b){var u=c.call(q,f[p],p);u!==n&&e.push(u)}else if("columns"===b||"rows"===b)u=c.call(q,f[p],this[p],p),u!==n&&e.push(u);else if("column"===b||"column-rows"===b||"row"===b||"cell"===b){var t=this[p];"column-rows"===b&&(l=Ea(f[p],m.opts));var w=0;for(g=t.length;w<g;w++)u=t[w],u="cell"===b?c.call(q,f[p],u.row,u.column,p,w):c.call(q,f[p],u,p,w,l),u!==n&&e.push(u)}}return e.length||d?(a=new x(f,a?e.concat.apply([],e):e),b=a.selector,
-b.rows=m.rows,b.cols=m.cols,b.opts=m.opts,a):this},lastIndexOf:G.lastIndexOf||function(a,b){return this.indexOf.apply(this.toArray.reverse(),arguments)},length:0,map:function(a){var b=[];if(G.map)b=G.map.call(this,a,this);else for(var c=0,d=this.length;c<d;c++)b.push(a.call(this,this[c],c));return new x(this.context,b)},pluck:function(a){return this.map(function(b){return b[a]})},pop:G.pop,push:G.push,reduce:G.reduce||function(a,b){return lb(this,a,b,0,this.length,1)},reduceRight:G.reduceRight||function(a,
-b){return lb(this,a,b,this.length-1,-1,-1)},reverse:G.reverse,selector:null,shift:G.shift,slice:function(){return new x(this.context,this)},sort:G.sort,splice:G.splice,toArray:function(){return G.slice.call(this)},to$:function(){return f(this)},toJQuery:function(){return f(this)},unique:function(){return new x(this.context,sa(this))},unshift:G.unshift});x.extend=function(a,b,c){if(c.length&&b&&(b instanceof x||b.__dt_wrapper)){var d,e=function(a,b,c){return function(){var d=b.apply(a,arguments);x.extend(d,
-d,c.methodExt);return d}};var h=0;for(d=c.length;h<d;h++){var f=c[h];b[f.name]="function"===f.type?e(a,f.val,f):"object"===f.type?{}:f.val;b[f.name].__dt_wrapper=!0;x.extend(a,b[f.name],f.propExt)}}};x.register=t=function(a,b){if(f.isArray(a))for(var c=0,d=a.length;c<d;c++)x.register(a[c],b);else{d=a.split(".");var e=Vb,h;a=0;for(c=d.length;a<c;a++){var g=(h=-1!==d[a].indexOf("()"))?d[a].replace("()",""):d[a];a:{var k=0;for(var l=e.length;k<l;k++)if(e[k].name===g){k=e[k];break a}k=null}k||(k={name:g,
-val:{},methodExt:[],propExt:[],type:"object"},e.push(k));a===c-1?(k.val=b,k.type="function"===typeof b?"function":f.isPlainObject(b)?"object":"other"):e=h?k.methodExt:k.propExt}}};x.registerPlural=z=function(a,b,c){x.register(a,c);x.register(b,function(){var a=c.apply(this,arguments);return a===this?this:a instanceof x?a.length?f.isArray(a[0])?new x(a.context,a[0]):a[0]:n:a})};var Wb=function(a,b){if(f.isArray(a))return f.map(a,function(a){return Wb(a,b)});if("number"===typeof a)return[b[a]];var c=
-f.map(b,function(a,b){return a.nTable});return f(c).filter(a).map(function(a){a=f.inArray(this,c);return b[a]}).toArray()};t("tables()",function(a){return a!==n&&null!==a?new x(Wb(a,this.context)):this});t("table()",function(a){a=this.tables(a);var b=a.context;return b.length?new x(b[0]):a});z("tables().nodes()","table().node()",function(){return this.iterator("table",function(a){return a.nTable},1)});z("tables().body()","table().body()",function(){return this.iterator("table",function(a){return a.nTBody},
-1)});z("tables().header()","table().header()",function(){return this.iterator("table",function(a){return a.nTHead},1)});z("tables().footer()","table().footer()",function(){return this.iterator("table",function(a){return a.nTFoot},1)});z("tables().containers()","table().container()",function(){return this.iterator("table",function(a){return a.nTableWrapper},1)});t("draw()",function(a){return this.iterator("table",function(b){"page"===a?S(b):("string"===typeof a&&(a="full-hold"===a?!1:!0),U(b,!1===
-a))})});t("page()",function(a){return a===n?this.page.info().page:this.iterator("table",function(b){Wa(b,a)})});t("page.info()",function(a){if(0===this.context.length)return n;a=this.context[0];var b=a._iDisplayStart,c=a.oFeatures.bPaginate?a._iDisplayLength:-1,d=a.fnRecordsDisplay(),e=-1===c;return{page:e?0:Math.floor(b/c),pages:e?1:Math.ceil(d/c),start:b,end:a.fnDisplayEnd(),length:c,recordsTotal:a.fnRecordsTotal(),recordsDisplay:d,serverSide:"ssp"===I(a)}});t("page.len()",function(a){return a===
-n?0!==this.context.length?this.context[0]._iDisplayLength:n:this.iterator("table",function(b){Ua(b,a)})});var Xb=function(a,b,c){if(c){var d=new x(a);d.one("draw",function(){c(d.ajax.json())})}if("ssp"==I(a))U(a,b);else{J(a,!0);var e=a.jqXHR;e&&4!==e.readyState&&e.abort();ua(a,[],function(c){pa(a);c=va(a,c);for(var d=0,e=c.length;d<e;d++)R(a,c[d]);U(a,b);J(a,!1)})}};t("ajax.json()",function(){var a=this.context;if(0<a.length)return a[0].json});t("ajax.params()",function(){var a=this.context;if(0<
-a.length)return a[0].oAjaxData});t("ajax.reload()",function(a,b){return this.iterator("table",function(c){Xb(c,!1===b,a)})});t("ajax.url()",function(a){var b=this.context;if(a===n){if(0===b.length)return n;b=b[0];return b.ajax?f.isPlainObject(b.ajax)?b.ajax.url:b.ajax:b.sAjaxSource}return this.iterator("table",function(b){f.isPlainObject(b.ajax)?b.ajax.url=a:b.ajax=a})});t("ajax.url().load()",function(a,b){return this.iterator("table",function(c){Xb(c,!1===b,a)})});var db=function(a,b,c,d,e){var h=
-[],g,k,l;var m=typeof b;b&&"string"!==m&&"function"!==m&&b.length!==n||(b=[b]);m=0;for(k=b.length;m<k;m++){var p=b[m]&&b[m].split&&!b[m].match(/[\[\(:]/)?b[m].split(","):[b[m]];var q=0;for(l=p.length;q<l;q++)(g=c("string"===typeof p[q]?f.trim(p[q]):p[q]))&&g.length&&(h=h.concat(g))}a=C.selector[a];if(a.length)for(m=0,k=a.length;m<k;m++)h=a[m](d,e,h);return sa(h)},eb=function(a){a||(a={});a.filter&&a.search===n&&(a.search=a.filter);return f.extend({search:"none",order:"current",page:"all"},a)},fb=
-function(a){for(var b=0,c=a.length;b<c;b++)if(0<a[b].length)return a[0]=a[b],a[0].length=1,a.length=1,a.context=[a.context[b]],a;a.length=0;return a},Ea=function(a,b){var c=[],d=a.aiDisplay;var e=a.aiDisplayMaster;var h=b.search;var g=b.order;b=b.page;if("ssp"==I(a))return"removed"===h?[]:Y(0,e.length);if("current"==b)for(g=a._iDisplayStart,a=a.fnDisplayEnd();g<a;g++)c.push(d[g]);else if("current"==g||"applied"==g)if("none"==h)c=e.slice();else if("applied"==h)c=d.slice();else{if("removed"==h){var k=
-{};g=0;for(a=d.length;g<a;g++)k[d[g]]=null;c=f.map(e,function(a){return k.hasOwnProperty(a)?null:a})}}else if("index"==g||"original"==g)for(g=0,a=a.aoData.length;g<a;g++)"none"==h?c.push(g):(e=f.inArray(g,d),(-1===e&&"removed"==h||0<=e&&"applied"==h)&&c.push(g));return c},fc=function(a,b,c){var d;return db("row",b,function(b){var e=Rb(b),g=a.aoData;if(null!==e&&!c)return[e];d||(d=Ea(a,c));if(null!==e&&-1!==f.inArray(e,d))return[e];if(null===b||b===n||""===b)return d;if("function"===typeof b)return f.map(d,
-function(a){var c=g[a];return b(a,c._aData,c.nTr)?a:null});if(b.nodeName){e=b._DT_RowIndex;var k=b._DT_CellIndex;if(e!==n)return g[e]&&g[e].nTr===b?[e]:[];if(k)return g[k.row]&&g[k.row].nTr===b.parentNode?[k.row]:[];e=f(b).closest("*[data-dt-row]");return e.length?[e.data("dt-row")]:[]}if("string"===typeof b&&"#"===b.charAt(0)&&(e=a.aIds[b.replace(/^#/,"")],e!==n))return[e.idx];e=Ub(ka(a.aoData,d,"nTr"));return f(e).filter(b).map(function(){return this._DT_RowIndex}).toArray()},a,c)};t("rows()",function(a,
-b){a===n?a="":f.isPlainObject(a)&&(b=a,a="");b=eb(b);var c=this.iterator("table",function(c){return fc(c,a,b)},1);c.selector.rows=a;c.selector.opts=b;return c});t("rows().nodes()",function(){return this.iterator("row",function(a,b){return a.aoData[b].nTr||n},1)});t("rows().data()",function(){return this.iterator(!0,"rows",function(a,b){return ka(a.aoData,b,"_aData")},1)});z("rows().cache()","row().cache()",function(a){return this.iterator("row",function(b,c){b=b.aoData[c];return"search"===a?b._aFilterData:
-b._aSortData},1)});z("rows().invalidate()","row().invalidate()",function(a){return this.iterator("row",function(b,c){da(b,c,a)})});z("rows().indexes()","row().index()",function(){return this.iterator("row",function(a,b){return b},1)});z("rows().ids()","row().id()",function(a){for(var b=[],c=this.context,d=0,e=c.length;d<e;d++)for(var f=0,g=this[d].length;f<g;f++){var k=c[d].rowIdFn(c[d].aoData[this[d][f]]._aData);b.push((!0===a?"#":"")+k)}return new x(c,b)});z("rows().remove()","row().remove()",function(){var a=
-this;this.iterator("row",function(b,c,d){var e=b.aoData,f=e[c],g,k;e.splice(c,1);var l=0;for(g=e.length;l<g;l++){var m=e[l];var p=m.anCells;null!==m.nTr&&(m.nTr._DT_RowIndex=l);if(null!==p)for(m=0,k=p.length;m<k;m++)p[m]._DT_CellIndex.row=l}qa(b.aiDisplayMaster,c);qa(b.aiDisplay,c);qa(a[d],c,!1);0<b._iRecordsDisplay&&b._iRecordsDisplay--;Va(b);c=b.rowIdFn(f._aData);c!==n&&delete b.aIds[c]});this.iterator("table",function(a){for(var b=0,d=a.aoData.length;b<d;b++)a.aoData[b].idx=b});return this});t("rows.add()",
-function(a){var b=this.iterator("table",function(b){var c,d=[];var f=0;for(c=a.length;f<c;f++){var k=a[f];k.nodeName&&"TR"===k.nodeName.toUpperCase()?d.push(oa(b,k)[0]):d.push(R(b,k))}return d},1),c=this.rows(-1);c.pop();f.merge(c,b);return c});t("row()",function(a,b){return fb(this.rows(a,b))});t("row().data()",function(a){var b=this.context;if(a===n)return b.length&&this.length?b[0].aoData[this[0]]._aData:n;var c=b[0].aoData[this[0]];c._aData=a;f.isArray(a)&&c.nTr&&c.nTr.id&&Q(b[0].rowId)(a,c.nTr.id);
-da(b[0],this[0],"data");return this});t("row().node()",function(){var a=this.context;return a.length&&this.length?a[0].aoData[this[0]].nTr||null:null});t("row.add()",function(a){a instanceof f&&a.length&&(a=a[0]);var b=this.iterator("table",function(b){return a.nodeName&&"TR"===a.nodeName.toUpperCase()?oa(b,a)[0]:R(b,a)});return this.row(b[0])});var gc=function(a,b,c,d){var e=[],h=function(b,c){if(f.isArray(b)||b instanceof f)for(var d=0,g=b.length;d<g;d++)h(b[d],c);else b.nodeName&&"tr"===b.nodeName.toLowerCase()?
-e.push(b):(d=f("<tr><td/></tr>").addClass(c),f("td",d).addClass(c).html(b)[0].colSpan=V(a),e.push(d[0]))};h(c,d);b._details&&b._details.detach();b._details=f(e);b._detailsShow&&b._details.insertAfter(b.nTr)},gb=function(a,b){var c=a.context;c.length&&(a=c[0].aoData[b!==n?b:a[0]])&&a._details&&(a._details.remove(),a._detailsShow=n,a._details=n)},Yb=function(a,b){var c=a.context;c.length&&a.length&&(a=c[0].aoData[a[0]],a._details&&((a._detailsShow=b)?a._details.insertAfter(a.nTr):a._details.detach(),
-hc(c[0])))},hc=function(a){var b=new x(a),c=a.aoData;b.off("draw.dt.DT_details column-visibility.dt.DT_details destroy.dt.DT_details");0<K(c,"_details").length&&(b.on("draw.dt.DT_details",function(d,e){a===e&&b.rows({page:"current"}).eq(0).each(function(a){a=c[a];a._detailsShow&&a._details.insertAfter(a.nTr)})}),b.on("column-visibility.dt.DT_details",function(b,e,f,g){if(a===e)for(e=V(e),f=0,g=c.length;f<g;f++)b=c[f],b._details&&b._details.children("td[colspan]").attr("colspan",e)}),b.on("destroy.dt.DT_details",
-function(d,e){if(a===e)for(d=0,e=c.length;d<e;d++)c[d]._details&&gb(b,d)}))};t("row().child()",function(a,b){var c=this.context;if(a===n)return c.length&&this.length?c[0].aoData[this[0]]._details:n;!0===a?this.child.show():!1===a?gb(this):c.length&&this.length&&gc(c[0],c[0].aoData[this[0]],a,b);return this});t(["row().child.show()","row().child().show()"],function(a){Yb(this,!0);return this});t(["row().child.hide()","row().child().hide()"],function(){Yb(this,!1);return this});t(["row().child.remove()",
-"row().child().remove()"],function(){gb(this);return this});t("row().child.isShown()",function(){var a=this.context;return a.length&&this.length?a[0].aoData[this[0]]._detailsShow||!1:!1});var ic=/^([^:]+):(name|visIdx|visible)$/,Zb=function(a,b,c,d,e){c=[];d=0;for(var f=e.length;d<f;d++)c.push(F(a,e[d],b));return c},jc=function(a,b,c){var d=a.aoColumns,e=K(d,"sName"),h=K(d,"nTh");return db("column",b,function(b){var g=Rb(b);if(""===b)return Y(d.length);if(null!==g)return[0<=g?g:d.length+g];if("function"===
-typeof b){var l=Ea(a,c);return f.map(d,function(c,d){return b(d,Zb(a,d,0,0,l),h[d])?d:null})}var m="string"===typeof b?b.match(ic):"";if(m)switch(m[2]){case "visIdx":case "visible":g=parseInt(m[1],10);if(0>g){var p=f.map(d,function(a,b){return a.bVisible?b:null});return[p[p.length+g]]}return[aa(a,g)];case "name":return f.map(e,function(a,b){return a===m[1]?b:null});default:return[]}if(b.nodeName&&b._DT_CellIndex)return[b._DT_CellIndex.column];g=f(h).filter(b).map(function(){return f.inArray(this,
-h)}).toArray();if(g.length||!b.nodeName)return g;g=f(b).closest("*[data-dt-column]");return g.length?[g.data("dt-column")]:[]},a,c)};t("columns()",function(a,b){a===n?a="":f.isPlainObject(a)&&(b=a,a="");b=eb(b);var c=this.iterator("table",function(c){return jc(c,a,b)},1);c.selector.cols=a;c.selector.opts=b;return c});z("columns().header()","column().header()",function(a,b){return this.iterator("column",function(a,b){return a.aoColumns[b].nTh},1)});z("columns().footer()","column().footer()",function(a,
-b){return this.iterator("column",function(a,b){return a.aoColumns[b].nTf},1)});z("columns().data()","column().data()",function(){return this.iterator("column-rows",Zb,1)});z("columns().dataSrc()","column().dataSrc()",function(){return this.iterator("column",function(a,b){return a.aoColumns[b].mData},1)});z("columns().cache()","column().cache()",function(a){return this.iterator("column-rows",function(b,c,d,e,f){return ka(b.aoData,f,"search"===a?"_aFilterData":"_aSortData",c)},1)});z("columns().nodes()",
-"column().nodes()",function(){return this.iterator("column-rows",function(a,b,c,d,e){return ka(a.aoData,e,"anCells",b)},1)});z("columns().visible()","column().visible()",function(a,b){var c=this,d=this.iterator("column",function(b,c){if(a===n)return b.aoColumns[c].bVisible;var d=b.aoColumns,e=d[c],h=b.aoData,m;if(a!==n&&e.bVisible!==a){if(a){var p=f.inArray(!0,K(d,"bVisible"),c+1);d=0;for(m=h.length;d<m;d++){var q=h[d].nTr;b=h[d].anCells;q&&q.insertBefore(b[c],b[p]||null)}}else f(K(b.aoData,"anCells",
-c)).detach();e.bVisible=a}});a!==n&&this.iterator("table",function(d){fa(d,d.aoHeader);fa(d,d.aoFooter);d.aiDisplay.length||f(d.nTBody).find("td[colspan]").attr("colspan",V(d));Aa(d);c.iterator("column",function(c,d){A(c,null,"column-visibility",[c,d,a,b])});(b===n||b)&&c.columns.adjust()});return d});z("columns().indexes()","column().index()",function(a){return this.iterator("column",function(b,c){return"visible"===a?ba(b,c):c},1)});t("columns.adjust()",function(){return this.iterator("table",function(a){Z(a)},
-1)});t("column.index()",function(a,b){if(0!==this.context.length){var c=this.context[0];if("fromVisible"===a||"toData"===a)return aa(c,b);if("fromData"===a||"toVisible"===a)return ba(c,b)}});t("column()",function(a,b){return fb(this.columns(a,b))});var kc=function(a,b,c){var d=a.aoData,e=Ea(a,c),h=Ub(ka(d,e,"anCells")),g=f([].concat.apply([],h)),k,l=a.aoColumns.length,m,p,q,u,t,w;return db("cell",b,function(b){var c="function"===typeof b;if(null===b||b===n||c){m=[];p=0;for(q=e.length;p<q;p++)for(k=
-e[p],u=0;u<l;u++)t={row:k,column:u},c?(w=d[k],b(t,F(a,k,u),w.anCells?w.anCells[u]:null)&&m.push(t)):m.push(t);return m}if(f.isPlainObject(b))return b.column!==n&&b.row!==n&&-1!==f.inArray(b.row,e)?[b]:[];c=g.filter(b).map(function(a,b){return{row:b._DT_CellIndex.row,column:b._DT_CellIndex.column}}).toArray();if(c.length||!b.nodeName)return c;w=f(b).closest("*[data-dt-row]");return w.length?[{row:w.data("dt-row"),column:w.data("dt-column")}]:[]},a,c)};t("cells()",function(a,b,c){f.isPlainObject(a)&&
-(a.row===n?(c=a,a=null):(c=b,b=null));f.isPlainObject(b)&&(c=b,b=null);if(null===b||b===n)return this.iterator("table",function(b){return kc(b,a,eb(c))});var d=c?{page:c.page,order:c.order,search:c.search}:{},e=this.columns(b,d),h=this.rows(a,d),g,k,l,m;d=this.iterator("table",function(a,b){a=[];g=0;for(k=h[b].length;g<k;g++)for(l=0,m=e[b].length;l<m;l++)a.push({row:h[b][g],column:e[b][l]});return a},1);d=c&&c.selected?this.cells(d,c):d;f.extend(d.selector,{cols:b,rows:a,opts:c});return d});z("cells().nodes()",
-"cell().node()",function(){return this.iterator("cell",function(a,b,c){return(a=a.aoData[b])&&a.anCells?a.anCells[c]:n},1)});t("cells().data()",function(){return this.iterator("cell",function(a,b,c){return F(a,b,c)},1)});z("cells().cache()","cell().cache()",function(a){a="search"===a?"_aFilterData":"_aSortData";return this.iterator("cell",function(b,c,d){return b.aoData[c][a][d]},1)});z("cells().render()","cell().render()",function(a){return this.iterator("cell",function(b,c,d){return F(b,c,d,a)},
-1)});z("cells().indexes()","cell().index()",function(){return this.iterator("cell",function(a,b,c){return{row:b,column:c,columnVisible:ba(a,c)}},1)});z("cells().invalidate()","cell().invalidate()",function(a){return this.iterator("cell",function(b,c,d){da(b,c,a,d)})});t("cell()",function(a,b,c){return fb(this.cells(a,b,c))});t("cell().data()",function(a){var b=this.context,c=this[0];if(a===n)return b.length&&c.length?F(b[0],c[0].row,c[0].column):n;nb(b[0],c[0].row,c[0].column,a);da(b[0],c[0].row,
-"data",c[0].column);return this});t("order()",function(a,b){var c=this.context;if(a===n)return 0!==c.length?c[0].aaSorting:n;"number"===typeof a?a=[[a,b]]:a.length&&!f.isArray(a[0])&&(a=Array.prototype.slice.call(arguments));return this.iterator("table",function(b){b.aaSorting=a.slice()})});t("order.listener()",function(a,b,c){return this.iterator("table",function(d){Pa(d,a,b,c)})});t("order.fixed()",function(a){if(!a){var b=this.context;b=b.length?b[0].aaSortingFixed:n;return f.isArray(b)?{pre:b}:
-b}return this.iterator("table",function(b){b.aaSortingFixed=f.extend(!0,{},a)})});t(["columns().order()","column().order()"],function(a){var b=this;return this.iterator("table",function(c,d){var e=[];f.each(b[d],function(b,c){e.push([c,a])});c.aaSorting=e})});t("search()",function(a,b,c,d){var e=this.context;return a===n?0!==e.length?e[0].oPreviousSearch.sSearch:n:this.iterator("table",function(e){e.oFeatures.bFilter&&ha(e,f.extend({},e.oPreviousSearch,{sSearch:a+"",bRegex:null===b?!1:b,bSmart:null===
-c?!0:c,bCaseInsensitive:null===d?!0:d}),1)})});z("columns().search()","column().search()",function(a,b,c,d){return this.iterator("column",function(e,h){var g=e.aoPreSearchCols;if(a===n)return g[h].sSearch;e.oFeatures.bFilter&&(f.extend(g[h],{sSearch:a+"",bRegex:null===b?!1:b,bSmart:null===c?!0:c,bCaseInsensitive:null===d?!0:d}),ha(e,e.oPreviousSearch,1))})});t("state()",function(){return this.context.length?this.context[0].oSavedState:null});t("state.clear()",function(){return this.iterator("table",
-function(a){a.fnStateSaveCallback.call(a.oInstance,a,{})})});t("state.loaded()",function(){return this.context.length?this.context[0].oLoadedState:null});t("state.save()",function(){return this.iterator("table",function(a){Aa(a)})});q.versionCheck=q.fnVersionCheck=function(a){var b=q.version.split(".");a=a.split(".");for(var c,d,e=0,f=a.length;e<f;e++)if(c=parseInt(b[e],10)||0,d=parseInt(a[e],10)||0,c!==d)return c>d;return!0};q.isDataTable=q.fnIsDataTable=function(a){var b=f(a).get(0),c=!1;if(a instanceof
-q.Api)return!0;f.each(q.settings,function(a,e){a=e.nScrollHead?f("table",e.nScrollHead)[0]:null;var d=e.nScrollFoot?f("table",e.nScrollFoot)[0]:null;if(e.nTable===b||a===b||d===b)c=!0});return c};q.tables=q.fnTables=function(a){var b=!1;f.isPlainObject(a)&&(b=a.api,a=a.visible);var c=f.map(q.settings,function(b){if(!a||a&&f(b.nTable).is(":visible"))return b.nTable});return b?new x(c):c};q.camelToHungarian=L;t("$()",function(a,b){b=this.rows(b).nodes();b=f(b);return f([].concat(b.filter(a).toArray(),
-b.find(a).toArray()))});f.each(["on","one","off"],function(a,b){t(b+"()",function(){var a=Array.prototype.slice.call(arguments);a[0]=f.map(a[0].split(/\s/),function(a){return a.match(/\.dt\b/)?a:a+".dt"}).join(" ");var d=f(this.tables().nodes());d[b].apply(d,a);return this})});t("clear()",function(){return this.iterator("table",function(a){pa(a)})});t("settings()",function(){return new x(this.context,this.context)});t("init()",function(){var a=this.context;return a.length?a[0].oInit:null});t("data()",
-function(){return this.iterator("table",function(a){return K(a.aoData,"_aData")}).flatten()});t("destroy()",function(a){a=a||!1;return this.iterator("table",function(b){var c=b.nTableWrapper.parentNode,d=b.oClasses,e=b.nTable,h=b.nTBody,g=b.nTHead,k=b.nTFoot,l=f(e);h=f(h);var m=f(b.nTableWrapper),p=f.map(b.aoData,function(a){return a.nTr}),n;b.bDestroying=!0;A(b,"aoDestroyCallback","destroy",[b]);a||(new x(b)).columns().visible(!0);m.off(".DT").find(":not(tbody *)").off(".DT");f(y).off(".DT-"+b.sInstance);
-e!=g.parentNode&&(l.children("thead").detach(),l.append(g));k&&e!=k.parentNode&&(l.children("tfoot").detach(),l.append(k));b.aaSorting=[];b.aaSortingFixed=[];za(b);f(p).removeClass(b.asStripeClasses.join(" "));f("th, td",g).removeClass(d.sSortable+" "+d.sSortableAsc+" "+d.sSortableDesc+" "+d.sSortableNone);h.children().detach();h.append(p);g=a?"remove":"detach";l[g]();m[g]();!a&&c&&(c.insertBefore(e,b.nTableReinsertBefore),l.css("width",b.sDestroyWidth).removeClass(d.sTable),(n=b.asDestroyStripes.length)&&
-h.children().each(function(a){f(this).addClass(b.asDestroyStripes[a%n])}));c=f.inArray(b,q.settings);-1!==c&&q.settings.splice(c,1)})});f.each(["column","row","cell"],function(a,b){t(b+"s().every()",function(a){var c=this.selector.opts,e=this;return this.iterator(b,function(d,f,k,l,m){a.call(e[b](f,"cell"===b?k:c,"cell"===b?c:n),f,k,l,m)})})});t("i18n()",function(a,b,c){var d=this.context[0];a=T(a)(d.oLanguage);a===n&&(a=b);c!==n&&f.isPlainObject(a)&&(a=a[c]!==n?a[c]:a._);return a.replace("%d",c)});
-q.version="1.10.21";q.settings=[];q.models={};q.models.oSearch={bCaseInsensitive:!0,sSearch:"",bRegex:!1,bSmart:!0};q.models.oRow={nTr:null,anCells:null,_aData:[],_aSortData:null,_aFilterData:null,_sFilterRow:null,_sRowStripe:"",src:null,idx:-1};q.models.oColumn={idx:null,aDataSort:null,asSorting:null,bSearchable:null,bSortable:null,bVisible:null,_sManualType:null,_bAttrSrc:!1,fnCreatedCell:null,fnGetData:null,fnSetData:null,mData:null,mRender:null,nTh:null,nTf:null,sClass:null,sContentPadding:null,
-sDefaultContent:null,sName:null,sSortDataType:"std",sSortingClass:null,sSortingClassJUI:null,sTitle:null,sType:null,sWidth:null,sWidthOrig:null};q.defaults={aaData:null,aaSorting:[[0,"asc"]],aaSortingFixed:[],ajax:null,aLengthMenu:[10,25,50,100],aoColumns:null,aoColumnDefs:null,aoSearchCols:[],asStripeClasses:null,bAutoWidth:!0,bDeferRender:!1,bDestroy:!1,bFilter:!0,bInfo:!0,bLengthChange:!0,bPaginate:!0,bProcessing:!1,bRetrieve:!1,bScrollCollapse:!1,bServerSide:!1,bSort:!0,bSortMulti:!0,bSortCellsTop:!1,
-bSortClasses:!0,bStateSave:!1,fnCreatedRow:null,fnDrawCallback:null,fnFooterCallback:null,fnFormatNumber:function(a){return a.toString().replace(/\B(?=(\d{3})+(?!\d))/g,this.oLanguage.sThousands)},fnHeaderCallback:null,fnInfoCallback:null,fnInitComplete:null,fnPreDrawCallback:null,fnRowCallback:null,fnServerData:null,fnServerParams:null,fnStateLoadCallback:function(a){try{return JSON.parse((-1===a.iStateDuration?sessionStorage:localStorage).getItem("DataTables_"+a.sInstance+"_"+location.pathname))}catch(b){return{}}},
-fnStateLoadParams:null,fnStateLoaded:null,fnStateSaveCallback:function(a,b){try{(-1===a.iStateDuration?sessionStorage:localStorage).setItem("DataTables_"+a.sInstance+"_"+location.pathname,JSON.stringify(b))}catch(c){}},fnStateSaveParams:null,iStateDuration:7200,iDeferLoading:null,iDisplayLength:10,iDisplayStart:0,iTabIndex:0,oClasses:{},oLanguage:{oAria:{sSortAscending:": activate to sort column ascending",sSortDescending:": activate to sort column descending"},oPaginate:{sFirst:"First",sLast:"Last",
-sNext:"Next",sPrevious:"Previous"},sEmptyTable:"No data available in table",sInfo:"Showing _START_ to _END_ of _TOTAL_ entries",sInfoEmpty:"Showing 0 to 0 of 0 entries",sInfoFiltered:"(filtered from _MAX_ total entries)",sInfoPostFix:"",sDecimal:"",sThousands:",",sLengthMenu:"Show _MENU_ entries",sLoadingRecords:"Loading...",sProcessing:"Processing...",sSearch:"Search:",sSearchPlaceholder:"",sUrl:"",sZeroRecords:"No matching records found"},oSearch:f.extend({},q.models.oSearch),sAjaxDataProp:"data",
-sAjaxSource:null,sDom:"lfrtip",searchDelay:null,sPaginationType:"simple_numbers",sScrollX:"",sScrollXInner:"",sScrollY:"",sServerMethod:"GET",renderer:null,rowId:"DT_RowId"};H(q.defaults);q.defaults.column={aDataSort:null,iDataSort:-1,asSorting:["asc","desc"],bSearchable:!0,bSortable:!0,bVisible:!0,fnCreatedCell:null,mData:null,mRender:null,sCellType:"td",sClass:"",sContentPadding:"",sDefaultContent:null,sName:"",sSortDataType:"std",sTitle:null,sType:null,sWidth:null};H(q.defaults.column);q.models.oSettings=
-{oFeatures:{bAutoWidth:null,bDeferRender:null,bFilter:null,bInfo:null,bLengthChange:null,bPaginate:null,bProcessing:null,bServerSide:null,bSort:null,bSortMulti:null,bSortClasses:null,bStateSave:null},oScroll:{bCollapse:null,iBarWidth:0,sX:null,sXInner:null,sY:null},oLanguage:{fnInfoCallback:null},oBrowser:{bScrollOversize:!1,bScrollbarLeft:!1,bBounding:!1,barWidth:0},ajax:null,aanFeatures:[],aoData:[],aiDisplay:[],aiDisplayMaster:[],aIds:{},aoColumns:[],aoHeader:[],aoFooter:[],oPreviousSearch:{},
-aoPreSearchCols:[],aaSorting:null,aaSortingFixed:[],asStripeClasses:null,asDestroyStripes:[],sDestroyWidth:0,aoRowCallback:[],aoHeaderCallback:[],aoFooterCallback:[],aoDrawCallback:[],aoRowCreatedCallback:[],aoPreDrawCallback:[],aoInitComplete:[],aoStateSaveParams:[],aoStateLoadParams:[],aoStateLoaded:[],sTableId:"",nTable:null,nTHead:null,nTFoot:null,nTBody:null,nTableWrapper:null,bDeferLoading:!1,bInitialised:!1,aoOpenRows:[],sDom:null,searchDelay:null,sPaginationType:"two_button",iStateDuration:0,
-aoStateSave:[],aoStateLoad:[],oSavedState:null,oLoadedState:null,sAjaxSource:null,sAjaxDataProp:null,bAjaxDataGet:!0,jqXHR:null,json:n,oAjaxData:n,fnServerData:null,aoServerParams:[],sServerMethod:null,fnFormatNumber:null,aLengthMenu:null,iDraw:0,bDrawing:!1,iDrawError:-1,_iDisplayLength:10,_iDisplayStart:0,_iRecordsTotal:0,_iRecordsDisplay:0,oClasses:{},bFiltered:!1,bSorted:!1,bSortCellsTop:null,oInit:null,aoDestroyCallback:[],fnRecordsTotal:function(){return"ssp"==I(this)?1*this._iRecordsTotal:
-this.aiDisplayMaster.length},fnRecordsDisplay:function(){return"ssp"==I(this)?1*this._iRecordsDisplay:this.aiDisplay.length},fnDisplayEnd:function(){var a=this._iDisplayLength,b=this._iDisplayStart,c=b+a,d=this.aiDisplay.length,e=this.oFeatures,f=e.bPaginate;return e.bServerSide?!1===f||-1===a?b+d:Math.min(b+a,this._iRecordsDisplay):!f||c>d||-1===a?d:c},oInstance:null,sInstance:null,iTabIndex:0,nScrollHead:null,nScrollFoot:null,aLastSort:[],oPlugins:{},rowIdFn:null,rowId:null};q.ext=C={buttons:{},
-classes:{},build:"bs4/dt-1.10.21/b-1.6.2/r-2.2.5/sl-1.3.1",errMode:"alert",feature:[],search:[],selector:{cell:[],column:[],row:[]},internal:{},legacy:{ajax:null},pager:{},renderer:{pageButton:{},header:{}},order:{},type:{detect:[],search:{},order:{}},_unique:0,fnVersionCheck:q.fnVersionCheck,iApiIndex:0,oJUIClasses:{},sVersion:q.version};f.extend(C,{afnFiltering:C.search,aTypes:C.type.detect,ofnSearch:C.type.search,oSort:C.type.order,afnSortData:C.order,aoFeatures:C.feature,oApi:C.internal,oStdClasses:C.classes,oPagination:C.pager});
-f.extend(q.ext.classes,{sTable:"dataTable",sNoFooter:"no-footer",sPageButton:"paginate_button",sPageButtonActive:"current",sPageButtonDisabled:"disabled",sStripeOdd:"odd",sStripeEven:"even",sRowEmpty:"dataTables_empty",sWrapper:"dataTables_wrapper",sFilter:"dataTables_filter",sInfo:"dataTables_info",sPaging:"dataTables_paginate paging_",sLength:"dataTables_length",sProcessing:"dataTables_processing",sSortAsc:"sorting_asc",sSortDesc:"sorting_desc",sSortable:"sorting",sSortableAsc:"sorting_asc_disabled",
-sSortableDesc:"sorting_desc_disabled",sSortableNone:"sorting_disabled",sSortColumn:"sorting_",sFilterInput:"",sLengthSelect:"",sScrollWrapper:"dataTables_scroll",sScrollHead:"dataTables_scrollHead",sScrollHeadInner:"dataTables_scrollHeadInner",sScrollBody:"dataTables_scrollBody",sScrollFoot:"dataTables_scrollFoot",sScrollFootInner:"dataTables_scrollFootInner",sHeaderTH:"",sFooterTH:"",sSortJUIAsc:"",sSortJUIDesc:"",sSortJUI:"",sSortJUIAscAllowed:"",sSortJUIDescAllowed:"",sSortJUIWrapper:"",sSortIcon:"",
-sJUIHeader:"",sJUIFooter:""});var Ob=q.ext.pager;f.extend(Ob,{simple:function(a,b){return["previous","next"]},full:function(a,b){return["first","previous","next","last"]},numbers:function(a,b){return[ja(a,b)]},simple_numbers:function(a,b){return["previous",ja(a,b),"next"]},full_numbers:function(a,b){return["first","previous",ja(a,b),"next","last"]},first_last_numbers:function(a,b){return["first",ja(a,b),"last"]},_numbers:ja,numbers_length:7});f.extend(!0,q.ext.renderer,{pageButton:{_:function(a,b,
-c,d,e,h){var g=a.oClasses,k=a.oLanguage.oPaginate,l=a.oLanguage.oAria.paginate||{},m,p,q=0,t=function(b,d){var n,r=g.sPageButtonDisabled,u=function(b){Wa(a,b.data.action,!0)};var w=0;for(n=d.length;w<n;w++){var v=d[w];if(f.isArray(v)){var x=f("<"+(v.DT_el||"div")+"/>").appendTo(b);t(x,v)}else{m=null;p=v;x=a.iTabIndex;switch(v){case "ellipsis":b.append('<span class="ellipsis">&#x2026;</span>');break;case "first":m=k.sFirst;0===e&&(x=-1,p+=" "+r);break;case "previous":m=k.sPrevious;0===e&&(x=-1,p+=
-" "+r);break;case "next":m=k.sNext;if(0===h||e===h-1)x=-1,p+=" "+r;break;case "last":m=k.sLast;e===h-1&&(x=-1,p+=" "+r);break;default:m=v+1,p=e===v?g.sPageButtonActive:""}null!==m&&(x=f("<a>",{"class":g.sPageButton+" "+p,"aria-controls":a.sTableId,"aria-label":l[v],"data-dt-idx":q,tabindex:x,id:0===c&&"string"===typeof v?a.sTableId+"_"+v:null}).html(m).appendTo(b),Za(x,{action:v},u),q++)}}};try{var x=f(b).find(w.activeElement).data("dt-idx")}catch(lc){}t(f(b).empty(),d);x!==n&&f(b).find("[data-dt-idx="+
-x+"]").trigger("focus")}}});f.extend(q.ext.type.detect,[function(a,b){b=b.oLanguage.sDecimal;return cb(a,b)?"num"+b:null},function(a,b){if(a&&!(a instanceof Date)&&!cc.test(a))return null;b=Date.parse(a);return null!==b&&!isNaN(b)||P(a)?"date":null},function(a,b){b=b.oLanguage.sDecimal;return cb(a,b,!0)?"num-fmt"+b:null},function(a,b){b=b.oLanguage.sDecimal;return Tb(a,b)?"html-num"+b:null},function(a,b){b=b.oLanguage.sDecimal;return Tb(a,b,!0)?"html-num-fmt"+b:null},function(a,b){return P(a)||"string"===
-typeof a&&-1!==a.indexOf("<")?"html":null}]);f.extend(q.ext.type.search,{html:function(a){return P(a)?a:"string"===typeof a?a.replace(Qb," ").replace(Da,""):""},string:function(a){return P(a)?a:"string"===typeof a?a.replace(Qb," "):a}});var Ca=function(a,b,c,d){if(0!==a&&(!a||"-"===a))return-Infinity;b&&(a=Sb(a,b));a.replace&&(c&&(a=a.replace(c,"")),d&&(a=a.replace(d,"")));return 1*a};f.extend(C.type.order,{"date-pre":function(a){a=Date.parse(a);return isNaN(a)?-Infinity:a},"html-pre":function(a){return P(a)?
-"":a.replace?a.replace(/<.*?>/g,"").toLowerCase():a+""},"string-pre":function(a){return P(a)?"":"string"===typeof a?a.toLowerCase():a.toString?a.toString():""},"string-asc":function(a,b){return a<b?-1:a>b?1:0},"string-desc":function(a,b){return a<b?1:a>b?-1:0}});Ga("");f.extend(!0,q.ext.renderer,{header:{_:function(a,b,c,d){f(a.nTable).on("order.dt.DT",function(e,f,g,k){a===f&&(e=c.idx,b.removeClass(c.sSortingClass+" "+d.sSortAsc+" "+d.sSortDesc).addClass("asc"==k[e]?d.sSortAsc:"desc"==k[e]?d.sSortDesc:
-c.sSortingClass))})},jqueryui:function(a,b,c,d){f("<div/>").addClass(d.sSortJUIWrapper).append(b.contents()).append(f("<span/>").addClass(d.sSortIcon+" "+c.sSortingClassJUI)).appendTo(b);f(a.nTable).on("order.dt.DT",function(e,f,g,k){a===f&&(e=c.idx,b.removeClass(d.sSortAsc+" "+d.sSortDesc).addClass("asc"==k[e]?d.sSortAsc:"desc"==k[e]?d.sSortDesc:c.sSortingClass),b.find("span."+d.sSortIcon).removeClass(d.sSortJUIAsc+" "+d.sSortJUIDesc+" "+d.sSortJUI+" "+d.sSortJUIAscAllowed+" "+d.sSortJUIDescAllowed).addClass("asc"==
-k[e]?d.sSortJUIAsc:"desc"==k[e]?d.sSortJUIDesc:c.sSortingClassJUI))})}}});var hb=function(a){return"string"===typeof a?a.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;"):a};q.render={number:function(a,b,c,d,e){return{display:function(f){if("number"!==typeof f&&"string"!==typeof f)return f;var g=0>f?"-":"",h=parseFloat(f);if(isNaN(h))return hb(f);h=h.toFixed(c);f=Math.abs(h);h=parseInt(f,10);f=c?b+(f-h).toFixed(c).substring(2):"";return g+(d||"")+h.toString().replace(/\B(?=(\d{3})+(?!\d))/g,
-a)+f+(e||"")}}},text:function(){return{display:hb,filter:hb}}};f.extend(q.ext.internal,{_fnExternApiFunc:Pb,_fnBuildAjax:ua,_fnAjaxUpdate:pb,_fnAjaxParameters:yb,_fnAjaxUpdateDraw:zb,_fnAjaxDataSrc:va,_fnAddColumn:Ha,_fnColumnOptions:la,_fnAdjustColumnSizing:Z,_fnVisibleToColumnIndex:aa,_fnColumnIndexToVisible:ba,_fnVisbleColumns:V,_fnGetColumns:na,_fnColumnTypes:Ja,_fnApplyColumnDefs:mb,_fnHungarianMap:H,_fnCamelToHungarian:L,_fnLanguageCompat:Fa,_fnBrowserDetect:kb,_fnAddData:R,_fnAddTr:oa,_fnNodeToDataIndex:function(a,
-b){return b._DT_RowIndex!==n?b._DT_RowIndex:null},_fnNodeToColumnIndex:function(a,b,c){return f.inArray(c,a.aoData[b].anCells)},_fnGetCellData:F,_fnSetCellData:nb,_fnSplitObjNotation:Ma,_fnGetObjectDataFn:T,_fnSetObjectDataFn:Q,_fnGetDataMaster:Na,_fnClearTable:pa,_fnDeleteIndex:qa,_fnInvalidate:da,_fnGetRowElements:La,_fnCreateTr:Ka,_fnBuildHead:ob,_fnDrawHead:fa,_fnDraw:S,_fnReDraw:U,_fnAddOptionsHtml:rb,_fnDetectHeader:ea,_fnGetUniqueThs:ta,_fnFeatureHtmlFilter:tb,_fnFilterComplete:ha,_fnFilterCustom:Cb,
-_fnFilterColumn:Bb,_fnFilter:Ab,_fnFilterCreateSearch:Sa,_fnEscapeRegex:Ta,_fnFilterData:Db,_fnFeatureHtmlInfo:wb,_fnUpdateInfo:Gb,_fnInfoMacros:Hb,_fnInitialise:ia,_fnInitComplete:wa,_fnLengthChange:Ua,_fnFeatureHtmlLength:sb,_fnFeatureHtmlPaginate:xb,_fnPageChange:Wa,_fnFeatureHtmlProcessing:ub,_fnProcessingDisplay:J,_fnFeatureHtmlTable:vb,_fnScrollDraw:ma,_fnApplyToChildren:N,_fnCalculateColumnWidths:Ia,_fnThrottle:Ra,_fnConvertToWidth:Ib,_fnGetWidestNode:Jb,_fnGetMaxLenString:Kb,_fnStringToCss:B,
-_fnSortFlatten:X,_fnSort:qb,_fnSortAria:Mb,_fnSortListener:Ya,_fnSortAttachListener:Pa,_fnSortingClasses:za,_fnSortData:Lb,_fnSaveState:Aa,_fnLoadState:Nb,_fnSettingsFromNode:Ba,_fnLog:O,_fnMap:M,_fnBindAction:Za,_fnCallbackReg:D,_fnCallbackFire:A,_fnLengthOverflow:Va,_fnRenderer:Qa,_fnDataSource:I,_fnRowAttributes:Oa,_fnExtend:$a,_fnCalculateEnd:function(){}});f.fn.dataTable=q;q.$=f;f.fn.dataTableSettings=q.settings;f.fn.dataTableExt=q.ext;f.fn.DataTable=function(a){return f(this).dataTable(a).api()};
-f.each(q,function(a,b){f.fn.DataTable[a]=b});return f.fn.dataTable});
-
-
-/*!
- DataTables Bootstrap 4 integration
- ©2011-2017 SpryMedia Ltd - datatables.net/license
-*/
-var $jscomp=$jscomp||{};$jscomp.scope={};$jscomp.findInternal=function(a,b,c){a instanceof String&&(a=String(a));for(var e=a.length,d=0;d<e;d++){var k=a[d];if(b.call(c,k,d,a))return{i:d,v:k}}return{i:-1,v:void 0}};$jscomp.ASSUME_ES5=!1;$jscomp.ASSUME_NO_NATIVE_MAP=!1;$jscomp.ASSUME_NO_NATIVE_SET=!1;$jscomp.SIMPLE_FROUND_POLYFILL=!1;
-$jscomp.defineProperty=$jscomp.ASSUME_ES5||"function"==typeof Object.defineProperties?Object.defineProperty:function(a,b,c){a!=Array.prototype&&a!=Object.prototype&&(a[b]=c.value)};$jscomp.getGlobal=function(a){a=["object"==typeof window&&window,"object"==typeof self&&self,"object"==typeof global&&global,a];for(var b=0;b<a.length;++b){var c=a[b];if(c&&c.Math==Math)return c}throw Error("Cannot find global object");};$jscomp.global=$jscomp.getGlobal(this);
-$jscomp.polyfill=function(a,b,c,e){if(b){c=$jscomp.global;a=a.split(".");for(e=0;e<a.length-1;e++){var d=a[e];d in c||(c[d]={});c=c[d]}a=a[a.length-1];e=c[a];b=b(e);b!=e&&null!=b&&$jscomp.defineProperty(c,a,{configurable:!0,writable:!0,value:b})}};$jscomp.polyfill("Array.prototype.find",function(a){return a?a:function(a,c){return $jscomp.findInternal(this,a,c).v}},"es6","es3");
-(function(a){"function"===typeof define&&define.amd?define(["jquery","datatables.net"],function(b){return a(b,window,document)}):"object"===typeof exports?module.exports=function(b,c){b||(b=window);c&&c.fn.dataTable||(c=require("datatables.net")(b,c).$);return a(c,b,b.document)}:a(jQuery,window,document)})(function(a,b,c,e){var d=a.fn.dataTable;a.extend(!0,d.defaults,{dom:"<'row'<'col-sm-12 col-md-6'l><'col-sm-12 col-md-6'f>><'row'<'col-sm-12'tr>><'row'<'col-sm-12 col-md-5'i><'col-sm-12 col-md-7'p>>",
-renderer:"bootstrap"});a.extend(d.ext.classes,{sWrapper:"dataTables_wrapper dt-bootstrap4",sFilterInput:"form-control form-control-sm",sLengthSelect:"custom-select custom-select-sm form-control form-control-sm",sProcessing:"dataTables_processing card",sPageButton:"paginate_button page-item"});d.ext.renderer.pageButton.bootstrap=function(b,l,v,w,m,r){var k=new d.Api(b),x=b.oClasses,n=b.oLanguage.oPaginate,y=b.oLanguage.oAria.paginate||{},g,h,t=0,u=function(c,d){var e,l=function(b){b.preventDefault();
-a(b.currentTarget).hasClass("disabled")||k.page()==b.data.action||k.page(b.data.action).draw("page")};var q=0;for(e=d.length;q<e;q++){var f=d[q];if(a.isArray(f))u(c,f);else{h=g="";switch(f){case "ellipsis":g="&#x2026;";h="disabled";break;case "first":g=n.sFirst;h=f+(0<m?"":" disabled");break;case "previous":g=n.sPrevious;h=f+(0<m?"":" disabled");break;case "next":g=n.sNext;h=f+(m<r-1?"":" disabled");break;case "last":g=n.sLast;h=f+(m<r-1?"":" disabled");break;default:g=f+1,h=m===f?"active":""}if(g){var p=
-a("<li>",{"class":x.sPageButton+" "+h,id:0===v&&"string"===typeof f?b.sTableId+"_"+f:null}).append(a("<a>",{href:"#","aria-controls":b.sTableId,"aria-label":y[f],"data-dt-idx":t,tabindex:b.iTabIndex,"class":"page-link"}).html(g)).appendTo(c);b.oApi._fnBindAction(p,{action:f},l);t++}}}};try{var p=a(l).find(c.activeElement).data("dt-idx")}catch(z){}u(a(l).empty().html('<ul class="pagination"/>').children("ul"),w);p!==e&&a(l).find("[data-dt-idx="+p+"]").trigger("focus")};return d});
-
-
-/*!
- Buttons for DataTables 1.6.2
- ©2016-2020 SpryMedia Ltd - datatables.net/license
-*/
-(function(d){"function"===typeof define&&define.amd?define(["jquery","datatables.net"],function(v){return d(v,window,document)}):"object"===typeof exports?module.exports=function(v,u){v||(v=window);u&&u.fn.dataTable||(u=require("datatables.net")(v,u).$);return d(u,v,v.document)}:d(jQuery,window,document)})(function(d,v,u,n){function y(a,b,c){d.fn.animate?a.stop().fadeIn(b,c):(a.css("display","block"),c&&c.call(a))}function z(a,b,c){d.fn.animate?a.stop().fadeOut(b,c):(a.css("display","none"),c&&c.call(a))}
-function B(a,b){a=new m.Api(a);b=b?b:a.init().buttons||m.defaults.buttons;return(new r(a,b)).container()}var m=d.fn.dataTable,E=0,F=0,q=m.ext.buttons,r=function(a,b){if(!(this instanceof r))return function(b){return(new r(b,a)).container()};"undefined"===typeof b&&(b={});!0===b&&(b={});d.isArray(b)&&(b={buttons:b});this.c=d.extend(!0,{},r.defaults,b);b.buttons&&(this.c.buttons=b.buttons);this.s={dt:new m.Api(a),buttons:[],listenKeys:"",namespace:"dtb"+E++};this.dom={container:d("<"+this.c.dom.container.tag+
-"/>").addClass(this.c.dom.container.className)};this._constructor()};d.extend(r.prototype,{action:function(a,b){a=this._nodeToButton(a);if(b===n)return a.conf.action;a.conf.action=b;return this},active:function(a,b){var c=this._nodeToButton(a);a=this.c.dom.button.active;c=d(c.node);if(b===n)return c.hasClass(a);c.toggleClass(a,b===n?!0:b);return this},add:function(a,b){var c=this.s.buttons;if("string"===typeof b){b=b.split("-");var e=this.s;c=0;for(var d=b.length-1;c<d;c++)e=e.buttons[1*b[c]];c=e.buttons;
-b=1*b[b.length-1]}this._expandButton(c,a,e!==n,b);this._draw();return this},container:function(){return this.dom.container},disable:function(a){a=this._nodeToButton(a);d(a.node).addClass(this.c.dom.button.disabled).attr("disabled",!0);return this},destroy:function(){d("body").off("keyup."+this.s.namespace);var a=this.s.buttons.slice(),b;var c=0;for(b=a.length;c<b;c++)this.remove(a[c].node);this.dom.container.remove();a=this.s.dt.settings()[0];c=0;for(b=a.length;c<b;c++)if(a.inst===this){a.splice(c,
-1);break}return this},enable:function(a,b){if(!1===b)return this.disable(a);a=this._nodeToButton(a);d(a.node).removeClass(this.c.dom.button.disabled).removeAttr("disabled");return this},name:function(){return this.c.name},node:function(a){if(!a)return this.dom.container;a=this._nodeToButton(a);return d(a.node)},processing:function(a,b){var c=this.s.dt,e=this._nodeToButton(a);if(b===n)return d(e.node).hasClass("processing");d(e.node).toggleClass("processing",b);d(c.table().node()).triggerHandler("buttons-processing.dt",
-[b,c.button(a),c,d(a),e.conf]);return this},remove:function(a){var b=this._nodeToButton(a),c=this._nodeToHost(a),e=this.s.dt;if(b.buttons.length)for(var g=b.buttons.length-1;0<=g;g--)this.remove(b.buttons[g].node);b.conf.destroy&&b.conf.destroy.call(e.button(a),e,d(a),b.conf);this._removeKey(b.conf);d(b.node).remove();a=d.inArray(b,c);c.splice(a,1);return this},text:function(a,b){var c=this._nodeToButton(a);a=this.c.dom.collection.buttonLiner;a=c.inCollection&&a&&a.tag?a.tag:this.c.dom.buttonLiner.tag;
-var e=this.s.dt,g=d(c.node),f=function(a){return"function"===typeof a?a(e,g,c.conf):a};if(b===n)return f(c.conf.text);c.conf.text=b;a?g.children(a).html(f(b)):g.html(f(b));return this},_constructor:function(){var a=this,b=this.s.dt,c=b.settings()[0],e=this.c.buttons;c._buttons||(c._buttons=[]);c._buttons.push({inst:this,name:this.c.name});for(var g=0,f=e.length;g<f;g++)this.add(e[g]);b.on("destroy",function(b,e){e===c&&a.destroy()});d("body").on("keyup."+this.s.namespace,function(b){if(!u.activeElement||
-u.activeElement===u.body){var c=String.fromCharCode(b.keyCode).toLowerCase();-1!==a.s.listenKeys.toLowerCase().indexOf(c)&&a._keypress(c,b)}})},_addKey:function(a){a.key&&(this.s.listenKeys+=d.isPlainObject(a.key)?a.key.key:a.key)},_draw:function(a,b){a||(a=this.dom.container,b=this.s.buttons);a.children().detach();for(var c=0,e=b.length;c<e;c++)a.append(b[c].inserter),a.append(" "),b[c].buttons&&b[c].buttons.length&&this._draw(b[c].collection,b[c].buttons)},_expandButton:function(a,b,c,e){var g=
-this.s.dt,f=0;b=d.isArray(b)?b:[b];for(var k=0,h=b.length;k<h;k++){var t=this._resolveExtends(b[k]);if(t)if(d.isArray(t))this._expandButton(a,t,c,e);else{var l=this._buildButton(t,c);l&&(e!==n&&null!==e?(a.splice(e,0,l),e++):a.push(l),l.conf.buttons&&(l.collection=d("<"+this.c.dom.collection.tag+"/>"),l.conf._collection=l.collection,this._expandButton(l.buttons,l.conf.buttons,!0,e)),t.init&&t.init.call(g.button(l.node),g,d(l.node),t),f++)}}},_buildButton:function(a,b){var c=this.c.dom.button,e=this.c.dom.buttonLiner,
-g=this.c.dom.collection,f=this.s.dt,k=function(b){return"function"===typeof b?b(f,l,a):b};b&&g.button&&(c=g.button);b&&g.buttonLiner&&(e=g.buttonLiner);if(a.available&&!a.available(f,a))return!1;var h=function(a,b,c,e){e.action.call(b.button(c),a,b,c,e);d(b.table().node()).triggerHandler("buttons-action.dt",[b.button(c),b,c,e])};g=a.tag||c.tag;var t=a.clickBlurs===n?!0:a.clickBlurs,l=d("<"+g+"/>").addClass(c.className).attr("tabindex",this.s.dt.settings()[0].iTabIndex).attr("aria-controls",this.s.dt.table().node().id).on("click.dtb",
-function(b){b.preventDefault();!l.hasClass(c.disabled)&&a.action&&h(b,f,l,a);t&&l.trigger("blur")}).on("keyup.dtb",function(b){13===b.keyCode&&!l.hasClass(c.disabled)&&a.action&&h(b,f,l,a)});"a"===g.toLowerCase()&&l.attr("href","#");"button"===g.toLowerCase()&&l.attr("type","button");e.tag?(g=d("<"+e.tag+"/>").html(k(a.text)).addClass(e.className),"a"===e.tag.toLowerCase()&&g.attr("href","#"),l.append(g)):l.html(k(a.text));!1===a.enabled&&l.addClass(c.disabled);a.className&&l.addClass(a.className);
-a.titleAttr&&l.attr("title",k(a.titleAttr));a.attr&&l.attr(a.attr);a.namespace||(a.namespace=".dt-button-"+F++);e=(e=this.c.dom.buttonContainer)&&e.tag?d("<"+e.tag+"/>").addClass(e.className).append(l):l;this._addKey(a);this.c.buttonCreated&&(e=this.c.buttonCreated(a,e));return{conf:a,node:l.get(0),inserter:e,buttons:[],inCollection:b,collection:null}},_nodeToButton:function(a,b){b||(b=this.s.buttons);for(var c=0,e=b.length;c<e;c++){if(b[c].node===a)return b[c];if(b[c].buttons.length){var d=this._nodeToButton(a,
-b[c].buttons);if(d)return d}}},_nodeToHost:function(a,b){b||(b=this.s.buttons);for(var c=0,e=b.length;c<e;c++){if(b[c].node===a)return b;if(b[c].buttons.length){var d=this._nodeToHost(a,b[c].buttons);if(d)return d}}},_keypress:function(a,b){if(!b._buttonsHandled){var c=function(e){for(var g=0,f=e.length;g<f;g++){var k=e[g].conf,h=e[g].node;k.key&&(k.key===a?(b._buttonsHandled=!0,d(h).click()):!d.isPlainObject(k.key)||k.key.key!==a||k.key.shiftKey&&!b.shiftKey||k.key.altKey&&!b.altKey||k.key.ctrlKey&&
-!b.ctrlKey||k.key.metaKey&&!b.metaKey||(b._buttonsHandled=!0,d(h).click()));e[g].buttons.length&&c(e[g].buttons)}};c(this.s.buttons)}},_removeKey:function(a){if(a.key){var b=d.isPlainObject(a.key)?a.key.key:a.key;a=this.s.listenKeys.split("");b=d.inArray(b,a);a.splice(b,1);this.s.listenKeys=a.join("")}},_resolveExtends:function(a){var b=this.s.dt,c,e=function(c){for(var e=0;!d.isPlainObject(c)&&!d.isArray(c);){if(c===n)return;if("function"===typeof c){if(c=c(b,a),!c)return!1}else if("string"===typeof c){if(!q[c])throw"Unknown button type: "+
-c;c=q[c]}e++;if(30<e)throw"Buttons: Too many iterations";}return d.isArray(c)?c:d.extend({},c)};for(a=e(a);a&&a.extend;){if(!q[a.extend])throw"Cannot extend unknown button type: "+a.extend;var g=e(q[a.extend]);if(d.isArray(g))return g;if(!g)return!1;var f=g.className;a=d.extend({},g,a);f&&a.className!==f&&(a.className=f+" "+a.className);var k=a.postfixButtons;if(k){a.buttons||(a.buttons=[]);f=0;for(c=k.length;f<c;f++)a.buttons.push(k[f]);a.postfixButtons=null}if(k=a.prefixButtons){a.buttons||(a.buttons=
-[]);f=0;for(c=k.length;f<c;f++)a.buttons.splice(f,0,k[f]);a.prefixButtons=null}a.extend=g.extend}return a},_popover:function(a,b,c){var e=this.c,g=d.extend({align:"button-left",autoClose:!1,background:!0,backgroundClassName:"dt-button-background",contentClassName:e.dom.collection.className,collectionLayout:"",collectionTitle:"",dropup:!1,fade:400,rightAlignClassName:"dt-button-right",tag:e.dom.collection.tag},c),f=b.node(),k=function(){z(d(".dt-button-collection"),g.fade,function(){d(this).detach()});
-d(b.buttons('[aria-haspopup="true"][aria-expanded="true"]').nodes()).attr("aria-expanded","false");d("div.dt-button-background").off("click.dtb-collection");r.background(!1,g.backgroundClassName,g.fade,f);d("body").off(".dtb-collection");b.off("buttons-action.b-internal")};!1===a&&k();c=d(b.buttons('[aria-haspopup="true"][aria-expanded="true"]').nodes());c.length&&(f=c.eq(0),k());c=d("<div/>").addClass("dt-button-collection").addClass(g.collectionLayout).css("display","none");a=d(a).addClass(g.contentClassName).attr("role",
-"menu").appendTo(c);f.attr("aria-expanded","true");f.parents("body")[0]!==u.body&&(f=u.body.lastChild);g.collectionTitle&&c.prepend('<div class="dt-button-collection-title">'+g.collectionTitle+"</div>");y(c.insertAfter(f));var h=d(b.table().container());e=c.css("position");"dt-container"===g.align&&(f=f.parent(),c.css("width",h.width()));if("absolute"===e){e=f.position();c.css({top:e.top+f.outerHeight(),left:e.left});var t=c.outerHeight();c.outerWidth();var l=h.offset().top+h.height();l=e.top+f.outerHeight()+
-t-l;var p=e.top-t,w=h.offset().top;e=e.top-t-5;(l>w-p||g.dropup)&&-e<w&&c.css("top",e);e=h.offset().left;h=h.width();h=e+h;t=c.offset().left;l=c.width();l=t+l;p=f.offset().left;w=f.outerWidth();w=p+w;p=0;c.hasClass(g.rightAlignClassName)||"button-right"===g.align?(p=w-l,e>t+p&&(e-=t+p,h-=l+p,p=e>h?p+h:p+e)):(p=e-t,h<l+p&&(e-=t+p,h-=l+p,p=e>h?p+h:p+e));c.css("left",c.position().left+p)}else e=c.height()/2,e>d(v).height()/2&&(e=d(v).height()/2),c.css("marginTop",-1*e);g.background&&r.background(!0,
-g.backgroundClassName,g.fade,f);d("div.dt-button-background").on("click.dtb-collection",function(){});d("body").on("click.dtb-collection",function(b){var c=d.fn.addBack?"addBack":"andSelf";d(b.target).parents()[c]().filter(a).length||k()}).on("keyup.dtb-collection",function(a){27===a.keyCode&&k()});g.autoClose&&setTimeout(function(){b.on("buttons-action.b-internal",function(a,b,c,e){e[0]!==f[0]&&k()})},0);d(c).trigger("buttons-popover.dt")}});r.background=function(a,b,c,e){c===n&&(c=400);e||(e=u.body);
-a?y(d("<div/>").addClass(b).css("display","none").insertAfter(e),c):z(d("div."+b),c,function(){d(this).removeClass(b).remove()})};r.instanceSelector=function(a,b){if(a===n||null===a)return d.map(b,function(a){return a.inst});var c=[],e=d.map(b,function(a){return a.name}),g=function(a){if(d.isArray(a))for(var f=0,h=a.length;f<h;f++)g(a[f]);else"string"===typeof a?-1!==a.indexOf(",")?g(a.split(",")):(a=d.inArray(d.trim(a),e),-1!==a&&c.push(b[a].inst)):"number"===typeof a&&c.push(b[a].inst)};g(a);return c};
-r.buttonSelector=function(a,b){for(var c=[],e=function(a,b,c){for(var d,g,f=0,h=b.length;f<h;f++)if(d=b[f])g=c!==n?c+f:f+"",a.push({node:d.node,name:d.conf.name,idx:g}),d.buttons&&e(a,d.buttons,g+"-")},g=function(a,b){var f,k=[];e(k,b.s.buttons);var h=d.map(k,function(a){return a.node});if(d.isArray(a)||a instanceof d)for(h=0,f=a.length;h<f;h++)g(a[h],b);else if(null===a||a===n||"*"===a)for(h=0,f=k.length;h<f;h++)c.push({inst:b,node:k[h].node});else if("number"===typeof a)c.push({inst:b,node:b.s.buttons[a].node});
-else if("string"===typeof a)if(-1!==a.indexOf(","))for(k=a.split(","),h=0,f=k.length;h<f;h++)g(d.trim(k[h]),b);else if(a.match(/^\d+(\-\d+)*$/))h=d.map(k,function(a){return a.idx}),c.push({inst:b,node:k[d.inArray(a,h)].node});else if(-1!==a.indexOf(":name"))for(a=a.replace(":name",""),h=0,f=k.length;h<f;h++)k[h].name===a&&c.push({inst:b,node:k[h].node});else d(h).filter(a).each(function(){c.push({inst:b,node:this})});else"object"===typeof a&&a.nodeName&&(k=d.inArray(a,h),-1!==k&&c.push({inst:b,node:h[k]}))},
-f=0,k=a.length;f<k;f++)g(b,a[f]);return c};r.defaults={buttons:["copy","excel","csv","pdf","print"],name:"main",tabIndex:0,dom:{container:{tag:"div",className:"dt-buttons"},collection:{tag:"div",className:""},button:{tag:"ActiveXObject"in v?"a":"button",className:"dt-button",active:"active",disabled:"disabled"},buttonLiner:{tag:"span",className:""}}};r.version="1.6.2";d.extend(q,{collection:{text:function(a){return a.i18n("buttons.collection","Collection")},className:"buttons-collection",init:function(a,
-b,c){b.attr("aria-expanded",!1)},action:function(a,b,c,e){a.stopPropagation();e._collection.parents("body").length?this.popover(!1,e):this.popover(e._collection,e)},attr:{"aria-haspopup":!0}},copy:function(a,b){if(q.copyHtml5)return"copyHtml5";if(q.copyFlash&&q.copyFlash.available(a,b))return"copyFlash"},csv:function(a,b){if(q.csvHtml5&&q.csvHtml5.available(a,b))return"csvHtml5";if(q.csvFlash&&q.csvFlash.available(a,b))return"csvFlash"},excel:function(a,b){if(q.excelHtml5&&q.excelHtml5.available(a,
-b))return"excelHtml5";if(q.excelFlash&&q.excelFlash.available(a,b))return"excelFlash"},pdf:function(a,b){if(q.pdfHtml5&&q.pdfHtml5.available(a,b))return"pdfHtml5";if(q.pdfFlash&&q.pdfFlash.available(a,b))return"pdfFlash"},pageLength:function(a){a=a.settings()[0].aLengthMenu;var b=d.isArray(a[0])?a[0]:a,c=d.isArray(a[0])?a[1]:a;return{extend:"collection",text:function(a){return a.i18n("buttons.pageLength",{"-1":"Show all rows",_:"Show %d rows"},a.page.len())},className:"buttons-page-length",autoClose:!0,
-buttons:d.map(b,function(a,b){return{text:c[b],className:"button-page-length",action:function(b,c){c.page.len(a).draw()},init:function(b,c,e){var d=this;c=function(){d.active(b.page.len()===a)};b.on("length.dt"+e.namespace,c);c()},destroy:function(a,b,c){a.off("length.dt"+c.namespace)}}}),init:function(a,b,c){var e=this;a.on("length.dt"+c.namespace,function(){e.text(c.text)})},destroy:function(a,b,c){a.off("length.dt"+c.namespace)}}}});m.Api.register("buttons()",function(a,b){b===n&&(b=a,a=n);this.selector.buttonGroup=
-a;var c=this.iterator(!0,"table",function(c){if(c._buttons)return r.buttonSelector(r.instanceSelector(a,c._buttons),b)},!0);c._groupSelector=a;return c});m.Api.register("button()",function(a,b){a=this.buttons(a,b);1<a.length&&a.splice(1,a.length);return a});m.Api.registerPlural("buttons().active()","button().active()",function(a){return a===n?this.map(function(a){return a.inst.active(a.node)}):this.each(function(b){b.inst.active(b.node,a)})});m.Api.registerPlural("buttons().action()","button().action()",
-function(a){return a===n?this.map(function(a){return a.inst.action(a.node)}):this.each(function(b){b.inst.action(b.node,a)})});m.Api.register(["buttons().enable()","button().enable()"],function(a){return this.each(function(b){b.inst.enable(b.node,a)})});m.Api.register(["buttons().disable()","button().disable()"],function(){return this.each(function(a){a.inst.disable(a.node)})});m.Api.registerPlural("buttons().nodes()","button().node()",function(){var a=d();d(this.each(function(b){a=a.add(b.inst.node(b.node))}));
-return a});m.Api.registerPlural("buttons().processing()","button().processing()",function(a){return a===n?this.map(function(a){return a.inst.processing(a.node)}):this.each(function(b){b.inst.processing(b.node,a)})});m.Api.registerPlural("buttons().text()","button().text()",function(a){return a===n?this.map(function(a){return a.inst.text(a.node)}):this.each(function(b){b.inst.text(b.node,a)})});m.Api.registerPlural("buttons().trigger()","button().trigger()",function(){return this.each(function(a){a.inst.node(a.node).trigger("click")})});
-m.Api.register("button().popover()",function(a,b){return this.map(function(c){return c.inst._popover(a,this.button(this[0].node),b)})});m.Api.register("buttons().containers()",function(){var a=d(),b=this._groupSelector;this.iterator(!0,"table",function(c){if(c._buttons){c=r.instanceSelector(b,c._buttons);for(var e=0,d=c.length;e<d;e++)a=a.add(c[e].container())}});return a});m.Api.register("buttons().container()",function(){return this.containers().eq(0)});m.Api.register("button().add()",function(a,
-b){var c=this.context;c.length&&(c=r.instanceSelector(this._groupSelector,c[0]._buttons),c.length&&c[0].add(b,a));return this.button(this._groupSelector,a)});m.Api.register("buttons().destroy()",function(){this.pluck("inst").unique().each(function(a){a.destroy()});return this});m.Api.registerPlural("buttons().remove()","buttons().remove()",function(){this.each(function(a){a.inst.remove(a.node)});return this});var x;m.Api.register("buttons.info()",function(a,b,c){var e=this;if(!1===a)return this.off("destroy.btn-info"),
-z(d("#datatables_buttons_info"),400,function(){d(this).remove()}),clearTimeout(x),x=null,this;x&&clearTimeout(x);d("#datatables_buttons_info").length&&d("#datatables_buttons_info").remove();a=a?"<h2>"+a+"</h2>":"";y(d('<div id="datatables_buttons_info" class="dt-button-info"/>').html(a).append(d("<div/>")["string"===typeof b?"html":"append"](b)).css("display","none").appendTo("body"));c!==n&&0!==c&&(x=setTimeout(function(){e.buttons.info(!1)},c));this.on("destroy.btn-info",function(){e.buttons.info(!1)});
-return this});m.Api.register("buttons.exportData()",function(a){if(this.context.length)return G(new m.Api(this.context[0]),a)});m.Api.register("buttons.exportInfo()",function(a){a||(a={});var b=a;var c="*"===b.filename&&"*"!==b.title&&b.title!==n&&null!==b.title&&""!==b.title?b.title:b.filename;"function"===typeof c&&(c=c());c===n||null===c?c=null:(-1!==c.indexOf("*")&&(c=d.trim(c.replace("*",d("head > title").text()))),c=c.replace(/[^a-zA-Z0-9_\u00A1-\uFFFF\.,\-_ !\(\)]/g,""),(b=A(b.extension))||
-(b=""),c+=b);b=A(a.title);b=null===b?null:-1!==b.indexOf("*")?b.replace("*",d("head > title").text()||"Exported data"):b;return{filename:c,title:b,messageTop:C(this,a.message||a.messageTop,"top"),messageBottom:C(this,a.messageBottom,"bottom")}});var A=function(a){return null===a||a===n?null:"function"===typeof a?a():a},C=function(a,b,c){b=A(b);if(null===b)return null;a=d("caption",a.table().container()).eq(0);return"*"===b?a.css("caption-side")!==c?null:a.length?a.text():"":b},D=d("<textarea/>")[0],
-G=function(a,b){var c=d.extend(!0,{},{rows:null,columns:"",modifier:{search:"applied",order:"applied"},orthogonal:"display",stripHtml:!0,stripNewlines:!0,decodeEntities:!0,trim:!0,format:{header:function(a){return e(a)},footer:function(a){return e(a)},body:function(a){return e(a)}},customizeData:null},b),e=function(a){if("string"!==typeof a)return a;a=a.replace(/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,"");a=a.replace(/<!\-\-.*?\-\->/g,"");c.stripHtml&&(a=a.replace(/<[^>]*>/g,""));c.trim&&
-(a=a.replace(/^\s+|\s+$/g,""));c.stripNewlines&&(a=a.replace(/\n/g," "));c.decodeEntities&&(D.innerHTML=a,a=D.value);return a};b=a.columns(c.columns).indexes().map(function(b){var d=a.column(b).header();return c.format.header(d.innerHTML,b,d)}).toArray();var g=a.table().footer()?a.columns(c.columns).indexes().map(function(b){var d=a.column(b).footer();return c.format.footer(d?d.innerHTML:"",b,d)}).toArray():null,f=d.extend({},c.modifier);a.select&&"function"===typeof a.select.info&&f.selected===n&&
-a.rows(c.rows,d.extend({selected:!0},f)).any()&&d.extend(f,{selected:!0});f=a.rows(c.rows,f).indexes().toArray();var k=a.cells(f,c.columns);f=k.render(c.orthogonal).toArray();k=k.nodes().toArray();for(var h=b.length,m=[],l=0,p=0,r=0<h?f.length/h:0;p<r;p++){for(var q=[h],u=0;u<h;u++)q[u]=c.format.body(f[l],p,u,k[l]),l++;m[p]=q}b={header:b,footer:g,body:m};c.customizeData&&c.customizeData(b);return b};d.fn.dataTable.Buttons=r;d.fn.DataTable.Buttons=r;d(u).on("init.dt plugin-init.dt",function(a,b){"dt"===
-a.namespace&&(a=b.oInit.buttons||m.defaults.buttons)&&!b._buttons&&(new r(b,a)).container()});m.ext.feature.push({fnInit:B,cFeature:"B"});m.ext.features&&m.ext.features.register("buttons",B);return r});
-
-
-/*!
- Bootstrap integration for DataTables' Buttons
- ©2016 SpryMedia Ltd - datatables.net/license
-*/
-(function(c){"function"===typeof define&&define.amd?define(["jquery","datatables.net-bs4","datatables.net-buttons"],function(a){return c(a,window,document)}):"object"===typeof exports?module.exports=function(a,b){a||(a=window);b&&b.fn.dataTable||(b=require("datatables.net-bs4")(a,b).$);b.fn.dataTable.Buttons||require("datatables.net-buttons")(a,b);return c(b,a,a.document)}:c(jQuery,window,document)})(function(c,a,b,d){a=c.fn.dataTable;c.extend(!0,a.Buttons.defaults,{dom:{container:{className:"dt-buttons btn-group flex-wrap"},
-button:{className:"btn btn-secondary"},collection:{tag:"div",className:"dropdown-menu",button:{tag:"a",className:"dt-button dropdown-item",active:"active",disabled:"disabled"}}},buttonCreated:function(a,b){return a.buttons?c('<div class="btn-group"/>').append(b):b}});a.ext.buttons.collection.className+=" dropdown-toggle";a.ext.buttons.collection.rightAlignClassName="dropdown-menu-right";return a.Buttons});
-
-
-/*!
-   Copyright 2014-2020 SpryMedia Ltd.
-
- This source file is free software, available under the following license:
-   MIT license - http://datatables.net/license/mit
-
- This source file is distributed in the hope that it will be useful, but
- WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
- or FITNESS FOR A PARTICULAR PURPOSE. See the license files for details.
-
- For details please refer to: http://www.datatables.net
- Responsive 2.2.5
- 2014-2020 SpryMedia Ltd - datatables.net/license
-*/
-var $jscomp=$jscomp||{};$jscomp.scope={};$jscomp.findInternal=function(a,k,g){a instanceof String&&(a=String(a));for(var n=a.length,p=0;p<n;p++){var v=a[p];if(k.call(g,v,p,a))return{i:p,v:v}}return{i:-1,v:void 0}};$jscomp.ASSUME_ES5=!1;$jscomp.ASSUME_NO_NATIVE_MAP=!1;$jscomp.ASSUME_NO_NATIVE_SET=!1;$jscomp.SIMPLE_FROUND_POLYFILL=!1;
-$jscomp.defineProperty=$jscomp.ASSUME_ES5||"function"==typeof Object.defineProperties?Object.defineProperty:function(a,k,g){a!=Array.prototype&&a!=Object.prototype&&(a[k]=g.value)};$jscomp.getGlobal=function(a){a=["object"==typeof window&&window,"object"==typeof self&&self,"object"==typeof global&&global,a];for(var k=0;k<a.length;++k){var g=a[k];if(g&&g.Math==Math)return g}throw Error("Cannot find global object");};$jscomp.global=$jscomp.getGlobal(this);
-$jscomp.polyfill=function(a,k,g,n){if(k){g=$jscomp.global;a=a.split(".");for(n=0;n<a.length-1;n++){var p=a[n];p in g||(g[p]={});g=g[p]}a=a[a.length-1];n=g[a];k=k(n);k!=n&&null!=k&&$jscomp.defineProperty(g,a,{configurable:!0,writable:!0,value:k})}};$jscomp.polyfill("Array.prototype.find",function(a){return a?a:function(a,g){return $jscomp.findInternal(this,a,g).v}},"es6","es3");
-(function(a){"function"===typeof define&&define.amd?define(["jquery","datatables.net"],function(k){return a(k,window,document)}):"object"===typeof exports?module.exports=function(k,g){k||(k=window);g&&g.fn.dataTable||(g=require("datatables.net")(k,g).$);return a(g,k,k.document)}:a(jQuery,window,document)})(function(a,k,g,n){function p(b,a,c){var d=a+"-"+c;if(q[d])return q[d];var f=[];b=b.cell(a,c).node().childNodes;a=0;for(c=b.length;a<c;a++)f.push(b[a]);return q[d]=f}function v(b,a,c){var d=a+"-"+
-c;if(q[d]){b=b.cell(a,c).node();c=q[d][0].parentNode.childNodes;a=[];for(var f=0,l=c.length;f<l;f++)a.push(c[f]);c=0;for(f=a.length;c<f;c++)b.appendChild(a[c]);q[d]=n}}var t=a.fn.dataTable,m=function(b,d){if(!t.versionCheck||!t.versionCheck("1.10.10"))throw"DataTables Responsive requires DataTables 1.10.10 or newer";this.s={dt:new t.Api(b),columns:[],current:[]};this.s.dt.settings()[0].responsive||(d&&"string"===typeof d.details?d.details={type:d.details}:d&&!1===d.details?d.details={type:!1}:d&&
-!0===d.details&&(d.details={type:"inline"}),this.c=a.extend(!0,{},m.defaults,t.defaults.responsive,d),b.responsive=this,this._constructor())};a.extend(m.prototype,{_constructor:function(){var b=this,d=this.s.dt,c=d.settings()[0],e=a(k).innerWidth();d.settings()[0]._responsive=this;a(k).on("resize.dtr orientationchange.dtr",t.util.throttle(function(){var d=a(k).innerWidth();d!==e&&(b._resize(),e=d)}));c.oApi._fnCallbackReg(c,"aoRowCreatedCallback",function(c,e,r){-1!==a.inArray(!1,b.s.current)&&a(">td, >th",
-c).each(function(c){c=d.column.index("toData",c);!1===b.s.current[c]&&a(this).css("display","none")})});d.on("destroy.dtr",function(){d.off(".dtr");a(d.table().body()).off(".dtr");a(k).off("resize.dtr orientationchange.dtr");d.cells(".dtr-control").nodes().to$().removeClass("dtr-control");a.each(b.s.current,function(a,d){!1===d&&b._setColumnVis(a,!0)})});this.c.breakpoints.sort(function(b,a){return b.width<a.width?1:b.width>a.width?-1:0});this._classLogic();this._resizeAuto();c=this.c.details;!1!==
-c.type&&(b._detailsInit(),d.on("column-visibility.dtr",function(){b._timer&&clearTimeout(b._timer);b._timer=setTimeout(function(){b._timer=null;b._classLogic();b._resizeAuto();b._resize();b._redrawChildren()},100)}),d.on("draw.dtr",function(){b._redrawChildren()}),a(d.table().node()).addClass("dtr-"+c.type));d.on("column-reorder.dtr",function(a,d,c){b._classLogic();b._resizeAuto();b._resize(!0)});d.on("column-sizing.dtr",function(){b._resizeAuto();b._resize()});d.on("preXhr.dtr",function(){var a=
-[];d.rows().every(function(){this.child.isShown()&&a.push(this.id(!0))});d.one("draw.dtr",function(){b._resizeAuto();b._resize();d.rows(a).every(function(){b._detailsDisplay(this,!1)})})});d.on("draw.dtr",function(){b._controlClass()}).on("init.dtr",function(c,e,r){"dt"===c.namespace&&(b._resizeAuto(),b._resize(),a.inArray(!1,b.s.current)&&d.columns.adjust())});this._resize()},_columnsVisiblity:function(b){var d=this.s.dt,c=this.s.columns,e,f=c.map(function(a,b){return{columnIdx:b,priority:a.priority}}).sort(function(a,
-b){return a.priority!==b.priority?a.priority-b.priority:a.columnIdx-b.columnIdx}),l=a.map(c,function(c,h){return!1===d.column(h).visible()?"not-visible":c.auto&&null===c.minWidth?!1:!0===c.auto?"-":-1!==a.inArray(b,c.includeIn)}),r=0;var h=0;for(e=l.length;h<e;h++)!0===l[h]&&(r+=c[h].minWidth);h=d.settings()[0].oScroll;h=h.sY||h.sX?h.iBarWidth:0;r=d.table().container().offsetWidth-h-r;h=0;for(e=l.length;h<e;h++)c[h].control&&(r-=c[h].minWidth);var k=!1;h=0;for(e=f.length;h<e;h++){var g=f[h].columnIdx;
-"-"===l[g]&&!c[g].control&&c[g].minWidth&&(k||0>r-c[g].minWidth?(k=!0,l[g]=!1):l[g]=!0,r-=c[g].minWidth)}f=!1;h=0;for(e=c.length;h<e;h++)if(!c[h].control&&!c[h].never&&!1===l[h]){f=!0;break}h=0;for(e=c.length;h<e;h++)c[h].control&&(l[h]=f),"not-visible"===l[h]&&(l[h]=!1);-1===a.inArray(!0,l)&&(l[0]=!0);return l},_classLogic:function(){var b=this,d=this.c.breakpoints,c=this.s.dt,e=c.columns().eq(0).map(function(a){var b=this.column(a),d=b.header().className;a=c.settings()[0].aoColumns[a].responsivePriority;
-b=b.header().getAttribute("data-priority");a===n&&(a=b===n||null===b?1E4:1*b);return{className:d,includeIn:[],auto:!1,control:!1,never:d.match(/\bnever\b/)?!0:!1,priority:a}}),f=function(b,d){b=e[b].includeIn;-1===a.inArray(d,b)&&b.push(d)},g=function(a,c,g,l){if(!g)e[a].includeIn.push(c);else if("max-"===g)for(l=b._find(c).width,c=0,g=d.length;c<g;c++)d[c].width<=l&&f(a,d[c].name);else if("min-"===g)for(l=b._find(c).width,c=0,g=d.length;c<g;c++)d[c].width>=l&&f(a,d[c].name);else if("not-"===g)for(c=
-0,g=d.length;c<g;c++)-1===d[c].name.indexOf(l)&&f(a,d[c].name)};e.each(function(b,c){for(var e=b.className.split(" "),f=!1,h=0,l=e.length;h<l;h++){var k=a.trim(e[h]);if("all"===k){f=!0;b.includeIn=a.map(d,function(b){return b.name});return}if("none"===k||b.never){f=!0;return}if("control"===k){f=!0;b.control=!0;return}a.each(d,function(b,a){b=a.name.split("-");var d=k.match(new RegExp("(min\\-|max\\-|not\\-)?("+b[0]+")(\\-[_a-zA-Z0-9])?"));d&&(f=!0,d[2]===b[0]&&d[3]==="-"+b[1]?g(c,a.name,d[1],d[2]+
-d[3]):d[2]!==b[0]||d[3]||g(c,a.name,d[1],d[2]))})}f||(b.auto=!0)});this.s.columns=e},_controlClass:function(){if("inline"===this.c.details.type){var b=this.s.dt,d=a.inArray(!0,this.s.current);b.cells(null,function(b){return b!==d},{page:"current"}).nodes().to$().filter(".dtr-control").removeClass("dtr-control");b.cells(null,d,{page:"current"}).nodes().to$().addClass("dtr-control")}},_detailsDisplay:function(b,d){var c=this,e=this.s.dt,f=this.c.details;if(f&&!1!==f.type){var g=f.display(b,d,function(){return f.renderer(e,
-b[0],c._detailsObj(b[0]))});!0!==g&&!1!==g||a(e.table().node()).triggerHandler("responsive-display.dt",[e,b,g,d])}},_detailsInit:function(){var b=this,d=this.s.dt,c=this.c.details;"inline"===c.type&&(c.target="td.dtr-control, th.dtr-control");d.on("draw.dtr",function(){b._tabIndexes()});b._tabIndexes();a(d.table().body()).on("keyup.dtr","td, th",function(b){13===b.keyCode&&a(this).data("dtr-keyboard")&&a(this).click()});var e=c.target;c="string"===typeof e?e:"td, th";if(e!==n||null!==e)a(d.table().body()).on("click.dtr mousedown.dtr mouseup.dtr",
-c,function(c){if(a(d.table().node()).hasClass("collapsed")&&-1!==a.inArray(a(this).closest("tr").get(0),d.rows().nodes().toArray())){if("number"===typeof e){var f=0>e?d.columns().eq(0).length+e:e;if(d.cell(this).index().column!==f)return}f=d.row(a(this).closest("tr"));"click"===c.type?b._detailsDisplay(f,!1):"mousedown"===c.type?a(this).css("outline","none"):"mouseup"===c.type&&a(this).trigger("blur").css("outline","")}})},_detailsObj:function(b){var d=this,c=this.s.dt;return a.map(this.s.columns,
-function(e,f){if(!e.never&&!e.control)return e=c.settings()[0].aoColumns[f],{className:e.sClass,columnIndex:f,data:c.cell(b,f).render(d.c.orthogonal),hidden:c.column(f).visible()&&!d.s.current[f],rowIndex:b,title:null!==e.sTitle?e.sTitle:a(c.column(f).header()).text()}})},_find:function(b){for(var a=this.c.breakpoints,c=0,e=a.length;c<e;c++)if(a[c].name===b)return a[c]},_redrawChildren:function(){var b=this,a=this.s.dt;a.rows({page:"current"}).iterator("row",function(c,d){a.row(d);b._detailsDisplay(a.row(d),
-!0)})},_resize:function(b){var d=this,c=this.s.dt,e=a(k).innerWidth(),f=this.c.breakpoints,g=f[0].name,r=this.s.columns,h,n=this.s.current.slice();for(h=f.length-1;0<=h;h--)if(e<=f[h].width){g=f[h].name;break}var m=this._columnsVisiblity(g);this.s.current=m;f=!1;h=0;for(e=r.length;h<e;h++)if(!1===m[h]&&!r[h].never&&!r[h].control&&!1===!c.column(h).visible()){f=!0;break}a(c.table().node()).toggleClass("collapsed",f);var p=!1,q=0;c.columns().eq(0).each(function(a,c){!0===m[c]&&q++;if(b||m[c]!==n[c])p=
-!0,d._setColumnVis(a,m[c])});p&&(this._redrawChildren(),a(c.table().node()).trigger("responsive-resize.dt",[c,this.s.current]),0===c.page.info().recordsDisplay&&a("td",c.table().body()).eq(0).attr("colspan",q))},_resizeAuto:function(){var b=this.s.dt,d=this.s.columns;if(this.c.auto&&-1!==a.inArray(!0,a.map(d,function(b){return b.auto}))){a.isEmptyObject(q)||a.each(q,function(a){a=a.split("-");v(b,1*a[0],1*a[1])});b.table().node();var c=b.table().node().cloneNode(!1),e=a(b.table().header().cloneNode(!1)).appendTo(c),
-f=a(b.table().body()).clone(!1,!1).empty().appendTo(c);c.style.width="auto";var g=b.columns().header().filter(function(a){return b.column(a).visible()}).to$().clone(!1).css("display","table-cell").css("width","auto").css("min-width",0);a(f).append(a(b.rows({page:"current"}).nodes()).clone(!1)).find("th, td").css("display","");if(f=b.table().footer()){f=a(f.cloneNode(!1)).appendTo(c);var k=b.columns().footer().filter(function(a){return b.column(a).visible()}).to$().clone(!1).css("display","table-cell");
-a("<tr/>").append(k).appendTo(f)}a("<tr/>").append(g).appendTo(e);"inline"===this.c.details.type&&a(c).addClass("dtr-inline collapsed");a(c).find("[name]").removeAttr("name");a(c).css("position","relative");c=a("<div/>").css({width:1,height:1,overflow:"hidden",clear:"both"}).append(c);c.insertBefore(b.table().node());g.each(function(a){a=b.column.index("fromVisible",a);d[a].minWidth=this.offsetWidth||0});c.remove()}},_responsiveOnlyHidden:function(){var b=this.s.dt;return a.map(this.s.current,function(a,
-c){return!1===b.column(c).visible()?!0:a})},_setColumnVis:function(b,d){var c=this.s.dt;d=d?"":"none";a(c.column(b).header()).css("display",d);a(c.column(b).footer()).css("display",d);c.column(b).nodes().to$().css("display",d);a.isEmptyObject(q)||c.cells(null,b).indexes().each(function(a){v(c,a.row,a.column)})},_tabIndexes:function(){var b=this.s.dt,d=b.cells({page:"current"}).nodes().to$(),c=b.settings()[0],e=this.c.details.target;d.filter("[data-dtr-keyboard]").removeData("[data-dtr-keyboard]");
-"number"===typeof e?b.cells(null,e,{page:"current"}).nodes().to$().attr("tabIndex",c.iTabIndex).data("dtr-keyboard",1):("td:first-child, th:first-child"===e&&(e=">td:first-child, >th:first-child"),a(e,b.rows({page:"current"}).nodes()).attr("tabIndex",c.iTabIndex).data("dtr-keyboard",1))}});m.breakpoints=[{name:"desktop",width:Infinity},{name:"tablet-l",width:1024},{name:"tablet-p",width:768},{name:"mobile-l",width:480},{name:"mobile-p",width:320}];m.display={childRow:function(b,d,c){if(d){if(a(b.node()).hasClass("parent"))return b.child(c(),
-"child").show(),!0}else{if(b.child.isShown())return b.child(!1),a(b.node()).removeClass("parent"),!1;b.child(c(),"child").show();a(b.node()).addClass("parent");return!0}},childRowImmediate:function(b,d,c){if(!d&&b.child.isShown()||!b.responsive.hasHidden())return b.child(!1),a(b.node()).removeClass("parent"),!1;b.child(c(),"child").show();a(b.node()).addClass("parent");return!0},modal:function(b){return function(d,c,e){if(c)a("div.dtr-modal-content").empty().append(e());else{var f=function(){k.remove();
-a(g).off("keypress.dtr")},k=a('<div class="dtr-modal"/>').append(a('<div class="dtr-modal-display"/>').append(a('<div class="dtr-modal-content"/>').append(e())).append(a('<div class="dtr-modal-close">&times;</div>').click(function(){f()}))).append(a('<div class="dtr-modal-background"/>').click(function(){f()})).appendTo("body");a(g).on("keyup.dtr",function(a){27===a.keyCode&&(a.stopPropagation(),f())})}b&&b.header&&a("div.dtr-modal-content").prepend("<h2>"+b.header(d)+"</h2>")}}};var q={};m.renderer=
-{listHiddenNodes:function(){return function(b,d,c){var e=a('<ul data-dtr-index="'+d+'" class="dtr-details"/>'),f=!1;a.each(c,function(c,d){d.hidden&&(a("<li "+(d.className?'class="'+d.className+'"':"")+' data-dtr-index="'+d.columnIndex+'" data-dt-row="'+d.rowIndex+'" data-dt-column="'+d.columnIndex+'"><span class="dtr-title">'+d.title+"</span> </li>").append(a('<span class="dtr-data"/>').append(p(b,d.rowIndex,d.columnIndex))).appendTo(e),f=!0)});return f?e:!1}},listHidden:function(){return function(b,
-d,c){return(b=a.map(c,function(a){var b=a.className?'class="'+a.className+'"':"";return a.hidden?"<li "+b+' data-dtr-index="'+a.columnIndex+'" data-dt-row="'+a.rowIndex+'" data-dt-column="'+a.columnIndex+'"><span class="dtr-title">'+a.title+'</span> <span class="dtr-data">'+a.data+"</span></li>":""}).join(""))?a('<ul data-dtr-index="'+d+'" class="dtr-details"/>').append(b):!1}},tableAll:function(b){b=a.extend({tableClass:""},b);return function(d,c,e){d=a.map(e,function(a){return"<tr "+(a.className?
-'class="'+a.className+'"':"")+' data-dt-row="'+a.rowIndex+'" data-dt-column="'+a.columnIndex+'"><td>'+a.title+":</td> <td>"+a.data+"</td></tr>"}).join("");return a('<table class="'+b.tableClass+' dtr-details" width="100%"/>').append(d)}}};m.defaults={breakpoints:m.breakpoints,auto:!0,details:{display:m.display.childRow,renderer:m.renderer.listHidden(),target:0,type:"inline"},orthogonal:"display"};var u=a.fn.dataTable.Api;u.register("responsive()",function(){return this});u.register("responsive.index()",
-function(b){b=a(b);return{column:b.data("dtr-index"),row:b.parent().data("dtr-index")}});u.register("responsive.rebuild()",function(){return this.iterator("table",function(a){a._responsive&&a._responsive._classLogic()})});u.register("responsive.recalc()",function(){return this.iterator("table",function(a){a._responsive&&(a._responsive._resizeAuto(),a._responsive._resize())})});u.register("responsive.hasHidden()",function(){var b=this.context[0];return b._responsive?-1!==a.inArray(!1,b._responsive._responsiveOnlyHidden()):
-!1});u.registerPlural("columns().responsiveHidden()","column().responsiveHidden()",function(){return this.iterator("column",function(a,d){return a._responsive?a._responsive._responsiveOnlyHidden()[d]:!1},1)});m.version="2.2.5";a.fn.dataTable.Responsive=m;a.fn.DataTable.Responsive=m;a(g).on("preInit.dt.dtr",function(b,d,c){"dt"===b.namespace&&(a(d.nTable).hasClass("responsive")||a(d.nTable).hasClass("dt-responsive")||d.oInit.responsive||t.defaults.responsive)&&(b=d.oInit.responsive,!1!==b&&new m(d,
-a.isPlainObject(b)?b:{}))});return m});
-
-
-/*!
- Bootstrap 4 integration for DataTables' Responsive
- ©2016 SpryMedia Ltd - datatables.net/license
-*/
-var $jscomp=$jscomp||{};$jscomp.scope={};$jscomp.findInternal=function(a,c,b){a instanceof String&&(a=String(a));for(var d=a.length,e=0;e<d;e++){var f=a[e];if(c.call(b,f,e,a))return{i:e,v:f}}return{i:-1,v:void 0}};$jscomp.ASSUME_ES5=!1;$jscomp.ASSUME_NO_NATIVE_MAP=!1;$jscomp.ASSUME_NO_NATIVE_SET=!1;$jscomp.SIMPLE_FROUND_POLYFILL=!1;
-$jscomp.defineProperty=$jscomp.ASSUME_ES5||"function"==typeof Object.defineProperties?Object.defineProperty:function(a,c,b){a!=Array.prototype&&a!=Object.prototype&&(a[c]=b.value)};$jscomp.getGlobal=function(a){a=["object"==typeof window&&window,"object"==typeof self&&self,"object"==typeof global&&global,a];for(var c=0;c<a.length;++c){var b=a[c];if(b&&b.Math==Math)return b}throw Error("Cannot find global object");};$jscomp.global=$jscomp.getGlobal(this);
-$jscomp.polyfill=function(a,c,b,d){if(c){b=$jscomp.global;a=a.split(".");for(d=0;d<a.length-1;d++){var e=a[d];e in b||(b[e]={});b=b[e]}a=a[a.length-1];d=b[a];c=c(d);c!=d&&null!=c&&$jscomp.defineProperty(b,a,{configurable:!0,writable:!0,value:c})}};$jscomp.polyfill("Array.prototype.find",function(a){return a?a:function(a,b){return $jscomp.findInternal(this,a,b).v}},"es6","es3");
-(function(a){"function"===typeof define&&define.amd?define(["jquery","datatables.net-bs4","datatables.net-responsive"],function(c){return a(c,window,document)}):"object"===typeof exports?module.exports=function(c,b){c||(c=window);b&&b.fn.dataTable||(b=require("datatables.net-bs4")(c,b).$);b.fn.dataTable.Responsive||require("datatables.net-responsive")(c,b);return a(b,c,c.document)}:a(jQuery,window,document)})(function(a,c,b,d){c=a.fn.dataTable;b=c.Responsive.display;var e=b.modal,f=a('<div class="modal fade dtr-bs-modal" role="dialog"><div class="modal-dialog" role="document"><div class="modal-content"><div class="modal-header"><button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button></div><div class="modal-body"/></div></div></div>');
-b.modal=function(b){return function(c,d,g){if(!a.fn.modal)e(c,d,g);else if(!d){if(b&&b.header){d=f.find("div.modal-header");var h=d.find("button").detach();d.empty().append('<h4 class="modal-title">'+b.header(c)+"</h4>").append(h)}f.find("div.modal-body").empty().append(g());f.appendTo("body").modal()}}};return c.Responsive});
-
-
-/*!
-   Copyright 2015-2019 SpryMedia Ltd.
-
- This source file is free software, available under the following license:
-   MIT license - http://datatables.net/license/mit
-
- This source file is distributed in the hope that it will be useful, but
- WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
- or FITNESS FOR A PARTICULAR PURPOSE. See the license files for details.
-
- For details please refer to: http://www.datatables.net/extensions/select
- Select for DataTables 1.3.1
- 2015-2019 SpryMedia Ltd - datatables.net/license/mit
-*/
-(function(f){"function"===typeof define&&define.amd?define(["jquery","datatables.net"],function(k){return f(k,window,document)}):"object"===typeof exports?module.exports=function(k,p){k||(k=window);p&&p.fn.dataTable||(p=require("datatables.net")(k,p).$);return f(p,k,k.document)}:f(jQuery,window,document)})(function(f,k,p,h){function z(a,b,c){var d=function(c,b){if(c>b){var d=b;b=c;c=d}var e=!1;return a.columns(":visible").indexes().filter(function(a){a===c&&(e=!0);return a===b?(e=!1,!0):e})};var e=
-function(c,b){var d=a.rows({search:"applied"}).indexes();if(d.indexOf(c)>d.indexOf(b)){var e=b;b=c;c=e}var f=!1;return d.filter(function(a){a===c&&(f=!0);return a===b?(f=!1,!0):f})};a.cells({selected:!0}).any()||c?(d=d(c.column,b.column),c=e(c.row,b.row)):(d=d(0,b.column),c=e(0,b.row));c=a.cells(c,d).flatten();a.cells(b,{selected:!0}).any()?a.cells(c).deselect():a.cells(c).select()}function v(a){var b=a.settings()[0]._select.selector;f(a.table().container()).off("mousedown.dtSelect",b).off("mouseup.dtSelect",
-b).off("click.dtSelect",b);f("body").off("click.dtSelect"+a.table().node().id.replace(/[^a-zA-Z0-9\-_]/g,"-"))}function A(a){var b=f(a.table().container()),c=a.settings()[0],d=c._select.selector,e;b.on("mousedown.dtSelect",d,function(a){if(a.shiftKey||a.metaKey||a.ctrlKey)b.css("-moz-user-select","none").one("selectstart.dtSelect",d,function(){return!1});k.getSelection&&(e=k.getSelection())}).on("mouseup.dtSelect",d,function(){b.css("-moz-user-select","")}).on("click.dtSelect",d,function(c){var b=
-a.select.items();if(e){var d=k.getSelection();if((!d.anchorNode||f(d.anchorNode).closest("table")[0]===a.table().node())&&d!==e)return}d=a.settings()[0];var l=f.trim(a.settings()[0].oClasses.sWrapper).replace(/ +/g,".");if(f(c.target).closest("div."+l)[0]==a.table().container()&&(l=a.cell(f(c.target).closest("td, th")),l.any())){var g=f.Event("user-select.dt");m(a,g,[b,l,c]);g.isDefaultPrevented()||(g=l.index(),"row"===b?(b=g.row,w(c,a,d,"row",b)):"column"===b?(b=l.index().column,w(c,a,d,"column",
-b)):"cell"===b&&(b=l.index(),w(c,a,d,"cell",b)),d._select_lastCell=g)}});f("body").on("click.dtSelect"+a.table().node().id.replace(/[^a-zA-Z0-9\-_]/g,"-"),function(b){!c._select.blurable||f(b.target).parents().filter(a.table().container()).length||0===f(b.target).parents("html").length||f(b.target).parents("div.DTE").length||r(c,!0)})}function m(a,b,c,d){if(!d||a.flatten().length)"string"===typeof b&&(b+=".dt"),c.unshift(a),f(a.table().node()).trigger(b,c)}function B(a){var b=a.settings()[0];if(b._select.info&&
-b.aanFeatures.i&&"api"!==a.select.style()){var c=a.rows({selected:!0}).flatten().length,d=a.columns({selected:!0}).flatten().length,e=a.cells({selected:!0}).flatten().length,l=function(b,c,d){b.append(f('<span class="select-item"/>').append(a.i18n("select."+c+"s",{_:"%d "+c+"s selected",0:"",1:"1 "+c+" selected"},d)))};f.each(b.aanFeatures.i,function(b,a){a=f(a);b=f('<span class="select-info"/>');l(b,"row",c);l(b,"column",d);l(b,"cell",e);var g=a.children("span.select-info");g.length&&g.remove();
-""!==b.text()&&a.append(b)})}}function D(a){var b=new g.Api(a);a.aoRowCreatedCallback.push({fn:function(b,d,e){d=a.aoData[e];d._select_selected&&f(b).addClass(a._select.className);b=0;for(e=a.aoColumns.length;b<e;b++)(a.aoColumns[b]._select_selected||d._selected_cells&&d._selected_cells[b])&&f(d.anCells[b]).addClass(a._select.className)},sName:"select-deferRender"});b.on("preXhr.dt.dtSelect",function(){var a=b.rows({selected:!0}).ids(!0).filter(function(b){return b!==h}),d=b.cells({selected:!0}).eq(0).map(function(a){var c=
-b.row(a.row).id(!0);return c?{row:c,column:a.column}:h}).filter(function(b){return b!==h});b.one("draw.dt.dtSelect",function(){b.rows(a).select();d.any()&&d.each(function(a){b.cells(a.row,a.column).select()})})});b.on("draw.dtSelect.dt select.dtSelect.dt deselect.dtSelect.dt info.dt",function(){B(b)});b.on("destroy.dtSelect",function(){v(b);b.off(".dtSelect")})}function C(a,b,c,d){var e=a[b+"s"]({search:"applied"}).indexes();d=f.inArray(d,e);var g=f.inArray(c,e);if(a[b+"s"]({selected:!0}).any()||
--1!==d){if(d>g){var u=g;g=d;d=u}e.splice(g+1,e.length);e.splice(0,d)}else e.splice(f.inArray(c,e)+1,e.length);a[b](c,{selected:!0}).any()?(e.splice(f.inArray(c,e),1),a[b+"s"](e).deselect()):a[b+"s"](e).select()}function r(a,b){if(b||"single"===a._select.style)a=new g.Api(a),a.rows({selected:!0}).deselect(),a.columns({selected:!0}).deselect(),a.cells({selected:!0}).deselect()}function w(a,b,c,d,e){var f=b.select.style(),g=b.select.toggleable(),h=b[d](e,{selected:!0}).any();if(!h||g)"os"===f?a.ctrlKey||
-a.metaKey?b[d](e).select(!h):a.shiftKey?"cell"===d?z(b,e,c._select_lastCell||null):C(b,d,e,c._select_lastCell?c._select_lastCell[d]:null):(a=b[d+"s"]({selected:!0}),h&&1===a.flatten().length?b[d](e).deselect():(a.deselect(),b[d](e).select())):"multi+shift"==f?a.shiftKey?"cell"===d?z(b,e,c._select_lastCell||null):C(b,d,e,c._select_lastCell?c._select_lastCell[d]:null):b[d](e).select(!h):b[d](e).select(!h)}function t(a,b){return function(c){return c.i18n("buttons."+a,b)}}function x(a){a=a._eventNamespace;
-return"draw.dt.DT"+a+" select.dt.DT"+a+" deselect.dt.DT"+a}function E(a,b){return-1!==f.inArray("rows",b.limitTo)&&a.rows({selected:!0}).any()||-1!==f.inArray("columns",b.limitTo)&&a.columns({selected:!0}).any()||-1!==f.inArray("cells",b.limitTo)&&a.cells({selected:!0}).any()?!0:!1}var g=f.fn.dataTable;g.select={};g.select.version="1.3.1";g.select.init=function(a){var b=a.settings()[0],c=b.oInit.select,d=g.defaults.select;c=c===h?d:c;d="row";var e="api",l=!1,u=!0,k=!0,m="td, th",p="selected",n=!1;
-b._select={};!0===c?(e="os",n=!0):"string"===typeof c?(e=c,n=!0):f.isPlainObject(c)&&(c.blurable!==h&&(l=c.blurable),c.toggleable!==h&&(u=c.toggleable),c.info!==h&&(k=c.info),c.items!==h&&(d=c.items),e=c.style!==h?c.style:"os",n=!0,c.selector!==h&&(m=c.selector),c.className!==h&&(p=c.className));a.select.selector(m);a.select.items(d);a.select.style(e);a.select.blurable(l);a.select.toggleable(u);a.select.info(k);b._select.className=p;f.fn.dataTable.ext.order["select-checkbox"]=function(b,a){return this.api().column(a,
-{order:"index"}).nodes().map(function(a){return"row"===b._select.items?f(a).parent().hasClass(b._select.className):"cell"===b._select.items?f(a).hasClass(b._select.className):!1})};!n&&f(a.table().node()).hasClass("selectable")&&a.select.style("os")};f.each([{type:"row",prop:"aoData"},{type:"column",prop:"aoColumns"}],function(a,b){g.ext.selector[b.type].push(function(a,d,e){d=d.selected;var c=[];if(!0!==d&&!1!==d)return e;for(var f=0,g=e.length;f<g;f++){var h=a[b.prop][e[f]];(!0===d&&!0===h._select_selected||
-!1===d&&!h._select_selected)&&c.push(e[f])}return c})});g.ext.selector.cell.push(function(a,b,c){b=b.selected;var d=[];if(b===h)return c;for(var e=0,f=c.length;e<f;e++){var g=a.aoData[c[e].row];(!0===b&&g._selected_cells&&!0===g._selected_cells[c[e].column]||!(!1!==b||g._selected_cells&&g._selected_cells[c[e].column]))&&d.push(c[e])}return d});var n=g.Api.register,q=g.Api.registerPlural;n("select()",function(){return this.iterator("table",function(a){g.select.init(new g.Api(a))})});n("select.blurable()",
-function(a){return a===h?this.context[0]._select.blurable:this.iterator("table",function(b){b._select.blurable=a})});n("select.toggleable()",function(a){return a===h?this.context[0]._select.toggleable:this.iterator("table",function(b){b._select.toggleable=a})});n("select.info()",function(a){return B===h?this.context[0]._select.info:this.iterator("table",function(b){b._select.info=a})});n("select.items()",function(a){return a===h?this.context[0]._select.items:this.iterator("table",function(b){b._select.items=
-a;m(new g.Api(b),"selectItems",[a])})});n("select.style()",function(a){return a===h?this.context[0]._select.style:this.iterator("table",function(b){b._select.style=a;b._select_init||D(b);var c=new g.Api(b);v(c);"api"!==a&&A(c);m(new g.Api(b),"selectStyle",[a])})});n("select.selector()",function(a){return a===h?this.context[0]._select.selector:this.iterator("table",function(b){v(new g.Api(b));b._select.selector=a;"api"!==b._select.style&&A(new g.Api(b))})});q("rows().select()","row().select()",function(a){var b=
-this;if(!1===a)return this.deselect();this.iterator("row",function(b,a){r(b);b.aoData[a]._select_selected=!0;f(b.aoData[a].nTr).addClass(b._select.className)});this.iterator("table",function(a,d){m(b,"select",["row",b[d]],!0)});return this});q("columns().select()","column().select()",function(a){var b=this;if(!1===a)return this.deselect();this.iterator("column",function(b,a){r(b);b.aoColumns[a]._select_selected=!0;a=(new g.Api(b)).column(a);f(a.header()).addClass(b._select.className);f(a.footer()).addClass(b._select.className);
-a.nodes().to$().addClass(b._select.className)});this.iterator("table",function(a,d){m(b,"select",["column",b[d]],!0)});return this});q("cells().select()","cell().select()",function(a){var b=this;if(!1===a)return this.deselect();this.iterator("cell",function(b,a,e){r(b);a=b.aoData[a];a._selected_cells===h&&(a._selected_cells=[]);a._selected_cells[e]=!0;a.anCells&&f(a.anCells[e]).addClass(b._select.className)});this.iterator("table",function(a,d){m(b,"select",["cell",b[d]],!0)});return this});q("rows().deselect()",
-"row().deselect()",function(){var a=this;this.iterator("row",function(a,c){a.aoData[c]._select_selected=!1;f(a.aoData[c].nTr).removeClass(a._select.className)});this.iterator("table",function(b,c){m(a,"deselect",["row",a[c]],!0)});return this});q("columns().deselect()","column().deselect()",function(){var a=this;this.iterator("column",function(a,c){a.aoColumns[c]._select_selected=!1;var b=new g.Api(a),e=b.column(c);f(e.header()).removeClass(a._select.className);f(e.footer()).removeClass(a._select.className);
-b.cells(null,c).indexes().each(function(b){var c=a.aoData[b.row],d=c._selected_cells;!c.anCells||d&&d[b.column]||f(c.anCells[b.column]).removeClass(a._select.className)})});this.iterator("table",function(b,c){m(a,"deselect",["column",a[c]],!0)});return this});q("cells().deselect()","cell().deselect()",function(){var a=this;this.iterator("cell",function(a,c,d){c=a.aoData[c];c._selected_cells[d]=!1;c.anCells&&!a.aoColumns[d]._select_selected&&f(c.anCells[d]).removeClass(a._select.className)});this.iterator("table",
-function(b,c){m(a,"deselect",["cell",a[c]],!0)});return this});var y=0;f.extend(g.ext.buttons,{selected:{text:t("selected","Selected"),className:"buttons-selected",limitTo:["rows","columns","cells"],init:function(a,b,c){var d=this;c._eventNamespace=".select"+y++;a.on(x(c),function(){d.enable(E(a,c))});this.disable()},destroy:function(a,b,c){a.off(c._eventNamespace)}},selectedSingle:{text:t("selectedSingle","Selected single"),className:"buttons-selected-single",init:function(a,b,c){var d=this;c._eventNamespace=
-".select"+y++;a.on(x(c),function(){var b=a.rows({selected:!0}).flatten().length+a.columns({selected:!0}).flatten().length+a.cells({selected:!0}).flatten().length;d.enable(1===b)});this.disable()},destroy:function(a,b,c){a.off(c._eventNamespace)}},selectAll:{text:t("selectAll","Select all"),className:"buttons-select-all",action:function(){this[this.select.items()+"s"]().select()}},selectNone:{text:t("selectNone","Deselect all"),className:"buttons-select-none",action:function(){r(this.settings()[0],
-!0)},init:function(a,b,c){var d=this;c._eventNamespace=".select"+y++;a.on(x(c),function(){var b=a.rows({selected:!0}).flatten().length+a.columns({selected:!0}).flatten().length+a.cells({selected:!0}).flatten().length;d.enable(0<b)});this.disable()},destroy:function(a,b,c){a.off(c._eventNamespace)}}});f.each(["Row","Column","Cell"],function(a,b){var c=b.toLowerCase();g.ext.buttons["select"+b+"s"]={text:t("select"+b+"s","Select "+c+"s"),className:"buttons-select-"+c+"s",action:function(){this.select.items(c)},
-init:function(a){var b=this;a.on("selectItems.dt.DT",function(a,d,e){b.active(e===c)})}}});f(p).on("preInit.dt.dtSelect",function(a,b){"dt"===a.namespace&&g.select.init(new g.Api(b))});return g.select});
-
-
diff --git a/css/datatables.min.css b/css/datatables.min.css
index f883cd2..607d2b5 100644
--- a/css/datatables.min.css
+++ b/css/datatables.min.css
@@ -4,10 +4,10 @@
  *
  * To rebuild or modify this file with the latest versions of the included
  * software please visit:
- *   https://datatables.net/download/#bs4/dt-1.10.21/b-1.6.2/r-2.2.5/sl-1.3.1
+ *   https://datatables.net/download/#bs4/jszip-2.5.0/dt-1.10.21/b-1.6.2/b-html5-1.6.2/r-2.2.5/sl-1.3.1
  *
  * Included libraries:
- *   DataTables 1.10.21, Buttons 1.6.2, Responsive 2.2.5, Select 1.3.1
+ *   JSZip 2.5.0, DataTables 1.10.21, Buttons 1.6.2, HTML5 export 1.6.2, Responsive 2.2.5, Select 1.3.1
  */
 
 table.dataTable{clear:both;margin-top:6px !important;margin-bottom:6px !important;max-width:none !important;border-collapse:separate !important;border-spacing:0}table.dataTable td,table.dataTable th{-webkit-box-sizing:content-box;box-sizing:content-box}table.dataTable td.dataTables_empty,table.dataTable th.dataTables_empty{text-align:center}table.dataTable.nowrap th,table.dataTable.nowrap td{white-space:nowrap}div.dataTables_wrapper div.dataTables_length label{font-weight:normal;text-align:left;white-space:nowrap}div.dataTables_wrapper div.dataTables_length select{width:auto;display:inline-block}div.dataTables_wrapper div.dataTables_filter{text-align:right}div.dataTables_wrapper div.dataTables_filter label{font-weight:normal;white-space:nowrap;text-align:left}div.dataTables_wrapper div.dataTables_filter input{margin-left:0.5em;display:inline-block;width:auto}div.dataTables_wrapper div.dataTables_info{padding-top:0.85em;white-space:nowrap}div.dataTables_wrapper div.dataTables_paginate{margin:0;white-space:nowrap;text-align:right}div.dataTables_wrapper div.dataTables_paginate ul.pagination{margin:2px 0;white-space:nowrap;justify-content:flex-end}div.dataTables_wrapper div.dataTables_processing{position:absolute;top:50%;left:50%;width:200px;margin-left:-100px;margin-top:-26px;text-align:center;padding:1em 0}table.dataTable thead>tr>th.sorting_asc,table.dataTable thead>tr>th.sorting_desc,table.dataTable thead>tr>th.sorting,table.dataTable thead>tr>td.sorting_asc,table.dataTable thead>tr>td.sorting_desc,table.dataTable thead>tr>td.sorting{padding-right:30px}table.dataTable thead>tr>th:active,table.dataTable thead>tr>td:active{outline:none}table.dataTable thead .sorting,table.dataTable thead .sorting_asc,table.dataTable thead .sorting_desc,table.dataTable thead .sorting_asc_disabled,table.dataTable thead .sorting_desc_disabled{cursor:pointer;position:relative}table.dataTable thead .sorting:before,table.dataTable thead .sorting:after,table.dataTable thead .sorting_asc:before,table.dataTable thead .sorting_asc:after,table.dataTable thead .sorting_desc:before,table.dataTable thead .sorting_desc:after,table.dataTable thead .sorting_asc_disabled:before,table.dataTable thead .sorting_asc_disabled:after,table.dataTable thead .sorting_desc_disabled:before,table.dataTable thead .sorting_desc_disabled:after{position:absolute;bottom:0.9em;display:block;opacity:0.3}table.dataTable thead .sorting:before,table.dataTable thead .sorting_asc:before,table.dataTable thead .sorting_desc:before,table.dataTable thead .sorting_asc_disabled:before,table.dataTable thead .sorting_desc_disabled:before{right:1em;content:"\2191"}table.dataTable thead .sorting:after,table.dataTable thead .sorting_asc:after,table.dataTable thead .sorting_desc:after,table.dataTable thead .sorting_asc_disabled:after,table.dataTable thead .sorting_desc_disabled:after{right:0.5em;content:"\2193"}table.dataTable thead .sorting_asc:before,table.dataTable thead .sorting_desc:after{opacity:1}table.dataTable thead .sorting_asc_disabled:before,table.dataTable thead .sorting_desc_disabled:after{opacity:0}div.dataTables_scrollHead table.dataTable{margin-bottom:0 !important}div.dataTables_scrollBody table{border-top:none;margin-top:0 !important;margin-bottom:0 !important}div.dataTables_scrollBody table thead .sorting:before,div.dataTables_scrollBody table thead .sorting_asc:before,div.dataTables_scrollBody table thead .sorting_desc:before,div.dataTables_scrollBody table thead .sorting:after,div.dataTables_scrollBody table thead .sorting_asc:after,div.dataTables_scrollBody table thead .sorting_desc:after{display:none}div.dataTables_scrollBody table tbody tr:first-child th,div.dataTables_scrollBody table tbody tr:first-child td{border-top:none}div.dataTables_scrollFoot>.dataTables_scrollFootInner{box-sizing:content-box}div.dataTables_scrollFoot>.dataTables_scrollFootInner>table{margin-top:0 !important;border-top:none}@media screen and (max-width: 767px){div.dataTables_wrapper div.dataTables_length,div.dataTables_wrapper div.dataTables_filter,div.dataTables_wrapper div.dataTables_info,div.dataTables_wrapper div.dataTables_paginate{text-align:center}div.dataTables_wrapper div.dataTables_paginate ul.pagination{justify-content:center !important}}table.dataTable.table-sm>thead>tr>th :not(.sorting_disabled){padding-right:20px}table.dataTable.table-sm .sorting:before,table.dataTable.table-sm .sorting_asc:before,table.dataTable.table-sm .sorting_desc:before{top:5px;right:0.85em}table.dataTable.table-sm .sorting:after,table.dataTable.table-sm .sorting_asc:after,table.dataTable.table-sm .sorting_desc:after{top:5px}table.table-bordered.dataTable{border-right-width:0}table.table-bordered.dataTable th,table.table-bordered.dataTable td{border-left-width:0}table.table-bordered.dataTable th:last-child,table.table-bordered.dataTable th:last-child,table.table-bordered.dataTable td:last-child,table.table-bordered.dataTable td:last-child{border-right-width:1px}table.table-bordered.dataTable tbody th,table.table-bordered.dataTable tbody td{border-bottom-width:0}div.dataTables_scrollHead table.table-bordered{border-bottom-width:0}div.table-responsive>div.dataTables_wrapper>div.row{margin:0}div.table-responsive>div.dataTables_wrapper>div.row>div[class^="col-"]:first-child{padding-left:0}div.table-responsive>div.dataTables_wrapper>div.row>div[class^="col-"]:last-child{padding-right:0}
diff --git a/js/datatables.min.js b/js/datatables.min.js
index 61fc940..5e52f03 100644
--- a/js/datatables.min.js
+++ b/js/datatables.min.js
@@ -4,12 +4,27 @@
  *
  * To rebuild or modify this file with the latest versions of the included
  * software please visit:
- *   https://datatables.net/download/#bs4/dt-1.10.21/b-1.6.2/r-2.2.5/sl-1.3.1
+ *   https://datatables.net/download/#bs4/jszip-2.5.0/dt-1.10.21/b-1.6.2/b-html5-1.6.2/r-2.2.5/sl-1.3.1
  *
  * Included libraries:
- *   DataTables 1.10.21, Buttons 1.6.2, Responsive 2.2.5, Select 1.3.1
+ *   JSZip 2.5.0, DataTables 1.10.21, Buttons 1.6.2, HTML5 export 1.6.2, Responsive 2.2.5, Select 1.3.1
  */
 
+/*!
+
+JSZip - A Javascript class for generating and reading zip files
+<http://stuartk.com/jszip>
+
+(c) 2009-2014 Stuart Knightley <stuart [at] stuartk.com>
+Dual licenced under the MIT license or GPLv3. See https://raw.github.com/Stuk/jszip/master/LICENSE.markdown.
+
+JSZip uses the library pako released under the MIT license :
+https://github.com/nodeca/pako/blob/master/LICENSE
+*/
+!function(a){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=a();else if("function"==typeof define&&define.amd)define([],a);else{var b;"undefined"!=typeof window?b=window:"undefined"!=typeof global?b=global:"undefined"!=typeof self&&(b=self),b.JSZip=a()}}(function(){return function a(b,c,d){function e(g,h){if(!c[g]){if(!b[g]){var i="function"==typeof require&&require;if(!h&&i)return i(g,!0);if(f)return f(g,!0);throw new Error("Cannot find module '"+g+"'")}var j=c[g]={exports:{}};b[g][0].call(j.exports,function(a){var c=b[g][1][a];return e(c?c:a)},j,j.exports,a,b,c,d)}return c[g].exports}for(var f="function"==typeof require&&require,g=0;g<d.length;g++)e(d[g]);return e}({1:[function(a,b,c){"use strict";var d="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";c.encode=function(a){for(var b,c,e,f,g,h,i,j="",k=0;k<a.length;)b=a.charCodeAt(k++),c=a.charCodeAt(k++),e=a.charCodeAt(k++),f=b>>2,g=(3&b)<<4|c>>4,h=(15&c)<<2|e>>6,i=63&e,isNaN(c)?h=i=64:isNaN(e)&&(i=64),j=j+d.charAt(f)+d.charAt(g)+d.charAt(h)+d.charAt(i);return j},c.decode=function(a){var b,c,e,f,g,h,i,j="",k=0;for(a=a.replace(/[^A-Za-z0-9\+\/\=]/g,"");k<a.length;)f=d.indexOf(a.charAt(k++)),g=d.indexOf(a.charAt(k++)),h=d.indexOf(a.charAt(k++)),i=d.indexOf(a.charAt(k++)),b=f<<2|g>>4,c=(15&g)<<4|h>>2,e=(3&h)<<6|i,j+=String.fromCharCode(b),64!=h&&(j+=String.fromCharCode(c)),64!=i&&(j+=String.fromCharCode(e));return j}},{}],2:[function(a,b){"use strict";function c(){this.compressedSize=0,this.uncompressedSize=0,this.crc32=0,this.compressionMethod=null,this.compressedContent=null}c.prototype={getContent:function(){return null},getCompressedContent:function(){return null}},b.exports=c},{}],3:[function(a,b,c){"use strict";c.STORE={magic:"\x00\x00",compress:function(a){return a},uncompress:function(a){return a},compressInputType:null,uncompressInputType:null},c.DEFLATE=a("./flate")},{"./flate":8}],4:[function(a,b){"use strict";var c=a("./utils"),d=[0,1996959894,3993919788,2567524794,124634137,1886057615,3915621685,2657392035,249268274,2044508324,3772115230,2547177864,162941995,2125561021,3887607047,2428444049,498536548,1789927666,4089016648,2227061214,450548861,1843258603,4107580753,2211677639,325883990,1684777152,4251122042,2321926636,335633487,1661365465,4195302755,2366115317,997073096,1281953886,3579855332,2724688242,1006888145,1258607687,3524101629,2768942443,901097722,1119000684,3686517206,2898065728,853044451,1172266101,3705015759,2882616665,651767980,1373503546,3369554304,3218104598,565507253,1454621731,3485111705,3099436303,671266974,1594198024,3322730930,2970347812,795835527,1483230225,3244367275,3060149565,1994146192,31158534,2563907772,4023717930,1907459465,112637215,2680153253,3904427059,2013776290,251722036,2517215374,3775830040,2137656763,141376813,2439277719,3865271297,1802195444,476864866,2238001368,4066508878,1812370925,453092731,2181625025,4111451223,1706088902,314042704,2344532202,4240017532,1658658271,366619977,2362670323,4224994405,1303535960,984961486,2747007092,3569037538,1256170817,1037604311,2765210733,3554079995,1131014506,879679996,2909243462,3663771856,1141124467,855842277,2852801631,3708648649,1342533948,654459306,3188396048,3373015174,1466479909,544179635,3110523913,3462522015,1591671054,702138776,2966460450,3352799412,1504918807,783551873,3082640443,3233442989,3988292384,2596254646,62317068,1957810842,3939845945,2647816111,81470997,1943803523,3814918930,2489596804,225274430,2053790376,3826175755,2466906013,167816743,2097651377,4027552580,2265490386,503444072,1762050814,4150417245,2154129355,426522225,1852507879,4275313526,2312317920,282753626,1742555852,4189708143,2394877945,397917763,1622183637,3604390888,2714866558,953729732,1340076626,3518719985,2797360999,1068828381,1219638859,3624741850,2936675148,906185462,1090812512,3747672003,2825379669,829329135,1181335161,3412177804,3160834842,628085408,1382605366,3423369109,3138078467,570562233,1426400815,3317316542,2998733608,733239954,1555261956,3268935591,3050360625,752459403,1541320221,2607071920,3965973030,1969922972,40735498,2617837225,3943577151,1913087877,83908371,2512341634,3803740692,2075208622,213261112,2463272603,3855990285,2094854071,198958881,2262029012,4057260610,1759359992,534414190,2176718541,4139329115,1873836001,414664567,2282248934,4279200368,1711684554,285281116,2405801727,4167216745,1634467795,376229701,2685067896,3608007406,1308918612,956543938,2808555105,3495958263,1231636301,1047427035,2932959818,3654703836,1088359270,936918e3,2847714899,3736837829,1202900863,817233897,3183342108,3401237130,1404277552,615818150,3134207493,3453421203,1423857449,601450431,3009837614,3294710456,1567103746,711928724,3020668471,3272380065,1510334235,755167117];b.exports=function(a,b){if("undefined"==typeof a||!a.length)return 0;var e="string"!==c.getTypeOf(a);"undefined"==typeof b&&(b=0);var f=0,g=0,h=0;b=-1^b;for(var i=0,j=a.length;j>i;i++)h=e?a[i]:a.charCodeAt(i),g=255&(b^h),f=d[g],b=b>>>8^f;return-1^b}},{"./utils":21}],5:[function(a,b){"use strict";function c(){this.data=null,this.length=0,this.index=0}var d=a("./utils");c.prototype={checkOffset:function(a){this.checkIndex(this.index+a)},checkIndex:function(a){if(this.length<a||0>a)throw new Error("End of data reached (data length = "+this.length+", asked index = "+a+"). Corrupted zip ?")},setIndex:function(a){this.checkIndex(a),this.index=a},skip:function(a){this.setIndex(this.index+a)},byteAt:function(){},readInt:function(a){var b,c=0;for(this.checkOffset(a),b=this.index+a-1;b>=this.index;b--)c=(c<<8)+this.byteAt(b);return this.index+=a,c},readString:function(a){return d.transformTo("string",this.readData(a))},readData:function(){},lastIndexOfSignature:function(){},readDate:function(){var a=this.readInt(4);return new Date((a>>25&127)+1980,(a>>21&15)-1,a>>16&31,a>>11&31,a>>5&63,(31&a)<<1)}},b.exports=c},{"./utils":21}],6:[function(a,b,c){"use strict";c.base64=!1,c.binary=!1,c.dir=!1,c.createFolders=!1,c.date=null,c.compression=null,c.compressionOptions=null,c.comment=null,c.unixPermissions=null,c.dosPermissions=null},{}],7:[function(a,b,c){"use strict";var d=a("./utils");c.string2binary=function(a){return d.string2binary(a)},c.string2Uint8Array=function(a){return d.transformTo("uint8array",a)},c.uint8Array2String=function(a){return d.transformTo("string",a)},c.string2Blob=function(a){var b=d.transformTo("arraybuffer",a);return d.arrayBuffer2Blob(b)},c.arrayBuffer2Blob=function(a){return d.arrayBuffer2Blob(a)},c.transformTo=function(a,b){return d.transformTo(a,b)},c.getTypeOf=function(a){return d.getTypeOf(a)},c.checkSupport=function(a){return d.checkSupport(a)},c.MAX_VALUE_16BITS=d.MAX_VALUE_16BITS,c.MAX_VALUE_32BITS=d.MAX_VALUE_32BITS,c.pretty=function(a){return d.pretty(a)},c.findCompression=function(a){return d.findCompression(a)},c.isRegExp=function(a){return d.isRegExp(a)}},{"./utils":21}],8:[function(a,b,c){"use strict";var d="undefined"!=typeof Uint8Array&&"undefined"!=typeof Uint16Array&&"undefined"!=typeof Uint32Array,e=a("pako");c.uncompressInputType=d?"uint8array":"array",c.compressInputType=d?"uint8array":"array",c.magic="\b\x00",c.compress=function(a,b){return e.deflateRaw(a,{level:b.level||-1})},c.uncompress=function(a){return e.inflateRaw(a)}},{pako:24}],9:[function(a,b){"use strict";function c(a,b){return this instanceof c?(this.files={},this.comment=null,this.root="",a&&this.load(a,b),void(this.clone=function(){var a=new c;for(var b in this)"function"!=typeof this[b]&&(a[b]=this[b]);return a})):new c(a,b)}var d=a("./base64");c.prototype=a("./object"),c.prototype.load=a("./load"),c.support=a("./support"),c.defaults=a("./defaults"),c.utils=a("./deprecatedPublicUtils"),c.base64={encode:function(a){return d.encode(a)},decode:function(a){return d.decode(a)}},c.compressions=a("./compressions"),b.exports=c},{"./base64":1,"./compressions":3,"./defaults":6,"./deprecatedPublicUtils":7,"./load":10,"./object":13,"./support":17}],10:[function(a,b){"use strict";var c=a("./base64"),d=a("./zipEntries");b.exports=function(a,b){var e,f,g,h;for(b=b||{},b.base64&&(a=c.decode(a)),f=new d(a,b),e=f.files,g=0;g<e.length;g++)h=e[g],this.file(h.fileName,h.decompressed,{binary:!0,optimizedBinaryString:!0,date:h.date,dir:h.dir,comment:h.fileComment.length?h.fileComment:null,unixPermissions:h.unixPermissions,dosPermissions:h.dosPermissions,createFolders:b.createFolders});return f.zipComment.length&&(this.comment=f.zipComment),this}},{"./base64":1,"./zipEntries":22}],11:[function(a,b){(function(a){"use strict";b.exports=function(b,c){return new a(b,c)},b.exports.test=function(b){return a.isBuffer(b)}}).call(this,"undefined"!=typeof Buffer?Buffer:void 0)},{}],12:[function(a,b){"use strict";function c(a){this.data=a,this.length=this.data.length,this.index=0}var d=a("./uint8ArrayReader");c.prototype=new d,c.prototype.readData=function(a){this.checkOffset(a);var b=this.data.slice(this.index,this.index+a);return this.index+=a,b},b.exports=c},{"./uint8ArrayReader":18}],13:[function(a,b){"use strict";var c=a("./support"),d=a("./utils"),e=a("./crc32"),f=a("./signature"),g=a("./defaults"),h=a("./base64"),i=a("./compressions"),j=a("./compressedObject"),k=a("./nodeBuffer"),l=a("./utf8"),m=a("./stringWriter"),n=a("./uint8ArrayWriter"),o=function(a){if(a._data instanceof j&&(a._data=a._data.getContent(),a.options.binary=!0,a.options.base64=!1,"uint8array"===d.getTypeOf(a._data))){var b=a._data;a._data=new Uint8Array(b.length),0!==b.length&&a._data.set(b,0)}return a._data},p=function(a){var b=o(a),e=d.getTypeOf(b);return"string"===e?!a.options.binary&&c.nodebuffer?k(b,"utf-8"):a.asBinary():b},q=function(a){var b=o(this);return null===b||"undefined"==typeof b?"":(this.options.base64&&(b=h.decode(b)),b=a&&this.options.binary?D.utf8decode(b):d.transformTo("string",b),a||this.options.binary||(b=d.transformTo("string",D.utf8encode(b))),b)},r=function(a,b,c){this.name=a,this.dir=c.dir,this.date=c.date,this.comment=c.comment,this.unixPermissions=c.unixPermissions,this.dosPermissions=c.dosPermissions,this._data=b,this.options=c,this._initialMetadata={dir:c.dir,date:c.date}};r.prototype={asText:function(){return q.call(this,!0)},asBinary:function(){return q.call(this,!1)},asNodeBuffer:function(){var a=p(this);return d.transformTo("nodebuffer",a)},asUint8Array:function(){var a=p(this);return d.transformTo("uint8array",a)},asArrayBuffer:function(){return this.asUint8Array().buffer}};var s=function(a,b){var c,d="";for(c=0;b>c;c++)d+=String.fromCharCode(255&a),a>>>=8;return d},t=function(){var a,b,c={};for(a=0;a<arguments.length;a++)for(b in arguments[a])arguments[a].hasOwnProperty(b)&&"undefined"==typeof c[b]&&(c[b]=arguments[a][b]);return c},u=function(a){return a=a||{},a.base64!==!0||null!==a.binary&&void 0!==a.binary||(a.binary=!0),a=t(a,g),a.date=a.date||new Date,null!==a.compression&&(a.compression=a.compression.toUpperCase()),a},v=function(a,b,c){var e,f=d.getTypeOf(b);if(c=u(c),"string"==typeof c.unixPermissions&&(c.unixPermissions=parseInt(c.unixPermissions,8)),c.unixPermissions&&16384&c.unixPermissions&&(c.dir=!0),c.dosPermissions&&16&c.dosPermissions&&(c.dir=!0),c.dir&&(a=x(a)),c.createFolders&&(e=w(a))&&y.call(this,e,!0),c.dir||null===b||"undefined"==typeof b)c.base64=!1,c.binary=!1,b=null,f=null;else if("string"===f)c.binary&&!c.base64&&c.optimizedBinaryString!==!0&&(b=d.string2binary(b));else{if(c.base64=!1,c.binary=!0,!(f||b instanceof j))throw new Error("The data of '"+a+"' is in an unsupported format !");"arraybuffer"===f&&(b=d.transformTo("uint8array",b))}var g=new r(a,b,c);return this.files[a]=g,g},w=function(a){"/"==a.slice(-1)&&(a=a.substring(0,a.length-1));var b=a.lastIndexOf("/");return b>0?a.substring(0,b):""},x=function(a){return"/"!=a.slice(-1)&&(a+="/"),a},y=function(a,b){return b="undefined"!=typeof b?b:!1,a=x(a),this.files[a]||v.call(this,a,null,{dir:!0,createFolders:b}),this.files[a]},z=function(a,b,c){var f,g=new j;return a._data instanceof j?(g.uncompressedSize=a._data.uncompressedSize,g.crc32=a._data.crc32,0===g.uncompressedSize||a.dir?(b=i.STORE,g.compressedContent="",g.crc32=0):a._data.compressionMethod===b.magic?g.compressedContent=a._data.getCompressedContent():(f=a._data.getContent(),g.compressedContent=b.compress(d.transformTo(b.compressInputType,f),c))):(f=p(a),(!f||0===f.length||a.dir)&&(b=i.STORE,f=""),g.uncompressedSize=f.length,g.crc32=e(f),g.compressedContent=b.compress(d.transformTo(b.compressInputType,f),c)),g.compressedSize=g.compressedContent.length,g.compressionMethod=b.magic,g},A=function(a,b){var c=a;return a||(c=b?16893:33204),(65535&c)<<16},B=function(a){return 63&(a||0)},C=function(a,b,c,g,h){var i,j,k,m,n=(c.compressedContent,d.transformTo("string",l.utf8encode(b.name))),o=b.comment||"",p=d.transformTo("string",l.utf8encode(o)),q=n.length!==b.name.length,r=p.length!==o.length,t=b.options,u="",v="",w="";k=b._initialMetadata.dir!==b.dir?b.dir:t.dir,m=b._initialMetadata.date!==b.date?b.date:t.date;var x=0,y=0;k&&(x|=16),"UNIX"===h?(y=798,x|=A(b.unixPermissions,k)):(y=20,x|=B(b.dosPermissions,k)),i=m.getHours(),i<<=6,i|=m.getMinutes(),i<<=5,i|=m.getSeconds()/2,j=m.getFullYear()-1980,j<<=4,j|=m.getMonth()+1,j<<=5,j|=m.getDate(),q&&(v=s(1,1)+s(e(n),4)+n,u+="up"+s(v.length,2)+v),r&&(w=s(1,1)+s(this.crc32(p),4)+p,u+="uc"+s(w.length,2)+w);var z="";z+="\n\x00",z+=q||r?"\x00\b":"\x00\x00",z+=c.compressionMethod,z+=s(i,2),z+=s(j,2),z+=s(c.crc32,4),z+=s(c.compressedSize,4),z+=s(c.uncompressedSize,4),z+=s(n.length,2),z+=s(u.length,2);var C=f.LOCAL_FILE_HEADER+z+n+u,D=f.CENTRAL_FILE_HEADER+s(y,2)+z+s(p.length,2)+"\x00\x00\x00\x00"+s(x,4)+s(g,4)+n+u+p;return{fileRecord:C,dirRecord:D,compressedObject:c}},D={load:function(){throw new Error("Load method is not defined. Is the file jszip-load.js included ?")},filter:function(a){var b,c,d,e,f=[];for(b in this.files)this.files.hasOwnProperty(b)&&(d=this.files[b],e=new r(d.name,d._data,t(d.options)),c=b.slice(this.root.length,b.length),b.slice(0,this.root.length)===this.root&&a(c,e)&&f.push(e));return f},file:function(a,b,c){if(1===arguments.length){if(d.isRegExp(a)){var e=a;return this.filter(function(a,b){return!b.dir&&e.test(a)})}return this.filter(function(b,c){return!c.dir&&b===a})[0]||null}return a=this.root+a,v.call(this,a,b,c),this},folder:function(a){if(!a)return this;if(d.isRegExp(a))return this.filter(function(b,c){return c.dir&&a.test(b)});var b=this.root+a,c=y.call(this,b),e=this.clone();return e.root=c.name,e},remove:function(a){a=this.root+a;var b=this.files[a];if(b||("/"!=a.slice(-1)&&(a+="/"),b=this.files[a]),b&&!b.dir)delete this.files[a];else for(var c=this.filter(function(b,c){return c.name.slice(0,a.length)===a}),d=0;d<c.length;d++)delete this.files[c[d].name];return this},generate:function(a){a=t(a||{},{base64:!0,compression:"STORE",compressionOptions:null,type:"base64",platform:"DOS",comment:null,mimeType:"application/zip"}),d.checkSupport(a.type),("darwin"===a.platform||"freebsd"===a.platform||"linux"===a.platform||"sunos"===a.platform)&&(a.platform="UNIX"),"win32"===a.platform&&(a.platform="DOS");var b,c,e=[],g=0,j=0,k=d.transformTo("string",this.utf8encode(a.comment||this.comment||""));for(var l in this.files)if(this.files.hasOwnProperty(l)){var o=this.files[l],p=o.options.compression||a.compression.toUpperCase(),q=i[p];if(!q)throw new Error(p+" is not a valid compression method !");var r=o.options.compressionOptions||a.compressionOptions||{},u=z.call(this,o,q,r),v=C.call(this,l,o,u,g,a.platform);g+=v.fileRecord.length+u.compressedSize,j+=v.dirRecord.length,e.push(v)}var w="";w=f.CENTRAL_DIRECTORY_END+"\x00\x00\x00\x00"+s(e.length,2)+s(e.length,2)+s(j,4)+s(g,4)+s(k.length,2)+k;var x=a.type.toLowerCase();for(b="uint8array"===x||"arraybuffer"===x||"blob"===x||"nodebuffer"===x?new n(g+j+w.length):new m(g+j+w.length),c=0;c<e.length;c++)b.append(e[c].fileRecord),b.append(e[c].compressedObject.compressedContent);for(c=0;c<e.length;c++)b.append(e[c].dirRecord);b.append(w);var y=b.finalize();switch(a.type.toLowerCase()){case"uint8array":case"arraybuffer":case"nodebuffer":return d.transformTo(a.type.toLowerCase(),y);case"blob":return d.arrayBuffer2Blob(d.transformTo("arraybuffer",y),a.mimeType);case"base64":return a.base64?h.encode(y):y;default:return y}},crc32:function(a,b){return e(a,b)},utf8encode:function(a){return d.transformTo("string",l.utf8encode(a))},utf8decode:function(a){return l.utf8decode(a)}};b.exports=D},{"./base64":1,"./compressedObject":2,"./compressions":3,"./crc32":4,"./defaults":6,"./nodeBuffer":11,"./signature":14,"./stringWriter":16,"./support":17,"./uint8ArrayWriter":19,"./utf8":20,"./utils":21}],14:[function(a,b,c){"use strict";c.LOCAL_FILE_HEADER="PK",c.CENTRAL_FILE_HEADER="PK",c.CENTRAL_DIRECTORY_END="PK",c.ZIP64_CENTRAL_DIRECTORY_LOCATOR="PK",c.ZIP64_CENTRAL_DIRECTORY_END="PK",c.DATA_DESCRIPTOR="PK\b"},{}],15:[function(a,b){"use strict";function c(a,b){this.data=a,b||(this.data=e.string2binary(this.data)),this.length=this.data.length,this.index=0}var d=a("./dataReader"),e=a("./utils");c.prototype=new d,c.prototype.byteAt=function(a){return this.data.charCodeAt(a)},c.prototype.lastIndexOfSignature=function(a){return this.data.lastIndexOf(a)},c.prototype.readData=function(a){this.checkOffset(a);var b=this.data.slice(this.index,this.index+a);return this.index+=a,b},b.exports=c},{"./dataReader":5,"./utils":21}],16:[function(a,b){"use strict";var c=a("./utils"),d=function(){this.data=[]};d.prototype={append:function(a){a=c.transformTo("string",a),this.data.push(a)},finalize:function(){return this.data.join("")}},b.exports=d},{"./utils":21}],17:[function(a,b,c){(function(a){"use strict";if(c.base64=!0,c.array=!0,c.string=!0,c.arraybuffer="undefined"!=typeof ArrayBuffer&&"undefined"!=typeof Uint8Array,c.nodebuffer="undefined"!=typeof a,c.uint8array="undefined"!=typeof Uint8Array,"undefined"==typeof ArrayBuffer)c.blob=!1;else{var b=new ArrayBuffer(0);try{c.blob=0===new Blob([b],{type:"application/zip"}).size}catch(d){try{var e=window.BlobBuilder||window.WebKitBlobBuilder||window.MozBlobBuilder||window.MSBlobBuilder,f=new e;f.append(b),c.blob=0===f.getBlob("application/zip").size}catch(d){c.blob=!1}}}}).call(this,"undefined"!=typeof Buffer?Buffer:void 0)},{}],18:[function(a,b){"use strict";function c(a){a&&(this.data=a,this.length=this.data.length,this.index=0)}var d=a("./dataReader");c.prototype=new d,c.prototype.byteAt=function(a){return this.data[a]},c.prototype.lastIndexOfSignature=function(a){for(var b=a.charCodeAt(0),c=a.charCodeAt(1),d=a.charCodeAt(2),e=a.charCodeAt(3),f=this.length-4;f>=0;--f)if(this.data[f]===b&&this.data[f+1]===c&&this.data[f+2]===d&&this.data[f+3]===e)return f;return-1},c.prototype.readData=function(a){if(this.checkOffset(a),0===a)return new Uint8Array(0);var b=this.data.subarray(this.index,this.index+a);return this.index+=a,b},b.exports=c},{"./dataReader":5}],19:[function(a,b){"use strict";var c=a("./utils"),d=function(a){this.data=new Uint8Array(a),this.index=0};d.prototype={append:function(a){0!==a.length&&(a=c.transformTo("uint8array",a),this.data.set(a,this.index),this.index+=a.length)},finalize:function(){return this.data}},b.exports=d},{"./utils":21}],20:[function(a,b,c){"use strict";for(var d=a("./utils"),e=a("./support"),f=a("./nodeBuffer"),g=new Array(256),h=0;256>h;h++)g[h]=h>=252?6:h>=248?5:h>=240?4:h>=224?3:h>=192?2:1;g[254]=g[254]=1;var i=function(a){var b,c,d,f,g,h=a.length,i=0;for(f=0;h>f;f++)c=a.charCodeAt(f),55296===(64512&c)&&h>f+1&&(d=a.charCodeAt(f+1),56320===(64512&d)&&(c=65536+(c-55296<<10)+(d-56320),f++)),i+=128>c?1:2048>c?2:65536>c?3:4;for(b=e.uint8array?new Uint8Array(i):new Array(i),g=0,f=0;i>g;f++)c=a.charCodeAt(f),55296===(64512&c)&&h>f+1&&(d=a.charCodeAt(f+1),56320===(64512&d)&&(c=65536+(c-55296<<10)+(d-56320),f++)),128>c?b[g++]=c:2048>c?(b[g++]=192|c>>>6,b[g++]=128|63&c):65536>c?(b[g++]=224|c>>>12,b[g++]=128|c>>>6&63,b[g++]=128|63&c):(b[g++]=240|c>>>18,b[g++]=128|c>>>12&63,b[g++]=128|c>>>6&63,b[g++]=128|63&c);return b},j=function(a,b){var c;for(b=b||a.length,b>a.length&&(b=a.length),c=b-1;c>=0&&128===(192&a[c]);)c--;return 0>c?b:0===c?b:c+g[a[c]]>b?c:b},k=function(a){var b,c,e,f,h=a.length,i=new Array(2*h);for(c=0,b=0;h>b;)if(e=a[b++],128>e)i[c++]=e;else if(f=g[e],f>4)i[c++]=65533,b+=f-1;else{for(e&=2===f?31:3===f?15:7;f>1&&h>b;)e=e<<6|63&a[b++],f--;f>1?i[c++]=65533:65536>e?i[c++]=e:(e-=65536,i[c++]=55296|e>>10&1023,i[c++]=56320|1023&e)}return i.length!==c&&(i.subarray?i=i.subarray(0,c):i.length=c),d.applyFromCharCode(i)};c.utf8encode=function(a){return e.nodebuffer?f(a,"utf-8"):i(a)},c.utf8decode=function(a){if(e.nodebuffer)return d.transformTo("nodebuffer",a).toString("utf-8");a=d.transformTo(e.uint8array?"uint8array":"array",a);for(var b=[],c=0,f=a.length,g=65536;f>c;){var h=j(a,Math.min(c+g,f));b.push(e.uint8array?k(a.subarray(c,h)):k(a.slice(c,h))),c=h}return b.join("")}},{"./nodeBuffer":11,"./support":17,"./utils":21}],21:[function(a,b,c){"use strict";function d(a){return a}function e(a,b){for(var c=0;c<a.length;++c)b[c]=255&a.charCodeAt(c);return b}function f(a){var b=65536,d=[],e=a.length,f=c.getTypeOf(a),g=0,h=!0;try{switch(f){case"uint8array":String.fromCharCode.apply(null,new Uint8Array(0));break;case"nodebuffer":String.fromCharCode.apply(null,j(0))}}catch(i){h=!1}if(!h){for(var k="",l=0;l<a.length;l++)k+=String.fromCharCode(a[l]);return k}for(;e>g&&b>1;)try{d.push("array"===f||"nodebuffer"===f?String.fromCharCode.apply(null,a.slice(g,Math.min(g+b,e))):String.fromCharCode.apply(null,a.subarray(g,Math.min(g+b,e)))),g+=b}catch(i){b=Math.floor(b/2)}return d.join("")}function g(a,b){for(var c=0;c<a.length;c++)b[c]=a[c];return b}var h=a("./support"),i=a("./compressions"),j=a("./nodeBuffer");c.string2binary=function(a){for(var b="",c=0;c<a.length;c++)b+=String.fromCharCode(255&a.charCodeAt(c));return b},c.arrayBuffer2Blob=function(a,b){c.checkSupport("blob"),b=b||"application/zip";try{return new Blob([a],{type:b})}catch(d){try{var e=window.BlobBuilder||window.WebKitBlobBuilder||window.MozBlobBuilder||window.MSBlobBuilder,f=new e;return f.append(a),f.getBlob(b)}catch(d){throw new Error("Bug : can't construct the Blob.")}}},c.applyFromCharCode=f;var k={};k.string={string:d,array:function(a){return e(a,new Array(a.length))},arraybuffer:function(a){return k.string.uint8array(a).buffer},uint8array:function(a){return e(a,new Uint8Array(a.length))},nodebuffer:function(a){return e(a,j(a.length))}},k.array={string:f,array:d,arraybuffer:function(a){return new Uint8Array(a).buffer},uint8array:function(a){return new Uint8Array(a)},nodebuffer:function(a){return j(a)}},k.arraybuffer={string:function(a){return f(new Uint8Array(a))},array:function(a){return g(new Uint8Array(a),new Array(a.byteLength))},arraybuffer:d,uint8array:function(a){return new Uint8Array(a)},nodebuffer:function(a){return j(new Uint8Array(a))}},k.uint8array={string:f,array:function(a){return g(a,new Array(a.length))},arraybuffer:function(a){return a.buffer},uint8array:d,nodebuffer:function(a){return j(a)}},k.nodebuffer={string:f,array:function(a){return g(a,new Array(a.length))},arraybuffer:function(a){return k.nodebuffer.uint8array(a).buffer},uint8array:function(a){return g(a,new Uint8Array(a.length))},nodebuffer:d},c.transformTo=function(a,b){if(b||(b=""),!a)return b;c.checkSupport(a);var d=c.getTypeOf(b),e=k[d][a](b);return e},c.getTypeOf=function(a){return"string"==typeof a?"string":"[object Array]"===Object.prototype.toString.call(a)?"array":h.nodebuffer&&j.test(a)?"nodebuffer":h.uint8array&&a instanceof Uint8Array?"uint8array":h.arraybuffer&&a instanceof ArrayBuffer?"arraybuffer":void 0},c.checkSupport=function(a){var b=h[a.toLowerCase()];if(!b)throw new Error(a+" is not supported by this browser")},c.MAX_VALUE_16BITS=65535,c.MAX_VALUE_32BITS=-1,c.pretty=function(a){var b,c,d="";for(c=0;c<(a||"").length;c++)b=a.charCodeAt(c),d+="\\x"+(16>b?"0":"")+b.toString(16).toUpperCase();return d},c.findCompression=function(a){for(var b in i)if(i.hasOwnProperty(b)&&i[b].magic===a)return i[b];return null},c.isRegExp=function(a){return"[object RegExp]"===Object.prototype.toString.call(a)}},{"./compressions":3,"./nodeBuffer":11,"./support":17}],22:[function(a,b){"use strict";function c(a,b){this.files=[],this.loadOptions=b,a&&this.load(a)}var d=a("./stringReader"),e=a("./nodeBufferReader"),f=a("./uint8ArrayReader"),g=a("./utils"),h=a("./signature"),i=a("./zipEntry"),j=a("./support"),k=a("./object");c.prototype={checkSignature:function(a){var b=this.reader.readString(4);if(b!==a)throw new Error("Corrupted zip or bug : unexpected signature ("+g.pretty(b)+", expected "+g.pretty(a)+")")},readBlockEndOfCentral:function(){this.diskNumber=this.reader.readInt(2),this.diskWithCentralDirStart=this.reader.readInt(2),this.centralDirRecordsOnThisDisk=this.reader.readInt(2),this.centralDirRecords=this.reader.readInt(2),this.centralDirSize=this.reader.readInt(4),this.centralDirOffset=this.reader.readInt(4),this.zipCommentLength=this.reader.readInt(2),this.zipComment=this.reader.readString(this.zipCommentLength),this.zipComment=k.utf8decode(this.zipComment)},readBlockZip64EndOfCentral:function(){this.zip64EndOfCentralSize=this.reader.readInt(8),this.versionMadeBy=this.reader.readString(2),this.versionNeeded=this.reader.readInt(2),this.diskNumber=this.reader.readInt(4),this.diskWithCentralDirStart=this.reader.readInt(4),this.centralDirRecordsOnThisDisk=this.reader.readInt(8),this.centralDirRecords=this.reader.readInt(8),this.centralDirSize=this.reader.readInt(8),this.centralDirOffset=this.reader.readInt(8),this.zip64ExtensibleData={};for(var a,b,c,d=this.zip64EndOfCentralSize-44,e=0;d>e;)a=this.reader.readInt(2),b=this.reader.readInt(4),c=this.reader.readString(b),this.zip64ExtensibleData[a]={id:a,length:b,value:c}},readBlockZip64EndOfCentralLocator:function(){if(this.diskWithZip64CentralDirStart=this.reader.readInt(4),this.relativeOffsetEndOfZip64CentralDir=this.reader.readInt(8),this.disksCount=this.reader.readInt(4),this.disksCount>1)throw new Error("Multi-volumes zip are not supported")},readLocalFiles:function(){var a,b;for(a=0;a<this.files.length;a++)b=this.files[a],this.reader.setIndex(b.localHeaderOffset),this.checkSignature(h.LOCAL_FILE_HEADER),b.readLocalPart(this.reader),b.handleUTF8(),b.processAttributes()},readCentralDir:function(){var a;for(this.reader.setIndex(this.centralDirOffset);this.reader.readString(4)===h.CENTRAL_FILE_HEADER;)a=new i({zip64:this.zip64},this.loadOptions),a.readCentralPart(this.reader),this.files.push(a)},readEndOfCentral:function(){var a=this.reader.lastIndexOfSignature(h.CENTRAL_DIRECTORY_END);if(-1===a){var b=!0;try{this.reader.setIndex(0),this.checkSignature(h.LOCAL_FILE_HEADER),b=!1}catch(c){}throw new Error(b?"Can't find end of central directory : is this a zip file ? If it is, see http://stuk.github.io/jszip/documentation/howto/read_zip.html":"Corrupted zip : can't find end of central directory")}if(this.reader.setIndex(a),this.checkSignature(h.CENTRAL_DIRECTORY_END),this.readBlockEndOfCentral(),this.diskNumber===g.MAX_VALUE_16BITS||this.diskWithCentralDirStart===g.MAX_VALUE_16BITS||this.centralDirRecordsOnThisDisk===g.MAX_VALUE_16BITS||this.centralDirRecords===g.MAX_VALUE_16BITS||this.centralDirSize===g.MAX_VALUE_32BITS||this.centralDirOffset===g.MAX_VALUE_32BITS){if(this.zip64=!0,a=this.reader.lastIndexOfSignature(h.ZIP64_CENTRAL_DIRECTORY_LOCATOR),-1===a)throw new Error("Corrupted zip : can't find the ZIP64 end of central directory locator");this.reader.setIndex(a),this.checkSignature(h.ZIP64_CENTRAL_DIRECTORY_LOCATOR),this.readBlockZip64EndOfCentralLocator(),this.reader.setIndex(this.relativeOffsetEndOfZip64CentralDir),this.checkSignature(h.ZIP64_CENTRAL_DIRECTORY_END),this.readBlockZip64EndOfCentral()}},prepareReader:function(a){var b=g.getTypeOf(a);this.reader="string"!==b||j.uint8array?"nodebuffer"===b?new e(a):new f(g.transformTo("uint8array",a)):new d(a,this.loadOptions.optimizedBinaryString)},load:function(a){this.prepareReader(a),this.readEndOfCentral(),this.readCentralDir(),this.readLocalFiles()}},b.exports=c},{"./nodeBufferReader":12,"./object":13,"./signature":14,"./stringReader":15,"./support":17,"./uint8ArrayReader":18,"./utils":21,"./zipEntry":23}],23:[function(a,b){"use strict";function c(a,b){this.options=a,this.loadOptions=b}var d=a("./stringReader"),e=a("./utils"),f=a("./compressedObject"),g=a("./object"),h=0,i=3;c.prototype={isEncrypted:function(){return 1===(1&this.bitFlag)},useUTF8:function(){return 2048===(2048&this.bitFlag)},prepareCompressedContent:function(a,b,c){return function(){var d=a.index;a.setIndex(b);var e=a.readData(c);return a.setIndex(d),e}},prepareContent:function(a,b,c,d,f){return function(){var a=e.transformTo(d.uncompressInputType,this.getCompressedContent()),b=d.uncompress(a);if(b.length!==f)throw new Error("Bug : uncompressed data size mismatch");return b}},readLocalPart:function(a){var b,c;if(a.skip(22),this.fileNameLength=a.readInt(2),c=a.readInt(2),this.fileName=a.readString(this.fileNameLength),a.skip(c),-1==this.compressedSize||-1==this.uncompressedSize)throw new Error("Bug or corrupted zip : didn't get enough informations from the central directory (compressedSize == -1 || uncompressedSize == -1)");if(b=e.findCompression(this.compressionMethod),null===b)throw new Error("Corrupted zip : compression "+e.pretty(this.compressionMethod)+" unknown (inner file : "+this.fileName+")");if(this.decompressed=new f,this.decompressed.compressedSize=this.compressedSize,this.decompressed.uncompressedSize=this.uncompressedSize,this.decompressed.crc32=this.crc32,this.decompressed.compressionMethod=this.compressionMethod,this.decompressed.getCompressedContent=this.prepareCompressedContent(a,a.index,this.compressedSize,b),this.decompressed.getContent=this.prepareContent(a,a.index,this.compressedSize,b,this.uncompressedSize),this.loadOptions.checkCRC32&&(this.decompressed=e.transformTo("string",this.decompressed.getContent()),g.crc32(this.decompressed)!==this.crc32))throw new Error("Corrupted zip : CRC32 mismatch")},readCentralPart:function(a){if(this.versionMadeBy=a.readInt(2),this.versionNeeded=a.readInt(2),this.bitFlag=a.readInt(2),this.compressionMethod=a.readString(2),this.date=a.readDate(),this.crc32=a.readInt(4),this.compressedSize=a.readInt(4),this.uncompressedSize=a.readInt(4),this.fileNameLength=a.readInt(2),this.extraFieldsLength=a.readInt(2),this.fileCommentLength=a.readInt(2),this.diskNumberStart=a.readInt(2),this.internalFileAttributes=a.readInt(2),this.externalFileAttributes=a.readInt(4),this.localHeaderOffset=a.readInt(4),this.isEncrypted())throw new Error("Encrypted zip are not supported");this.fileName=a.readString(this.fileNameLength),this.readExtraFields(a),this.parseZIP64ExtraField(a),this.fileComment=a.readString(this.fileCommentLength)},processAttributes:function(){this.unixPermissions=null,this.dosPermissions=null;var a=this.versionMadeBy>>8;this.dir=16&this.externalFileAttributes?!0:!1,a===h&&(this.dosPermissions=63&this.externalFileAttributes),a===i&&(this.unixPermissions=this.externalFileAttributes>>16&65535),this.dir||"/"!==this.fileName.slice(-1)||(this.dir=!0)},parseZIP64ExtraField:function(){if(this.extraFields[1]){var a=new d(this.extraFields[1].value);this.uncompressedSize===e.MAX_VALUE_32BITS&&(this.uncompressedSize=a.readInt(8)),this.compressedSize===e.MAX_VALUE_32BITS&&(this.compressedSize=a.readInt(8)),this.localHeaderOffset===e.MAX_VALUE_32BITS&&(this.localHeaderOffset=a.readInt(8)),this.diskNumberStart===e.MAX_VALUE_32BITS&&(this.diskNumberStart=a.readInt(4))}},readExtraFields:function(a){var b,c,d,e=a.index;for(this.extraFields=this.extraFields||{};a.index<e+this.extraFieldsLength;)b=a.readInt(2),c=a.readInt(2),d=a.readString(c),this.extraFields[b]={id:b,length:c,value:d}},handleUTF8:function(){if(this.useUTF8())this.fileName=g.utf8decode(this.fileName),this.fileComment=g.utf8decode(this.fileComment);else{var a=this.findExtraFieldUnicodePath();null!==a&&(this.fileName=a);var b=this.findExtraFieldUnicodeComment();null!==b&&(this.fileComment=b)}},findExtraFieldUnicodePath:function(){var a=this.extraFields[28789];if(a){var b=new d(a.value);return 1!==b.readInt(1)?null:g.crc32(this.fileName)!==b.readInt(4)?null:g.utf8decode(b.readString(a.length-5))
+}return null},findExtraFieldUnicodeComment:function(){var a=this.extraFields[25461];if(a){var b=new d(a.value);return 1!==b.readInt(1)?null:g.crc32(this.fileComment)!==b.readInt(4)?null:g.utf8decode(b.readString(a.length-5))}return null}},b.exports=c},{"./compressedObject":2,"./object":13,"./stringReader":15,"./utils":21}],24:[function(a,b){"use strict";var c=a("./lib/utils/common").assign,d=a("./lib/deflate"),e=a("./lib/inflate"),f=a("./lib/zlib/constants"),g={};c(g,d,e,f),b.exports=g},{"./lib/deflate":25,"./lib/inflate":26,"./lib/utils/common":27,"./lib/zlib/constants":30}],25:[function(a,b,c){"use strict";function d(a,b){var c=new s(b);if(c.push(a,!0),c.err)throw c.msg;return c.result}function e(a,b){return b=b||{},b.raw=!0,d(a,b)}function f(a,b){return b=b||{},b.gzip=!0,d(a,b)}var g=a("./zlib/deflate.js"),h=a("./utils/common"),i=a("./utils/strings"),j=a("./zlib/messages"),k=a("./zlib/zstream"),l=0,m=4,n=0,o=1,p=-1,q=0,r=8,s=function(a){this.options=h.assign({level:p,method:r,chunkSize:16384,windowBits:15,memLevel:8,strategy:q,to:""},a||{});var b=this.options;b.raw&&b.windowBits>0?b.windowBits=-b.windowBits:b.gzip&&b.windowBits>0&&b.windowBits<16&&(b.windowBits+=16),this.err=0,this.msg="",this.ended=!1,this.chunks=[],this.strm=new k,this.strm.avail_out=0;var c=g.deflateInit2(this.strm,b.level,b.method,b.windowBits,b.memLevel,b.strategy);if(c!==n)throw new Error(j[c]);b.header&&g.deflateSetHeader(this.strm,b.header)};s.prototype.push=function(a,b){var c,d,e=this.strm,f=this.options.chunkSize;if(this.ended)return!1;d=b===~~b?b:b===!0?m:l,e.input="string"==typeof a?i.string2buf(a):a,e.next_in=0,e.avail_in=e.input.length;do{if(0===e.avail_out&&(e.output=new h.Buf8(f),e.next_out=0,e.avail_out=f),c=g.deflate(e,d),c!==o&&c!==n)return this.onEnd(c),this.ended=!0,!1;(0===e.avail_out||0===e.avail_in&&d===m)&&this.onData("string"===this.options.to?i.buf2binstring(h.shrinkBuf(e.output,e.next_out)):h.shrinkBuf(e.output,e.next_out))}while((e.avail_in>0||0===e.avail_out)&&c!==o);return d===m?(c=g.deflateEnd(this.strm),this.onEnd(c),this.ended=!0,c===n):!0},s.prototype.onData=function(a){this.chunks.push(a)},s.prototype.onEnd=function(a){a===n&&(this.result="string"===this.options.to?this.chunks.join(""):h.flattenChunks(this.chunks)),this.chunks=[],this.err=a,this.msg=this.strm.msg},c.Deflate=s,c.deflate=d,c.deflateRaw=e,c.gzip=f},{"./utils/common":27,"./utils/strings":28,"./zlib/deflate.js":32,"./zlib/messages":37,"./zlib/zstream":39}],26:[function(a,b,c){"use strict";function d(a,b){var c=new m(b);if(c.push(a,!0),c.err)throw c.msg;return c.result}function e(a,b){return b=b||{},b.raw=!0,d(a,b)}var f=a("./zlib/inflate.js"),g=a("./utils/common"),h=a("./utils/strings"),i=a("./zlib/constants"),j=a("./zlib/messages"),k=a("./zlib/zstream"),l=a("./zlib/gzheader"),m=function(a){this.options=g.assign({chunkSize:16384,windowBits:0,to:""},a||{});var b=this.options;b.raw&&b.windowBits>=0&&b.windowBits<16&&(b.windowBits=-b.windowBits,0===b.windowBits&&(b.windowBits=-15)),!(b.windowBits>=0&&b.windowBits<16)||a&&a.windowBits||(b.windowBits+=32),b.windowBits>15&&b.windowBits<48&&0===(15&b.windowBits)&&(b.windowBits|=15),this.err=0,this.msg="",this.ended=!1,this.chunks=[],this.strm=new k,this.strm.avail_out=0;var c=f.inflateInit2(this.strm,b.windowBits);if(c!==i.Z_OK)throw new Error(j[c]);this.header=new l,f.inflateGetHeader(this.strm,this.header)};m.prototype.push=function(a,b){var c,d,e,j,k,l=this.strm,m=this.options.chunkSize;if(this.ended)return!1;d=b===~~b?b:b===!0?i.Z_FINISH:i.Z_NO_FLUSH,l.input="string"==typeof a?h.binstring2buf(a):a,l.next_in=0,l.avail_in=l.input.length;do{if(0===l.avail_out&&(l.output=new g.Buf8(m),l.next_out=0,l.avail_out=m),c=f.inflate(l,i.Z_NO_FLUSH),c!==i.Z_STREAM_END&&c!==i.Z_OK)return this.onEnd(c),this.ended=!0,!1;l.next_out&&(0===l.avail_out||c===i.Z_STREAM_END||0===l.avail_in&&d===i.Z_FINISH)&&("string"===this.options.to?(e=h.utf8border(l.output,l.next_out),j=l.next_out-e,k=h.buf2string(l.output,e),l.next_out=j,l.avail_out=m-j,j&&g.arraySet(l.output,l.output,e,j,0),this.onData(k)):this.onData(g.shrinkBuf(l.output,l.next_out)))}while(l.avail_in>0&&c!==i.Z_STREAM_END);return c===i.Z_STREAM_END&&(d=i.Z_FINISH),d===i.Z_FINISH?(c=f.inflateEnd(this.strm),this.onEnd(c),this.ended=!0,c===i.Z_OK):!0},m.prototype.onData=function(a){this.chunks.push(a)},m.prototype.onEnd=function(a){a===i.Z_OK&&(this.result="string"===this.options.to?this.chunks.join(""):g.flattenChunks(this.chunks)),this.chunks=[],this.err=a,this.msg=this.strm.msg},c.Inflate=m,c.inflate=d,c.inflateRaw=e,c.ungzip=d},{"./utils/common":27,"./utils/strings":28,"./zlib/constants":30,"./zlib/gzheader":33,"./zlib/inflate.js":35,"./zlib/messages":37,"./zlib/zstream":39}],27:[function(a,b,c){"use strict";var d="undefined"!=typeof Uint8Array&&"undefined"!=typeof Uint16Array&&"undefined"!=typeof Int32Array;c.assign=function(a){for(var b=Array.prototype.slice.call(arguments,1);b.length;){var c=b.shift();if(c){if("object"!=typeof c)throw new TypeError(c+"must be non-object");for(var d in c)c.hasOwnProperty(d)&&(a[d]=c[d])}}return a},c.shrinkBuf=function(a,b){return a.length===b?a:a.subarray?a.subarray(0,b):(a.length=b,a)};var e={arraySet:function(a,b,c,d,e){if(b.subarray&&a.subarray)return void a.set(b.subarray(c,c+d),e);for(var f=0;d>f;f++)a[e+f]=b[c+f]},flattenChunks:function(a){var b,c,d,e,f,g;for(d=0,b=0,c=a.length;c>b;b++)d+=a[b].length;for(g=new Uint8Array(d),e=0,b=0,c=a.length;c>b;b++)f=a[b],g.set(f,e),e+=f.length;return g}},f={arraySet:function(a,b,c,d,e){for(var f=0;d>f;f++)a[e+f]=b[c+f]},flattenChunks:function(a){return[].concat.apply([],a)}};c.setTyped=function(a){a?(c.Buf8=Uint8Array,c.Buf16=Uint16Array,c.Buf32=Int32Array,c.assign(c,e)):(c.Buf8=Array,c.Buf16=Array,c.Buf32=Array,c.assign(c,f))},c.setTyped(d)},{}],28:[function(a,b,c){"use strict";function d(a,b){if(65537>b&&(a.subarray&&g||!a.subarray&&f))return String.fromCharCode.apply(null,e.shrinkBuf(a,b));for(var c="",d=0;b>d;d++)c+=String.fromCharCode(a[d]);return c}var e=a("./common"),f=!0,g=!0;try{String.fromCharCode.apply(null,[0])}catch(h){f=!1}try{String.fromCharCode.apply(null,new Uint8Array(1))}catch(h){g=!1}for(var i=new e.Buf8(256),j=0;256>j;j++)i[j]=j>=252?6:j>=248?5:j>=240?4:j>=224?3:j>=192?2:1;i[254]=i[254]=1,c.string2buf=function(a){var b,c,d,f,g,h=a.length,i=0;for(f=0;h>f;f++)c=a.charCodeAt(f),55296===(64512&c)&&h>f+1&&(d=a.charCodeAt(f+1),56320===(64512&d)&&(c=65536+(c-55296<<10)+(d-56320),f++)),i+=128>c?1:2048>c?2:65536>c?3:4;for(b=new e.Buf8(i),g=0,f=0;i>g;f++)c=a.charCodeAt(f),55296===(64512&c)&&h>f+1&&(d=a.charCodeAt(f+1),56320===(64512&d)&&(c=65536+(c-55296<<10)+(d-56320),f++)),128>c?b[g++]=c:2048>c?(b[g++]=192|c>>>6,b[g++]=128|63&c):65536>c?(b[g++]=224|c>>>12,b[g++]=128|c>>>6&63,b[g++]=128|63&c):(b[g++]=240|c>>>18,b[g++]=128|c>>>12&63,b[g++]=128|c>>>6&63,b[g++]=128|63&c);return b},c.buf2binstring=function(a){return d(a,a.length)},c.binstring2buf=function(a){for(var b=new e.Buf8(a.length),c=0,d=b.length;d>c;c++)b[c]=a.charCodeAt(c);return b},c.buf2string=function(a,b){var c,e,f,g,h=b||a.length,j=new Array(2*h);for(e=0,c=0;h>c;)if(f=a[c++],128>f)j[e++]=f;else if(g=i[f],g>4)j[e++]=65533,c+=g-1;else{for(f&=2===g?31:3===g?15:7;g>1&&h>c;)f=f<<6|63&a[c++],g--;g>1?j[e++]=65533:65536>f?j[e++]=f:(f-=65536,j[e++]=55296|f>>10&1023,j[e++]=56320|1023&f)}return d(j,e)},c.utf8border=function(a,b){var c;for(b=b||a.length,b>a.length&&(b=a.length),c=b-1;c>=0&&128===(192&a[c]);)c--;return 0>c?b:0===c?b:c+i[a[c]]>b?c:b}},{"./common":27}],29:[function(a,b){"use strict";function c(a,b,c,d){for(var e=65535&a|0,f=a>>>16&65535|0,g=0;0!==c;){g=c>2e3?2e3:c,c-=g;do e=e+b[d++]|0,f=f+e|0;while(--g);e%=65521,f%=65521}return e|f<<16|0}b.exports=c},{}],30:[function(a,b){b.exports={Z_NO_FLUSH:0,Z_PARTIAL_FLUSH:1,Z_SYNC_FLUSH:2,Z_FULL_FLUSH:3,Z_FINISH:4,Z_BLOCK:5,Z_TREES:6,Z_OK:0,Z_STREAM_END:1,Z_NEED_DICT:2,Z_ERRNO:-1,Z_STREAM_ERROR:-2,Z_DATA_ERROR:-3,Z_BUF_ERROR:-5,Z_NO_COMPRESSION:0,Z_BEST_SPEED:1,Z_BEST_COMPRESSION:9,Z_DEFAULT_COMPRESSION:-1,Z_FILTERED:1,Z_HUFFMAN_ONLY:2,Z_RLE:3,Z_FIXED:4,Z_DEFAULT_STRATEGY:0,Z_BINARY:0,Z_TEXT:1,Z_UNKNOWN:2,Z_DEFLATED:8}},{}],31:[function(a,b){"use strict";function c(){for(var a,b=[],c=0;256>c;c++){a=c;for(var d=0;8>d;d++)a=1&a?3988292384^a>>>1:a>>>1;b[c]=a}return b}function d(a,b,c,d){var f=e,g=d+c;a=-1^a;for(var h=d;g>h;h++)a=a>>>8^f[255&(a^b[h])];return-1^a}var e=c();b.exports=d},{}],32:[function(a,b,c){"use strict";function d(a,b){return a.msg=G[b],b}function e(a){return(a<<1)-(a>4?9:0)}function f(a){for(var b=a.length;--b>=0;)a[b]=0}function g(a){var b=a.state,c=b.pending;c>a.avail_out&&(c=a.avail_out),0!==c&&(C.arraySet(a.output,b.pending_buf,b.pending_out,c,a.next_out),a.next_out+=c,b.pending_out+=c,a.total_out+=c,a.avail_out-=c,b.pending-=c,0===b.pending&&(b.pending_out=0))}function h(a,b){D._tr_flush_block(a,a.block_start>=0?a.block_start:-1,a.strstart-a.block_start,b),a.block_start=a.strstart,g(a.strm)}function i(a,b){a.pending_buf[a.pending++]=b}function j(a,b){a.pending_buf[a.pending++]=b>>>8&255,a.pending_buf[a.pending++]=255&b}function k(a,b,c,d){var e=a.avail_in;return e>d&&(e=d),0===e?0:(a.avail_in-=e,C.arraySet(b,a.input,a.next_in,e,c),1===a.state.wrap?a.adler=E(a.adler,b,e,c):2===a.state.wrap&&(a.adler=F(a.adler,b,e,c)),a.next_in+=e,a.total_in+=e,e)}function l(a,b){var c,d,e=a.max_chain_length,f=a.strstart,g=a.prev_length,h=a.nice_match,i=a.strstart>a.w_size-jb?a.strstart-(a.w_size-jb):0,j=a.window,k=a.w_mask,l=a.prev,m=a.strstart+ib,n=j[f+g-1],o=j[f+g];a.prev_length>=a.good_match&&(e>>=2),h>a.lookahead&&(h=a.lookahead);do if(c=b,j[c+g]===o&&j[c+g-1]===n&&j[c]===j[f]&&j[++c]===j[f+1]){f+=2,c++;do;while(j[++f]===j[++c]&&j[++f]===j[++c]&&j[++f]===j[++c]&&j[++f]===j[++c]&&j[++f]===j[++c]&&j[++f]===j[++c]&&j[++f]===j[++c]&&j[++f]===j[++c]&&m>f);if(d=ib-(m-f),f=m-ib,d>g){if(a.match_start=b,g=d,d>=h)break;n=j[f+g-1],o=j[f+g]}}while((b=l[b&k])>i&&0!==--e);return g<=a.lookahead?g:a.lookahead}function m(a){var b,c,d,e,f,g=a.w_size;do{if(e=a.window_size-a.lookahead-a.strstart,a.strstart>=g+(g-jb)){C.arraySet(a.window,a.window,g,g,0),a.match_start-=g,a.strstart-=g,a.block_start-=g,c=a.hash_size,b=c;do d=a.head[--b],a.head[b]=d>=g?d-g:0;while(--c);c=g,b=c;do d=a.prev[--b],a.prev[b]=d>=g?d-g:0;while(--c);e+=g}if(0===a.strm.avail_in)break;if(c=k(a.strm,a.window,a.strstart+a.lookahead,e),a.lookahead+=c,a.lookahead+a.insert>=hb)for(f=a.strstart-a.insert,a.ins_h=a.window[f],a.ins_h=(a.ins_h<<a.hash_shift^a.window[f+1])&a.hash_mask;a.insert&&(a.ins_h=(a.ins_h<<a.hash_shift^a.window[f+hb-1])&a.hash_mask,a.prev[f&a.w_mask]=a.head[a.ins_h],a.head[a.ins_h]=f,f++,a.insert--,!(a.lookahead+a.insert<hb)););}while(a.lookahead<jb&&0!==a.strm.avail_in)}function n(a,b){var c=65535;for(c>a.pending_buf_size-5&&(c=a.pending_buf_size-5);;){if(a.lookahead<=1){if(m(a),0===a.lookahead&&b===H)return sb;if(0===a.lookahead)break}a.strstart+=a.lookahead,a.lookahead=0;var d=a.block_start+c;if((0===a.strstart||a.strstart>=d)&&(a.lookahead=a.strstart-d,a.strstart=d,h(a,!1),0===a.strm.avail_out))return sb;if(a.strstart-a.block_start>=a.w_size-jb&&(h(a,!1),0===a.strm.avail_out))return sb}return a.insert=0,b===K?(h(a,!0),0===a.strm.avail_out?ub:vb):a.strstart>a.block_start&&(h(a,!1),0===a.strm.avail_out)?sb:sb}function o(a,b){for(var c,d;;){if(a.lookahead<jb){if(m(a),a.lookahead<jb&&b===H)return sb;if(0===a.lookahead)break}if(c=0,a.lookahead>=hb&&(a.ins_h=(a.ins_h<<a.hash_shift^a.window[a.strstart+hb-1])&a.hash_mask,c=a.prev[a.strstart&a.w_mask]=a.head[a.ins_h],a.head[a.ins_h]=a.strstart),0!==c&&a.strstart-c<=a.w_size-jb&&(a.match_length=l(a,c)),a.match_length>=hb)if(d=D._tr_tally(a,a.strstart-a.match_start,a.match_length-hb),a.lookahead-=a.match_length,a.match_length<=a.max_lazy_match&&a.lookahead>=hb){a.match_length--;do a.strstart++,a.ins_h=(a.ins_h<<a.hash_shift^a.window[a.strstart+hb-1])&a.hash_mask,c=a.prev[a.strstart&a.w_mask]=a.head[a.ins_h],a.head[a.ins_h]=a.strstart;while(0!==--a.match_length);a.strstart++}else a.strstart+=a.match_length,a.match_length=0,a.ins_h=a.window[a.strstart],a.ins_h=(a.ins_h<<a.hash_shift^a.window[a.strstart+1])&a.hash_mask;else d=D._tr_tally(a,0,a.window[a.strstart]),a.lookahead--,a.strstart++;if(d&&(h(a,!1),0===a.strm.avail_out))return sb}return a.insert=a.strstart<hb-1?a.strstart:hb-1,b===K?(h(a,!0),0===a.strm.avail_out?ub:vb):a.last_lit&&(h(a,!1),0===a.strm.avail_out)?sb:tb}function p(a,b){for(var c,d,e;;){if(a.lookahead<jb){if(m(a),a.lookahead<jb&&b===H)return sb;if(0===a.lookahead)break}if(c=0,a.lookahead>=hb&&(a.ins_h=(a.ins_h<<a.hash_shift^a.window[a.strstart+hb-1])&a.hash_mask,c=a.prev[a.strstart&a.w_mask]=a.head[a.ins_h],a.head[a.ins_h]=a.strstart),a.prev_length=a.match_length,a.prev_match=a.match_start,a.match_length=hb-1,0!==c&&a.prev_length<a.max_lazy_match&&a.strstart-c<=a.w_size-jb&&(a.match_length=l(a,c),a.match_length<=5&&(a.strategy===S||a.match_length===hb&&a.strstart-a.match_start>4096)&&(a.match_length=hb-1)),a.prev_length>=hb&&a.match_length<=a.prev_length){e=a.strstart+a.lookahead-hb,d=D._tr_tally(a,a.strstart-1-a.prev_match,a.prev_length-hb),a.lookahead-=a.prev_length-1,a.prev_length-=2;do++a.strstart<=e&&(a.ins_h=(a.ins_h<<a.hash_shift^a.window[a.strstart+hb-1])&a.hash_mask,c=a.prev[a.strstart&a.w_mask]=a.head[a.ins_h],a.head[a.ins_h]=a.strstart);while(0!==--a.prev_length);if(a.match_available=0,a.match_length=hb-1,a.strstart++,d&&(h(a,!1),0===a.strm.avail_out))return sb}else if(a.match_available){if(d=D._tr_tally(a,0,a.window[a.strstart-1]),d&&h(a,!1),a.strstart++,a.lookahead--,0===a.strm.avail_out)return sb}else a.match_available=1,a.strstart++,a.lookahead--}return a.match_available&&(d=D._tr_tally(a,0,a.window[a.strstart-1]),a.match_available=0),a.insert=a.strstart<hb-1?a.strstart:hb-1,b===K?(h(a,!0),0===a.strm.avail_out?ub:vb):a.last_lit&&(h(a,!1),0===a.strm.avail_out)?sb:tb}function q(a,b){for(var c,d,e,f,g=a.window;;){if(a.lookahead<=ib){if(m(a),a.lookahead<=ib&&b===H)return sb;if(0===a.lookahead)break}if(a.match_length=0,a.lookahead>=hb&&a.strstart>0&&(e=a.strstart-1,d=g[e],d===g[++e]&&d===g[++e]&&d===g[++e])){f=a.strstart+ib;do;while(d===g[++e]&&d===g[++e]&&d===g[++e]&&d===g[++e]&&d===g[++e]&&d===g[++e]&&d===g[++e]&&d===g[++e]&&f>e);a.match_length=ib-(f-e),a.match_length>a.lookahead&&(a.match_length=a.lookahead)}if(a.match_length>=hb?(c=D._tr_tally(a,1,a.match_length-hb),a.lookahead-=a.match_length,a.strstart+=a.match_length,a.match_length=0):(c=D._tr_tally(a,0,a.window[a.strstart]),a.lookahead--,a.strstart++),c&&(h(a,!1),0===a.strm.avail_out))return sb}return a.insert=0,b===K?(h(a,!0),0===a.strm.avail_out?ub:vb):a.last_lit&&(h(a,!1),0===a.strm.avail_out)?sb:tb}function r(a,b){for(var c;;){if(0===a.lookahead&&(m(a),0===a.lookahead)){if(b===H)return sb;break}if(a.match_length=0,c=D._tr_tally(a,0,a.window[a.strstart]),a.lookahead--,a.strstart++,c&&(h(a,!1),0===a.strm.avail_out))return sb}return a.insert=0,b===K?(h(a,!0),0===a.strm.avail_out?ub:vb):a.last_lit&&(h(a,!1),0===a.strm.avail_out)?sb:tb}function s(a){a.window_size=2*a.w_size,f(a.head),a.max_lazy_match=B[a.level].max_lazy,a.good_match=B[a.level].good_length,a.nice_match=B[a.level].nice_length,a.max_chain_length=B[a.level].max_chain,a.strstart=0,a.block_start=0,a.lookahead=0,a.insert=0,a.match_length=a.prev_length=hb-1,a.match_available=0,a.ins_h=0}function t(){this.strm=null,this.status=0,this.pending_buf=null,this.pending_buf_size=0,this.pending_out=0,this.pending=0,this.wrap=0,this.gzhead=null,this.gzindex=0,this.method=Y,this.last_flush=-1,this.w_size=0,this.w_bits=0,this.w_mask=0,this.window=null,this.window_size=0,this.prev=null,this.head=null,this.ins_h=0,this.hash_size=0,this.hash_bits=0,this.hash_mask=0,this.hash_shift=0,this.block_start=0,this.match_length=0,this.prev_match=0,this.match_available=0,this.strstart=0,this.match_start=0,this.lookahead=0,this.prev_length=0,this.max_chain_length=0,this.max_lazy_match=0,this.level=0,this.strategy=0,this.good_match=0,this.nice_match=0,this.dyn_ltree=new C.Buf16(2*fb),this.dyn_dtree=new C.Buf16(2*(2*db+1)),this.bl_tree=new C.Buf16(2*(2*eb+1)),f(this.dyn_ltree),f(this.dyn_dtree),f(this.bl_tree),this.l_desc=null,this.d_desc=null,this.bl_desc=null,this.bl_count=new C.Buf16(gb+1),this.heap=new C.Buf16(2*cb+1),f(this.heap),this.heap_len=0,this.heap_max=0,this.depth=new C.Buf16(2*cb+1),f(this.depth),this.l_buf=0,this.lit_bufsize=0,this.last_lit=0,this.d_buf=0,this.opt_len=0,this.static_len=0,this.matches=0,this.insert=0,this.bi_buf=0,this.bi_valid=0}function u(a){var b;return a&&a.state?(a.total_in=a.total_out=0,a.data_type=X,b=a.state,b.pending=0,b.pending_out=0,b.wrap<0&&(b.wrap=-b.wrap),b.status=b.wrap?lb:qb,a.adler=2===b.wrap?0:1,b.last_flush=H,D._tr_init(b),M):d(a,O)}function v(a){var b=u(a);return b===M&&s(a.state),b}function w(a,b){return a&&a.state?2!==a.state.wrap?O:(a.state.gzhead=b,M):O}function x(a,b,c,e,f,g){if(!a)return O;var h=1;if(b===R&&(b=6),0>e?(h=0,e=-e):e>15&&(h=2,e-=16),1>f||f>Z||c!==Y||8>e||e>15||0>b||b>9||0>g||g>V)return d(a,O);8===e&&(e=9);var i=new t;return a.state=i,i.strm=a,i.wrap=h,i.gzhead=null,i.w_bits=e,i.w_size=1<<i.w_bits,i.w_mask=i.w_size-1,i.hash_bits=f+7,i.hash_size=1<<i.hash_bits,i.hash_mask=i.hash_size-1,i.hash_shift=~~((i.hash_bits+hb-1)/hb),i.window=new C.Buf8(2*i.w_size),i.head=new C.Buf16(i.hash_size),i.prev=new C.Buf16(i.w_size),i.lit_bufsize=1<<f+6,i.pending_buf_size=4*i.lit_bufsize,i.pending_buf=new C.Buf8(i.pending_buf_size),i.d_buf=i.lit_bufsize>>1,i.l_buf=3*i.lit_bufsize,i.level=b,i.strategy=g,i.method=c,v(a)}function y(a,b){return x(a,b,Y,$,_,W)}function z(a,b){var c,h,k,l;if(!a||!a.state||b>L||0>b)return a?d(a,O):O;if(h=a.state,!a.output||!a.input&&0!==a.avail_in||h.status===rb&&b!==K)return d(a,0===a.avail_out?Q:O);if(h.strm=a,c=h.last_flush,h.last_flush=b,h.status===lb)if(2===h.wrap)a.adler=0,i(h,31),i(h,139),i(h,8),h.gzhead?(i(h,(h.gzhead.text?1:0)+(h.gzhead.hcrc?2:0)+(h.gzhead.extra?4:0)+(h.gzhead.name?8:0)+(h.gzhead.comment?16:0)),i(h,255&h.gzhead.time),i(h,h.gzhead.time>>8&255),i(h,h.gzhead.time>>16&255),i(h,h.gzhead.time>>24&255),i(h,9===h.level?2:h.strategy>=T||h.level<2?4:0),i(h,255&h.gzhead.os),h.gzhead.extra&&h.gzhead.extra.length&&(i(h,255&h.gzhead.extra.length),i(h,h.gzhead.extra.length>>8&255)),h.gzhead.hcrc&&(a.adler=F(a.adler,h.pending_buf,h.pending,0)),h.gzindex=0,h.status=mb):(i(h,0),i(h,0),i(h,0),i(h,0),i(h,0),i(h,9===h.level?2:h.strategy>=T||h.level<2?4:0),i(h,wb),h.status=qb);else{var m=Y+(h.w_bits-8<<4)<<8,n=-1;n=h.strategy>=T||h.level<2?0:h.level<6?1:6===h.level?2:3,m|=n<<6,0!==h.strstart&&(m|=kb),m+=31-m%31,h.status=qb,j(h,m),0!==h.strstart&&(j(h,a.adler>>>16),j(h,65535&a.adler)),a.adler=1}if(h.status===mb)if(h.gzhead.extra){for(k=h.pending;h.gzindex<(65535&h.gzhead.extra.length)&&(h.pending!==h.pending_buf_size||(h.gzhead.hcrc&&h.pending>k&&(a.adler=F(a.adler,h.pending_buf,h.pending-k,k)),g(a),k=h.pending,h.pending!==h.pending_buf_size));)i(h,255&h.gzhead.extra[h.gzindex]),h.gzindex++;h.gzhead.hcrc&&h.pending>k&&(a.adler=F(a.adler,h.pending_buf,h.pending-k,k)),h.gzindex===h.gzhead.extra.length&&(h.gzindex=0,h.status=nb)}else h.status=nb;if(h.status===nb)if(h.gzhead.name){k=h.pending;do{if(h.pending===h.pending_buf_size&&(h.gzhead.hcrc&&h.pending>k&&(a.adler=F(a.adler,h.pending_buf,h.pending-k,k)),g(a),k=h.pending,h.pending===h.pending_buf_size)){l=1;break}l=h.gzindex<h.gzhead.name.length?255&h.gzhead.name.charCodeAt(h.gzindex++):0,i(h,l)}while(0!==l);h.gzhead.hcrc&&h.pending>k&&(a.adler=F(a.adler,h.pending_buf,h.pending-k,k)),0===l&&(h.gzindex=0,h.status=ob)}else h.status=ob;if(h.status===ob)if(h.gzhead.comment){k=h.pending;do{if(h.pending===h.pending_buf_size&&(h.gzhead.hcrc&&h.pending>k&&(a.adler=F(a.adler,h.pending_buf,h.pending-k,k)),g(a),k=h.pending,h.pending===h.pending_buf_size)){l=1;break}l=h.gzindex<h.gzhead.comment.length?255&h.gzhead.comment.charCodeAt(h.gzindex++):0,i(h,l)}while(0!==l);h.gzhead.hcrc&&h.pending>k&&(a.adler=F(a.adler,h.pending_buf,h.pending-k,k)),0===l&&(h.status=pb)}else h.status=pb;if(h.status===pb&&(h.gzhead.hcrc?(h.pending+2>h.pending_buf_size&&g(a),h.pending+2<=h.pending_buf_size&&(i(h,255&a.adler),i(h,a.adler>>8&255),a.adler=0,h.status=qb)):h.status=qb),0!==h.pending){if(g(a),0===a.avail_out)return h.last_flush=-1,M}else if(0===a.avail_in&&e(b)<=e(c)&&b!==K)return d(a,Q);if(h.status===rb&&0!==a.avail_in)return d(a,Q);if(0!==a.avail_in||0!==h.lookahead||b!==H&&h.status!==rb){var o=h.strategy===T?r(h,b):h.strategy===U?q(h,b):B[h.level].func(h,b);if((o===ub||o===vb)&&(h.status=rb),o===sb||o===ub)return 0===a.avail_out&&(h.last_flush=-1),M;if(o===tb&&(b===I?D._tr_align(h):b!==L&&(D._tr_stored_block(h,0,0,!1),b===J&&(f(h.head),0===h.lookahead&&(h.strstart=0,h.block_start=0,h.insert=0))),g(a),0===a.avail_out))return h.last_flush=-1,M}return b!==K?M:h.wrap<=0?N:(2===h.wrap?(i(h,255&a.adler),i(h,a.adler>>8&255),i(h,a.adler>>16&255),i(h,a.adler>>24&255),i(h,255&a.total_in),i(h,a.total_in>>8&255),i(h,a.total_in>>16&255),i(h,a.total_in>>24&255)):(j(h,a.adler>>>16),j(h,65535&a.adler)),g(a),h.wrap>0&&(h.wrap=-h.wrap),0!==h.pending?M:N)}function A(a){var b;return a&&a.state?(b=a.state.status,b!==lb&&b!==mb&&b!==nb&&b!==ob&&b!==pb&&b!==qb&&b!==rb?d(a,O):(a.state=null,b===qb?d(a,P):M)):O}var B,C=a("../utils/common"),D=a("./trees"),E=a("./adler32"),F=a("./crc32"),G=a("./messages"),H=0,I=1,J=3,K=4,L=5,M=0,N=1,O=-2,P=-3,Q=-5,R=-1,S=1,T=2,U=3,V=4,W=0,X=2,Y=8,Z=9,$=15,_=8,ab=29,bb=256,cb=bb+1+ab,db=30,eb=19,fb=2*cb+1,gb=15,hb=3,ib=258,jb=ib+hb+1,kb=32,lb=42,mb=69,nb=73,ob=91,pb=103,qb=113,rb=666,sb=1,tb=2,ub=3,vb=4,wb=3,xb=function(a,b,c,d,e){this.good_length=a,this.max_lazy=b,this.nice_length=c,this.max_chain=d,this.func=e};B=[new xb(0,0,0,0,n),new xb(4,4,8,4,o),new xb(4,5,16,8,o),new xb(4,6,32,32,o),new xb(4,4,16,16,p),new xb(8,16,32,32,p),new xb(8,16,128,128,p),new xb(8,32,128,256,p),new xb(32,128,258,1024,p),new xb(32,258,258,4096,p)],c.deflateInit=y,c.deflateInit2=x,c.deflateReset=v,c.deflateResetKeep=u,c.deflateSetHeader=w,c.deflate=z,c.deflateEnd=A,c.deflateInfo="pako deflate (from Nodeca project)"},{"../utils/common":27,"./adler32":29,"./crc32":31,"./messages":37,"./trees":38}],33:[function(a,b){"use strict";function c(){this.text=0,this.time=0,this.xflags=0,this.os=0,this.extra=null,this.extra_len=0,this.name="",this.comment="",this.hcrc=0,this.done=!1}b.exports=c},{}],34:[function(a,b){"use strict";var c=30,d=12;b.exports=function(a,b){var e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,A,B,C;e=a.state,f=a.next_in,B=a.input,g=f+(a.avail_in-5),h=a.next_out,C=a.output,i=h-(b-a.avail_out),j=h+(a.avail_out-257),k=e.dmax,l=e.wsize,m=e.whave,n=e.wnext,o=e.window,p=e.hold,q=e.bits,r=e.lencode,s=e.distcode,t=(1<<e.lenbits)-1,u=(1<<e.distbits)-1;a:do{15>q&&(p+=B[f++]<<q,q+=8,p+=B[f++]<<q,q+=8),v=r[p&t];b:for(;;){if(w=v>>>24,p>>>=w,q-=w,w=v>>>16&255,0===w)C[h++]=65535&v;else{if(!(16&w)){if(0===(64&w)){v=r[(65535&v)+(p&(1<<w)-1)];continue b}if(32&w){e.mode=d;break a}a.msg="invalid literal/length code",e.mode=c;break a}x=65535&v,w&=15,w&&(w>q&&(p+=B[f++]<<q,q+=8),x+=p&(1<<w)-1,p>>>=w,q-=w),15>q&&(p+=B[f++]<<q,q+=8,p+=B[f++]<<q,q+=8),v=s[p&u];c:for(;;){if(w=v>>>24,p>>>=w,q-=w,w=v>>>16&255,!(16&w)){if(0===(64&w)){v=s[(65535&v)+(p&(1<<w)-1)];continue c}a.msg="invalid distance code",e.mode=c;break a}if(y=65535&v,w&=15,w>q&&(p+=B[f++]<<q,q+=8,w>q&&(p+=B[f++]<<q,q+=8)),y+=p&(1<<w)-1,y>k){a.msg="invalid distance too far back",e.mode=c;break a}if(p>>>=w,q-=w,w=h-i,y>w){if(w=y-w,w>m&&e.sane){a.msg="invalid distance too far back",e.mode=c;break a}if(z=0,A=o,0===n){if(z+=l-w,x>w){x-=w;do C[h++]=o[z++];while(--w);z=h-y,A=C}}else if(w>n){if(z+=l+n-w,w-=n,x>w){x-=w;do C[h++]=o[z++];while(--w);if(z=0,x>n){w=n,x-=w;do C[h++]=o[z++];while(--w);z=h-y,A=C}}}else if(z+=n-w,x>w){x-=w;do C[h++]=o[z++];while(--w);z=h-y,A=C}for(;x>2;)C[h++]=A[z++],C[h++]=A[z++],C[h++]=A[z++],x-=3;x&&(C[h++]=A[z++],x>1&&(C[h++]=A[z++]))}else{z=h-y;do C[h++]=C[z++],C[h++]=C[z++],C[h++]=C[z++],x-=3;while(x>2);x&&(C[h++]=C[z++],x>1&&(C[h++]=C[z++]))}break}}break}}while(g>f&&j>h);x=q>>3,f-=x,q-=x<<3,p&=(1<<q)-1,a.next_in=f,a.next_out=h,a.avail_in=g>f?5+(g-f):5-(f-g),a.avail_out=j>h?257+(j-h):257-(h-j),e.hold=p,e.bits=q}},{}],35:[function(a,b,c){"use strict";function d(a){return(a>>>24&255)+(a>>>8&65280)+((65280&a)<<8)+((255&a)<<24)}function e(){this.mode=0,this.last=!1,this.wrap=0,this.havedict=!1,this.flags=0,this.dmax=0,this.check=0,this.total=0,this.head=null,this.wbits=0,this.wsize=0,this.whave=0,this.wnext=0,this.window=null,this.hold=0,this.bits=0,this.length=0,this.offset=0,this.extra=0,this.lencode=null,this.distcode=null,this.lenbits=0,this.distbits=0,this.ncode=0,this.nlen=0,this.ndist=0,this.have=0,this.next=null,this.lens=new r.Buf16(320),this.work=new r.Buf16(288),this.lendyn=null,this.distdyn=null,this.sane=0,this.back=0,this.was=0}function f(a){var b;return a&&a.state?(b=a.state,a.total_in=a.total_out=b.total=0,a.msg="",b.wrap&&(a.adler=1&b.wrap),b.mode=K,b.last=0,b.havedict=0,b.dmax=32768,b.head=null,b.hold=0,b.bits=0,b.lencode=b.lendyn=new r.Buf32(ob),b.distcode=b.distdyn=new r.Buf32(pb),b.sane=1,b.back=-1,C):F}function g(a){var b;return a&&a.state?(b=a.state,b.wsize=0,b.whave=0,b.wnext=0,f(a)):F}function h(a,b){var c,d;return a&&a.state?(d=a.state,0>b?(c=0,b=-b):(c=(b>>4)+1,48>b&&(b&=15)),b&&(8>b||b>15)?F:(null!==d.window&&d.wbits!==b&&(d.window=null),d.wrap=c,d.wbits=b,g(a))):F}function i(a,b){var c,d;return a?(d=new e,a.state=d,d.window=null,c=h(a,b),c!==C&&(a.state=null),c):F}function j(a){return i(a,rb)}function k(a){if(sb){var b;for(p=new r.Buf32(512),q=new r.Buf32(32),b=0;144>b;)a.lens[b++]=8;for(;256>b;)a.lens[b++]=9;for(;280>b;)a.lens[b++]=7;for(;288>b;)a.lens[b++]=8;for(v(x,a.lens,0,288,p,0,a.work,{bits:9}),b=0;32>b;)a.lens[b++]=5;v(y,a.lens,0,32,q,0,a.work,{bits:5}),sb=!1}a.lencode=p,a.lenbits=9,a.distcode=q,a.distbits=5}function l(a,b,c,d){var e,f=a.state;return null===f.window&&(f.wsize=1<<f.wbits,f.wnext=0,f.whave=0,f.window=new r.Buf8(f.wsize)),d>=f.wsize?(r.arraySet(f.window,b,c-f.wsize,f.wsize,0),f.wnext=0,f.whave=f.wsize):(e=f.wsize-f.wnext,e>d&&(e=d),r.arraySet(f.window,b,c-d,e,f.wnext),d-=e,d?(r.arraySet(f.window,b,c-d,d,0),f.wnext=d,f.whave=f.wsize):(f.wnext+=e,f.wnext===f.wsize&&(f.wnext=0),f.whave<f.wsize&&(f.whave+=e))),0}function m(a,b){var c,e,f,g,h,i,j,m,n,o,p,q,ob,pb,qb,rb,sb,tb,ub,vb,wb,xb,yb,zb,Ab=0,Bb=new r.Buf8(4),Cb=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15];if(!a||!a.state||!a.output||!a.input&&0!==a.avail_in)return F;c=a.state,c.mode===V&&(c.mode=W),h=a.next_out,f=a.output,j=a.avail_out,g=a.next_in,e=a.input,i=a.avail_in,m=c.hold,n=c.bits,o=i,p=j,xb=C;a:for(;;)switch(c.mode){case K:if(0===c.wrap){c.mode=W;break}for(;16>n;){if(0===i)break a;i--,m+=e[g++]<<n,n+=8}if(2&c.wrap&&35615===m){c.check=0,Bb[0]=255&m,Bb[1]=m>>>8&255,c.check=t(c.check,Bb,2,0),m=0,n=0,c.mode=L;break}if(c.flags=0,c.head&&(c.head.done=!1),!(1&c.wrap)||(((255&m)<<8)+(m>>8))%31){a.msg="incorrect header check",c.mode=lb;break}if((15&m)!==J){a.msg="unknown compression method",c.mode=lb;break}if(m>>>=4,n-=4,wb=(15&m)+8,0===c.wbits)c.wbits=wb;else if(wb>c.wbits){a.msg="invalid window size",c.mode=lb;break}c.dmax=1<<wb,a.adler=c.check=1,c.mode=512&m?T:V,m=0,n=0;break;case L:for(;16>n;){if(0===i)break a;i--,m+=e[g++]<<n,n+=8}if(c.flags=m,(255&c.flags)!==J){a.msg="unknown compression method",c.mode=lb;break}if(57344&c.flags){a.msg="unknown header flags set",c.mode=lb;break}c.head&&(c.head.text=m>>8&1),512&c.flags&&(Bb[0]=255&m,Bb[1]=m>>>8&255,c.check=t(c.check,Bb,2,0)),m=0,n=0,c.mode=M;case M:for(;32>n;){if(0===i)break a;i--,m+=e[g++]<<n,n+=8}c.head&&(c.head.time=m),512&c.flags&&(Bb[0]=255&m,Bb[1]=m>>>8&255,Bb[2]=m>>>16&255,Bb[3]=m>>>24&255,c.check=t(c.check,Bb,4,0)),m=0,n=0,c.mode=N;case N:for(;16>n;){if(0===i)break a;i--,m+=e[g++]<<n,n+=8}c.head&&(c.head.xflags=255&m,c.head.os=m>>8),512&c.flags&&(Bb[0]=255&m,Bb[1]=m>>>8&255,c.check=t(c.check,Bb,2,0)),m=0,n=0,c.mode=O;case O:if(1024&c.flags){for(;16>n;){if(0===i)break a;i--,m+=e[g++]<<n,n+=8}c.length=m,c.head&&(c.head.extra_len=m),512&c.flags&&(Bb[0]=255&m,Bb[1]=m>>>8&255,c.check=t(c.check,Bb,2,0)),m=0,n=0}else c.head&&(c.head.extra=null);c.mode=P;case P:if(1024&c.flags&&(q=c.length,q>i&&(q=i),q&&(c.head&&(wb=c.head.extra_len-c.length,c.head.extra||(c.head.extra=new Array(c.head.extra_len)),r.arraySet(c.head.extra,e,g,q,wb)),512&c.flags&&(c.check=t(c.check,e,q,g)),i-=q,g+=q,c.length-=q),c.length))break a;c.length=0,c.mode=Q;case Q:if(2048&c.flags){if(0===i)break a;q=0;do wb=e[g+q++],c.head&&wb&&c.length<65536&&(c.head.name+=String.fromCharCode(wb));while(wb&&i>q);if(512&c.flags&&(c.check=t(c.check,e,q,g)),i-=q,g+=q,wb)break a}else c.head&&(c.head.name=null);c.length=0,c.mode=R;case R:if(4096&c.flags){if(0===i)break a;q=0;do wb=e[g+q++],c.head&&wb&&c.length<65536&&(c.head.comment+=String.fromCharCode(wb));while(wb&&i>q);if(512&c.flags&&(c.check=t(c.check,e,q,g)),i-=q,g+=q,wb)break a}else c.head&&(c.head.comment=null);c.mode=S;case S:if(512&c.flags){for(;16>n;){if(0===i)break a;i--,m+=e[g++]<<n,n+=8}if(m!==(65535&c.check)){a.msg="header crc mismatch",c.mode=lb;break}m=0,n=0}c.head&&(c.head.hcrc=c.flags>>9&1,c.head.done=!0),a.adler=c.check=0,c.mode=V;break;case T:for(;32>n;){if(0===i)break a;i--,m+=e[g++]<<n,n+=8}a.adler=c.check=d(m),m=0,n=0,c.mode=U;case U:if(0===c.havedict)return a.next_out=h,a.avail_out=j,a.next_in=g,a.avail_in=i,c.hold=m,c.bits=n,E;a.adler=c.check=1,c.mode=V;case V:if(b===A||b===B)break a;case W:if(c.last){m>>>=7&n,n-=7&n,c.mode=ib;break}for(;3>n;){if(0===i)break a;i--,m+=e[g++]<<n,n+=8}switch(c.last=1&m,m>>>=1,n-=1,3&m){case 0:c.mode=X;break;case 1:if(k(c),c.mode=bb,b===B){m>>>=2,n-=2;break a}break;case 2:c.mode=$;break;case 3:a.msg="invalid block type",c.mode=lb}m>>>=2,n-=2;break;case X:for(m>>>=7&n,n-=7&n;32>n;){if(0===i)break a;i--,m+=e[g++]<<n,n+=8}if((65535&m)!==(m>>>16^65535)){a.msg="invalid stored block lengths",c.mode=lb;break}if(c.length=65535&m,m=0,n=0,c.mode=Y,b===B)break a;case Y:c.mode=Z;case Z:if(q=c.length){if(q>i&&(q=i),q>j&&(q=j),0===q)break a;r.arraySet(f,e,g,q,h),i-=q,g+=q,j-=q,h+=q,c.length-=q;break}c.mode=V;break;case $:for(;14>n;){if(0===i)break a;i--,m+=e[g++]<<n,n+=8}if(c.nlen=(31&m)+257,m>>>=5,n-=5,c.ndist=(31&m)+1,m>>>=5,n-=5,c.ncode=(15&m)+4,m>>>=4,n-=4,c.nlen>286||c.ndist>30){a.msg="too many length or distance symbols",c.mode=lb;break}c.have=0,c.mode=_;case _:for(;c.have<c.ncode;){for(;3>n;){if(0===i)break a;i--,m+=e[g++]<<n,n+=8}c.lens[Cb[c.have++]]=7&m,m>>>=3,n-=3}for(;c.have<19;)c.lens[Cb[c.have++]]=0;if(c.lencode=c.lendyn,c.lenbits=7,yb={bits:c.lenbits},xb=v(w,c.lens,0,19,c.lencode,0,c.work,yb),c.lenbits=yb.bits,xb){a.msg="invalid code lengths set",c.mode=lb;break}c.have=0,c.mode=ab;case ab:for(;c.have<c.nlen+c.ndist;){for(;Ab=c.lencode[m&(1<<c.lenbits)-1],qb=Ab>>>24,rb=Ab>>>16&255,sb=65535&Ab,!(n>=qb);){if(0===i)break a;i--,m+=e[g++]<<n,n+=8}if(16>sb)m>>>=qb,n-=qb,c.lens[c.have++]=sb;else{if(16===sb){for(zb=qb+2;zb>n;){if(0===i)break a;i--,m+=e[g++]<<n,n+=8}if(m>>>=qb,n-=qb,0===c.have){a.msg="invalid bit length repeat",c.mode=lb;break}wb=c.lens[c.have-1],q=3+(3&m),m>>>=2,n-=2}else if(17===sb){for(zb=qb+3;zb>n;){if(0===i)break a;i--,m+=e[g++]<<n,n+=8}m>>>=qb,n-=qb,wb=0,q=3+(7&m),m>>>=3,n-=3}else{for(zb=qb+7;zb>n;){if(0===i)break a;i--,m+=e[g++]<<n,n+=8}m>>>=qb,n-=qb,wb=0,q=11+(127&m),m>>>=7,n-=7}if(c.have+q>c.nlen+c.ndist){a.msg="invalid bit length repeat",c.mode=lb;break}for(;q--;)c.lens[c.have++]=wb}}if(c.mode===lb)break;if(0===c.lens[256]){a.msg="invalid code -- missing end-of-block",c.mode=lb;break}if(c.lenbits=9,yb={bits:c.lenbits},xb=v(x,c.lens,0,c.nlen,c.lencode,0,c.work,yb),c.lenbits=yb.bits,xb){a.msg="invalid literal/lengths set",c.mode=lb;break}if(c.distbits=6,c.distcode=c.distdyn,yb={bits:c.distbits},xb=v(y,c.lens,c.nlen,c.ndist,c.distcode,0,c.work,yb),c.distbits=yb.bits,xb){a.msg="invalid distances set",c.mode=lb;break}if(c.mode=bb,b===B)break a;case bb:c.mode=cb;case cb:if(i>=6&&j>=258){a.next_out=h,a.avail_out=j,a.next_in=g,a.avail_in=i,c.hold=m,c.bits=n,u(a,p),h=a.next_out,f=a.output,j=a.avail_out,g=a.next_in,e=a.input,i=a.avail_in,m=c.hold,n=c.bits,c.mode===V&&(c.back=-1);
+break}for(c.back=0;Ab=c.lencode[m&(1<<c.lenbits)-1],qb=Ab>>>24,rb=Ab>>>16&255,sb=65535&Ab,!(n>=qb);){if(0===i)break a;i--,m+=e[g++]<<n,n+=8}if(rb&&0===(240&rb)){for(tb=qb,ub=rb,vb=sb;Ab=c.lencode[vb+((m&(1<<tb+ub)-1)>>tb)],qb=Ab>>>24,rb=Ab>>>16&255,sb=65535&Ab,!(n>=tb+qb);){if(0===i)break a;i--,m+=e[g++]<<n,n+=8}m>>>=tb,n-=tb,c.back+=tb}if(m>>>=qb,n-=qb,c.back+=qb,c.length=sb,0===rb){c.mode=hb;break}if(32&rb){c.back=-1,c.mode=V;break}if(64&rb){a.msg="invalid literal/length code",c.mode=lb;break}c.extra=15&rb,c.mode=db;case db:if(c.extra){for(zb=c.extra;zb>n;){if(0===i)break a;i--,m+=e[g++]<<n,n+=8}c.length+=m&(1<<c.extra)-1,m>>>=c.extra,n-=c.extra,c.back+=c.extra}c.was=c.length,c.mode=eb;case eb:for(;Ab=c.distcode[m&(1<<c.distbits)-1],qb=Ab>>>24,rb=Ab>>>16&255,sb=65535&Ab,!(n>=qb);){if(0===i)break a;i--,m+=e[g++]<<n,n+=8}if(0===(240&rb)){for(tb=qb,ub=rb,vb=sb;Ab=c.distcode[vb+((m&(1<<tb+ub)-1)>>tb)],qb=Ab>>>24,rb=Ab>>>16&255,sb=65535&Ab,!(n>=tb+qb);){if(0===i)break a;i--,m+=e[g++]<<n,n+=8}m>>>=tb,n-=tb,c.back+=tb}if(m>>>=qb,n-=qb,c.back+=qb,64&rb){a.msg="invalid distance code",c.mode=lb;break}c.offset=sb,c.extra=15&rb,c.mode=fb;case fb:if(c.extra){for(zb=c.extra;zb>n;){if(0===i)break a;i--,m+=e[g++]<<n,n+=8}c.offset+=m&(1<<c.extra)-1,m>>>=c.extra,n-=c.extra,c.back+=c.extra}if(c.offset>c.dmax){a.msg="invalid distance too far back",c.mode=lb;break}c.mode=gb;case gb:if(0===j)break a;if(q=p-j,c.offset>q){if(q=c.offset-q,q>c.whave&&c.sane){a.msg="invalid distance too far back",c.mode=lb;break}q>c.wnext?(q-=c.wnext,ob=c.wsize-q):ob=c.wnext-q,q>c.length&&(q=c.length),pb=c.window}else pb=f,ob=h-c.offset,q=c.length;q>j&&(q=j),j-=q,c.length-=q;do f[h++]=pb[ob++];while(--q);0===c.length&&(c.mode=cb);break;case hb:if(0===j)break a;f[h++]=c.length,j--,c.mode=cb;break;case ib:if(c.wrap){for(;32>n;){if(0===i)break a;i--,m|=e[g++]<<n,n+=8}if(p-=j,a.total_out+=p,c.total+=p,p&&(a.adler=c.check=c.flags?t(c.check,f,p,h-p):s(c.check,f,p,h-p)),p=j,(c.flags?m:d(m))!==c.check){a.msg="incorrect data check",c.mode=lb;break}m=0,n=0}c.mode=jb;case jb:if(c.wrap&&c.flags){for(;32>n;){if(0===i)break a;i--,m+=e[g++]<<n,n+=8}if(m!==(4294967295&c.total)){a.msg="incorrect length check",c.mode=lb;break}m=0,n=0}c.mode=kb;case kb:xb=D;break a;case lb:xb=G;break a;case mb:return H;case nb:default:return F}return a.next_out=h,a.avail_out=j,a.next_in=g,a.avail_in=i,c.hold=m,c.bits=n,(c.wsize||p!==a.avail_out&&c.mode<lb&&(c.mode<ib||b!==z))&&l(a,a.output,a.next_out,p-a.avail_out)?(c.mode=mb,H):(o-=a.avail_in,p-=a.avail_out,a.total_in+=o,a.total_out+=p,c.total+=p,c.wrap&&p&&(a.adler=c.check=c.flags?t(c.check,f,p,a.next_out-p):s(c.check,f,p,a.next_out-p)),a.data_type=c.bits+(c.last?64:0)+(c.mode===V?128:0)+(c.mode===bb||c.mode===Y?256:0),(0===o&&0===p||b===z)&&xb===C&&(xb=I),xb)}function n(a){if(!a||!a.state)return F;var b=a.state;return b.window&&(b.window=null),a.state=null,C}function o(a,b){var c;return a&&a.state?(c=a.state,0===(2&c.wrap)?F:(c.head=b,b.done=!1,C)):F}var p,q,r=a("../utils/common"),s=a("./adler32"),t=a("./crc32"),u=a("./inffast"),v=a("./inftrees"),w=0,x=1,y=2,z=4,A=5,B=6,C=0,D=1,E=2,F=-2,G=-3,H=-4,I=-5,J=8,K=1,L=2,M=3,N=4,O=5,P=6,Q=7,R=8,S=9,T=10,U=11,V=12,W=13,X=14,Y=15,Z=16,$=17,_=18,ab=19,bb=20,cb=21,db=22,eb=23,fb=24,gb=25,hb=26,ib=27,jb=28,kb=29,lb=30,mb=31,nb=32,ob=852,pb=592,qb=15,rb=qb,sb=!0;c.inflateReset=g,c.inflateReset2=h,c.inflateResetKeep=f,c.inflateInit=j,c.inflateInit2=i,c.inflate=m,c.inflateEnd=n,c.inflateGetHeader=o,c.inflateInfo="pako inflate (from Nodeca project)"},{"../utils/common":27,"./adler32":29,"./crc32":31,"./inffast":34,"./inftrees":36}],36:[function(a,b){"use strict";var c=a("../utils/common"),d=15,e=852,f=592,g=0,h=1,i=2,j=[3,4,5,6,7,8,9,10,11,13,15,17,19,23,27,31,35,43,51,59,67,83,99,115,131,163,195,227,258,0,0],k=[16,16,16,16,16,16,16,16,17,17,17,17,18,18,18,18,19,19,19,19,20,20,20,20,21,21,21,21,16,72,78],l=[1,2,3,4,5,7,9,13,17,25,33,49,65,97,129,193,257,385,513,769,1025,1537,2049,3073,4097,6145,8193,12289,16385,24577,0,0],m=[16,16,16,16,17,17,18,18,19,19,20,20,21,21,22,22,23,23,24,24,25,25,26,26,27,27,28,28,29,29,64,64];b.exports=function(a,b,n,o,p,q,r,s){var t,u,v,w,x,y,z,A,B,C=s.bits,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=null,O=0,P=new c.Buf16(d+1),Q=new c.Buf16(d+1),R=null,S=0;for(D=0;d>=D;D++)P[D]=0;for(E=0;o>E;E++)P[b[n+E]]++;for(H=C,G=d;G>=1&&0===P[G];G--);if(H>G&&(H=G),0===G)return p[q++]=20971520,p[q++]=20971520,s.bits=1,0;for(F=1;G>F&&0===P[F];F++);for(F>H&&(H=F),K=1,D=1;d>=D;D++)if(K<<=1,K-=P[D],0>K)return-1;if(K>0&&(a===g||1!==G))return-1;for(Q[1]=0,D=1;d>D;D++)Q[D+1]=Q[D]+P[D];for(E=0;o>E;E++)0!==b[n+E]&&(r[Q[b[n+E]]++]=E);if(a===g?(N=R=r,y=19):a===h?(N=j,O-=257,R=k,S-=257,y=256):(N=l,R=m,y=-1),M=0,E=0,D=F,x=q,I=H,J=0,v=-1,L=1<<H,w=L-1,a===h&&L>e||a===i&&L>f)return 1;for(var T=0;;){T++,z=D-J,r[E]<y?(A=0,B=r[E]):r[E]>y?(A=R[S+r[E]],B=N[O+r[E]]):(A=96,B=0),t=1<<D-J,u=1<<I,F=u;do u-=t,p[x+(M>>J)+u]=z<<24|A<<16|B|0;while(0!==u);for(t=1<<D-1;M&t;)t>>=1;if(0!==t?(M&=t-1,M+=t):M=0,E++,0===--P[D]){if(D===G)break;D=b[n+r[E]]}if(D>H&&(M&w)!==v){for(0===J&&(J=H),x+=F,I=D-J,K=1<<I;G>I+J&&(K-=P[I+J],!(0>=K));)I++,K<<=1;if(L+=1<<I,a===h&&L>e||a===i&&L>f)return 1;v=M&w,p[v]=H<<24|I<<16|x-q|0}}return 0!==M&&(p[x+M]=D-J<<24|64<<16|0),s.bits=H,0}},{"../utils/common":27}],37:[function(a,b){"use strict";b.exports={2:"need dictionary",1:"stream end",0:"","-1":"file error","-2":"stream error","-3":"data error","-4":"insufficient memory","-5":"buffer error","-6":"incompatible version"}},{}],38:[function(a,b,c){"use strict";function d(a){for(var b=a.length;--b>=0;)a[b]=0}function e(a){return 256>a?gb[a]:gb[256+(a>>>7)]}function f(a,b){a.pending_buf[a.pending++]=255&b,a.pending_buf[a.pending++]=b>>>8&255}function g(a,b,c){a.bi_valid>V-c?(a.bi_buf|=b<<a.bi_valid&65535,f(a,a.bi_buf),a.bi_buf=b>>V-a.bi_valid,a.bi_valid+=c-V):(a.bi_buf|=b<<a.bi_valid&65535,a.bi_valid+=c)}function h(a,b,c){g(a,c[2*b],c[2*b+1])}function i(a,b){var c=0;do c|=1&a,a>>>=1,c<<=1;while(--b>0);return c>>>1}function j(a){16===a.bi_valid?(f(a,a.bi_buf),a.bi_buf=0,a.bi_valid=0):a.bi_valid>=8&&(a.pending_buf[a.pending++]=255&a.bi_buf,a.bi_buf>>=8,a.bi_valid-=8)}function k(a,b){var c,d,e,f,g,h,i=b.dyn_tree,j=b.max_code,k=b.stat_desc.static_tree,l=b.stat_desc.has_stree,m=b.stat_desc.extra_bits,n=b.stat_desc.extra_base,o=b.stat_desc.max_length,p=0;for(f=0;U>=f;f++)a.bl_count[f]=0;for(i[2*a.heap[a.heap_max]+1]=0,c=a.heap_max+1;T>c;c++)d=a.heap[c],f=i[2*i[2*d+1]+1]+1,f>o&&(f=o,p++),i[2*d+1]=f,d>j||(a.bl_count[f]++,g=0,d>=n&&(g=m[d-n]),h=i[2*d],a.opt_len+=h*(f+g),l&&(a.static_len+=h*(k[2*d+1]+g)));if(0!==p){do{for(f=o-1;0===a.bl_count[f];)f--;a.bl_count[f]--,a.bl_count[f+1]+=2,a.bl_count[o]--,p-=2}while(p>0);for(f=o;0!==f;f--)for(d=a.bl_count[f];0!==d;)e=a.heap[--c],e>j||(i[2*e+1]!==f&&(a.opt_len+=(f-i[2*e+1])*i[2*e],i[2*e+1]=f),d--)}}function l(a,b,c){var d,e,f=new Array(U+1),g=0;for(d=1;U>=d;d++)f[d]=g=g+c[d-1]<<1;for(e=0;b>=e;e++){var h=a[2*e+1];0!==h&&(a[2*e]=i(f[h]++,h))}}function m(){var a,b,c,d,e,f=new Array(U+1);for(c=0,d=0;O-1>d;d++)for(ib[d]=c,a=0;a<1<<_[d];a++)hb[c++]=d;for(hb[c-1]=d,e=0,d=0;16>d;d++)for(jb[d]=e,a=0;a<1<<ab[d];a++)gb[e++]=d;for(e>>=7;R>d;d++)for(jb[d]=e<<7,a=0;a<1<<ab[d]-7;a++)gb[256+e++]=d;for(b=0;U>=b;b++)f[b]=0;for(a=0;143>=a;)eb[2*a+1]=8,a++,f[8]++;for(;255>=a;)eb[2*a+1]=9,a++,f[9]++;for(;279>=a;)eb[2*a+1]=7,a++,f[7]++;for(;287>=a;)eb[2*a+1]=8,a++,f[8]++;for(l(eb,Q+1,f),a=0;R>a;a++)fb[2*a+1]=5,fb[2*a]=i(a,5);kb=new nb(eb,_,P+1,Q,U),lb=new nb(fb,ab,0,R,U),mb=new nb(new Array(0),bb,0,S,W)}function n(a){var b;for(b=0;Q>b;b++)a.dyn_ltree[2*b]=0;for(b=0;R>b;b++)a.dyn_dtree[2*b]=0;for(b=0;S>b;b++)a.bl_tree[2*b]=0;a.dyn_ltree[2*X]=1,a.opt_len=a.static_len=0,a.last_lit=a.matches=0}function o(a){a.bi_valid>8?f(a,a.bi_buf):a.bi_valid>0&&(a.pending_buf[a.pending++]=a.bi_buf),a.bi_buf=0,a.bi_valid=0}function p(a,b,c,d){o(a),d&&(f(a,c),f(a,~c)),E.arraySet(a.pending_buf,a.window,b,c,a.pending),a.pending+=c}function q(a,b,c,d){var e=2*b,f=2*c;return a[e]<a[f]||a[e]===a[f]&&d[b]<=d[c]}function r(a,b,c){for(var d=a.heap[c],e=c<<1;e<=a.heap_len&&(e<a.heap_len&&q(b,a.heap[e+1],a.heap[e],a.depth)&&e++,!q(b,d,a.heap[e],a.depth));)a.heap[c]=a.heap[e],c=e,e<<=1;a.heap[c]=d}function s(a,b,c){var d,f,i,j,k=0;if(0!==a.last_lit)do d=a.pending_buf[a.d_buf+2*k]<<8|a.pending_buf[a.d_buf+2*k+1],f=a.pending_buf[a.l_buf+k],k++,0===d?h(a,f,b):(i=hb[f],h(a,i+P+1,b),j=_[i],0!==j&&(f-=ib[i],g(a,f,j)),d--,i=e(d),h(a,i,c),j=ab[i],0!==j&&(d-=jb[i],g(a,d,j)));while(k<a.last_lit);h(a,X,b)}function t(a,b){var c,d,e,f=b.dyn_tree,g=b.stat_desc.static_tree,h=b.stat_desc.has_stree,i=b.stat_desc.elems,j=-1;for(a.heap_len=0,a.heap_max=T,c=0;i>c;c++)0!==f[2*c]?(a.heap[++a.heap_len]=j=c,a.depth[c]=0):f[2*c+1]=0;for(;a.heap_len<2;)e=a.heap[++a.heap_len]=2>j?++j:0,f[2*e]=1,a.depth[e]=0,a.opt_len--,h&&(a.static_len-=g[2*e+1]);for(b.max_code=j,c=a.heap_len>>1;c>=1;c--)r(a,f,c);e=i;do c=a.heap[1],a.heap[1]=a.heap[a.heap_len--],r(a,f,1),d=a.heap[1],a.heap[--a.heap_max]=c,a.heap[--a.heap_max]=d,f[2*e]=f[2*c]+f[2*d],a.depth[e]=(a.depth[c]>=a.depth[d]?a.depth[c]:a.depth[d])+1,f[2*c+1]=f[2*d+1]=e,a.heap[1]=e++,r(a,f,1);while(a.heap_len>=2);a.heap[--a.heap_max]=a.heap[1],k(a,b),l(f,j,a.bl_count)}function u(a,b,c){var d,e,f=-1,g=b[1],h=0,i=7,j=4;for(0===g&&(i=138,j=3),b[2*(c+1)+1]=65535,d=0;c>=d;d++)e=g,g=b[2*(d+1)+1],++h<i&&e===g||(j>h?a.bl_tree[2*e]+=h:0!==e?(e!==f&&a.bl_tree[2*e]++,a.bl_tree[2*Y]++):10>=h?a.bl_tree[2*Z]++:a.bl_tree[2*$]++,h=0,f=e,0===g?(i=138,j=3):e===g?(i=6,j=3):(i=7,j=4))}function v(a,b,c){var d,e,f=-1,i=b[1],j=0,k=7,l=4;for(0===i&&(k=138,l=3),d=0;c>=d;d++)if(e=i,i=b[2*(d+1)+1],!(++j<k&&e===i)){if(l>j){do h(a,e,a.bl_tree);while(0!==--j)}else 0!==e?(e!==f&&(h(a,e,a.bl_tree),j--),h(a,Y,a.bl_tree),g(a,j-3,2)):10>=j?(h(a,Z,a.bl_tree),g(a,j-3,3)):(h(a,$,a.bl_tree),g(a,j-11,7));j=0,f=e,0===i?(k=138,l=3):e===i?(k=6,l=3):(k=7,l=4)}}function w(a){var b;for(u(a,a.dyn_ltree,a.l_desc.max_code),u(a,a.dyn_dtree,a.d_desc.max_code),t(a,a.bl_desc),b=S-1;b>=3&&0===a.bl_tree[2*cb[b]+1];b--);return a.opt_len+=3*(b+1)+5+5+4,b}function x(a,b,c,d){var e;for(g(a,b-257,5),g(a,c-1,5),g(a,d-4,4),e=0;d>e;e++)g(a,a.bl_tree[2*cb[e]+1],3);v(a,a.dyn_ltree,b-1),v(a,a.dyn_dtree,c-1)}function y(a){var b,c=4093624447;for(b=0;31>=b;b++,c>>>=1)if(1&c&&0!==a.dyn_ltree[2*b])return G;if(0!==a.dyn_ltree[18]||0!==a.dyn_ltree[20]||0!==a.dyn_ltree[26])return H;for(b=32;P>b;b++)if(0!==a.dyn_ltree[2*b])return H;return G}function z(a){pb||(m(),pb=!0),a.l_desc=new ob(a.dyn_ltree,kb),a.d_desc=new ob(a.dyn_dtree,lb),a.bl_desc=new ob(a.bl_tree,mb),a.bi_buf=0,a.bi_valid=0,n(a)}function A(a,b,c,d){g(a,(J<<1)+(d?1:0),3),p(a,b,c,!0)}function B(a){g(a,K<<1,3),h(a,X,eb),j(a)}function C(a,b,c,d){var e,f,h=0;a.level>0?(a.strm.data_type===I&&(a.strm.data_type=y(a)),t(a,a.l_desc),t(a,a.d_desc),h=w(a),e=a.opt_len+3+7>>>3,f=a.static_len+3+7>>>3,e>=f&&(e=f)):e=f=c+5,e>=c+4&&-1!==b?A(a,b,c,d):a.strategy===F||f===e?(g(a,(K<<1)+(d?1:0),3),s(a,eb,fb)):(g(a,(L<<1)+(d?1:0),3),x(a,a.l_desc.max_code+1,a.d_desc.max_code+1,h+1),s(a,a.dyn_ltree,a.dyn_dtree)),n(a),d&&o(a)}function D(a,b,c){return a.pending_buf[a.d_buf+2*a.last_lit]=b>>>8&255,a.pending_buf[a.d_buf+2*a.last_lit+1]=255&b,a.pending_buf[a.l_buf+a.last_lit]=255&c,a.last_lit++,0===b?a.dyn_ltree[2*c]++:(a.matches++,b--,a.dyn_ltree[2*(hb[c]+P+1)]++,a.dyn_dtree[2*e(b)]++),a.last_lit===a.lit_bufsize-1}var E=a("../utils/common"),F=4,G=0,H=1,I=2,J=0,K=1,L=2,M=3,N=258,O=29,P=256,Q=P+1+O,R=30,S=19,T=2*Q+1,U=15,V=16,W=7,X=256,Y=16,Z=17,$=18,_=[0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0],ab=[0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13],bb=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7],cb=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15],db=512,eb=new Array(2*(Q+2));d(eb);var fb=new Array(2*R);d(fb);var gb=new Array(db);d(gb);var hb=new Array(N-M+1);d(hb);var ib=new Array(O);d(ib);var jb=new Array(R);d(jb);var kb,lb,mb,nb=function(a,b,c,d,e){this.static_tree=a,this.extra_bits=b,this.extra_base=c,this.elems=d,this.max_length=e,this.has_stree=a&&a.length},ob=function(a,b){this.dyn_tree=a,this.max_code=0,this.stat_desc=b},pb=!1;c._tr_init=z,c._tr_stored_block=A,c._tr_flush_block=C,c._tr_tally=D,c._tr_align=B},{"../utils/common":27}],39:[function(a,b){"use strict";function c(){this.input=null,this.next_in=0,this.avail_in=0,this.total_in=0,this.output=null,this.next_out=0,this.avail_out=0,this.total_out=0,this.msg="",this.state=null,this.data_type=2,this.adler=0}b.exports=c},{}]},{},[9])(9)});
+
 /*!
    Copyright 2008-2020 SpryMedia Ltd.
 
@@ -175,7 +190,7 @@ sAjaxSource:null,sDom:"lfrtip",searchDelay:null,sPaginationType:"simple_numbers"
 aoPreSearchCols:[],aaSorting:null,aaSortingFixed:[],asStripeClasses:null,asDestroyStripes:[],sDestroyWidth:0,aoRowCallback:[],aoHeaderCallback:[],aoFooterCallback:[],aoDrawCallback:[],aoRowCreatedCallback:[],aoPreDrawCallback:[],aoInitComplete:[],aoStateSaveParams:[],aoStateLoadParams:[],aoStateLoaded:[],sTableId:"",nTable:null,nTHead:null,nTFoot:null,nTBody:null,nTableWrapper:null,bDeferLoading:!1,bInitialised:!1,aoOpenRows:[],sDom:null,searchDelay:null,sPaginationType:"two_button",iStateDuration:0,
 aoStateSave:[],aoStateLoad:[],oSavedState:null,oLoadedState:null,sAjaxSource:null,sAjaxDataProp:null,bAjaxDataGet:!0,jqXHR:null,json:n,oAjaxData:n,fnServerData:null,aoServerParams:[],sServerMethod:null,fnFormatNumber:null,aLengthMenu:null,iDraw:0,bDrawing:!1,iDrawError:-1,_iDisplayLength:10,_iDisplayStart:0,_iRecordsTotal:0,_iRecordsDisplay:0,oClasses:{},bFiltered:!1,bSorted:!1,bSortCellsTop:null,oInit:null,aoDestroyCallback:[],fnRecordsTotal:function(){return"ssp"==I(this)?1*this._iRecordsTotal:
 this.aiDisplayMaster.length},fnRecordsDisplay:function(){return"ssp"==I(this)?1*this._iRecordsDisplay:this.aiDisplay.length},fnDisplayEnd:function(){var a=this._iDisplayLength,b=this._iDisplayStart,c=b+a,d=this.aiDisplay.length,e=this.oFeatures,f=e.bPaginate;return e.bServerSide?!1===f||-1===a?b+d:Math.min(b+a,this._iRecordsDisplay):!f||c>d||-1===a?d:c},oInstance:null,sInstance:null,iTabIndex:0,nScrollHead:null,nScrollFoot:null,aLastSort:[],oPlugins:{},rowIdFn:null,rowId:null};q.ext=C={buttons:{},
-classes:{},build:"bs4/dt-1.10.21/b-1.6.2/r-2.2.5/sl-1.3.1",errMode:"alert",feature:[],search:[],selector:{cell:[],column:[],row:[]},internal:{},legacy:{ajax:null},pager:{},renderer:{pageButton:{},header:{}},order:{},type:{detect:[],search:{},order:{}},_unique:0,fnVersionCheck:q.fnVersionCheck,iApiIndex:0,oJUIClasses:{},sVersion:q.version};f.extend(C,{afnFiltering:C.search,aTypes:C.type.detect,ofnSearch:C.type.search,oSort:C.type.order,afnSortData:C.order,aoFeatures:C.feature,oApi:C.internal,oStdClasses:C.classes,oPagination:C.pager});
+classes:{},build:"bs4/jszip-2.5.0/dt-1.10.21/b-1.6.2/b-html5-1.6.2/r-2.2.5/sl-1.3.1",errMode:"alert",feature:[],search:[],selector:{cell:[],column:[],row:[]},internal:{},legacy:{ajax:null},pager:{},renderer:{pageButton:{},header:{}},order:{},type:{detect:[],search:{},order:{}},_unique:0,fnVersionCheck:q.fnVersionCheck,iApiIndex:0,oJUIClasses:{},sVersion:q.version};f.extend(C,{afnFiltering:C.search,aTypes:C.type.detect,ofnSearch:C.type.search,oSort:C.type.order,afnSortData:C.order,aoFeatures:C.feature,oApi:C.internal,oStdClasses:C.classes,oPagination:C.pager});
 f.extend(q.ext.classes,{sTable:"dataTable",sNoFooter:"no-footer",sPageButton:"paginate_button",sPageButtonActive:"current",sPageButtonDisabled:"disabled",sStripeOdd:"odd",sStripeEven:"even",sRowEmpty:"dataTables_empty",sWrapper:"dataTables_wrapper",sFilter:"dataTables_filter",sInfo:"dataTables_info",sPaging:"dataTables_paginate paging_",sLength:"dataTables_length",sProcessing:"dataTables_processing",sSortAsc:"sorting_asc",sSortDesc:"sorting_desc",sSortable:"sorting",sSortableAsc:"sorting_asc_disabled",
 sSortableDesc:"sorting_desc_disabled",sSortableNone:"sorting_disabled",sSortColumn:"sorting_",sFilterInput:"",sLengthSelect:"",sScrollWrapper:"dataTables_scroll",sScrollHead:"dataTables_scrollHead",sScrollHeadInner:"dataTables_scrollHeadInner",sScrollBody:"dataTables_scrollBody",sScrollFoot:"dataTables_scrollFoot",sScrollFootInner:"dataTables_scrollFootInner",sHeaderTH:"",sFooterTH:"",sSortJUIAsc:"",sSortJUIDesc:"",sSortJUI:"",sSortJUIAscAllowed:"",sSortJUIDescAllowed:"",sSortJUIWrapper:"",sSortIcon:"",
 sJUIHeader:"",sJUIFooter:""});var Ob=q.ext.pager;f.extend(Ob,{simple:function(a,b){return["previous","next"]},full:function(a,b){return["first","previous","next","last"]},numbers:function(a,b){return[ja(a,b)]},simple_numbers:function(a,b){return["previous",ja(a,b),"next"]},full_numbers:function(a,b){return["first","previous",ja(a,b),"next","last"]},first_last_numbers:function(a,b){return["first",ja(a,b),"last"]},_numbers:ja,numbers_length:7});f.extend(!0,q.ext.renderer,{pageButton:{_:function(a,b,
@@ -259,6 +274,44 @@ a.namespace&&(a=b.oInit.buttons||m.defaults.buttons)&&!b._buttons&&(new r(b,a)).
 button:{className:"btn btn-secondary"},collection:{tag:"div",className:"dropdown-menu",button:{tag:"a",className:"dt-button dropdown-item",active:"active",disabled:"disabled"}}},buttonCreated:function(a,b){return a.buttons?c('<div class="btn-group"/>').append(b):b}});a.ext.buttons.collection.className+=" dropdown-toggle";a.ext.buttons.collection.rightAlignClassName="dropdown-menu-right";return a.Buttons});
 
 
+/*!
+ HTML5 export buttons for Buttons and DataTables.
+ 2016 SpryMedia Ltd - datatables.net/license
+
+ FileSaver.js (1.3.3) - MIT license
+ Copyright © 2016 Eli Grey - http://eligrey.com
+*/
+(function(f){"function"===typeof define&&define.amd?define(["jquery","datatables.net","datatables.net-buttons"],function(g){return f(g,window,document)}):"object"===typeof exports?module.exports=function(g,l,z,t){g||(g=window);l&&l.fn.dataTable||(l=require("datatables.net")(g,l).$);l.fn.dataTable.Buttons||require("datatables.net-buttons")(g,l);return f(l,g,g.document,z,t)}:f(jQuery,window,document)})(function(f,g,l,z,t,w){function A(a){for(var b="";0<=a;)b=String.fromCharCode(a%26+65)+b,a=Math.floor(a/
+26)-1;return b}function E(a,b){y===w&&(y=-1===C.serializeToString((new g.DOMParser).parseFromString(F["xl/worksheets/sheet1.xml"],"text/xml")).indexOf("xmlns:r"));f.each(b,function(b,c){if(f.isPlainObject(c))b=a.folder(b),E(b,c);else{if(y){var d=c.childNodes[0],e,h=[];for(e=d.attributes.length-1;0<=e;e--){var n=d.attributes[e].nodeName;var k=d.attributes[e].nodeValue;-1!==n.indexOf(":")&&(h.push({name:n,value:k}),d.removeAttribute(n))}e=0;for(n=h.length;e<n;e++)k=c.createAttribute(h[e].name.replace(":",
+"_dt_b_namespace_token_")),k.value=h[e].value,d.setAttributeNode(k)}c=C.serializeToString(c);y&&(-1===c.indexOf("<?xml")&&(c='<?xml version="1.0" encoding="UTF-8" standalone="yes"?>'+c),c=c.replace(/_dt_b_namespace_token_/g,":"),c=c.replace(/xmlns:NS[\d]+="" NS[\d]+:/g,""));c=c.replace(/<([^<>]*?) xmlns=""([^<>]*?)>/g,"<$1 $2>");a.file(b,c)}})}function r(a,b,d){var c=a.createElement(b);d&&(d.attr&&f(c).attr(d.attr),d.children&&f.each(d.children,function(a,b){c.appendChild(b)}),null!==d.text&&d.text!==
+w&&c.appendChild(a.createTextNode(d.text)));return c}function L(a,b){var d=a.header[b].length;a.footer&&a.footer[b].length>d&&(d=a.footer[b].length);for(var c=0,f=a.body.length;c<f;c++){var e=a.body[c][b];e=null!==e&&e!==w?e.toString():"";-1!==e.indexOf("\n")?(e=e.split("\n"),e.sort(function(a,c){return c.length-a.length}),e=e[0].length):e=e.length;e>d&&(d=e);if(40<d)return 54}d*=1.35;return 6<d?d:6}var v=f.fn.dataTable;v.Buttons.pdfMake=function(a){if(!a)return t||g.pdfMake;t=a};v.Buttons.jszip=
+function(a){if(!a)return z||g.JSZip;z=a};var B=function(a){if(!("undefined"===typeof a||"undefined"!==typeof navigator&&/MSIE [1-9]\./.test(navigator.userAgent))){var b=a.document.createElementNS("http://www.w3.org/1999/xhtml","a"),d="download"in b,c=/constructor/i.test(a.HTMLElement)||a.safari,f=/CriOS\/[\d]+/.test(navigator.userAgent),e=function(c){(a.setImmediate||a.setTimeout)(function(){throw c;},0)},h=function(c){setTimeout(function(){"string"===typeof c?(a.URL||a.webkitURL||a).revokeObjectURL(c):
+c.remove()},4E4)},n=function(a){return/^\s*(?:text\/\S*|application\/xml|\S*\/\S*\+xml)\s*;.*charset\s*=\s*utf-8/i.test(a.type)?new Blob([String.fromCharCode(65279),a],{type:a.type}):a},k=function(k,q,p){p||(k=n(k));var m=this,g="application/octet-stream"===k.type,D=function(){var a=["writestart","progress","write","writeend"];a=[].concat(a);for(var c=a.length;c--;){var b=m["on"+a[c]];if("function"===typeof b)try{b.call(m,m)}catch(M){e(M)}}};m.readyState=m.INIT;if(d){var u=(a.URL||a.webkitURL||a).createObjectURL(k);
+setTimeout(function(){b.href=u;b.download=q;var a=new MouseEvent("click");b.dispatchEvent(a);D();h(u);m.readyState=m.DONE})}else(function(){if((f||g&&c)&&a.FileReader){var b=new FileReader;b.onloadend=function(){var c=f?b.result:b.result.replace(/^data:[^;]*;/,"data:attachment/file;");a.open(c,"_blank")||(a.location.href=c);m.readyState=m.DONE;D()};b.readAsDataURL(k);m.readyState=m.INIT}else u||(u=(a.URL||a.webkitURL||a).createObjectURL(k)),g?a.location.href=u:a.open(u,"_blank")||(a.location.href=
+u),m.readyState=m.DONE,D(),h(u)})()},p=k.prototype;if("undefined"!==typeof navigator&&navigator.msSaveOrOpenBlob)return function(a,c,b){c=c||a.name||"download";b||(a=n(a));return navigator.msSaveOrOpenBlob(a,c)};p.abort=function(){};p.readyState=p.INIT=0;p.WRITING=1;p.DONE=2;p.error=p.onwritestart=p.onprogress=p.onwrite=p.onabort=p.onerror=p.onwriteend=null;return function(a,c,b){return new k(a,c||a.name||"download",b)}}}("undefined"!==typeof self&&self||"undefined"!==typeof g&&g||this.content);v.fileSave=
+B;var G=function(a){var b="Sheet1";a.sheetName&&(b=a.sheetName.replace(/[\[\]\*\/\\\?:]/g,""));return b},H=function(a){return a.newline?a.newline:navigator.userAgent.match(/Windows/)?"\r\n":"\n"},I=function(a,b){var d=H(b);a=a.buttons.exportData(b.exportOptions);var c=b.fieldBoundary,f=b.fieldSeparator,e=new RegExp(c,"g"),h=b.escapeChar!==w?b.escapeChar:"\\",n=function(a){for(var b="",d=0,n=a.length;d<n;d++)0<d&&(b+=f),b+=c?c+(""+a[d]).replace(e,h+c)+c:a[d];return b},k=b.header?n(a.header)+d:"";b=
+b.footer&&a.footer?d+n(a.footer):"";for(var g=[],l=0,q=a.body.length;l<q;l++)g.push(n(a.body[l]));return{str:k+g.join(d)+b,rows:g.length}},J=function(){if(-1===navigator.userAgent.indexOf("Safari")||-1!==navigator.userAgent.indexOf("Chrome")||-1!==navigator.userAgent.indexOf("Opera"))return!1;var a=navigator.userAgent.match(/AppleWebKit\/(\d+\.\d+)/);return a&&1<a.length&&603.1>1*a[1]?!0:!1};try{var C=new XMLSerializer,y}catch(a){}var F={"_rels/.rels":'<?xml version="1.0" encoding="UTF-8" standalone="yes"?><Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships"><Relationship Id="rId1" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument" Target="xl/workbook.xml"/></Relationships>',
+"xl/_rels/workbook.xml.rels":'<?xml version="1.0" encoding="UTF-8" standalone="yes"?><Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships"><Relationship Id="rId1" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/worksheet" Target="worksheets/sheet1.xml"/><Relationship Id="rId2" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles" Target="styles.xml"/></Relationships>',"[Content_Types].xml":'<?xml version="1.0" encoding="UTF-8" standalone="yes"?><Types xmlns="http://schemas.openxmlformats.org/package/2006/content-types"><Default Extension="xml" ContentType="application/xml" /><Default Extension="rels" ContentType="application/vnd.openxmlformats-package.relationships+xml" /><Default Extension="jpeg" ContentType="image/jpeg" /><Override PartName="/xl/workbook.xml" ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml" /><Override PartName="/xl/worksheets/sheet1.xml" ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml" /><Override PartName="/xl/styles.xml" ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml" /></Types>',
+"xl/workbook.xml":'<?xml version="1.0" encoding="UTF-8" standalone="yes"?><workbook xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships"><fileVersion appName="xl" lastEdited="5" lowestEdited="5" rupBuild="24816"/><workbookPr showInkAnnotation="0" autoCompressPictures="0"/><bookViews><workbookView xWindow="0" yWindow="0" windowWidth="25600" windowHeight="19020" tabRatio="500"/></bookViews><sheets><sheet name="Sheet1" sheetId="1" r:id="rId1"/></sheets><definedNames/></workbook>',
+"xl/worksheets/sheet1.xml":'<?xml version="1.0" encoding="UTF-8" standalone="yes"?><worksheet xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="x14ac" xmlns:x14ac="http://schemas.microsoft.com/office/spreadsheetml/2009/9/ac"><sheetData/><mergeCells count="0"/></worksheet>',"xl/styles.xml":'<?xml version="1.0" encoding="UTF-8"?><styleSheet xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="x14ac" xmlns:x14ac="http://schemas.microsoft.com/office/spreadsheetml/2009/9/ac"><numFmts count="6"><numFmt numFmtId="164" formatCode="#,##0.00_- [$$-45C]"/><numFmt numFmtId="165" formatCode="&quot;£&quot;#,##0.00"/><numFmt numFmtId="166" formatCode="[$€-2] #,##0.00"/><numFmt numFmtId="167" formatCode="0.0%"/><numFmt numFmtId="168" formatCode="#,##0;(#,##0)"/><numFmt numFmtId="169" formatCode="#,##0.00;(#,##0.00)"/></numFmts><fonts count="5" x14ac:knownFonts="1"><font><sz val="11" /><name val="Calibri" /></font><font><sz val="11" /><name val="Calibri" /><color rgb="FFFFFFFF" /></font><font><sz val="11" /><name val="Calibri" /><b /></font><font><sz val="11" /><name val="Calibri" /><i /></font><font><sz val="11" /><name val="Calibri" /><u /></font></fonts><fills count="6"><fill><patternFill patternType="none" /></fill><fill><patternFill patternType="none" /></fill><fill><patternFill patternType="solid"><fgColor rgb="FFD9D9D9" /><bgColor indexed="64" /></patternFill></fill><fill><patternFill patternType="solid"><fgColor rgb="FFD99795" /><bgColor indexed="64" /></patternFill></fill><fill><patternFill patternType="solid"><fgColor rgb="ffc6efce" /><bgColor indexed="64" /></patternFill></fill><fill><patternFill patternType="solid"><fgColor rgb="ffc6cfef" /><bgColor indexed="64" /></patternFill></fill></fills><borders count="2"><border><left /><right /><top /><bottom /><diagonal /></border><border diagonalUp="false" diagonalDown="false"><left style="thin"><color auto="1" /></left><right style="thin"><color auto="1" /></right><top style="thin"><color auto="1" /></top><bottom style="thin"><color auto="1" /></bottom><diagonal /></border></borders><cellStyleXfs count="1"><xf numFmtId="0" fontId="0" fillId="0" borderId="0" /></cellStyleXfs><cellXfs count="68"><xf numFmtId="0" fontId="0" fillId="0" borderId="0" applyFont="1" applyFill="1" applyBorder="1"/><xf numFmtId="0" fontId="1" fillId="0" borderId="0" applyFont="1" applyFill="1" applyBorder="1"/><xf numFmtId="0" fontId="2" fillId="0" borderId="0" applyFont="1" applyFill="1" applyBorder="1"/><xf numFmtId="0" fontId="3" fillId="0" borderId="0" applyFont="1" applyFill="1" applyBorder="1"/><xf numFmtId="0" fontId="4" fillId="0" borderId="0" applyFont="1" applyFill="1" applyBorder="1"/><xf numFmtId="0" fontId="0" fillId="2" borderId="0" applyFont="1" applyFill="1" applyBorder="1"/><xf numFmtId="0" fontId="1" fillId="2" borderId="0" applyFont="1" applyFill="1" applyBorder="1"/><xf numFmtId="0" fontId="2" fillId="2" borderId="0" applyFont="1" applyFill="1" applyBorder="1"/><xf numFmtId="0" fontId="3" fillId="2" borderId="0" applyFont="1" applyFill="1" applyBorder="1"/><xf numFmtId="0" fontId="4" fillId="2" borderId="0" applyFont="1" applyFill="1" applyBorder="1"/><xf numFmtId="0" fontId="0" fillId="3" borderId="0" applyFont="1" applyFill="1" applyBorder="1"/><xf numFmtId="0" fontId="1" fillId="3" borderId="0" applyFont="1" applyFill="1" applyBorder="1"/><xf numFmtId="0" fontId="2" fillId="3" borderId="0" applyFont="1" applyFill="1" applyBorder="1"/><xf numFmtId="0" fontId="3" fillId="3" borderId="0" applyFont="1" applyFill="1" applyBorder="1"/><xf numFmtId="0" fontId="4" fillId="3" borderId="0" applyFont="1" applyFill="1" applyBorder="1"/><xf numFmtId="0" fontId="0" fillId="4" borderId="0" applyFont="1" applyFill="1" applyBorder="1"/><xf numFmtId="0" fontId="1" fillId="4" borderId="0" applyFont="1" applyFill="1" applyBorder="1"/><xf numFmtId="0" fontId="2" fillId="4" borderId="0" applyFont="1" applyFill="1" applyBorder="1"/><xf numFmtId="0" fontId="3" fillId="4" borderId="0" applyFont="1" applyFill="1" applyBorder="1"/><xf numFmtId="0" fontId="4" fillId="4" borderId="0" applyFont="1" applyFill="1" applyBorder="1"/><xf numFmtId="0" fontId="0" fillId="5" borderId="0" applyFont="1" applyFill="1" applyBorder="1"/><xf numFmtId="0" fontId="1" fillId="5" borderId="0" applyFont="1" applyFill="1" applyBorder="1"/><xf numFmtId="0" fontId="2" fillId="5" borderId="0" applyFont="1" applyFill="1" applyBorder="1"/><xf numFmtId="0" fontId="3" fillId="5" borderId="0" applyFont="1" applyFill="1" applyBorder="1"/><xf numFmtId="0" fontId="4" fillId="5" borderId="0" applyFont="1" applyFill="1" applyBorder="1"/><xf numFmtId="0" fontId="0" fillId="0" borderId="1" applyFont="1" applyFill="1" applyBorder="1"/><xf numFmtId="0" fontId="1" fillId="0" borderId="1" applyFont="1" applyFill="1" applyBorder="1"/><xf numFmtId="0" fontId="2" fillId="0" borderId="1" applyFont="1" applyFill="1" applyBorder="1"/><xf numFmtId="0" fontId="3" fillId="0" borderId="1" applyFont="1" applyFill="1" applyBorder="1"/><xf numFmtId="0" fontId="4" fillId="0" borderId="1" applyFont="1" applyFill="1" applyBorder="1"/><xf numFmtId="0" fontId="0" fillId="2" borderId="1" applyFont="1" applyFill="1" applyBorder="1"/><xf numFmtId="0" fontId="1" fillId="2" borderId="1" applyFont="1" applyFill="1" applyBorder="1"/><xf numFmtId="0" fontId="2" fillId="2" borderId="1" applyFont="1" applyFill="1" applyBorder="1"/><xf numFmtId="0" fontId="3" fillId="2" borderId="1" applyFont="1" applyFill="1" applyBorder="1"/><xf numFmtId="0" fontId="4" fillId="2" borderId="1" applyFont="1" applyFill="1" applyBorder="1"/><xf numFmtId="0" fontId="0" fillId="3" borderId="1" applyFont="1" applyFill="1" applyBorder="1"/><xf numFmtId="0" fontId="1" fillId="3" borderId="1" applyFont="1" applyFill="1" applyBorder="1"/><xf numFmtId="0" fontId="2" fillId="3" borderId="1" applyFont="1" applyFill="1" applyBorder="1"/><xf numFmtId="0" fontId="3" fillId="3" borderId="1" applyFont="1" applyFill="1" applyBorder="1"/><xf numFmtId="0" fontId="4" fillId="3" borderId="1" applyFont="1" applyFill="1" applyBorder="1"/><xf numFmtId="0" fontId="0" fillId="4" borderId="1" applyFont="1" applyFill="1" applyBorder="1"/><xf numFmtId="0" fontId="1" fillId="4" borderId="1" applyFont="1" applyFill="1" applyBorder="1"/><xf numFmtId="0" fontId="2" fillId="4" borderId="1" applyFont="1" applyFill="1" applyBorder="1"/><xf numFmtId="0" fontId="3" fillId="4" borderId="1" applyFont="1" applyFill="1" applyBorder="1"/><xf numFmtId="0" fontId="4" fillId="4" borderId="1" applyFont="1" applyFill="1" applyBorder="1"/><xf numFmtId="0" fontId="0" fillId="5" borderId="1" applyFont="1" applyFill="1" applyBorder="1"/><xf numFmtId="0" fontId="1" fillId="5" borderId="1" applyFont="1" applyFill="1" applyBorder="1"/><xf numFmtId="0" fontId="2" fillId="5" borderId="1" applyFont="1" applyFill="1" applyBorder="1"/><xf numFmtId="0" fontId="3" fillId="5" borderId="1" applyFont="1" applyFill="1" applyBorder="1"/><xf numFmtId="0" fontId="4" fillId="5" borderId="1" applyFont="1" applyFill="1" applyBorder="1"/><xf numFmtId="0" fontId="0" fillId="0" borderId="0" applyFont="1" applyFill="1" applyBorder="1" xfId="0" applyAlignment="1"><alignment horizontal="left"/></xf><xf numFmtId="0" fontId="0" fillId="0" borderId="0" applyFont="1" applyFill="1" applyBorder="1" xfId="0" applyAlignment="1"><alignment horizontal="center"/></xf><xf numFmtId="0" fontId="0" fillId="0" borderId="0" applyFont="1" applyFill="1" applyBorder="1" xfId="0" applyAlignment="1"><alignment horizontal="right"/></xf><xf numFmtId="0" fontId="0" fillId="0" borderId="0" applyFont="1" applyFill="1" applyBorder="1" xfId="0" applyAlignment="1"><alignment horizontal="fill"/></xf><xf numFmtId="0" fontId="0" fillId="0" borderId="0" applyFont="1" applyFill="1" applyBorder="1" xfId="0" applyAlignment="1"><alignment textRotation="90"/></xf><xf numFmtId="0" fontId="0" fillId="0" borderId="0" applyFont="1" applyFill="1" applyBorder="1" xfId="0" applyAlignment="1"><alignment wrapText="1"/></xf><xf numFmtId="9"   fontId="0" fillId="0" borderId="0" applyFont="1" applyFill="1" applyBorder="1" xfId="0" applyNumberFormat="1"/><xf numFmtId="164" fontId="0" fillId="0" borderId="0" applyFont="1" applyFill="1" applyBorder="1" xfId="0" applyNumberFormat="1"/><xf numFmtId="165" fontId="0" fillId="0" borderId="0" applyFont="1" applyFill="1" applyBorder="1" xfId="0" applyNumberFormat="1"/><xf numFmtId="166" fontId="0" fillId="0" borderId="0" applyFont="1" applyFill="1" applyBorder="1" xfId="0" applyNumberFormat="1"/><xf numFmtId="167" fontId="0" fillId="0" borderId="0" applyFont="1" applyFill="1" applyBorder="1" xfId="0" applyNumberFormat="1"/><xf numFmtId="168" fontId="0" fillId="0" borderId="0" applyFont="1" applyFill="1" applyBorder="1" xfId="0" applyNumberFormat="1"/><xf numFmtId="169" fontId="0" fillId="0" borderId="0" applyFont="1" applyFill="1" applyBorder="1" xfId="0" applyNumberFormat="1"/><xf numFmtId="3" fontId="0" fillId="0" borderId="0" applyFont="1" applyFill="1" applyBorder="1" xfId="0" applyNumberFormat="1"/><xf numFmtId="4" fontId="0" fillId="0" borderId="0" applyFont="1" applyFill="1" applyBorder="1" xfId="0" applyNumberFormat="1"/><xf numFmtId="1" fontId="0" fillId="0" borderId="0" applyFont="1" applyFill="1" applyBorder="1" xfId="0" applyNumberFormat="1"/><xf numFmtId="2" fontId="0" fillId="0" borderId="0" applyFont="1" applyFill="1" applyBorder="1" xfId="0" applyNumberFormat="1"/><xf numFmtId="14" fontId="0" fillId="0" borderId="0" applyFont="1" applyFill="1" applyBorder="1" xfId="0" applyNumberFormat="1"/></cellXfs><cellStyles count="1"><cellStyle name="Normal" xfId="0" builtinId="0" /></cellStyles><dxfs count="0" /><tableStyles count="0" defaultTableStyle="TableStyleMedium9" defaultPivotStyle="PivotStyleMedium4" /></styleSheet>'},
+K=[{match:/^\-?\d+\.\d%$/,style:60,fmt:function(a){return a/100}},{match:/^\-?\d+\.?\d*%$/,style:56,fmt:function(a){return a/100}},{match:/^\-?\$[\d,]+.?\d*$/,style:57},{match:/^\-?£[\d,]+.?\d*$/,style:58},{match:/^\-?€[\d,]+.?\d*$/,style:59},{match:/^\-?\d+$/,style:65},{match:/^\-?\d+\.\d{2}$/,style:66},{match:/^\([\d,]+\)$/,style:61,fmt:function(a){return-1*a.replace(/[\(\)]/g,"")}},{match:/^\([\d,]+\.\d{2}\)$/,style:62,fmt:function(a){return-1*a.replace(/[\(\)]/g,"")}},{match:/^\-?[\d,]+$/,style:63},
+{match:/^\-?[\d,]+\.\d{2}$/,style:64},{match:/^[\d]{4}\-[\d]{2}\-[\d]{2}$/,style:67,fmt:function(a){return Math.round(25569+Date.parse(a)/864E5)}}];v.ext.buttons.copyHtml5={className:"buttons-copy buttons-html5",text:function(a){return a.i18n("buttons.copy","Copy")},action:function(a,b,d,c){this.processing(!0);var g=this;a=I(b,c);var e=b.buttons.exportInfo(c),h=H(c),n=a.str;d=f("<div/>").css({height:1,width:1,overflow:"hidden",position:"fixed",top:0,left:0});e.title&&(n=e.title+h+h+n);e.messageTop&&
+(n=e.messageTop+h+h+n);e.messageBottom&&(n=n+h+h+e.messageBottom);c.customize&&(n=c.customize(n,c,b));c=f("<textarea readonly/>").val(n).appendTo(d);if(l.queryCommandSupported("copy")){d.appendTo(b.table().container());c[0].focus();c[0].select();try{var k=l.execCommand("copy");d.remove();if(k){b.buttons.info(b.i18n("buttons.copyTitle","Copy to clipboard"),b.i18n("buttons.copySuccess",{1:"Copied one row to clipboard",_:"Copied %d rows to clipboard"},a.rows),2E3);this.processing(!1);return}}catch(q){}}k=
+f("<span>"+b.i18n("buttons.copyKeys","Press <i>ctrl</i> or <i>⌘</i> + <i>C</i> to copy the table data<br>to your system clipboard.<br><br>To cancel, click this message or press escape.")+"</span>").append(d);b.buttons.info(b.i18n("buttons.copyTitle","Copy to clipboard"),k,0);c[0].focus();c[0].select();var p=f(k).closest(".dt-button-info"),r=function(){p.off("click.buttons-copy");f(l).off(".buttons-copy");b.buttons.info(!1)};p.on("click.buttons-copy",r);f(l).on("keydown.buttons-copy",function(a){27===
+a.keyCode&&(r(),g.processing(!1))}).on("copy.buttons-copy cut.buttons-copy",function(){r();g.processing(!1)})},exportOptions:{},fieldSeparator:"\t",fieldBoundary:"",header:!0,footer:!1,title:"*",messageTop:"*",messageBottom:"*"};v.ext.buttons.csvHtml5={bom:!1,className:"buttons-csv buttons-html5",available:function(){return g.FileReader!==w&&g.Blob},text:function(a){return a.i18n("buttons.csv","CSV")},action:function(a,b,d,c){this.processing(!0);a=I(b,c).str;d=b.buttons.exportInfo(c);var f=c.charset;
+c.customize&&(a=c.customize(a,c,b));!1!==f?(f||(f=l.characterSet||l.charset),f&&(f=";charset="+f)):f="";c.bom&&(a=""+a);B(new Blob([a],{type:"text/csv"+f}),d.filename,!0);this.processing(!1)},filename:"*",extension:".csv",exportOptions:{},fieldSeparator:",",fieldBoundary:'"',escapeChar:'"',charset:null,header:!0,footer:!1};v.ext.buttons.excelHtml5={className:"buttons-excel buttons-html5",available:function(){return g.FileReader!==w&&(z||g.JSZip)!==w&&!J()&&C},text:function(a){return a.i18n("buttons.excel",
+"Excel")},action:function(a,b,d,c){this.processing(!0);var l=this,e=0;a=function(a){return f.parseXML(F[a])};var h=a("xl/worksheets/sheet1.xml"),n=h.getElementsByTagName("sheetData")[0];a={_rels:{".rels":a("_rels/.rels")},xl:{_rels:{"workbook.xml.rels":a("xl/_rels/workbook.xml.rels")},"workbook.xml":a("xl/workbook.xml"),"styles.xml":a("xl/styles.xml"),worksheets:{"sheet1.xml":h}},"[Content_Types].xml":a("[Content_Types].xml")};var k=b.buttons.exportData(c.exportOptions),p,v,q=function(a){p=e+1;v=
+r(h,"row",{attr:{r:p}});for(var b=0,d=a.length;b<d;b++){var k=A(b)+""+p,g=null;if(null===a[b]||a[b]===w||""===a[b])if(!0===c.createEmptyCells)a[b]="";else continue;var m=a[b];a[b]=f.trim(a[b]);for(var l=0,q=K.length;l<q;l++){var u=K[l];if(a[b].match&&!a[b].match(/^0\d+/)&&a[b].match(u.match)){g=a[b].replace(/[^\d\.\-]/g,"");u.fmt&&(g=u.fmt(g));g=r(h,"c",{attr:{r:k,s:u.style},children:[r(h,"v",{text:g})]});break}}g||("number"===typeof a[b]||a[b].match&&a[b].match(/^-?\d+(\.\d+)?$/)&&!a[b].match(/^0\d+/)?
+g=r(h,"c",{attr:{t:"n",r:k},children:[r(h,"v",{text:a[b]})]}):(m=m.replace?m.replace(/[\x00-\x09\x0B\x0C\x0E-\x1F\x7F-\x9F]/g,""):m,g=r(h,"c",{attr:{t:"inlineStr",r:k},children:{row:r(h,"is",{children:{row:r(h,"t",{text:m,attr:{"xml:space":"preserve"}})}})}})));v.appendChild(g)}n.appendChild(v);e++};c.customizeData&&c.customizeData(k);var x=function(a,b){var c=f("mergeCells",h);c[0].appendChild(r(h,"mergeCell",{attr:{ref:"A"+a+":"+A(b)+a}}));c.attr("count",parseFloat(c.attr("count"))+1);f("row:eq("+
+(a-1)+") c",h).attr("s","51")},m=b.buttons.exportInfo(c);m.title&&(q([m.title],e),x(e,k.header.length-1));m.messageTop&&(q([m.messageTop],e),x(e,k.header.length-1));c.header&&(q(k.header,e),f("row:last c",h).attr("s","2"));d=e;var t=0;for(var y=k.body.length;t<y;t++)q(k.body[t],e);t=e;c.footer&&k.footer&&(q(k.footer,e),f("row:last c",h).attr("s","2"));m.messageBottom&&(q([m.messageBottom],e),x(e,k.header.length-1));q=r(h,"cols");f("worksheet",h).prepend(q);x=0;for(y=k.header.length;x<y;x++)q.appendChild(r(h,
+"col",{attr:{min:x+1,max:x+1,width:L(k,x),customWidth:1}}));q=a.xl["workbook.xml"];f("sheets sheet",q).attr("name",G(c));c.autoFilter&&(f("mergeCells",h).before(r(h,"autoFilter",{attr:{ref:"A"+d+":"+A(k.header.length-1)+t}})),f("definedNames",q).append(r(q,"definedName",{attr:{name:"_xlnm._FilterDatabase",localSheetId:"0",hidden:1},text:G(c)+"!$A$"+d+":"+A(k.header.length-1)+t})));c.customize&&c.customize(a,c,b);0===f("mergeCells",h).children().length&&f("mergeCells",h).remove();b=new (z||g.JSZip);
+d={type:"blob",mimeType:"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"};E(b,a);b.generateAsync?b.generateAsync(d).then(function(a){B(a,m.filename);l.processing(!1)}):(B(b.generate(d),m.filename),this.processing(!1))},filename:"*",extension:".xlsx",exportOptions:{},header:!0,footer:!1,title:"*",messageTop:"*",messageBottom:"*",createEmptyCells:!1,autoFilter:!1,sheetName:""};v.ext.buttons.pdfHtml5={className:"buttons-pdf buttons-html5",available:function(){return g.FileReader!==
+w&&(t||g.pdfMake)},text:function(a){return a.i18n("buttons.pdf","PDF")},action:function(a,b,d,c){this.processing(!0);d=b.buttons.exportData(c.exportOptions);a=b.buttons.exportInfo(c);var l=[];c.header&&l.push(f.map(d.header,function(a){return{text:"string"===typeof a?a:a+"",style:"tableHeader"}}));for(var e=0,h=d.body.length;e<h;e++)l.push(f.map(d.body[e],function(a){if(null===a||a===w)a="";return{text:"string"===typeof a?a:a+"",style:e%2?"tableBodyEven":"tableBodyOdd"}}));c.footer&&d.footer&&l.push(f.map(d.footer,
+function(a){return{text:"string"===typeof a?a:a+"",style:"tableFooter"}}));d={pageSize:c.pageSize,pageOrientation:c.orientation,content:[{table:{headerRows:1,body:l},layout:"noBorders"}],styles:{tableHeader:{bold:!0,fontSize:11,color:"white",fillColor:"#2d4154",alignment:"center"},tableBodyEven:{},tableBodyOdd:{fillColor:"#f3f3f3"},tableFooter:{bold:!0,fontSize:11,color:"white",fillColor:"#2d4154"},title:{alignment:"center",fontSize:15},message:{}},defaultStyle:{fontSize:10}};a.messageTop&&d.content.unshift({text:a.messageTop,
+style:"message",margin:[0,0,0,12]});a.messageBottom&&d.content.push({text:a.messageBottom,style:"message",margin:[0,0,0,12]});a.title&&d.content.unshift({text:a.title,style:"title",margin:[0,0,0,12]});c.customize&&c.customize(d,c,b);b=(t||g.pdfMake).createPdf(d);"open"!==c.download||J()?b.download(a.filename):b.open();this.processing(!1)},title:"*",filename:"*",extension:".pdf",exportOptions:{},orientation:"portrait",pageSize:"A4",header:!0,footer:!1,messageTop:"*",messageBottom:"*",customize:null,
+download:"download"};return v.Buttons});
+
+
 /*!
    Copyright 2014-2020 SpryMedia Ltd.
 
diff --git a/js/script.js b/js/script.js
index ef87b4e..c59603c 100644
--- a/js/script.js
+++ b/js/script.js
@@ -95,11 +95,18 @@ jQuery(document).ready(function(){
         },
         'dom': 'Blfrtip',
         'buttons': [
+            {
+                'id': 'btn_refresh_status',
+                'text': 'Actualiser les états',
+                'action': function() {
+                    jQuery('#demmatpayslip_archive_action').val('refresh_status');
+                    jQuery('#demmatpayslip_archive_action_form').submit();
+                }
+            },
             {
                 'id': 'btn_create',
-                'text': 'Créer archive',
+                'text': 'Archiver',
                 'action': function() {
-                    //jQuery('#archive_list').DataTable().rows().select();
                     jQuery('#demmatpayslip_archive_action').val('create');
                     jQuery('#demmatpayslip_archive_action_form').submit();
                 }
@@ -112,8 +119,6 @@ jQuery(document).ready(function(){
                     jQuery('#demmatpayslip_archive_action_form').submit();
                 }
             }
-        // 'selectAll',
-        // 'selectNone',
         ]
     });
 
diff --git a/lib/Controller/PageController.php b/lib/Controller/PageController.php
index 61dbeac..cb39291 100644
--- a/lib/Controller/PageController.php
+++ b/lib/Controller/PageController.php
@@ -30,6 +30,7 @@ use OCA\Pastell\Db\PastellConfigFlow;
 use OCA\Pastell\Db\PastellConfigFlowMapper;
 
 use OCA\Pastell\PastellAPI;
+use phpseclib\Crypt\Hash;
 
 class PageController extends Controller {
     const LOG_SUCCESS = 0;
@@ -152,6 +153,86 @@ class PageController extends Controller {
     /** @var array User */
     private $_userList;
 
+
+    /**
+     * Check if payslip file has not been archived yet
+     *
+     * @param   DematpayslipArchiveMapper   $dematpayslipArchiveMapper      Archive table mapper
+     * @param   DematpayslipUser            $agentUser                      Agent user
+     * @param   string                      $startDate                      Period start date
+     * @param   string                      $endDate                        Period end date
+     * @return  mixed|DematpayslipArchive|\OCP\AppFramework\Db\Entity|null
+     *
+     * @throws \Exception
+     */
+    private function _archiveCheckBeforeSave(DematpayslipArchiveMapper $dematpayslipArchiveMapper, DematpayslipUser $agentUser, $startDate, $endDate) {
+        $dematpayslipArchive = null;
+        $dematpayslipArchiveExistList = $dematpayslipArchiveMapper->findAllByAgentAndPeriod($agentUser->getSiret(), $agentUser->getMatricule(), $agentUser->getLastname(), $agentUser->getFirstname(), $startDate, $endDate);
+
+        if (empty($dematpayslipArchiveExistList)) {
+            $dematpayslipArchive = new DematpayslipArchive();
+        } elseif (count($dematpayslipArchiveExistList) === 1) {
+            if (!empty($dematpayslipArchiveExistList[0]->getPastellIdDocument())) {
+                $warningMsg = $this->l->t('Le bulletin de paie de l\'agent "' . $agentUser->getLastname() . ' ' . $agentUser->getFirstname() . '" pour la période du ' . $startDate . ' au ' . $endDate . ' est déjà en cours d\'archivage.');
+                $this->_logCsvLine($warningMsg, self::LOG_WARNING, $agentUser, $startDate, $endDate);
+                $this->_processWarningMsg($warningMsg);
+            } else {
+                $dematpayslipArchive = $dematpayslipArchiveExistList[0];
+            }
+        } else {
+            $warningMsg = $this->l->t('Plusieurs bulletins de paie de l\'agent "' . $agentUser->getLastname() . ' ' . $agentUser->getFirstname() . '" pour la période du ' . $startDate . ' au ' . $endDate . ' existent déjà.');
+            $this->_logCsvLine($warningMsg, self::LOG_WARNING, $agentUser, $startDate, $endDate);
+            $this->_processWarningMsg($warningMsg);
+        }
+
+        return $dematpayslipArchive;
+    }
+
+    /**
+     * Save archive file for an agent and a period
+     *
+     * @param   DematpayslipArchiveMapper   $dematpayslipArchiveMapper  Archive table mapper
+     * @param   DematpayslipArchive         $dematpayslipArchive        Archive
+     * @param   string                      $archiveFilePath            Archive file path
+     * @param   DematpayslipUser            $agentUser                  Agent user
+     * @param   string                      $startDate                  Period start date
+     * @param   string                      $endDate                    Period end date
+     * @param   string                      $year                       Period year
+     * @param   string                      $month                      Period month
+     * @param   string                      $editionDate                Edition date
+     * @param   int                         $importTime                 Import time
+     *
+     * @throws  \Exception
+     */
+    private function _archiveSaveForAgentAndPeriod(DematpayslipArchiveMapper $dematpayslipArchiveMapper, DematpayslipArchive $dematpayslipArchive, $archiveFilePath, DematpayslipUser $agentUser, $startDate, $endDate, $year, $month, $editionDate, $importTime) {
+        $archiveFile         = Filesystem::getFileInfo($archiveFilePath);
+        $archiveFileChecksum = Filesystem::hash('md5', $archiveFilePath);
+
+        $dematpayslipArchive->setIdFile($archiveFile->getId());
+        $dematpayslipArchive->setFilePath($archiveFile->getPath());
+        $dematpayslipArchive->setIdUser($agentUser->getUserId());
+        $dematpayslipArchive->setDematpayslipIdUser($agentUser->getId());
+        $dematpayslipArchive->setSiret($agentUser->getSiret());
+        $dematpayslipArchive->setMatricule($agentUser->getMatricule());
+        $dematpayslipArchive->setYear($year);
+        $dematpayslipArchive->setMonth($month);
+        $dematpayslipArchive->setLastname($agentUser->getLastname());
+        $dematpayslipArchive->setFirstname($agentUser->getFirstname());
+        $dematpayslipArchive->setStartDate($startDate);
+        $dematpayslipArchive->setEndDate($endDate);
+        $dematpayslipArchive->setEditionDate($editionDate);
+        $dematpayslipArchive->setImportTime($importTime);
+        $dematpayslipArchive->setChecksum($archiveFileChecksum);
+
+        if (empty($dematpayslipArchive->getId())) {
+            // insert new file to archive
+            $dematpayslipArchiveMapper->insert($dematpayslipArchive);
+        } else {
+            // update file to archive
+            $dematpayslipArchiveMapper->update($dematpayslipArchive);
+        }
+    }
+
     /**
      * Assign params for template demat
      *
@@ -183,9 +264,10 @@ class PageController extends Controller {
      * Assign params for archive list
      *
      * @param   int         $archived               [=-1] for all, 0 for not archived and 1 for archived
+     * @param   int         $refresh                [=false] not to refresh list form API, else true
      * @return  array       Params for template
      */
-    private function _assignArchiveList($archived) {
+    private function _assignArchiveList($archived = -1, $refresh = false) {
         $paramList = array(
             'archived' => $archived
         );
@@ -193,8 +275,49 @@ class PageController extends Controller {
         // get archive list
         $dematpayslipArchiveMapper = new DematpayslipArchiveMapper(\OC::$server->getDatabaseConnection());
 
+        if ($refresh === true) {
+            $dematpayslipArchiveList = $dematpayslipArchiveMapper->findAllArchived($archived);
+
+            if (!empty($dematpayslipArchiveList)) {
+                foreach ($dematpayslipArchiveList as $dematpayslipArchive) {
+                    if (empty($dematpayslipArchive->getPastellIdDocument()))  continue;
+
+                    $archiveFlowNum = 1; // archiving for 5 years by default
+
+                    // get dematpayslip user
+                    if (!empty($dematpayslipArchive->getDematpayslipIdUser())) {
+                        $dematpayslipUser = $dematpayslipArchiveMapper->find($dematpayslipArchive->getDematpayslipIdUser());
+                        if ($dematpayslipUser->getDisabled() == 0) {
+                            $archiveFlowNum = 2; // archiving for 50 years
+                        }
+                    }
+
+                    // Pastell API config
+                    $pastellConfigFlowId = $this->config->getAppValue($this->appName, 'pastell_config_flow' . $archiveFlowNum . '_id', '');
+                    $pastellConfigFlowMapper = new PastellConfigFlowMapper(\OC::$server->getDatabaseConnection());
+                    $pastellConfigFlow = $pastellConfigFlowMapper->find($pastellConfigFlowId);
+
+                    try {
+                        // Pastell API connection
+                        $pastellAPI = new PastellAPI($pastellConfigFlow->getIdConfig());
+
+                        // get and modify document last action
+                        $responseData = $pastellAPI->getEntityDocument($pastellConfigFlow->getIdE(), $dematpayslipArchive->getPastellIdDocument());
+                        if (!empty($responseData['last_action']['action'])) {
+                            $dematpayslipArchive->setPastellLastAction($responseData['last_action']['action']);
+                            $dematpayslipArchiveMapper->update($dematpayslipArchive);
+                        }
+                    } catch (\Exception $e) {
+                        $this->_msgList['error'][] = $e->getMessage();
+                    }
+                }
+            }
+        }
+
+        $dematpayslipArchiveList = $dematpayslipArchiveMapper->findAllArchived($archived);
+
         return array(
-            'dematpayslipArchiveList' => $dematpayslipArchiveMapper->findAllArchived($archived),
+            'dematpayslipArchiveList' => $dematpayslipArchiveList,
             'msgList'                 => $this->_msgList,
             'paramList'               => $paramList
         );
@@ -413,19 +536,15 @@ class PageController extends Controller {
     /**
      * Log csv line
      *
-     * @param   string      $msg        Log message
-     * @param   int         $level      [=LOG_DEBUG] Log level
-     * @param   string      $siret      [=''] Siret
-     * @param   string      $matricule  [=''] Matricule
-     * @param   string      $nomPrenom  [=''] Full name
-     * @param   string      $zipCity    [=''] Zip and city
-     * @param   string      $startDate  [=''] Start date
-     * @param   string      $endDate    [=''] End date
-     * @param   string      $email      [=''] Email
+     * @param   string                  $msg            Log message
+     * @param   int                     $level          [=LOG_DEBUG] Log level
+     * @param   DematpayslipUser        $agentUser      [=null] Siret
+     * @param   string                  $startDate      [=''] Start date
+     * @param   string                  $endDate        [=''] End date
      *
      * @throws  \Exception
      */
-    private function _logCsvLine($msg, $level = self::LOG_DEBUG, $siret = '', $matricule = '', $nomPrenom = '', $zipCity = '', $startDate = '', $endDate = '', $email = '') {
+    private function _logCsvLine($msg, $level = self::LOG_DEBUG, DematpayslipUser $agentUser = null, $startDate = '', $endDate = '') {
         if ($this->_logFile !== null) {
             if ($this->_logLevel <= $level || $level === self::LOG_SUCCESS) {
                 $dateTimeNow = new \DateTime('now', \OC::$server->getDateTimeZone()->getTimeZone());
@@ -455,13 +574,13 @@ class PageController extends Controller {
                     $dateTimeNow->format('H:i:s'),
                     $logLevel,
                     $msg,
-                    $siret,
-                    $matricule,
-                    $nomPrenom,
-                    $zipCity,
+                    (!empty($agentUser) ? $agentUser->getSiret() : ''),
+                    (!empty($agentUser) ? $agentUser->getMatricule() : ''),
+                    (!empty($agentUser) ? $agentUser->getLastname() . ' ' . $agentUser->getFirstname() : ''),
+                    (!empty($agentUser) ? $agentUser->getZipCity() : ''),
                     $startDate,
                     $endDate,
-                    $email,
+                    (!empty($agentUser) ? $agentUser->getEmail() : ''),
                 );
                 fputcsv($this->_logFile, $csvLine, $this->_csvDelimiter, $this->_csvEnclosure);
             }
@@ -1023,23 +1142,27 @@ class PageController extends Controller {
                                         $csvLine[$csvColNum] = mb_convert_encoding(trim($csvValue), $this->_csvEncodeTo,  $this->_csvEncodeFrom);
                                     }
                                 }
-                                $siret        = $csvLine[0];
                                 $matriculeOri = $csvLine[1];
-                                $lastname     = $csvLine[3];
-                                $firstname    = $csvLine[4];
-                                $email        = $csvLine[5];
-                                $zipCity      = $csvLine[10];
                                 $startDate    = date('Y-m-d', strtotime($csvLine[13]));
                                 $endDate      = date('Y-m-d', strtotime($csvLine[14]));
                                 $editionDate  = date('Y-m-d', strtotime($csvLine[17]));
-                                $matricule    = str_pad($matriculeOri, '8', '0', STR_PAD_LEFT);
-                                $fullname     = $lastname . ' ' . $firstname;
+
+                                // agent user
+                                $agentUser = new DematpayslipUser();
+                                $agentUser->setId(0);
+                                $agentUser->setUserId('');
+                                $agentUser->setSiret($csvLine[0]);
+                                $agentUser->setMatricule(str_pad($matriculeOri, '8', '0', STR_PAD_LEFT));
+                                $agentUser->setLastname($csvLine[3]);
+                                $agentUser->setFirstname($csvLine[4]);
+                                $agentUser->setEmail($csvLine[5]);
+                                $agentUser->setZipCity($csvLine[10]);
 
                                 // verifier l'existance de l'email et autres champs (regex)
-                                $this->_logCsvLine($this->l->t('Ligne CSV'), self::LOG_DEBUG, $siret, $matricule, $fullname, $zipCity, $startDate, $endDate, $email);
-                                if (empty($email)) {
+                                $this->_logCsvLine($this->l->t('Ligne CSV'), self::LOG_DEBUG, $agentUser, $startDate, $endDate);
+                                if (empty($agentUser->getEmail())) {
                                     $warningMsg = $this->l->t('Le fichier CSV "' . $uploadFileCSVName . '" contient un champ email vide [ligne=' . ($csvLineNum + 1) . '].');
-                                    $this->_logCsvLine($warningMsg, self::LOG_WARNING, $siret, $matricule, $fullname, $zipCity, $startDate, $endDate, $email);
+                                    $this->_logCsvLine($warningMsg, self::LOG_WARNING, $agentUser, $startDate, $endDate);
                                     $this->_processWarningMsg($warningMsg);
 
                                     // sauter cette ligne dans la suite du process de verification et d'indexation
@@ -1052,7 +1175,7 @@ class PageController extends Controller {
                                     //}
                                 } else {
                                     $userManager = \OC::$server->getUserManager();
-                                    $userFindByEmailList = $userManager->getByEmail($email);
+                                    $userFindByEmailList = $userManager->getByEmail($agentUser->getEmail());
 
                                     // /!\ remove all users not available (FIX for multiple users with SAML)
                                     if (self::USER_REMOVE_UNKNOWN == 1) {
@@ -1060,8 +1183,8 @@ class PageController extends Controller {
                                     }
 
                                     if (count($userFindByEmailList) != 1) {
-                                        $warningMsg = $this->l->t('Le fichier CSV "' . $uploadFileCSVName . '" contient un email "' . $email . '" non valide ou non lié à un unique utilisateur Nextcloud [ligne=' . ($csvLineNum + 1) . '].');
-                                        $this->_logCsvLine($warningMsg, self::LOG_WARNING, $siret, $matricule, $fullname, $zipCity, $startDate, $endDate, $email);
+                                        $warningMsg = $this->l->t('Le fichier CSV "' . $uploadFileCSVName . '" contient un email "' . $agentUser->getEmail() . '" non valide ou non lié à un unique utilisateur Nextcloud [ligne=' . ($csvLineNum + 1) . '].');
+                                        $this->_logCsvLine($warningMsg, self::LOG_WARNING, $agentUser, $startDate, $endDate);
                                         $this->_processWarningMsg($warningMsg);
 
                                         $dematpayslipProcessSkipLineArr = $this->_dematpayslipProcessSkipMapper->findAllByIdProcessAndIdLine($this->_process->getId(), $csvLineNum);
@@ -1076,17 +1199,17 @@ class PageController extends Controller {
 
                                 if ($this->_processFailOnFirstError===false || $this->_process->getHasError()<=0) {
                                     $csvTodoLineList[] = array(
-                                        'siret'         => $siret,
+                                        'siret'         => $agentUser->getSiret(),
                                         'matricule_ori' => $matriculeOri,
-                                        'lastname'      => $lastname,
-                                        'firstname'     => $firstname,
-                                        'zip_city'      => $zipCity,
+                                        'lastname'      => $agentUser->getLastname(),
+                                        'firstname'     => $agentUser->getFirstname(),
+                                        'zip_city'      => $agentUser->getZipCity(),
                                         'start_date'    => $startDate,
                                         'end_date'      => $endDate,
                                         'edition_date'  => $editionDate,
-                                        'matricule'     => $matricule,
-                                        'fullname'      => $fullname,
-                                        'email'         => $email,
+                                        'matricule'     => $agentUser->getMatricule(),
+                                        'fullname'      => $agentUser->getLastname() . ' ' . $agentUser->getFirstname(),
+                                        'email'         => $agentUser->getEmail(),
                                         'line_num'      => $csvLineNum + 1,
                                         'pdf_pages'     => '',
                                     );
@@ -1417,9 +1540,14 @@ class PageController extends Controller {
      * @param   int                 $retry
      * @return  TemplateResponse
      *
-     * @throws  \OCP\Files\InvalidPathException
-     * @throws  \OCP\Files\NotFoundException
-     * @throws  \OC\User\NoUserException
+     * @throws NotFoundException
+     * @throws \OCP\Files\InvalidPathException
+     * @throws \OC\User\NoUserException
+     * @throws \setasign\Fpdi\PdfParser\CrossReference\CrossReferenceException
+     * @throws \setasign\Fpdi\PdfParser\Filter\FilterException
+     * @throws \setasign\Fpdi\PdfParser\PdfParserException
+     * @throws \setasign\Fpdi\PdfParser\Type\PdfTypeException
+     * @throws \setasign\Fpdi\PdfReader\PdfReaderException
      */
     public function indexation(int $retry) {
         // verifier l'utilisateur
@@ -1584,37 +1712,40 @@ class PageController extends Controller {
                                     //);
 
                                     // get CSV data values
-                                    $siret          = $csvCheckLine[0];
-                                    $lastname       = $csvCheckLine[2];
-                                    $firstname      = $csvCheckLine[3];
-                                    $zipCity        = $csvCheckLine[4];
                                     $startDate      = $csvCheckLine[5];
                                     $endDate        = $csvCheckLine[6];
                                     $editionDate    = $csvCheckLine[7];
-                                    $matricule      = $csvCheckLine[8];
-                                    $fullname       = $csvCheckLine[9];
-                                    $email          = $csvCheckLine[10];
                                     $startDateTime  = strtotime($startDate);
-                                    $year           = strftime('%Y', $startDateTime);
+                                    $year           = date('Y', $startDateTime);
                                     $month          = strtolower(strftime('%B', $startDateTime));
-
                                     $pdfPageNumList = explode('-', $csvCheckLine[12]);
-                                    $csvCheckPeriod = $startDate . '_' . $endDate;
-                                    $csvCheckYear   = date('Y', strtotime($startDate));
-                                    $this->_logCsvLine($this->l->t('Ligne CSV '), self::LOG_DEBUG, $siret, $matricule, $fullname, $zipCity, $startDate, $endDate, $email);
+                                    $period         = $startDate . '_' . $endDate;
+
+                                    // agent user
+                                    $agentUser = new DematpayslipUser();
+                                    $agentUser->setId(0);
+                                    $agentUser->setUserId('');
+                                    $agentUser->setSiret($csvCheckLine[0]);
+                                    $agentUser->setMatricule($csvCheckLine[8]);
+                                    $agentUser->setLastname($csvCheckLine[2]);
+                                    $agentUser->setFirstname($csvCheckLine[3]);
+                                    $agentUser->setEmail($csvCheckLine[10]);
+                                    $agentUser->setZipCity($csvCheckLine[4]);
+
+                                    $this->_logCsvLine($this->l->t('Ligne CSV '), self::LOG_DEBUG, $agentUser, $startDate, $endDate);
 
                                     // process skip lines
                                     if (in_array($csvCheckLineNum, $dematpayslipProcessSkipLineIdList)) {
-                                        $this->_logCsvLine('-- ' . $this->l->t('Saut de la ligne CSV : ' . ($csvCheckLineNum + 1)) . ' --', self::LOG_DEBUG, $siret, $matricule, $fullname, $zipCity, $startDate, $endDate, $email);
+                                        $this->_logCsvLine('-- ' . $this->l->t('Saut de la ligne CSV : ' . ($csvCheckLineNum + 1)) . ' --', self::LOG_DEBUG, $agentUser, $startDate, $endDate);
 
                                         // creer le PDF des bulletins de paie a ne pas indexer
                                         if ($pdfPayslipSkip === null) {
                                             $pdfPayslipSkip = new \setasign\Fpdi\Fpdi();
                                         }
                                         // ajout des pages des bulletins de paie de l'agent a ne pas indexer
-                                        $this->_logCsvLine($this->l->t('Ajout des pages PDF au bulletin de paie à ne pas indexer.'), self::LOG_DEBUG, $siret, $matricule, $fullname, $zipCity, $startDate, $endDate, $email);
+                                        $this->_logCsvLine($this->l->t('Ajout des pages PDF au bulletin de paie à ne pas indexer.'), self::LOG_DEBUG, $agentUser, $startDate, $endDate);
                                         foreach ($pdfPageNumList as $pdfPageNum) {
-                                            $this->_logCsvLine($this->l->t('Ajout de la page ' . $pdfPageNum . '.'), self::LOG_DEBUG, $siret, $matricule, $fullname, $zipCity, $startDate, $endDate, $email);
+                                            $this->_logCsvLine($this->l->t('Ajout de la page ' . $pdfPageNum . '.'), self::LOG_DEBUG, $agentUser, $startDate, $endDate);
                                             $pdfPayslipSkip->AddPage();
                                             $pdfPayslipSkip->setSourceFile($pdfOriginFileFullPath);
                                             $tplPayslipSkipId = $pdfPayslipSkip->importPage($pdfPageNum);
@@ -1626,102 +1757,56 @@ class PageController extends Controller {
                                     }
 
                                     // no user but archiving for 5 years "BulletinsNoIndex/HORODATE/SIRET-MATRICULE/PERIODE.pdf"
-                                    if (empty($email)) {
-                                        $this->_logCsvLine('-- ' . $this->l->t('Création du PDF non dématérialisé de l\'agent (aucun email) : ' . ($csvCheckLineNum + 1)) . ' --', self::LOG_DEBUG, $siret, $matricule, $fullname, $zipCity, $startDate, $endDate, $email);
-
-                                        // create PDF payslip
-                                        $payslipNoDematHorodateDirPath = $this->_payslipNoIndexDir . DIRECTORY_SEPARATOR . $phaseStartDateTime->format('Y-m-d_H-i-s');
-                                        $isDir = Filesystem::is_dir($payslipNoDematHorodateDirPath);
-                                        if (!$isDir) {
-                                            $dirCreated = Filesystem::mkdir($payslipNoDematHorodateDirPath);
-                                            if (!$dirCreated) {
-                                                $this->_msgList['error'][] = $this->l->t('Impossible de créeer le dossier "' . $payslipNoDematHorodateDirPath . '".');
+                                    if (empty($agentUser->getEmail())) {
+                                        $this->_logCsvLine('-- ' . $this->l->t('Création du PDF non dématérialisé de l\'agent (aucun email) : ' . ($csvCheckLineNum + 1)) . ' --', self::LOG_DEBUG, $agentUser, $startDate, $endDate);
+
+                                        // check if not already archived
+                                        $dematpayslipArchive = $this->_archiveCheckBeforeSave($dematpayslipArchiveMapper, $agentUser, $startDate, $endDate);
+
+                                        if (!empty($dematpayslipArchive)) {
+                                            // create PDF payslip
+                                            $payslipNoDematHorodateDirPath = $this->_payslipNoIndexDir . DIRECTORY_SEPARATOR . $phaseStartDateTime->format('Y-m-d_H-i-s');
+                                            $isDir = Filesystem::is_dir($payslipNoDematHorodateDirPath);
+                                            if (!$isDir) {
+                                                $dirCreated = Filesystem::mkdir($payslipNoDematHorodateDirPath);
+                                                if (!$dirCreated) {
+                                                    $this->_msgList['error'][] = $this->l->t('Impossible de créeer le dossier "' . $payslipNoDematHorodateDirPath . '".');
+                                                }
                                             }
-                                        }
-                                        $payslipNoDematHorodateAgentDirPath = $payslipNoDematHorodateDirPath . DIRECTORY_SEPARATOR . $siret . '-' . $matricule;
-                                        $isDir = Filesystem::is_dir($payslipNoDematHorodateAgentDirPath);
-                                        if (!$isDir) {
-                                            $dirCreated = Filesystem::mkdir($payslipNoDematHorodateAgentDirPath);
-                                            if (!$dirCreated) {
-                                                $this->_msgList['error'][] = $this->l->t('Impossible de créeer le dossier "' . $payslipNoDematHorodateAgentDirPath . '".');
+                                            $payslipNoDematHorodateAgentDirPath = $payslipNoDematHorodateDirPath . DIRECTORY_SEPARATOR . $agentUser->getSiret() . '-' . $agentUser->getMatricule();
+                                            $isDir = Filesystem::is_dir($payslipNoDematHorodateAgentDirPath);
+                                            if (!$isDir) {
+                                                $dirCreated = Filesystem::mkdir($payslipNoDematHorodateAgentDirPath);
+                                                if (!$dirCreated) {
+                                                    $this->_msgList['error'][] = $this->l->t('Impossible de créeer le dossier "' . $payslipNoDematHorodateAgentDirPath . '".');
+                                                }
+                                            }
+                                            $payslipNoDematPDFPath = $payslipNoDematHorodateAgentDirPath . DIRECTORY_SEPARATOR . $startDate . '_' . $endDate;
+                                            $pdfPayslipNoDemat = new \setasign\Fpdi\Fpdi();
+
+                                            // add all agent pdf pages
+                                            $this->_logCsvLine($this->l->t('Ajout des pages PDF au bulletin de paie à ne pas indexer.'), self::LOG_DEBUG, $agentUser, $startDate, $endDate);
+                                            foreach ($pdfPageNumList as $pdfPageNum) {
+                                                $this->_logCsvLine($this->l->t('Ajout de la page ' . $pdfPageNum . '.'), self::LOG_DEBUG, $agentUser, $startDate, $endDate);
+                                                $pdfPayslipNoDemat->AddPage();
+                                                $pdfPayslipNoDemat->setSourceFile($pdfOriginFileFullPath);
+                                                $pdfPayslipNoDematId = $pdfPayslipNoDemat->importPage($pdfPageNum);
+                                                $pdfPayslipNoDemat->useTemplate($pdfPayslipNoDematId);
                                             }
-                                        }
-                                        $payslipNoDematPDFPath = $payslipNoDematHorodateAgentDirPath . DIRECTORY_SEPARATOR . $startDate . '_' . $endDate;
-                                        $pdfPayslipNoDemat = new \setasign\Fpdi\Fpdi();
-
-                                        // add all agent pdf pages
-                                        $this->_logCsvLine($this->l->t('Ajout des pages PDF au bulletin de paie à ne pas indexer.'), self::LOG_DEBUG, $siret, $matricule, $fullname, $zipCity, $startDate, $endDate, $email);
-                                        foreach ($pdfPageNumList as $pdfPageNum) {
-                                            $this->_logCsvLine($this->l->t('Ajout de la page ' . $pdfPageNum . '.'), self::LOG_DEBUG, $siret, $matricule, $fullname, $zipCity, $startDate, $endDate, $email);
-                                            $pdfPayslipNoDemat->AddPage();
-                                            $pdfPayslipNoDemat->setSourceFile($pdfOriginFileFullPath);
-                                            $pdfPayslipNoDematId = $pdfPayslipNoDemat->importPage($pdfPageNum);
-                                            $pdfPayslipNoDemat->useTemplate($pdfPayslipNoDematId);
-                                        }
-
-                                        // create PDF payslip in no index folder
-                                        $this->_logCsvLine($this->l->t('Créer le PDF du bulletin de paie non dematérialisé.'), self::LOG_DEBUG);
-                                        $pdfPayslipNoDemat->Output('F', $userHomeFilesDirPath . DIRECTORY_SEPARATOR . $payslipNoDematPDFPath);
-                                        $pdfPayslipFilePath = $payslipNoDematPDFPath . '.pdf';
-                                        $renamed = Filesystem::rename($payslipNoDematPDFPath, $pdfPayslipFilePath);
-                                        if (!$renamed) {
-                                            $errorMsg = $this->l->t('Impossible de déplacer le PDF du bulletin de paie non dematérialisé "' . $payslipNoDematPDFPath . '".');
-                                            $this->_logCsvLine($errorMsg, self::LOG_ERROR);
-                                            $this->_processErrorMsg(-1, $errorMsg, $phaseStep, $csvCheckLineNum);
-                                        }
 
-                                        // check if file path not already archived (not have a pastell document Id)
-                                        $pdfPayslipFile = Filesystem::getFileInfo($pdfPayslipFilePath);
-                                        $dematpayslipArchiveExistList = $dematpayslipArchiveMapper->findAllByFilePath($pdfPayslipFile->getPath());
-                                        if (empty($dematpayslipArchiveExistList)) {
-                                            // insert new file to archive
-                                            $dematpayslipArchive = new DematpayslipArchive();
-                                            $dematpayslipArchive->setIdFile($pdfPayslipFile->getId());
-                                            $dematpayslipArchive->setIdUser('');
-                                            $dematpayslipArchive->setFilePath($pdfPayslipFile->getPath());
-                                            $dematpayslipArchive->setDematpayslipIdUser(0);
-                                            $dematpayslipArchive->setSiret($siret);
-                                            $dematpayslipArchive->setMatricule($matricule);
-                                            $dematpayslipArchive->setYear($year);
-                                            $dematpayslipArchive->setMonth($month);
-                                            $dematpayslipArchive->setLastname($lastname);
-                                            $dematpayslipArchive->setFirstname($firstname);
-                                            $dematpayslipArchive->setStartDate($startDate);
-                                            $dematpayslipArchive->setEndDate($endDate);
-                                            $dematpayslipArchive->setEditionDate($editionDate);
-                                            $dematpayslipArchive->setImportTime($phaseStartDateTime->getTimestamp());
-                                            $dematpayslipArchiveMapper->insert($dematpayslipArchive);
-                                        } else {
-                                            if (count($dematpayslipArchiveExistList) > 1) {
-                                                $errorMsg = $this->l->t('Plusieurs bulletins de paie ayant pour chemin "' . $pdfPayslipFile->getPath() . '" existent déjà.');
-                                                $this->_logCsvLine($errorMsg, self::LOG_ERROR, $siret, $matricule, $fullname, $zipCity, $startDate, $endDate, $email);
+                                            // create PDF payslip in no index folder
+                                            $this->_logCsvLine($this->l->t('Créer le PDF du bulletin de paie non dematérialisé.'), self::LOG_DEBUG);
+                                            $pdfPayslipNoDemat->Output('F', $userHomeFilesDirPath . DIRECTORY_SEPARATOR . $payslipNoDematPDFPath);
+                                            $pdfPayslipFilePath = $payslipNoDematPDFPath . '.pdf';
+                                            $renamed = Filesystem::rename($payslipNoDematPDFPath, $pdfPayslipFilePath);
+                                            if (!$renamed) {
+                                                $errorMsg = $this->l->t('Impossible de déplacer le PDF du bulletin de paie non dematérialisé "' . $payslipNoDematPDFPath . '".');
+                                                $this->_logCsvLine($errorMsg, self::LOG_ERROR);
                                                 $this->_processErrorMsg(-1, $errorMsg, $phaseStep, $csvCheckLineNum);
-                                            } else {
-                                                // only one payslip was found
-                                                $dematpayslipArchiveExist = $dematpayslipArchiveExistList[0];
-
-                                                if (!empty($dematpayslipArchiveExist->getPastellIdDocument())) {
-                                                    $errorMsg = $this->l->t('Ce bulletin de paie ayant pour chemin "' . $pdfPayslipFile->c() . '" est déjà en cours d\'archivage.');
-                                                    $this->_logCsvLine($errorMsg, self::LOG_ERROR, $siret, $matricule, $fullname, $zipCity, $startDate, $endDate, $email);
-                                                    $this->_processErrorMsg(-1, $errorMsg, $phaseStep, $csvCheckLineNum);
-                                                } else {
-                                                    // update file to archive
-                                                    $dematpayslipArchiveExist->setIdFile($pdfPayslipFile->getId());
-                                                    $dematpayslipArchiveExist->setIdUser('');
-                                                    $dematpayslipArchiveExist->setDematpayslipIdUser(0);
-                                                    $dematpayslipArchiveExist->setSiret($siret);
-                                                    $dematpayslipArchiveExist->setMatricule($matricule);
-                                                    $dematpayslipArchiveExist->setYear($year);
-                                                    $dematpayslipArchiveExist->setMonth($month);
-                                                    $dematpayslipArchiveExist->setLastname($lastname);
-                                                    $dematpayslipArchiveExist->setFirstname($firstname);
-                                                    $dematpayslipArchiveExist->setStartDate($startDate);
-                                                    $dematpayslipArchiveExist->setEndDate($endDate);
-                                                    $dematpayslipArchiveExist->setEditionDate($editionDate);
-                                                    $dematpayslipArchiveExist->setImportTime($phaseStartDateTime->getTimestamp());
-                                                    $dematpayslipArchiveMapper->update($dematpayslipArchiveExist);
-                                                }
                                             }
+
+                                            // save archive
+                                            $this->_archiveSaveForAgentAndPeriod($dematpayslipArchiveMapper, $dematpayslipArchive, $pdfPayslipFilePath, $agentUser, $startDate, $endDate, $year, $month, $editionDate, $phaseStartDateTime->getTimestamp());
                                         }
 
                                         $csvCheckLineNum++;
@@ -1729,8 +1814,8 @@ class PageController extends Controller {
                                     }
 
                                     // get agent from email
-                                    $this->_logCsvLine($this->l->t('Récupération de l\'utilisateur Nextcloud à partir de son email [' . $email . '].'), self::LOG_DEBUG, $siret, $matricule, $fullname, $zipCity, $startDate, $endDate, $email);
-                                    $userFindByEmailList = $userManager->getByEmail($email);
+                                    $this->_logCsvLine($this->l->t('Récupération de l\'utilisateur Nextcloud à partir de son email [' . $agentUser->getEmail() . '].'), self::LOG_DEBUG, $agentUser, $startDate, $endDate);
+                                    $userFindByEmailList = $userManager->getByEmail($agentUser->getEmail());
 
                                     // /!\ remove all users not available (FIX for multiple users with SAML)
                                     if (self::USER_REMOVE_UNKNOWN == 1) {
@@ -1738,8 +1823,8 @@ class PageController extends Controller {
                                     }
 
                                     if (count($userFindByEmailList) != 1) {
-                                        $errorMsg = $this->l->t('Impossible de trouver l\'unique utilisateur Nextcloud dont l\'email est "' . $email . '" [matricule="' . $matricule . '"].');
-                                        $this->_logCsvLine($errorMsg, self::LOG_ERROR, $siret, $matricule, $fullname, $zipCity, $startDate, $endDate, $email);
+                                        $errorMsg = $this->l->t('Impossible de trouver l\'unique utilisateur Nextcloud dont l\'email est "' . $agentUser->getEmail() . '" [matricule="' . $agentUser->getMatricule() . '"].');
+                                        $this->_logCsvLine($errorMsg, self::LOG_ERROR, $agentUser, $startDate, $endDate);
                                         $this->_processErrorMsg(-1, $errorMsg, $phaseStep, $csvCheckLineNum);
                                     }
                                     $userFindByEmail = current($userFindByEmailList);
@@ -1747,45 +1832,58 @@ class PageController extends Controller {
 
                                     if ($this->_process->getHasError() <= 0) {
                                         // dossier "SIRET-MATRICULE"
-                                        $siretMatriculeDirName = $siret . '-' . $matricule;
-                                        $this->_logCsvLine($this->l->t('Vérification l\'existance du dossier matricule [' . $siretMatriculeDirName . '].'), self::LOG_DEBUG, $siret, $matricule, $fullname, $zipCity, $startDate, $endDate, $email);
+                                        $siretMatriculeDirName = $agentUser->getSiret() . '-' . $agentUser->getMatricule();
+                                        $this->_logCsvLine($this->l->t('Vérification l\'existance du dossier matricule [' . $siretMatriculeDirName . '].'), self::LOG_DEBUG, $agentUser, $startDate, $endDate);
                                         $payslipsMatriculeDirPath = $payslipsDirPath . DIRECTORY_SEPARATOR . $siretMatriculeDirName;
                                         $isDir = Filesystem::is_dir($payslipsMatriculeDirPath);
                                         if (!$isDir) {
-                                            $this->_logCsvLine($this->l->t('Création du dossier matricule [' . $siretMatriculeDirName . '].'), self::LOG_DEBUG, $siret, $matricule, $fullname, $zipCity, $startDate, $endDate, $email);
+                                            $this->_logCsvLine($this->l->t('Création du dossier matricule [' . $siretMatriculeDirName . '].'), self::LOG_DEBUG, $agentUser, $startDate, $endDate);
                                             $dirCreated = Filesystem::mkdir($payslipsMatriculeDirPath);
                                             if (!$dirCreated) {
-                                                $errorMsg = $this->l->t('Impossible de créer le dossier "' . $payslipsMatriculeDirPath . '" [matricule="' . $matricule . '"].');
-                                                $this->_logCsvLine($errorMsg, self::LOG_ERROR, $siret, $matricule, $fullname, $zipCity, $startDate, $endDate, $email);
+                                                $errorMsg = $this->l->t('Impossible de créer le dossier "' . $payslipsMatriculeDirPath . '" [matricule="' . $agentUser->getMatricule() . '"].');
+                                                $this->_logCsvLine($errorMsg, self::LOG_ERROR, $agentUser, $startDate, $endDate);
                                                 $this->_processErrorMsg(-1, $errorMsg, $phaseStep, $csvCheckLineNum);
                                             }
 
                                             // inserer l'utilisateur de la fiche de paie (association avec son siret, matricule et email)
-                                            $this->_logCsvLine($this->l->t('Insertion de l\'utilisateur de la fiche de paie : association dossier [' . $siretMatriculeDirName . '] avec email [' . $email . '].'), self::LOG_DEBUG, $siret, $matricule, $fullname, $zipCity, $startDate, $endDate, $email);
-                                            $dematpayslipUserList = $this->_dematpayslipUserMapper->findAllBySiretAndMatricule($siret, $matricule);
+                                            $this->_logCsvLine($this->l->t('Insertion de l\'utilisateur de la fiche de paie : association dossier [' . $siretMatriculeDirName . '] avec email [' . $agentUser->getEmail() . '].'), self::LOG_DEBUG, $agentUser, $startDate, $endDate);
+                                            $dematpayslipUserList = $this->_dematpayslipUserMapper->findAllBySiretAndMatricule($agentUser->getSiret(), $agentUser->getMatricule());
                                             if (empty($dematpayslipUserList)) {
                                                 $dematpayslipUser = new DematpayslipUser();
                                                 $dematpayslipUser->setUserId($userFindByEmailId);
-                                                $dematpayslipUser->setSiret($siret);
-                                                $dematpayslipUser->setMatricule($matricule);
-                                                $dematpayslipUser->setEmail($email);
-                                                $dematpayslipUser->setLastname($lastname);
-                                                $dematpayslipUser->setFirstname($firstname);
+                                                $dematpayslipUser->setSiret($agentUser->getSiret());
+                                                $dematpayslipUser->setMatricule($agentUser->getMatricule());
+                                                $dematpayslipUser->setEmail($agentUser->getEmail());
+                                                $dematpayslipUser->setLastname($agentUser->getLastname());
+                                                $dematpayslipUser->setFirstname($agentUser->getFirstname());
+                                                $dematpayslipUser->setZipCity($agentUser->getZipCity());
                                                 $this->_dematpayslipUserMapper->insert($dematpayslipUser);
                                             } else {
-                                                $errorMsg = $this->l->t('L\'utilisateur "' . $userFindByEmailId . '" est déjà associé à un dossier SIRET-MATRICULE [siret="' . $siret . '", matricule="' . $matricule . '", email="' . $email . '"].');
-                                                $this->_logCsvLine($errorMsg, self::LOG_ERROR, $siret, $matricule, $fullname, $zipCity, $startDate, $endDate, $email);
+                                                $errorMsg = $this->l->t('L\'utilisateur "' . $userFindByEmailId . '" est déjà associé à un dossier SIRET-MATRICULE [siret="' . $agentUser->getSiret() . '", matricule="' . $agentUser->getMatricule() . '", email="' . $agentUser->getEmail() . '"].');
+                                                $this->_logCsvLine($errorMsg, self::LOG_ERROR, $agentUser, $startDate, $endDate);
                                                 $this->_processErrorMsg(-1, $errorMsg, $phaseStep, $csvCheckLineNum);
                                             }
                                         }
 
                                         if ($this->_process->getHasError() <= 0) {
                                             // recuperer l'utilisateur associe au dossier "SIRET-MATRICULE" cree
-                                            $this->_logCsvLine($this->l->t('Récupération de l\'utilisateur associé au dossier SIRET-MATRICULE [' . $siretMatriculeDirName . '].'), self::LOG_DEBUG, $siret, $matricule, $fullname, $zipCity, $startDate, $endDate, $email);
-                                            $dematpayslipUserList = $this->_dematpayslipUserMapper->findAllBySiretAndMatricule($siret, $matricule);
+                                            $this->_logCsvLine($this->l->t('Récupération de l\'utilisateur associé au dossier SIRET-MATRICULE [' . $siretMatriculeDirName . '].'), self::LOG_DEBUG, $agentUser, $startDate, $endDate);
+                                            $dematpayslipUserList = $this->_dematpayslipUserMapper->findAllBySiretAndMatricule($agentUser->getSiret(), $agentUser->getMatricule());
                                             if (count($dematpayslipUserList) === 1) {
                                                 $dematpayslipUser = $dematpayslipUserList[0];
 
+                                                // update user for new version
+                                                if (empty($dematpayslipUser->getLastname()) || empty($dematpayslipUser->getFirstname()) || empty($dematpayslipUser->getZipCity())) {
+                                                    $dematpayslipUser->setLastname($agentUser->getLastname());
+                                                    $dematpayslipUser->setFirstname($agentUser->getFirstname());
+                                                    $dematpayslipUser->setZipCity($agentUser->getZipCity());
+                                                    $this->_dematpayslipUserMapper->update($dematpayslipUser);
+                                                }
+
+                                                // set agent user id
+                                                $agentUser->setId($dematpayslipUser->getId());
+                                                $agentUser->setUserId($dematpayslipUser->getUserId());
+
                                                 // si l'utilisateur n'a pas desactive la dematerialisation de son bulletin de paie
                                                 if ($dematpayslipUser->getDisabled() != 1) {
                                                     // creer le partage du dossier "SIRET-MATRICULE"
@@ -1794,7 +1892,7 @@ class PageController extends Controller {
                                                     // verifier si le dossier n'est pas deja partage
                                                     if (!in_array($payslipsMatriculeDirPathNode->getId(), $payslipMatriculeShareNodeIdList)) {
                                                         // partager le dossier MATRICULE en lecture seule avec l'utilisateur trouve a partir de son email
-                                                        $this->_logCsvLine($this->l->t('Partage du dossier SIRET-MATRICULE [' . $siretMatriculeDirName . '] en lecture seule.'), self::LOG_DEBUG, $siret, $matricule, $fullname, $zipCity, $startDate, $endDate, $email);
+                                                        $this->_logCsvLine($this->l->t('Partage du dossier SIRET-MATRICULE [' . $siretMatriculeDirName . '] en lecture seule.'), self::LOG_DEBUG, $agentUser, $startDate, $endDate);
                                                         $payslipMatriculeShare = $shareManager->newShare();
                                                         $payslipMatriculeShare->setNode($payslipsMatriculeDirPathNode);
                                                         $payslipMatriculeShare->setShareType(\OC\Share\Share::SHARE_TYPE_USER);
@@ -1803,138 +1901,100 @@ class PageController extends Controller {
                                                         $payslipMatriculeShare->setSharedBy($this->userId);
                                                         $payslipMatriculeShare = $shareManager->createShare($payslipMatriculeShare);
                                                     } else {
-                                                        $this->_logCsvLine($this->l->t('Dossier SIRET-MATRICULE [' . $siretMatriculeDirName . '] est déjà partagé.'), self::LOG_DEBUG, $siret, $matricule, $fullname, $zipCity, $startDate, $endDate, $email);
+                                                        $this->_logCsvLine($this->l->t('Dossier SIRET-MATRICULE [' . $siretMatriculeDirName . '] est déjà partagé.'), self::LOG_DEBUG, $agentUser, $startDate, $endDate);
                                                     }
 
                                                     // dossier "SIRET-MATRICULE/ANNEE"
-                                                    $this->_logCsvLine($this->l->t('Vérification de l\'existance du dossier de l\'annéee [' . $csvCheckYear . '].'), self::LOG_DEBUG, $siret, $matricule, $fullname, $zipCity, $startDate, $endDate, $email);
-                                                    $payslipsMatriculeYearDirPath = $payslipsMatriculeDirPath . DIRECTORY_SEPARATOR . $csvCheckYear;
+                                                    $this->_logCsvLine($this->l->t('Vérification de l\'existance du dossier de l\'annéee [' . $year . '].'), self::LOG_DEBUG, $agentUser, $startDate, $endDate);
+                                                    $payslipsMatriculeYearDirPath = $payslipsMatriculeDirPath . DIRECTORY_SEPARATOR . $year;
                                                     $isDir = Filesystem::is_dir($payslipsMatriculeYearDirPath);
                                                     if (!$isDir) {
-                                                        $this->_logCsvLine($this->l->t('Création du dossier de l\'annéee [' . $csvCheckYear . '].'), self::LOG_DEBUG, $siret, $matricule, $fullname, $zipCity, $startDate, $endDate, $email);
+                                                        $this->_logCsvLine($this->l->t('Création du dossier de l\'annéee [' . $year . '].'), self::LOG_DEBUG, $agentUser, $startDate, $endDate);
                                                         $dirCreated = Filesystem::mkdir($payslipsMatriculeYearDirPath);
                                                         if (!$dirCreated) {
-                                                            $errorMsg = $this->l->t('Impossible de créer le dossier "' . $payslipsMatriculeYearDirPath . '[siret="' . $siret . '", matricule="' . $matricule . '", année="' . $csvCheckYear . '"].');
-                                                            $this->_logCsvLine($errorMsg, self::LOG_ERROR, $siret, $matricule, $fullname, $zipCity, $startDate, $endDate, $email);
+                                                            $errorMsg = $this->l->t('Impossible de créer le dossier "' . $payslipsMatriculeYearDirPath . '[siret="' . $agentUser->getSiret() . '", matricule="' . $agentUser->getMatricule() . '", année="' . $year . '"].');
+                                                            $this->_logCsvLine($errorMsg, self::LOG_ERROR, $agentUser, $startDate, $endDate);
                                                             $this->_processErrorMsg(-1, $errorMsg, $phaseStep, $csvCheckLineNum);
                                                         }
                                                     }
 
                                                     if ($this->_process->getHasError() <= 0) {
-                                                        // deplacer le fichier PDF du bulletin de paie de l'agent dans "SIRET-MATRICULE/ANNEE/PERIODE.pdf"
-                                                        $pdfPayslipCheckFileName = ($csvCheckLineNum + 1) . '_' . $matricule . '.pdf';
-                                                        $pdfPayslipCheckFilePath = $this->_checkDirUserPath . DIRECTORY_SEPARATOR . $pdfPayslipCheckFileName;
-                                                        $pdfPayslipFilePath = $payslipsMatriculeYearDirPath . DIRECTORY_SEPARATOR . $csvCheckPeriod . '.pdf';
-                                                        $this->_logCsvLine($this->l->t('Déplacement du fichier PDF du bulletin de paie de la période [' . $csvCheckPeriod . '].'), self::LOG_DEBUG, $siret, $matricule, $fullname, $zipCity, $startDate, $endDate, $email);
-                                                        $renamed = Filesystem::rename($pdfPayslipCheckFilePath, $pdfPayslipFilePath);
-                                                        if (!$renamed) {
-                                                            $errorMsg = $this->l->t('Impossible de déplacer le bulletin de paie "' . $pdfPayslipCheckFileName . '" dans le dossier "' . $pdfPayslipFilePath . '".');
-                                                            $this->_logCsvLine($errorMsg, self::LOG_ERROR, $siret, $matricule, $fullname, $zipCity, $startDate, $endDate, $email);
-                                                            $this->_processErrorMsg(-1, $errorMsg, $phaseStep, $csvCheckLineNum);
+                                                        // check if not already archived
+                                                        $dematpayslipArchive = $this->_archiveCheckBeforeSave($dematpayslipArchiveMapper, $agentUser, $startDate, $endDate);
+
+                                                        if (!empty($dematpayslipArchive)) {
+                                                            // deplacer le fichier PDF du bulletin de paie de l'agent dans "SIRET-MATRICULE/ANNEE/PERIODE.pdf"
+                                                            $pdfPayslipCheckFileName = ($csvCheckLineNum + 1) . '_' . $agentUser->getMatricule() . '.pdf';
+                                                            $pdfPayslipCheckFilePath = $this->_checkDirUserPath . DIRECTORY_SEPARATOR . $pdfPayslipCheckFileName;
+                                                            $pdfPayslipFilePath = $payslipsMatriculeYearDirPath . DIRECTORY_SEPARATOR . $period . '.pdf';
+                                                            $this->_logCsvLine($this->l->t('Déplacement du fichier PDF du bulletin de paie de la période [' . $period . '].'), self::LOG_DEBUG, $agentUser, $startDate, $endDate);
+                                                            $renamed = Filesystem::rename($pdfPayslipCheckFilePath, $pdfPayslipFilePath);
+                                                            if (!$renamed) {
+                                                                $errorMsg = $this->l->t('Impossible de déplacer le bulletin de paie "' . $pdfPayslipCheckFileName . '" dans le dossier "' . $pdfPayslipFilePath . '".');
+                                                                $this->_logCsvLine($errorMsg, self::LOG_ERROR, $agentUser, $startDate, $endDate);
+                                                                $this->_processErrorMsg(-1, $errorMsg, $phaseStep, $csvCheckLineNum);
+                                                            }
+
+                                                            // save archive
+                                                            $this->_archiveSaveForAgentAndPeriod($dematpayslipArchiveMapper, $dematpayslipArchive, $pdfPayslipFilePath, $agentUser, $startDate, $endDate, $year, $month, $editionDate, $phaseStartDateTime->getTimestamp());
                                                         }
                                                     }
                                                 } else {
                                                     // agent disabled payslip
-                                                    $this->_logCsvLine($this->l->t('L\'utlisateur a désactivé la dématérialisation des fiches de paie [email=' . $email . '].'), self::LOG_DEBUG, $siret, $matricule, $fullname, $zipCity, $startDate, $endDate, $email);
-
-                                                    // create PDF payslip
-                                                    $payslipNoDematHorodateDirPath = $this->_payslipNoIndexDir . DIRECTORY_SEPARATOR . $phaseStartDateTime->format('Y-m-d_H-i-s');
-                                                    $isDir = Filesystem::is_dir($payslipNoDematHorodateDirPath);
-                                                    if (!$isDir) {
-                                                        $dirCreated = Filesystem::mkdir($payslipNoDematHorodateDirPath);
-                                                        if (!$dirCreated) {
-                                                            $this->_msgList['error'][] = $this->l->t('Impossible de créeer le dossier "' . $payslipNoDematHorodateDirPath . '".');
+                                                    $this->_logCsvLine($this->l->t('L\'utlisateur a désactivé la dématérialisation des fiches de paie [email=' . $agentUser->getEmail() . '].'), self::LOG_DEBUG, $agentUser, $startDate, $endDate);
+
+                                                    // check if not already archived
+                                                    $dematpayslipArchive = $this->_archiveCheckBeforeSave($dematpayslipArchiveMapper, $agentUser, $startDate, $endDate);
+
+                                                    if (!empty($dematpayslipArchive)) {
+                                                        // create PDF payslip
+                                                        $payslipNoDematHorodateDirPath = $this->_payslipNoIndexDir . DIRECTORY_SEPARATOR . $phaseStartDateTime->format('Y-m-d_H-i-s');
+                                                        $isDir = Filesystem::is_dir($payslipNoDematHorodateDirPath);
+                                                        if (!$isDir) {
+                                                            $dirCreated = Filesystem::mkdir($payslipNoDematHorodateDirPath);
+                                                            if (!$dirCreated) {
+                                                                $this->_msgList['error'][] = $this->l->t('Impossible de créeer le dossier "' . $payslipNoDematHorodateDirPath . '".');
+                                                            }
                                                         }
-                                                    }
-                                                    $payslipNoDematHorodateAgentDirPath = $payslipNoDematHorodateDirPath . DIRECTORY_SEPARATOR . $matricule . '-' . $siret;
-                                                    $isDir = Filesystem::is_dir($payslipNoDematHorodateAgentDirPath);
-                                                    if (!$isDir) {
-                                                        $dirCreated = Filesystem::mkdir($payslipNoDematHorodateAgentDirPath);
-                                                        if (!$dirCreated) {
-                                                            $this->_msgList['error'][] = $this->l->t('Impossible de créeer le dossier "' . $payslipNoDematHorodateAgentDirPath . '".');
+                                                        $payslipNoDematHorodateAgentDirPath = $payslipNoDematHorodateDirPath . DIRECTORY_SEPARATOR . $agentUser->getSiret() . '-' . $agentUser->getMatricule();
+                                                        $isDir = Filesystem::is_dir($payslipNoDematHorodateAgentDirPath);
+                                                        if (!$isDir) {
+                                                            $dirCreated = Filesystem::mkdir($payslipNoDematHorodateAgentDirPath);
+                                                            if (!$dirCreated) {
+                                                                $this->_msgList['error'][] = $this->l->t('Impossible de créeer le dossier "' . $payslipNoDematHorodateAgentDirPath . '".');
+                                                            }
+                                                        }
+                                                        $payslipNoDematPDFPath = $payslipNoDematHorodateAgentDirPath . DIRECTORY_SEPARATOR . $startDate . '_' . $endDate;
+                                                        $pdfPayslipNoDemat = new \setasign\Fpdi\Fpdi();
+
+                                                        // add all agent pdf pages
+                                                        $this->_logCsvLine($this->l->t('Ajout des pages PDF au bulletin de paie à ne pas indexer.'), self::LOG_DEBUG, $agentUser, $startDate, $endDate);
+                                                        foreach ($pdfPageNumList as $pdfPageNum) {
+                                                            $this->_logCsvLine($this->l->t('Ajout de la page ' . $pdfPageNum . '.'), self::LOG_DEBUG, $agentUser, $startDate, $endDate);
+                                                            $pdfPayslipNoDemat->AddPage();
+                                                            $pdfPayslipNoDemat->setSourceFile($pdfOriginFileFullPath);
+                                                            $pdfPayslipNoDematId = $pdfPayslipNoDemat->importPage($pdfPageNum);
+                                                            $pdfPayslipNoDemat->useTemplate($pdfPayslipNoDematId);
                                                         }
-                                                    }
-                                                    $payslipNoDematPDFPath = $payslipNoDematHorodateAgentDirPath . DIRECTORY_SEPARATOR . $startDate . '_' . $endDate;
-                                                    $pdfPayslipNoDemat = new \setasign\Fpdi\Fpdi();
-
-                                                    // add all agent pdf pages
-                                                    $this->_logCsvLine($this->l->t('Ajout des pages PDF au bulletin de paie à ne pas indexer.'), self::LOG_DEBUG, $siret, $matricule, $fullname, $zipCity, $startDate, $endDate, $email);
-                                                    foreach ($pdfPageNumList as $pdfPageNum) {
-                                                        $this->_logCsvLine($this->l->t('Ajout de la page ' . $pdfPageNum . '.'), self::LOG_DEBUG, $siret, $matricule, $fullname, $zipCity, $startDate, $endDate, $email);
-                                                        $pdfPayslipNoDemat->AddPage();
-                                                        $pdfPayslipNoDemat->setSourceFile($pdfOriginFileFullPath);
-                                                        $pdfPayslipNoDematId = $pdfPayslipNoDemat->importPage($pdfPageNum);
-                                                        $pdfPayslipNoDemat->useTemplate($pdfPayslipNoDematId);
-                                                    }
-
-                                                    // create PDF payslip in no index folder
-                                                    $this->_logCsvLine($this->l->t('Créer le PDF du bulletin de paie non dematérialisé.'), self::LOG_DEBUG);
-                                                    $pdfPayslipNoDemat->Output('F', $userHomeFilesDirPath . DIRECTORY_SEPARATOR . $payslipNoDematPDFPath);
-                                                    $pdfPayslipFilePath = $payslipNoDematPDFPath . '.pdf';
-                                                    $renamed = Filesystem::rename($payslipNoDematPDFPath, $pdfPayslipFilePath);
-                                                    if (!$renamed) {
-                                                        $errorMsg = $this->l->t('Impossible de déplacer le PDF du bulletin de paie non dematérialisé "' . $payslipNoDematPDFPath . '".');
-                                                        $this->_logCsvLine($errorMsg, self::LOG_ERROR);
-                                                        $this->_processErrorMsg(-1, $errorMsg, $phaseStep, $csvCheckLineNum);
-                                                    }
-                                                }
-
-                                                // check if file path not already archived (not have a pastell document Id)
-                                                $pdfPayslipFile = Filesystem::getFileInfo($pdfPayslipFilePath);
-                                                $dematpayslipArchiveExistList = $dematpayslipArchiveMapper->findAllByFilePath($pdfPayslipFile->getPath());
-                                                if (empty($dematpayslipArchiveExistList)) {
-                                                    // insert new file to archive
-                                                    $dematpayslipArchive = new DematpayslipArchive();
-                                                    $dematpayslipArchive->setIdFile($pdfPayslipFile->getId());
-                                                    $dematpayslipArchive->setIdUser($dematpayslipUser->getUserId());
-                                                    $dematpayslipArchive->setFilePath($pdfPayslipFile->getPath());
-                                                    $dematpayslipArchive->setDematpayslipIdUser($dematpayslipUser->getId());
-                                                    $dematpayslipArchive->setSiret($siret);
-                                                    $dematpayslipArchive->setMatricule($matricule);
-                                                    $dematpayslipArchive->setYear($year);
-                                                    $dematpayslipArchive->setMonth($month);
-                                                    $dematpayslipArchive->setLastname($lastname);
-                                                    $dematpayslipArchive->setFirstname($firstname);
-                                                    $dematpayslipArchive->setStartDate($startDate);
-                                                    $dematpayslipArchive->setEndDate($endDate);
-                                                    $dematpayslipArchive->setEditionDate($editionDate);
-                                                    $dematpayslipArchive->setImportTime($phaseStartDateTime->getTimestamp());
-                                                    $dematpayslipArchiveMapper->insert($dematpayslipArchive);
-                                                } else {
-                                                    if (count($dematpayslipArchiveExistList) > 1) {
-                                                        $errorMsg = $this->l->t('Plusieurs bulletins de paie ayant pour chemin "' . $pdfPayslipFile->getPath() . '" existent déjà.');
-                                                        $this->_logCsvLine($errorMsg, self::LOG_ERROR, $siret, $matricule, $fullname, $zipCity, $startDate, $endDate, $email);
-                                                        $this->_processErrorMsg(-1, $errorMsg, $phaseStep, $csvCheckLineNum);
-                                                    } else {
-                                                        // only one payslip was found
-                                                        $dematpayslipArchiveExist = $dematpayslipArchiveExistList[0];
 
-                                                        if (!empty($dematpayslipArchiveExist->getPastellIdDocument())) {
-                                                            $errorMsg = $this->l->t('Ce bulletin de paie ayant pour chemin "' . $pdfPayslipFile->getPath() . '" est déjà en cours d\'archivage.');
-                                                            $this->_logCsvLine($errorMsg, self::LOG_ERROR, $siret, $matricule, $fullname, $zipCity, $startDate, $endDate, $email);
+                                                        // create PDF payslip in no index folder
+                                                        $this->_logCsvLine($this->l->t('Créer le PDF du bulletin de paie non dematérialisé.'), self::LOG_DEBUG);
+                                                        $pdfPayslipNoDemat->Output('F', $userHomeFilesDirPath . DIRECTORY_SEPARATOR . $payslipNoDematPDFPath);
+                                                        $pdfPayslipFilePath = $payslipNoDematPDFPath . '.pdf';
+                                                        $renamed = Filesystem::rename($payslipNoDematPDFPath, $pdfPayslipFilePath);
+                                                        if (!$renamed) {
+                                                            $errorMsg = $this->l->t('Impossible de déplacer le PDF du bulletin de paie non dematérialisé "' . $payslipNoDematPDFPath . '".');
+                                                            $this->_logCsvLine($errorMsg, self::LOG_ERROR);
                                                             $this->_processErrorMsg(-1, $errorMsg, $phaseStep, $csvCheckLineNum);
-                                                        } else {
-                                                            // update file to archive
-                                                            $dematpayslipArchiveExist->setIdFile($pdfPayslipFile->getId());
-                                                            $dematpayslipArchiveExist->setIdUser($dematpayslipUser->getUserId());
-                                                            $dematpayslipArchiveExist->setDematpayslipIdUser($dematpayslipUser->getId());
-                                                            $dematpayslipArchiveExist->setSiret($siret);
-                                                            $dematpayslipArchiveExist->setMatricule($matricule);
-                                                            $dematpayslipArchiveExist->setYear($year);
-                                                            $dematpayslipArchiveExist->setMonth($month);
-                                                            $dematpayslipArchiveExist->setLastname($lastname);
-                                                            $dematpayslipArchiveExist->setFirstname($firstname);
-                                                            $dematpayslipArchiveExist->setStartDate($startDate);
-                                                            $dematpayslipArchiveExist->setEndDate($endDate);
-                                                            $dematpayslipArchiveExist->setEditionDate($editionDate);
-                                                            $dematpayslipArchiveExist->setImportTime($phaseStartDateTime->getTimestamp());
-                                                            $dematpayslipArchiveMapper->update($dematpayslipArchiveExist);
                                                         }
+
+                                                        // save archive
+                                                        $this->_archiveSaveForAgentAndPeriod($dematpayslipArchiveMapper, $dematpayslipArchive, $pdfPayslipFilePath, $agentUser, $startDate, $endDate, $year, $month, $editionDate, $phaseStartDateTime->getTimestamp());
                                                     }
                                                 }
                                             } else {
-                                                $errorMsg = $this->l->t('L\'utilisateur "' . $userFindByEmailId . '" n\'a pas de dossier SIRET-MATRICULE associé [siret="' . $siret . '", matricule="' . $matricule . '", email="' . $email . '"].');
-                                                $this->_logCsvLine($errorMsg, self::LOG_ERROR, $siret, $matricule, $fullname, $zipCity, $startDate, $endDate, $email);
+                                                $errorMsg = $this->l->t('L\'utilisateur "' . $userFindByEmailId . '" n\'a pas de dossier SIRET-MATRICULE associé [siret="' . $agentUser->getSiret() . '", matricule="' . $agentUser->getMatricule() . '", email="' . $agentUser->getEmail() . '"].');
+                                                $this->_logCsvLine($errorMsg, self::LOG_ERROR, $agentUser, $startDate, $endDate);
                                                 $this->_processErrorMsg(-1, $errorMsg, $phaseStep, $csvCheckLineNum);
                                             }
                                         }
@@ -2266,23 +2326,29 @@ class PageController extends Controller {
             if ($archived === null) {
                 $archived = -1;
             }
+            $refresh = false;
 
             $action = filter_input(INPUT_POST, 'action', FILTER_SANITIZE_STRING);
             $archiveSelectIdList = filter_input(INPUT_POST, 'archive_select', FILTER_DEFAULT, FILTER_REQUIRE_ARRAY);
 
-            if (!empty($archiveSelectIdList)) {
+            if ($action == 'refresh_status') {
+                // refresh all archive status
+                $refresh = true;
+            } elseif ($action == 'create') {
                 $dematpayslipArchiveMapper = new DematpayslipArchiveMapper(\OC::$server->getDatabaseConnection());
 
-                if ($action == 'create') {
+                if (!empty($archiveSelectIdList)) {
                     foreach ($archiveSelectIdList as $archiveSelectId) {
                         $dematpayslipArchive = $dematpayslipArchiveMapper->find(intval($archiveSelectId));
                         if (!empty($dematpayslipArchive)) {
                             $archiveFlowNum = 1; // archiving for 5 years by default
 
                             // get dematpayslip user
-                            $dematpayslipUser = $this->_dematpayslipUserMapper->find($dematpayslipArchive->getDematpayslipIdUser());
-                            if ($dematpayslipUser->getDisabled() == 0) {
-                                $archiveFlowNum = 2; // archiving for 50 years
+                            if (!empty($dematpayslipArchive->getDematpayslipIdUser())) {
+                                $dematpayslipUser = $this->_dematpayslipUserMapper->find($dematpayslipArchive->getDematpayslipIdUser());
+                                if ($dematpayslipUser->getDisabled() == 0) {
+                                    $archiveFlowNum = 2; // archiving for 50 years
+                                }
                             }
 
                             // Pastell API config
@@ -2294,16 +2360,9 @@ class PageController extends Controller {
                                 // Pastell API connection
                                 $pastellAPI = new PastellAPI($pastellConfigFlow->getIdConfig());
 
+                                $canCreateArchive = false;
                                 if (empty($dematpayslipArchive->getPastellIdDocument())) {
-                                    // create document
-                                    $responseData = $pastellAPI->postEntityDocument($pastellConfigFlow->getIdE(), array(
-                                        'type' => 'pdf-generique'
-                                    ));
-                                    $dematpayslipArchive->setPastellIdDocument($responseData['id_d']);
-                                    $dematpayslipArchive->setPastellLastAction($responseData['last_action']['action']);
-                                    $dematpayslipArchiveMapper->update($dematpayslipArchive);
-
-                                    $this->_msgList['success'][] = $this->l->t('L\'archive a été créée.');
+                                    $canCreateArchive = true;
                                 } else {
                                     // get and modify document last action
                                     $responseData = $pastellAPI->getEntityDocument($pastellConfigFlow->getIdE(), $dematpayslipArchive->getPastellIdDocument());
@@ -2312,71 +2371,84 @@ class PageController extends Controller {
                                         $dematpayslipArchiveMapper->update($dematpayslipArchive);
                                     }
                                 }
-                                if ($dematpayslipArchive->getPastellLastAction() == 'creation') {
-                                    // set document title
-                                    $responseData = $pastellAPI->patchEntityDocument($pastellConfigFlow->getIdE(), $dematpayslipArchive->getPastellIdDocument(), array(
-                                        'libelle' => $dematpayslipArchive->getId() . '_' . $dematpayslipArchive->getIdUser() . '_' . $dematpayslipArchive->getStartDate() . '_' . $dematpayslipArchive->getEndDate()
+
+                                if ($canCreateArchive === false) {
+                                    $this->_msgList['error'][] = $this->l->t('L\'archive "' . $dematpayslipArchive->getFilePath() . '" a déjà été créée.');
+                                } else {
+                                    // create document
+                                    $responseData = $pastellAPI->postEntityDocument($pastellConfigFlow->getIdE(), array(
+                                        'type' => 'pdf-generique'
                                     ));
-                                    $dematpayslipArchive->setPastellLastAction($responseData['content']['last_action']['action']);
-                                    $dematpayslipArchiveMapper->update($dematpayslipArchive);
-                                    $this->_msgList['success'][] = $this->l->t('Le titre de l\'archive a été ajouté.');
-                                }
-                                if ($dematpayslipArchive->getPastellLastAction() == 'modification') {
-                                    // send document file
-                                    $fileId = $dematpayslipArchive->getIdFile();
-                                    $filePath = Filesystem::getPath($fileId);
-                                    $file = Filesystem::getFileInfo($filePath);
-                                    $fileName = $file->getName();
-                                    $fileContent = 'TEST';
-                                    //$fileContent = Filesystem::file_get_contents($filePath);
-                                    $responseData = $pastellAPI->postEntityDocumentFile($pastellConfigFlow->getIdE(), $dematpayslipArchive->getPastellIdDocument(), 'document', 0, $fileName, $fileContent);
-                                    $dematpayslipArchive->setPastellLastAction($responseData['content']['last_action']['action']);
+                                    $dematpayslipArchive->setPastellIdDocument($responseData['id_d']);
+                                    $dematpayslipArchive->setPastellLastAction($responseData['last_action']['action']);
                                     $dematpayslipArchiveMapper->update($dematpayslipArchive);
-                                    $this->_msgList['success'][] = $this->l->t('Le bulletin de paie a été envoyé sur l\'archive.');
-
-                                    // set orientation action on document
-                                    $responseData = $pastellAPI->postEntityDocumentAction($pastellConfigFlow->getIdE(), $dematpayslipArchive->getPastellIdDocument(), 'orientation');
-                                    if ($responseData['result'] == true) {
-                                        // get and modify document last action
-                                        $responseData = $pastellAPI->getEntityDocument($pastellConfigFlow->getIdE(), $dematpayslipArchive->getPastellIdDocument());
-                                        if (!empty($responseData['last_action']['action'])) {
-                                            $dematpayslipArchive->setPastellLastAction($responseData['last_action']['action']);
-                                            $dematpayslipArchiveMapper->update($dematpayslipArchive);
+
+                                    if ($dematpayslipArchive->getPastellLastAction() == 'creation') {
+                                        // set document title
+                                        $responseData = $pastellAPI->patchEntityDocument($pastellConfigFlow->getIdE(), $dematpayslipArchive->getPastellIdDocument(), array(
+                                            'libelle' => $dematpayslipArchive->getId() . '_' . $dematpayslipArchive->getStartDate() . '_' . $dematpayslipArchive->getEndDate()
+                                        ));
+                                        $dematpayslipArchive->setPastellLastAction($responseData['content']['last_action']['action']);
+                                        $dematpayslipArchiveMapper->update($dematpayslipArchive);
+                                    }
+                                    if ($dematpayslipArchive->getPastellLastAction() == 'modification') {
+                                        // send document file
+                                        $fileId = $dematpayslipArchive->getIdFile();
+                                        $filePath = Filesystem::getPath($fileId);
+                                        $file = Filesystem::getFileInfo($filePath);
+                                        $fileName = $file->getName();
+                                        $fileContent = 'TEST';
+                                        //$fileContent = Filesystem::file_get_contents($filePath);
+                                        $responseData = $pastellAPI->postEntityDocumentFile($pastellConfigFlow->getIdE(), $dematpayslipArchive->getPastellIdDocument(), 'document', 0, $fileName, $fileContent);
+                                        $dematpayslipArchive->setPastellLastAction($responseData['content']['last_action']['action']);
+                                        $dematpayslipArchiveMapper->update($dematpayslipArchive);
+
+                                        // set orientation action on document
+                                        $responseData = $pastellAPI->postEntityDocumentAction($pastellConfigFlow->getIdE(), $dematpayslipArchive->getPastellIdDocument(), 'orientation');
+                                        if ($responseData['result'] == true) {
+                                            // get and modify document last action
+                                            $responseData = $pastellAPI->getEntityDocument($pastellConfigFlow->getIdE(), $dematpayslipArchive->getPastellIdDocument());
+                                            if (!empty($responseData['last_action']['action'])) {
+                                                $dematpayslipArchive->setPastellLastAction($responseData['last_action']['action']);
+                                                $dematpayslipArchiveMapper->update($dematpayslipArchive);
+                                            }
                                         }
-                                        $this->_msgList['success'][] = $this->l->t('L\'action d\'orientation a été activée.');
                                     }
-                                }
-                                if ($dematpayslipArchive->getPastellLastAction() == 'preparation-suppression-automatique') {
-                                    // create "sae_config" JSON file and send it
-                                    $saeConfigArr = array(
-                                        'matricule' => $dematpayslipArchive->getMatricule(),
-                                        'mois' => $dematpayslipArchive->getMonth(),
-                                        'annee' => $dematpayslipArchive->getYear(),
-                                        'nom' => $dematpayslipArchive->getLastname(),
-                                        'prenom' => $dematpayslipArchive->getFirstname(),
-                                        'date_edition' => $dematpayslipArchive->getEditionDate(),
-                                        'periode_2_de_paie' => $dematpayslipArchive->getEndDate(),
-                                        'periode_1_de_paie' => $dematpayslipArchive->getStartDate(),
-                                    );
-                                    $jsonFileName = $this->_tmpDirUserPath . DIRECTORY_SEPARATOR . 'sae_config.json';
-                                    $jsonFilePath = $jsonFileName;
-                                    Filesystem::fopen($jsonFilePath, 'w+');
-                                    Filesystem::file_put_contents($jsonFilePath, json_encode($saeConfigArr));
-
-                                    // add meta-data on document
-                                    $jsonFileContent = Filesystem::file_get_contents($jsonFilePath);
-                                    $responseData = $pastellAPI->postEntityDocumentFile($pastellConfigFlow->getIdE(), $dematpayslipArchive->getPastellIdDocument(), 'sae_config', 0, $jsonFileName, $jsonFileContent);
-                                    $dematpayslipArchive->setPastellLastAction($responseData['content']['last_action']['action']);
-                                    $dematpayslipArchiveMapper->update($dematpayslipArchive);
-                                    $this->_msgList['success'][] = $this->l->t('Les méta-données du bulletin de paie ont été ajoutées sur l\'archive.');
-                                    //$this->_msgList['success'][] = var_export($responseData, true);
+                                    if ($dematpayslipArchive->getPastellLastAction() == 'preparation-suppression-automatique') {
+                                        // create "sae_config" JSON file and send it
+                                        $saeConfigArr = array(
+                                            'matricule' => $dematpayslipArchive->getMatricule(),
+                                            'mois' => $dematpayslipArchive->getMonth(),
+                                            'annee' => $dematpayslipArchive->getYear(),
+                                            'nom' => $dematpayslipArchive->getLastname(),
+                                            'prenom' => $dematpayslipArchive->getFirstname(),
+                                            'date_edition' => $dematpayslipArchive->getEditionDate(),
+                                            'periode_2_de_paie' => $dematpayslipArchive->getEndDate(),
+                                            'periode_1_de_paie' => $dematpayslipArchive->getStartDate(),
+                                        );
+                                        $jsonFileName = 'sae_config.json';
+                                        $jsonFilePath = $this->_tmpDirUserPath . DIRECTORY_SEPARATOR . $jsonFileName;
+                                        Filesystem::fopen($jsonFilePath, 'w+');
+                                        Filesystem::file_put_contents($jsonFilePath, json_encode($saeConfigArr));
+
+                                        // add meta-data on document
+                                        $jsonFileContent = Filesystem::file_get_contents($jsonFilePath);
+                                        $responseData = $pastellAPI->postEntityDocumentFile($pastellConfigFlow->getIdE(), $dematpayslipArchive->getPastellIdDocument(), 'sae_config', 0, $jsonFileName, $jsonFileContent);
+                                        $dematpayslipArchive->setPastellLastAction($responseData['content']['last_action']['action']);
+                                        $dematpayslipArchiveMapper->update($dematpayslipArchive);
+                                        $this->_msgList['success'][] = $this->l->t('L\'archive "' . $dematpayslipArchive->getFilePath() . '" a été créée.');
+                                    }
                                 }
                             } catch (\Exception $e) {
                                 $this->_msgList['error'][] = $e->getMessage();
                             }
                         }
                     }
-                } elseif ($action == 'delete') {
+                }
+            } elseif ($action == 'delete') {
+                $dematpayslipArchiveMapper = new DematpayslipArchiveMapper(\OC::$server->getDatabaseConnection());
+
+                if (!empty($archiveSelectIdList)) {
                     foreach ($archiveSelectIdList as $archiveSelectId) {
                         $dematpayslipArchive = $dematpayslipArchiveMapper->find(intval($archiveSelectId));
                         if (!empty($dematpayslipArchive)) {
@@ -2390,7 +2462,7 @@ class PageController extends Controller {
                 }
             }
 
-            return new TemplateResponse('dematpayslip', 'archive_list', $this->_assignArchiveList($archived));
+            return new TemplateResponse('dematpayslip', 'archive_list', $this->_assignArchiveList($archived, $refresh));
         } else {
             return $this->shares();
         }
diff --git a/lib/Db/DematpayslipArchive.php b/lib/Db/DematpayslipArchive.php
index 7224951..02c699c 100644
--- a/lib/Db/DematpayslipArchive.php
+++ b/lib/Db/DematpayslipArchive.php
@@ -25,6 +25,7 @@ class DematpayslipArchive extends Entity implements JsonSerializable {
     protected $pastellUrl;
     protected $pastellLastAction;
     protected $importTime;
+    protected $checksum;
 
     public function jsonSerialize() {
         return [
@@ -47,6 +48,7 @@ class DematpayslipArchive extends Entity implements JsonSerializable {
             'pastellUrl'         => $this->pastellUrl,
             'pastellLastAction'  => $this->pastellLastAction,
             'importTime'         => $this->importTime,
+            'checksum'           => $this->checksum,
         ];
     }
 }
diff --git a/lib/Db/DematpayslipArchiveMapper.php b/lib/Db/DematpayslipArchiveMapper.php
index e050e09..f9a53d9 100644
--- a/lib/Db/DematpayslipArchiveMapper.php
+++ b/lib/Db/DematpayslipArchiveMapper.php
@@ -46,6 +46,33 @@ class DematpayslipArchiveMapper extends QBMapper {
         return $this->findEntities($qb);
     }
 
+    public function findAllByAgentAndPeriod(string $siret, string $matricule, string $lastname, string $firstname, string $start_date, string $end_date) {
+        $qb = $this->db->getQueryBuilder();
+
+        $qb->select('*')
+            ->from($this->getTableName())
+            ->where(
+                $qb->expr()->eq('siret', $qb->createNamedParameter($siret))
+            )
+            ->andWhere(
+                $qb->expr()->eq('matricule', $qb->createNamedParameter($matricule))
+            )
+            ->andWhere(
+                $qb->expr()->eq('lastname', $qb->createNamedParameter($lastname))
+            )
+            ->andWhere(
+                $qb->expr()->eq('firstname', $qb->createNamedParameter($firstname))
+            )
+            ->andWhere(
+                $qb->expr()->eq('start_date', $qb->createNamedParameter($start_date))
+            )
+            ->andWhere(
+                $qb->expr()->eq('end_date', $qb->createNamedParameter($end_date))
+            );
+
+        return $this->findEntities($qb);
+    }
+
     public function findAllArchived(int $archived) {
         $qb = $this->db->getQueryBuilder();
 
diff --git a/lib/Db/DematpayslipUser.php b/lib/Db/DematpayslipUser.php
index 4bc0826..f3315cf 100644
--- a/lib/Db/DematpayslipUser.php
+++ b/lib/Db/DematpayslipUser.php
@@ -8,13 +8,14 @@ use OCP\AppFramework\Db\Entity;
 class DematpayslipUser extends Entity implements JsonSerializable {
 
     protected $userId;
+    protected $siret;
     protected $matricule;
     protected $lastname;
     protected $firstname;
     protected $email;
+    protected $zipCity;
     protected $disabled;
     protected $lastmodified;
-    protected $siret;
 
     public function jsonSerialize() {
         return [
@@ -24,6 +25,7 @@ class DematpayslipUser extends Entity implements JsonSerializable {
             'lastname'     => $this->lastname,
             'firstanme'    => $this->firstname,
             'email'        => $this->email,
+            'zipCity'      => $this->zipCity,
             'disabled'     => $this->disabled,
             'lastmodified' => $this->lastmodified,
             'siret'        => $this->siret,
diff --git a/lib/Migration/Version020000Date20200602020000.php b/lib/Migration/Version020000Date20200603030000.php
similarity index 87%
rename from lib/Migration/Version020000Date20200602020000.php
rename to lib/Migration/Version020000Date20200603030000.php
index 02cc1db..a8229ff 100644
--- a/lib/Migration/Version020000Date20200602020000.php
+++ b/lib/Migration/Version020000Date20200603030000.php
@@ -7,7 +7,7 @@ use OCP\DB\ISchemaWrapper;
 use OCP\Migration\SimpleMigrationStep;
 use OCP\Migration\IOutput;
 
-class Version020000Date20200602020000 extends SimpleMigrationStep {
+class Version020000Date20200603030000 extends SimpleMigrationStep {
 
     /**
      * @param IOutput $output
@@ -22,11 +22,15 @@ class Version020000Date20200602020000 extends SimpleMigrationStep {
         $table = $schema->getTable('dematpayslip_user');
         $table->addColumn('lastname', 'string', [
             'notnull' => true,
-            'length' => 64,
+            'length'  => 64,
         ]);
         $table->addColumn('firstname', 'string', [
             'notnull' => true,
-            'length' => 64,
+            'length'  => 64,
+        ]);
+        $table->addColumn('zip_city', 'string', [
+            'notnull' => true,
+            'length'  => 64,
         ]);
 
         if (!$schema->hasTable('dematpayslip_archive')) {
@@ -110,10 +114,16 @@ class Version020000Date20200602020000 extends SimpleMigrationStep {
                 'notnull'  => false,
                 'unsigned' => true,
             ]);
+            $table->addColumn('checksum', 'string', [
+                'notnull' => true,
+                'length'  => 64,
+                'default' => '',
+            ]);
 
             $table->setPrimaryKey(['id']);
             $table->addUniqueIndex(['id_file'], 'dematpayslip_archive_id_file');
             $table->addUniqueIndex(['pastell_id_document'], 'dematpayslip_archive_pastell_id_document');
+            $table->addUniqueIndex(['siret', 'matricule', 'lastname', 'firstname', 'start_date', 'end_date'], 'dematpayslip_archive_agent_period');
             $table->addIndex(['id_user'], 'dematpayslip_archive_id_user');
             $table->addIndex(['dematpayslip_id_user'], 'dematpayslip_archive_dematpayslip_id_user');
         }
diff --git a/templates/content/archive_list.php b/templates/content/archive_list.php
index 12034d1..638c986 100644
--- a/templates/content/archive_list.php
+++ b/templates/content/archive_list.php
@@ -60,7 +60,7 @@
                     <tr>
                         <th scope="col"><input type="checkbox" id="archive_select_all" name="archive_select_all" style="cursor: pointer;" /></th>
                         <th scope="col"><?php p($l->t('Chemin')); ?></th>
-                        <th scope="col"><?php p($l->t('SIRET')); ?></th>
+                        <th scope="col"><?php p($l->t('Siret')); ?></th>
                         <th scope="col"><?php p($l->t('Matricule')); ?></th>
                         <th scope="col"><?php p($l->t('Nom')); ?></th>
                         <th scope="col"><?php p($l->t('Prénom')); ?></th>
@@ -76,7 +76,7 @@
                         <?php foreach ($dematpayslipArchiveList as $dematpayslipArchive) { ?>
                             <tr>
                                 <td><input type="checkbox" class="archive_select" id="archive_select_<?php print $dematpayslipArchive->getId(); ?>" name="archive_select[]" value="<?php print $dematpayslipArchive->getId(); ?>" style="cursor: pointer;" /></td>
-                                <td><a href="<?php echo \OC\URLGenerator::linkToRoute('files.view.index', ['fileid' => $dematpayslipArchive->getIdFile()]); ?>" title="<?php p($l->t('Voir')); ?>"><?php print $dematpayslipArchive->getFilePath(); ?></a></td>
+                                <td><a href="<?php echo \OC\URLGenerator::linkToRoute('files.view.index', ['fileid' => $dematpayslipArchive->getIdFile()]); ?>" target="_blank" title="<?php p($l->t('Voir')); ?>"><?php print $dematpayslipArchive->getFilePath(); ?></a></td>
                                 <td><?php print $dematpayslipArchive->getSiret(); ?></td>
                                 <td><?php print $dematpayslipArchive->getMatricule(); ?></td>
                                 <td><?php print $dematpayslipArchive->getLastname(); ?></td>
-- 
GitLab